package com.product.administration.service; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; import com.product.admin.service.PublicService; import com.product.administration.config.CmnConst; import com.product.administration.service.ide.IKnowledgeSharingService; import com.product.common.utils.StringUtils; import com.product.core.dao.BaseDao; import com.product.core.entity.DataTableEntity; import com.product.core.entity.FieldSetEntity; import com.product.core.spring.context.SpringMVCContextHolder; import com.product.core.transfer.Transactional; import com.product.file.service.FileManagerService; import com.product.util.BaseUtil; import org.apache.commons.codec.binary.Base64; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Arrays; import java.util.List; /** * Copyright © 6c * * @Date 2022年06月14日 15:45 * @Author 6c * @Description 知识共享 */ @Component public class KnowledgeSharingService implements IKnowledgeSharingService { @Autowired private BaseDao baseDao; @Autowired private PublicService publicService; @Autowired private FileManagerService fileManagerService; /** * 保存 * @param fse * @return */ @Override @Transactional public String save(FieldSetEntity fse) { String uuid = publicService.saveFieldSetEntity(fse); perfectTypeTag(fse.getString(CmnConst.TYPE), 1); perfectTypeTag(fse.getString(CmnConst.TAG), 2); return uuid; } /** * 将系统中没有的标签或者分类存入系统中 * @param typeTag */ private void perfectTypeTag(String typeTag, int type) { DataTableEntity dte = type == 1 ? getType() : getTag(); List list = Lists.newArrayList(Arrays.asList(dte.getFieldAllValues(CmnConst.NAME))); List curList = Lists.newArrayList(Arrays.asList(typeTag.split(","))); curList.removeAll(list); curList.forEach(name -> { FieldSetEntity typeTagFse = new FieldSetEntity(); typeTagFse.setTableName(CmnConst.PRODUCT_OA_KNOWLEDGE_SHARING_TAG); typeTagFse.setValue(CmnConst.NAME, name); typeTagFse.setValue(CmnConst.TYPE, type); publicService.saveFieldSetEntity(typeTagFse); }); } /** * 获取详情 * @param fse * @return */ public FieldSetEntity viewInfo(FieldSetEntity fse) { FieldSetEntity resultFse = publicService.getFieldSetEntity(fse, false); baseDao.loadPromptData(resultFse); return resultFse; } /** * 删除 * @param fse */ @Override @Transactional public void delete(FieldSetEntity fse) { String[] uuidArr = fse.getString(CmnConst.UUID).split(","); StringBuilder sql = new StringBuilder(128); sql.append("select group_concat(type) type,group_concat(tag) tag"); sql.append("\nfrom product_oa_knowledge_sharing"); sql.append("\nwhere ").append(BaseUtil.buildQuestionMarkFilter(CmnConst.UUID, uuidArr.length, true)); FieldSetEntity paramFse = baseDao.getFieldSetEntityBySQL(sql.toString(), uuidArr, false); String types = paramFse.getString(CmnConst.TYPE); String tags = paramFse.getString(CmnConst.TAG); publicService.delete(fse); // 清理分类 String[] array = types.split(","); sql.setLength(0); sql.append("select t.name from product_oa_knowledge_sharing_tag t"); sql.append("\ninner join ("); sql.append("\n select * from product_oa_knowledge_sharing where 1=1"); for (String type : array) { sql.append("\n or find_in_set('").append(type).append("',type)"); } sql.append("\n) d on find_in_set(t.name,d.type)"); DataTableEntity dte = baseDao.listTable(sql.toString(), new Object[]{}); List residueList = Lists.newArrayList(Arrays.asList(dte.getFieldAllValues(CmnConst.NAME))); List curList = Lists.newArrayList(array); curList.removeAll(residueList); sql.setLength(0); sql.append("delete from product_oa_knowledge_sharing_tag where type=1"); if (!curList.isEmpty()) { sql.append(" and ").append(BaseUtil.buildQuestionMarkFilter(CmnConst.NAME, curList.toArray().length, true)); } baseDao.executeUpdate(sql.toString(), curList.toArray()); // 清理标签 array = tags.split(","); sql.setLength(0); sql.append("select t.name from product_oa_knowledge_sharing_tag t"); sql.append("\ninner join ("); sql.append("\n select * from product_oa_knowledge_sharing where 1=1"); for (String type : array) { sql.append("\n or find_in_set('").append(type).append("',tag)"); } sql.append("\n) d on find_in_set(t.name,d.tag)"); dte = baseDao.listTable(sql.toString(), new Object[]{}); residueList = Lists.newArrayList(Arrays.asList(dte.getFieldAllValues(CmnConst.NAME))); curList = Lists.newArrayList(array); curList.removeAll(residueList); sql.setLength(0); sql.append("delete from product_oa_knowledge_sharing_tag where type=2"); if (!curList.isEmpty()) { sql.append(" and ").append(BaseUtil.buildQuestionMarkFilter(CmnConst.NAME, curList.toArray().length, true)); } baseDao.executeUpdate(sql.toString(), curList.toArray()); } /** * 列表 * @param fse */ public JSONObject list(FieldSetEntity fse) { JSONObject resultObj = new JSONObject(); StringBuilder defaultFilter = new StringBuilder(64); // 分类过滤 String types = fse.getString(CmnConst.TYPE); if (!StringUtils.isEmpty(types)) { String[] typeArr = types.split(","); for (String type : typeArr) { if (defaultFilter.length() > 0) { defaultFilter.append("\nor "); } defaultFilter.append("find_in_set('").append(type).append("',type)"); } } // 标签过滤 String tags = fse.getString(CmnConst.TAG); if (!StringUtils.isEmpty(tags)) { String[] tagArr = tags.split(","); for (String tag : tagArr) { if (defaultFilter.length() > 0) { defaultFilter.append("\nor "); } defaultFilter.append("find_in_set('").append(tag).append("',tag)"); } } if (defaultFilter.length() > 0) { fse.setValue(CmnConst.PARAM_FILTER, BaseUtil.addAimField(fse, CmnConst.PARAM_FILTER, defaultFilter.toString(), " and ")); } DataTableEntity dte = publicService.listTable(fse); FieldSetEntity tempFse; for (int i = 0; i < dte.getRows(); i++) { tempFse = dte.getFieldSetEntity(i); try { byte[] fileContent = fileManagerService.getFileContent(dte.getString(i, CmnConst.IMAGE)); if (fileContent != null) { String bytes = Base64.encodeBase64String(fileContent); dte.setFieldValue(i, CmnConst.IMAGE, "data:image/*;base64," + bytes); } else { dte.setFieldValue(i, CmnConst.IMAGE, null); } } catch (Exception e) { SpringMVCContextHolder.getSystemLogger().error(String.format("《%s》获取图片失败", tempFse.getString(CmnConst.TITLE))); e.printStackTrace(); } } resultObj.put("list", BaseUtil.dataTableEntityToJson(dte)); resultObj.put("type", BaseUtil.dataTableEntityToJson(getType())); resultObj.put("tag", BaseUtil.dataTableEntityToJson(getTag())); return resultObj; } /** * 获取所有分类 * @return */ public DataTableEntity getType() { return baseDao.listTable(CmnConst.PRODUCT_OA_KNOWLEDGE_SHARING_TAG, "type=1", null, new Object[]{CmnConst.NAME}); } /** * 获取所有标签 * @return */ public DataTableEntity getTag() { return baseDao.listTable(CmnConst.PRODUCT_OA_KNOWLEDGE_SHARING_TAG, "type=2", null, new Object[]{CmnConst.NAME}); } }