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