虚拟清单发布消息修改

This commit is contained in:
xiejunyu
2022-06-08 14:55:32 +08:00
parent 75b9f15462
commit ed91503153
3 changed files with 658 additions and 719 deletions
@@ -1560,6 +1560,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
String cut = (String) map.get("cut");
try {
String serialNumber = (String)map.get("serial_number");
//String serialNumber = String.valueOf(map.get("serial_number"));
//编码验重
List<BussDocumentLibraryEO> list = this.list();
if(list.size() != 0){
@@ -13,10 +13,7 @@ import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl;
import com.jero.modules.domain.service.DomainUserRelService;
import com.jero.modules.dummy.entity.DummyContentChangeEO;
import com.jero.modules.dummy.entity.DummyInventoryBaseEO;
import com.jero.modules.dummy.entity.DummyInventoryInfoEO;
import com.jero.modules.dummy.entity.DummyReadEO;
import com.jero.modules.dummy.entity.*;
import com.jero.modules.dummy.enums.DummyInventoryBaseFieldEnum;
import com.jero.modules.dummy.enums.InventoryStateEnum;
import com.jero.modules.dummy.enums.ReadFlagEnum;
@@ -50,13 +47,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -96,6 +87,10 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
private DummyContentChangeEOMapper dummyContentChangeEOMapper;
@Autowired
private IOSSFileService iOSSFileService;
@Autowired
private DummyLogEOServiceImpl dummyLogEOService;
/**
* 保存
*
@@ -158,6 +153,11 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
LambdaQueryWrapper<DummyInventoryInfoEO> wrapper = new LambdaQueryWrapper<>();
wrapper.in(DummyInventoryInfoEO::getDummyInventoryBaseId,ids);
iDummyInventoryInfoEOService.remove(wrapper);
//关联删除虚拟清单log
QueryWrapper<DummyLogEO> logEOQueryWrapper = new QueryWrapper<>();
logEOQueryWrapper.in("dummy_inventory_base_id",ids);
dummyLogEOService.remove(logEOQueryWrapper);
}
/**
@@ -273,15 +273,18 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
LambdaQueryWrapper<DummyInventoryInfoEO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(DummyInventoryInfoEO::getDummyInventoryBaseId,dummyInventoryBaseEO.getId());
List<DummyInventoryInfoEO> dummyInventoryInfoEOList = iDummyInventoryInfoEOService.list(lambdaQueryWrapper);
String contentLog = null;
if(dummyContentChangeEOList.size() == 0){
//没有添加过需要进行第一次添加
Date thisTime = new Date();
List<DummyContentChangeEO> list = new ArrayList<>();
if(dummyInventoryBaseEOList.size() != 0){
String base = JSONArray.toJSONString(dummyInventoryBaseEOList);
DummyContentChangeEO dummyContentChangeEOBase = new DummyContentChangeEO();
dummyContentChangeEOBase.setConnectId(dummyInventoryBaseEO.getId());
dummyContentChangeEOBase.setContentJson(base);
dummyContentChangeEOBase.setUpdateTime(thisTime);
list.add(dummyContentChangeEOBase);
}
if(dummyInventoryInfoEOList.size() != 0){
@@ -290,6 +293,7 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
DummyContentChangeEO dummyContentChangeEOInfo = new DummyContentChangeEO();
dummyContentChangeEOInfo.setParentId(dummyInventoryBaseEO.getId());
dummyContentChangeEOInfo.setContentJson(info);
dummyContentChangeEOInfo.setUpdateTime(thisTime);
list.add(dummyContentChangeEOInfo);
}
if(list.size() != 0){
@@ -305,124 +309,61 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
wrapperInfo.in(DummyContentChangeEO::getParentId,dummyInventoryBaseEO.getId());
List<DummyContentChangeEO> dummyContentChangeEOInfoList = iDummyContentChangeEOService.list(wrapperInfo);
if(CollectionUtils.isNotEmpty(dummyContentChangeEOInfoList)){
//3.对比基础表数据
//3.1截止到现在发布,期间修改的数据(基础)
//最新的数据为-->dummyInventoryBaseEOList
Date lastIssueTime = null;
Date now = new Date();
//3.2基础表数据对比
String baseCJ=dummyContentChangeEOBaseList.get(0).getContentJson();
List<DummyInventoryBaseEO> baseCJList = JSONArray.parseArray(baseCJ, DummyInventoryBaseEO.class);//json转list
if (CollectionUtils.isNotEmpty(dummyContentChangeEOInfoList)) {
lastIssueTime = dummyContentChangeEOInfoList.get(0).getUpdateTime();
//对比,获取值不同的字段
Map<String, String> baseDiff = null;
for(int i=0;i< baseCJList.size();i++) {
baseCJList.get(i);
dummyInventoryBaseEOList.get(i);
baseDiff = ListDiff.compareObject(baseCJList.get(i), dummyInventoryBaseEOList.get(i));
}
if(CollectionUtils.isNotEmpty(dummyContentChangeEOInfoList)){
//3.对比基础表数据
//3.1截止到现在发布,期间修改的数据(基础)
//最新的数据为-->dummyInventoryBaseEOList
//4.对比详情表数据
//4.1截止到现在发布,期间修改的数据(详情)
//现在的数据为-->dummyInventoryInfoEOList
//3.2基础表数据对比
String baseCJ=dummyContentChangeEOBaseList.get(0).getContentJson();
List<DummyInventoryBaseEO> baseCJList = JSONArray.parseArray(baseCJ, DummyInventoryBaseEO.class);//json转list
//4.2详情表数据(一条基础数据可能对应多个详情数据---一对多)
//数据库里原来的详情数据
String addSerialNumber=null;
String deleteSerialNumber=null;
List<String> addSerialNumberList =null;
List<String> deleteSerialNumberList =null;
//对比,获取值不同的字段
Map<String, String> baseDiff = null;
for(int i=0;i< baseCJList.size();i++) {
baseCJList.get(i);
dummyInventoryBaseEOList.get(i);
baseDiff = ListDiff.compareObject(baseCJList.get(i), dummyInventoryBaseEOList.get(i));
}
//获取数据库里保存的json
String infoCJ = dummyContentChangeEOInfoList.get(0).getContentJson();
List<DummyInventoryInfoEO> infoCJList = JSONArray.parseArray(infoCJ, DummyInventoryInfoEO.class);//json转list
//翻译字典code值
disposeDataToEn(dummyInventoryInfoEOList);
//获取数据库和传入同时存在的编号
//获取两个的编号
List<String> infoCJBaseSerialNumberList = infoCJList.stream().map(e -> e.getSerialNumber()).collect(Collectors.toList());
List<String> dummyInventoryInfoEOSerialNumberList = dummyInventoryInfoEOList.stream().map(e -> e.getSerialNumber()).collect(Collectors.toList());
List<DummyInventoryInfoEO> sameDummyInventoryInfoEOList = new ArrayList<>();
List<DummyInventoryInfoEO> sameinfoCJList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(dummyInventoryInfoEOSerialNumberList)) {
//查询共有编号
List<String> sameSerialNumberList = infoCJBaseSerialNumberList.stream().filter(t -> dummyInventoryInfoEOSerialNumberList.contains(t)).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(sameSerialNumberList)) {
for (String sameSerialNumber : sameSerialNumberList) {
//查询传入里包含共有编号的数据
DummyInventoryInfoEO sameInfoEO = dummyInventoryInfoEOList.stream().filter(e->e.getSerialNumber().equals(sameSerialNumber)).collect(Collectors.toList()).get(0);
sameDummyInventoryInfoEOList.add(sameInfoEO);
//查询数据库里包含共有编号的数据
DummyInventoryInfoEO sameInfoCJ = infoCJList.stream().filter(e -> e.getSerialNumber().equals(sameSerialNumber)).collect(Collectors.toList()).get(0);
sameinfoCJList.add(sameInfoCJ);
//4.查详情表两次发布的时间之间的数据
if(lastIssueTime != now){
QueryWrapper<DummyLogEO> logEOQueryWrapper = new QueryWrapper<>();
logEOQueryWrapper.orderByAsc("create_time")
.between("create_time",lastIssueTime,now)
.eq("dummy_inventory_base_id",dummyInventoryBaseEO.getId())
.eq("is_en_log",CutEnum.EN.getValue());
List<DummyLogEO> updateLogList = dummyLogEOService.list(logEOQueryWrapper);
if(CollectionUtils.isNotEmpty(updateLogList)){
contentLog = updateLogList.stream().map(e -> e.getLogContent()).collect(Collectors.joining(","));
}
}
}
//4.2.1处理现原共有有详情数据不同值字段
Map<String, String> infoDiff = null;
List<Map<String, String>> infoDiffList=new ArrayList<>();
//列表,维护清单不同的字段,addSerialNumber,deleteSerialNumber都为空->证明是没有更新的数据,不发送消息,数据不处理
if(MapUtils.isNotEmpty(baseDiff) || StringUtils.isNotEmpty(contentLog)) {
//向订阅该领域管理的人发消息和飞书
sendMsg(baseDiff, dummyContentChangeEOBaseList.get(0).getConnectId(), contentLog,dummyInventoryBaseEO.getState(),dummyInventoryBaseEO.getCut());
for (int i = 0; i < sameinfoCJList.size(); i++) {
infoDiff = ListDiff.compareObject(sameinfoCJList.get(i), sameDummyInventoryInfoEOList.get(i));
if (MapUtils.isNotEmpty(infoDiff)) {
if(infoDiff.size() > 1) {
infoDiffList.add(infoDiff);
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//5.数据对比完成后.更新之前保存的dummy_inventory_info中的content_json数据,重新保存最新的数据
if(MapUtils.isNotEmpty(baseDiff)){//列表有不同字段
String base = JSONArray.toJSONString(dummyInventoryBaseEOList);
UpdateWrapper<DummyContentChangeEO> baseUpdateWrapper=new UpdateWrapper<>();
baseUpdateWrapper.set("content_json",base)
.set("update_by",sysUser.getUsername())
.set("update_time",now)
.eq("connect_id",dummyInventoryBaseEOList.get(0).getId());
dummyContentChangeEOMapper.update(null,baseUpdateWrapper);
}
}
}
//4.2.2处理新增数据
List<String> infoCJSerialNumberList = infoCJList.stream().map(e -> e.getSerialNumber()).collect(Collectors.toList());
for (DummyInventoryInfoEO dummyInventoryInfoEO : infoCJList) {
addSerialNumberList = dummyInventoryInfoEOList.stream().filter(e -> !dummyInventoryInfoEO.equals(e.getId()))
.map(f -> f.getSerialNumber()).collect(Collectors.toList());
}
//去掉发布时传入的和数据库同时有的数据
for(String midSerialNumber:infoCJSerialNumberList){
addSerialNumberList.remove(midSerialNumber);
}
addSerialNumber =StringUtils.join(addSerialNumberList,",");
//4.2.3处理删除的数据
for (DummyInventoryInfoEO dummyInventoryInfoEO : infoCJList) {
deleteSerialNumberList = dummyInventoryInfoEOList.stream().filter(e -> !dummyInventoryInfoEO.equals(e.getId()))
.map(f -> f.getSerialNumber()).collect(Collectors.toList());
}
for(String midSerialNumber:deleteSerialNumberList){
infoCJSerialNumberList.remove(midSerialNumber);
}
deleteSerialNumber=StringUtils.join(infoCJSerialNumberList,",");
//列表,维护清单不同的字段,addSerialNumber,deleteSerialNumber都为空->证明是没有更新的数据,不发送消息,数据不处理
if(MapUtils.isNotEmpty(baseDiff) || CollectionUtils.isNotEmpty(infoDiffList)
|| StringUtils.isNotEmpty(addSerialNumber) || StringUtils.isNotEmpty(deleteSerialNumber)) {
//向订阅该领域管理的人发消息和飞书
sendMsg(baseDiff, dummyContentChangeEOBaseList.get(0).getConnectId(), infoDiffList, addSerialNumber, deleteSerialNumber,dummyInventoryBaseEO.getState(),dummyInventoryBaseEO.getCut());
Date now=new Date();
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//5.数据对比完成后.更新之前保存的dummy_inventory_info中的content_json数据,重新保存最新的数据
if(MapUtils.isNotEmpty(baseDiff)){//列表有不同字段
String base = JSONArray.toJSONString(dummyInventoryBaseEOList);
UpdateWrapper<DummyContentChangeEO> baseUpdateWrapper=new UpdateWrapper<>();
baseUpdateWrapper.set("content_json",base)
.set("update_by",sysUser.getUsername())
.set("update_time",now)
.eq("connect_id",dummyInventoryBaseEOList.get(0).getId());
dummyContentChangeEOMapper.update(null,baseUpdateWrapper);
}
if(CollectionUtils.isNotEmpty(infoDiffList) || StringUtils.isNotEmpty(addSerialNumber)
|| StringUtils.isNotEmpty(deleteSerialNumber)){//维护清单有不同字段,addSerialNumber,deleteSerialNumber也有数据
// if(CollectionUtils.isNotEmpty(infoDiffList) || StringUtils.isNotEmpty(addSerialNumber)
// || StringUtils.isNotEmpty(deleteSerialNumber)){//维护清单有不同字段,addSerialNumber,deleteSerialNumber也有数据
String info = JSONArray.toJSONString(dummyInventoryInfoEOList);
UpdateWrapper<DummyContentChangeEO> infoUpdateWrapper=new UpdateWrapper<>();
infoUpdateWrapper.set("content_json",info)
@@ -430,6 +371,7 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
.set("update_time",now)
.eq("parent_id",dummyInventoryBaseEOList.get(0).getId());
dummyContentChangeEOMapper.update(null,infoUpdateWrapper);
// }
}
}
}else{//基础数据发布过,详情原为空-->有新增,再次发布
@@ -443,9 +385,17 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
list.add(dummyContentChangeEOInfo);
}
if(list.size() != 0){
String addSerialNumber = dummyInventoryInfoEOList.stream().map(e -> e.getSerialNumber()).collect(Collectors.joining(","));
// String addSerialNumber = dummyInventoryInfoEOList.stream().map(e -> e.getSerialNumber()).collect(Collectors.joining(","));
QueryWrapper<DummyLogEO> logEOQueryWrapper = new QueryWrapper<>();
logEOQueryWrapper.orderByAsc("create_time")
.between("create_time",lastIssueTime,now)
.eq("dummy_inventory_base_id",dummyInventoryBaseEO.getId())
.eq("is_en_log",CutEnum.EN.getValue());
List<DummyLogEO> updateLogList = dummyLogEOService.list(logEOQueryWrapper);
contentLog = updateLogList.stream().map(e -> e.getLogContent()).collect(Collectors.joining(","));
iDummyContentChangeEOService.saveBatch(list);
sendMsg(null,dummyInventoryInfoEOList.get(0).getDummyInventoryBaseId(), null, addSerialNumber,null,dummyInventoryBaseEO.getState(),dummyInventoryBaseEO.getCut());
sendMsg(null,dummyInventoryInfoEOList.get(0).getDummyInventoryBaseId(),contentLog ,dummyInventoryBaseEO.getState(),dummyInventoryBaseEO.getCut());
}
}
@@ -453,7 +403,7 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
}else{
//撤回,需要发消息
try {
sendMsg(null, dummyInventoryBaseEO.getId(),null, null , null,dummyInventoryBaseEO.getState(),dummyInventoryBaseEO.getCut());
sendMsg(null, dummyInventoryBaseEO.getId(),null,dummyInventoryBaseEO.getState(),dummyInventoryBaseEO.getCut());
}catch (Exception e){
e.printStackTrace();
}
@@ -1057,8 +1007,7 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
}
}
//发送消息
private void sendMsg(Map<String, String> baseDiff, String idTemp,List<Map<String, String>> infoDiffList,
String addSerialNumber,String deleteSerialNumber,String state,String cut) {
private void sendMsg(Map<String, String> baseDiff, String idTemp,String contentLog,String state,String cut) {
String baseName = queryById(idTemp).getName();//基础表id
String useExplain = queryById(idTemp).getUseExplain();
@@ -1080,7 +1029,7 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
"&useExplain=" + useExplain +
"&id=" + idTemp +
"&title=维护虚拟清单" + "'" + " target='_blank'>"
+ baseName + "</a>" + " ";
+ baseName + "</a>" + " ";
String content = null;
String contentInfo = null;
@@ -1092,8 +1041,8 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
contentInfo = "The " + hrefUrl + " virtual list you subscribed to has been updated as follows : " + "\r\n";
contentInfoTemp = "The " + baseName + " virtual list you subscribed to has been updated as follows : " + "\r\n";
//拼接维护清单的消息
contentInfo = setContentInfo(contentInfo, baseDiff, infoDiffList, addSerialNumber, deleteSerialNumber,null);
contentInfoTemp = setContentInfo(contentInfoTemp, baseDiff, infoDiffList, addSerialNumber, deleteSerialNumber,null);
contentInfo = setContentInfo(contentInfo, baseDiff,null);
contentInfoTemp = setContentInfo(contentInfoTemp, baseDiff,contentLog);
//封装消息的实体类
SysAnnouncement sysAnnouncement = bussDocumentLibraryEOService.getSysAnnouncement(userIdList, content, contentInfo);
sysAnnouncementService.saveAnnouncement(sysAnnouncement);
@@ -1124,8 +1073,7 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
}
}
//拼接维护清单的消息
public String setContentInfo(String contentInfo, Map<String, String> baseDiff, List<Map<String, String>> infoDiffList
, String addSerialNumber, String deleteSerialNumber,String contentLog) {
public String setContentInfo(String contentInfo, Map<String, String> baseDiff,String contentLog) {
int row = 1;
//设置虚拟清单列表的修改消息
@@ -1147,27 +1095,10 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl<DummyInventoryB
row++;
}
}
//设置维护清单的新增消息
if (StringUtils.isNotBlank(addSerialNumber)) {
contentInfo += row + ". " + "This virtual list has been added Number : " + addSerialNumber + ".\r\n";
row++;
if (StringUtils.isNotBlank(contentLog)){
contentInfo += contentLog;
}
//设置维护清单的删除消息
if (StringUtils.isNotBlank(deleteSerialNumber)) {
contentInfo += row + ". " + "This virtual list has been deleted Number : " + deleteSerialNumber + ".\r\n";
row++;
}
//设置维护清单的修改消息
if(CollectionUtils.isNotEmpty(infoDiffList)) {
for (Map<String, String> infoDiff : infoDiffList) {
if (infoDiff.size() > 1) {
contentInfo += row + ". The Number " + infoDiff.get("serialNumber") + " has been updated as follows : " + "\r\n";
contentInfo = setInfoDiffListContent(contentInfo,infoDiffList,contentLog);
}
}
}
return contentInfo;
}