forked from I3-YF/i3plus-mes-pcn-yfai
展示组件
parent
9207a635de
commit
f787dfeaee
@ -0,0 +1,18 @@
|
|||||||
|
package cn.estsh.i3plus.ext.mes.pcn.api.base;
|
||||||
|
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesPojoVersion;
|
||||||
|
|
||||||
|
public interface IMesPojoVersionService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取版本信息
|
||||||
|
* @param bean
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
MesPojoVersion getPojoVersion(MesPojoVersion bean);
|
||||||
|
/**
|
||||||
|
* 保存变动记录
|
||||||
|
* @param mesPojoVersion
|
||||||
|
*/
|
||||||
|
void recordPojoVersion(MesPojoVersion mesPojoVersion);
|
||||||
|
}
|
@ -0,0 +1,209 @@
|
|||||||
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
|
||||||
|
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPojoVersionService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.MesConfigService;
|
||||||
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
||||||
|
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
|
||||||
|
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
|
||||||
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
||||||
|
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
|
||||||
|
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesPojoVersion;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesPojoVersionDetail;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.repository.MesPojoVersionDetailRepository;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.repository.MesPojoVersionRepository;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.google.common.collect.MapDifference;
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class MesPojoVersionServiceImpl implements IMesPojoVersionService {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(MesPojoVersionServiceImpl.class);
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MesPojoVersionRepository mesPojoVersionRepository;
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MesPojoVersionDetailRepository mesPojoVersionDetailRepository;
|
||||||
|
@Resource
|
||||||
|
private SnowflakeIdMaker snowflakeIdMaker;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MesConfigService mesConfigService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MesPojoVersion getPojoVersion(MesPojoVersion bean) {
|
||||||
|
return mesPojoVersionRepository.getByProperty(DdlPackBean.getDdlPackBean(bean));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void recordPojoVersion(MesPojoVersion afterMesPojoVersion) {
|
||||||
|
|
||||||
|
MesPojoVersion beforePojoVersion = new MesPojoVersion();
|
||||||
|
MesPojoVersionDetail beforePojoVersionDetail = new MesPojoVersionDetail();
|
||||||
|
Map<String, Object> beforeMap = new HashMap<>();
|
||||||
|
Map<String, Object> afterMap = JsonUtilTool.decode(afterMesPojoVersion.getBean(), Map.class);
|
||||||
|
MesPojoVersionDetail afterPojoVersionDetail = null;
|
||||||
|
|
||||||
|
String config = mesConfigService.getCfgValue(afterMesPojoVersion.getOrganizeCode(), "MARK_FILED");
|
||||||
|
JSONObject reqJson = new JSONObject();
|
||||||
|
if (!StringUtils.isEmpty(config)) {
|
||||||
|
reqJson = JSONObject.parseObject(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
Integer versionNo; // 对象版本
|
||||||
|
CommonEnumUtil.DAO_OPERATE_TYPE operateType = CommonEnumUtil.DAO_OPERATE_TYPE.INSERT; // 操作类型
|
||||||
|
Map<String, MapDifference.ValueDifference<Object>> mapDiff; // 版本对比
|
||||||
|
String userName = StringUtils.isNotBlank(afterMesPojoVersion.getModifyUser()) ? afterMesPojoVersion.getModifyUser() : afterMesPojoVersion.getCreateUser();
|
||||||
|
Map<String, String> mapPropDesc = afterMesPojoVersion.getPojoPropDesc();
|
||||||
|
|
||||||
|
|
||||||
|
if (!"insert".equals(afterMesPojoVersion.getVersionMethodName())) { // 不是新增数据的时候则需要查询历史记录
|
||||||
|
// 已存在数据封装
|
||||||
|
afterMesPojoVersion.setOrderByParam("createDatetime");
|
||||||
|
afterMesPojoVersion.setAscOrDesc(CommonEnumUtil.ASC_OR_DESC.DESC.getValue());
|
||||||
|
|
||||||
|
beforePojoVersion = this.getPojoVersion(afterMesPojoVersion);
|
||||||
|
if (Objects.nonNull(beforePojoVersion)) {
|
||||||
|
beforePojoVersionDetail = mesPojoVersionDetailRepository.getById(beforePojoVersion.getPojoDetailId());
|
||||||
|
if (Objects.nonNull(beforePojoVersionDetail)) {
|
||||||
|
beforeMap.putAll(JsonUtilTool.decode(beforePojoVersionDetail.getPojoAfter(), Map.class));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
operateType = CommonEnumUtil.DAO_OPERATE_TYPE.UPDATE;
|
||||||
|
}
|
||||||
|
// 不保存字段 数据剔除
|
||||||
|
for (String key : CommonConstWords.POJO_VERSION_SAVE_ATTR_REMOVE) {
|
||||||
|
afterMap.remove(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
mapDiff = Maps.difference(beforeMap, afterMap).entriesDiffering();
|
||||||
|
|
||||||
|
/* mapDiff = Maps.difference(beforeMap, afterMap).entriesOnlyOnLeft();
|
||||||
|
if (beforeMap.size() == 0 && afterMap.size() > 0) {
|
||||||
|
mapDiff.putAll(afterMap);
|
||||||
|
}*/
|
||||||
|
// 是否需要落库
|
||||||
|
if (reqJson.getString(afterMesPojoVersion.getRefClass()) != null) {
|
||||||
|
List<String> fileds = Arrays.asList(reqJson.getString(afterMesPojoVersion.getRefClass()).split(","));
|
||||||
|
mapDiff = mapDiff.entrySet().stream().filter(e -> fileds.contains(e.getKey())).collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
|
||||||
|
} else {
|
||||||
|
mapDiff = null;
|
||||||
|
LOGGER.info("没有变化的字段,不需要进行持久化");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
String pojoCompare = mapDiff == null ? null : mapDiff.toString();
|
||||||
|
|
||||||
|
versionNo = Objects.nonNull(beforePojoVersion) ? beforePojoVersion.getVersionNo() : 0;
|
||||||
|
afterMesPojoVersion.setVersionNo(++versionNo);
|
||||||
|
afterMesPojoVersion.setId(snowflakeIdMaker.nextId());
|
||||||
|
|
||||||
|
|
||||||
|
afterPojoVersionDetail = new MesPojoVersionDetail();
|
||||||
|
afterPojoVersionDetail.setId(snowflakeIdMaker.nextId());
|
||||||
|
afterPojoVersionDetail.setPojoVersionId(afterMesPojoVersion.getId());
|
||||||
|
|
||||||
|
afterPojoVersionDetail.setPojoBefore(JSON.toJSONString(beforeMap));
|
||||||
|
afterPojoVersionDetail.setPojoAfter(JSON.toJSONString(afterMap));
|
||||||
|
afterPojoVersionDetail.setPojoCompare(pojoCompare);
|
||||||
|
|
||||||
|
afterPojoVersionDetail.setPojoBeforeTxt(getMapToStr(beforeMap, mapPropDesc));
|
||||||
|
afterPojoVersionDetail.setPojoAfterTxt(getMapToStr(afterMap, mapPropDesc));
|
||||||
|
afterPojoVersionDetail.setPojoCompareTxt(getMapDiffToStr(mapDiff, mapPropDesc));
|
||||||
|
|
||||||
|
String name = afterMesPojoVersion.getCreateUser();
|
||||||
|
String organizeCode = afterMesPojoVersion.getOrganizeCode();
|
||||||
|
afterPojoVersionDetail.setOrganizeCode(organizeCode);
|
||||||
|
ConvertBean.serviceModelInitialize(afterPojoVersionDetail, name);
|
||||||
|
mesPojoVersionDetailRepository.insert(afterPojoVersionDetail);
|
||||||
|
|
||||||
|
afterMesPojoVersion.setOperateType(operateType.getValue());
|
||||||
|
afterMesPojoVersion.setVersionNo(versionNo);
|
||||||
|
afterMesPojoVersion.setPojoCompare(pojoCompare);
|
||||||
|
afterMesPojoVersion.setPojoCompareTxt(getMapDiffToStr(mapDiff, mapPropDesc));
|
||||||
|
afterMesPojoVersion.setPojoDetailId(afterPojoVersionDetail.getId());
|
||||||
|
ConvertBean.serviceModelInitialize(afterMesPojoVersion, name);
|
||||||
|
mesPojoVersionRepository.insert(afterMesPojoVersion);
|
||||||
|
LOGGER.info("PojoVersionQueueReceiver:保存的pojoVersion:{}",afterMesPojoVersion);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map数据转文本
|
||||||
|
*
|
||||||
|
* @param mapData
|
||||||
|
* @param mapPropDesc
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private String getMapToStr(Map<String, Object> mapData, Map<String, String> mapPropDesc) {
|
||||||
|
if (mapData == null) {
|
||||||
|
mapData = new HashMap<>();
|
||||||
|
}
|
||||||
|
if (mapPropDesc == null) {
|
||||||
|
mapData = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder stringBuffer = new StringBuilder();
|
||||||
|
String key;
|
||||||
|
for (Map.Entry<String, Object> entry : mapData.entrySet()) {
|
||||||
|
key = mapPropDesc.get(entry.getKey());
|
||||||
|
if (key == null) {
|
||||||
|
key = entry.getKey();
|
||||||
|
}
|
||||||
|
stringBuffer.append(key).append(":").append(entry.getValue()).append(",");
|
||||||
|
}
|
||||||
|
return stringBuffer.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MapDifference数据转文本
|
||||||
|
*
|
||||||
|
* @param mapData
|
||||||
|
* @param mapPropDesc
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private String getMapDiffToStr(Map<String, MapDifference.ValueDifference<Object>> mapData, Map<String, String> mapPropDesc) {
|
||||||
|
if (mapData == null) {
|
||||||
|
mapData = new HashMap<>();
|
||||||
|
}
|
||||||
|
if (mapPropDesc == null) {
|
||||||
|
mapData = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder stringBuffer = new StringBuilder();
|
||||||
|
String key;
|
||||||
|
MapDifference.ValueDifference<Object> valDiff;
|
||||||
|
for (Map.Entry<String, MapDifference.ValueDifference<Object>> entry : mapData.entrySet()) {
|
||||||
|
valDiff = entry.getValue();
|
||||||
|
if (valDiff == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
key = mapPropDesc.get(entry.getKey());
|
||||||
|
if (key == null) {
|
||||||
|
key = entry.getKey();
|
||||||
|
}
|
||||||
|
stringBuffer.append("修改值 ").append(key)
|
||||||
|
.append(",旧值为 ").append(valDiff.leftValue())
|
||||||
|
.append(",新值为 ").append(valDiff.rightValue())
|
||||||
|
.append("。");
|
||||||
|
}
|
||||||
|
return stringBuffer.toString();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue