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<Object> list = Lists.newArrayList(Arrays.asList(dte.getFieldAllValues(CmnConst.NAME)));
|
List<Object> 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<Object> residueList = Lists.newArrayList(Arrays.asList(dte.getFieldAllValues(CmnConst.NAME)));
|
List<Object> 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});
|
}
|
}
|