feat(wms): 补充注解失效的钢卷变更日志记录功能
- 在CrmOrderServiceImpl中实现订单变更时钢卷快照对比和日志记录 - 在WmsActualWarehouseServiceImpl中实现库位释放时钢卷变更日志记录 - 在WmsCoilContractRelServiceImpl中实现合同关联更新时钢卷变更日志记录 - 重构CoilChangeLogAspect中的导入顺序 - 添加WmsCoilChangeLogMapper依赖注入到相关服务类 - 实现变更前后快照对比和差异字段JSON存储 - 添加异常处理确保日志记录失败不影响主业务流程
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.klp.crm.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
@@ -9,7 +10,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import com.klp.crm.domain.vo.CrmOrderOperationTraceVo;
|
||||
import com.klp.mapper.WmsCoilContractRelMapper;
|
||||
import com.klp.domain.*;
|
||||
import com.klp.mapper.*;
|
||||
import com.klp.wms.enums.CoilChangeType;
|
||||
import com.klp.system.service.ISysUserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -18,15 +21,10 @@ import com.klp.crm.domain.vo.CrmOrderVo;
|
||||
import com.klp.crm.domain.CrmOrder;
|
||||
import com.klp.crm.mapper.CrmOrderMapper;
|
||||
import com.klp.crm.service.ICrmOrderService;
|
||||
import com.klp.domain.WmsCoilContractRel;
|
||||
import com.klp.domain.bo.WmsMaterialCoilBo;
|
||||
import com.klp.domain.vo.WmsMaterialCoilVo;
|
||||
import com.klp.service.IWmsCoilContractRelService;
|
||||
import com.klp.service.IWmsMaterialCoilService;
|
||||
import com.klp.domain.WmsDeliveryWaybill;
|
||||
import com.klp.domain.WmsDeliveryWaybillDetail;
|
||||
import com.klp.mapper.WmsDeliveryWaybillDetailMapper;
|
||||
import com.klp.mapper.WmsDeliveryWaybillMapper;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -47,6 +45,10 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
|
||||
|
||||
private final WmsCoilContractRelMapper coilContractRelMapper;
|
||||
|
||||
private final WmsMaterialCoilMapper coilMapper;
|
||||
|
||||
private final WmsCoilChangeLogMapper changeLogMapper;
|
||||
|
||||
private final IWmsMaterialCoilService materialCoilService;
|
||||
|
||||
private final WmsDeliveryWaybillDetailMapper wmsDeliveryWaybillDetailMapper;
|
||||
@@ -332,10 +334,62 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
|
||||
boolean salesmanChanged = !Objects.equals(oldSalesman, newSalesman);
|
||||
boolean contractCodeChanged = !Objects.equals(oldContractCode, newContractCode);
|
||||
if (salesmanChanged || contractCodeChanged) {
|
||||
// 查询受影响的钢卷,抓取变更前快照
|
||||
Map<Long, Map<String, Object>> oldSnapshots = new LinkedHashMap<>();
|
||||
try {
|
||||
LambdaQueryWrapper<WmsCoilContractRel> relQw = Wrappers.lambdaQuery();
|
||||
relQw.eq(WmsCoilContractRel::getContractId, bo.getOrderId());
|
||||
List<WmsCoilContractRel> rels = coilContractRelMapper.selectList(relQw);
|
||||
for (WmsCoilContractRel rel : rels) {
|
||||
WmsMaterialCoil oldCoil = coilMapper.selectById(rel.getCoilId());
|
||||
if (oldCoil != null) {
|
||||
oldSnapshots.put(rel.getCoilId(), BeanUtil.beanToMap(oldCoil, false, true));
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 快照失败不影响主流程
|
||||
}
|
||||
|
||||
coilContractRelMapper.updateCoilSaleNameByOrderId(
|
||||
bo.getOrderId(),
|
||||
StringUtils.isNotBlank(newSalesman) ? newSalesman : oldSalesman,
|
||||
StringUtils.isNotBlank(newContractCode) ? newContractCode : oldContractCode);
|
||||
|
||||
// 抓取变更后快照,计算差异并记录日志
|
||||
try {
|
||||
for (Map.Entry<Long, Map<String, Object>> entry : oldSnapshots.entrySet()) {
|
||||
Long coilId = entry.getKey();
|
||||
Map<String, Object> oldSnapshot = entry.getValue();
|
||||
WmsMaterialCoil newCoil = coilMapper.selectById(coilId);
|
||||
Map<String, Object> newSnapshot = newCoil != null ? BeanUtil.beanToMap(newCoil, false, true) : new LinkedHashMap<>();
|
||||
|
||||
// 计算变更字段差异
|
||||
Map<String, Map<String, Object>> diff = new LinkedHashMap<>();
|
||||
for (Map.Entry<String, Object> fieldEntry : newSnapshot.entrySet()) {
|
||||
String field = fieldEntry.getKey();
|
||||
Object oldVal = oldSnapshot.get(field);
|
||||
Object newVal = fieldEntry.getValue();
|
||||
if (!Objects.equals(oldVal, newVal)) {
|
||||
Map<String, Object> change = new LinkedHashMap<>();
|
||||
change.put("old", oldVal);
|
||||
change.put("new", newVal);
|
||||
diff.put(field, change);
|
||||
}
|
||||
}
|
||||
|
||||
WmsCoilChangeLog log = new WmsCoilChangeLog();
|
||||
log.setChangeType(CoilChangeType.UPDATE.name());
|
||||
log.setOldCoilId(coilId);
|
||||
log.setNewCoilId(coilId);
|
||||
log.setOldCoilNo(oldSnapshot.get("currentCoilNo") != null ? String.valueOf(oldSnapshot.get("currentCoilNo")) : null);
|
||||
log.setNewCoilNo(newSnapshot.get("currentCoilNo") != null ? String.valueOf(newSnapshot.get("currentCoilNo")) : null);
|
||||
log.setChangedFields(diff.isEmpty() ? null : JSONUtil.toJsonStr(diff));
|
||||
log.setOperationDesc("订单变更-同步销售员/合同号");
|
||||
changeLogMapper.insert(log);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 日志记录失败不影响主流程
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user