feat(wms): 补充注解失效的钢卷变更日志记录功能

- 在CrmOrderServiceImpl中实现订单变更时钢卷快照对比和日志记录
- 在WmsActualWarehouseServiceImpl中实现库位释放时钢卷变更日志记录
- 在WmsCoilContractRelServiceImpl中实现合同关联更新时钢卷变更日志记录
- 重构CoilChangeLogAspect中的导入顺序
- 添加WmsCoilChangeLogMapper依赖注入到相关服务类
- 实现变更前后快照对比和差异字段JSON存储
- 添加异常处理确保日志记录失败不影响主业务流程
This commit is contained in:
2026-07-11 15:06:22 +08:00
parent ed08134191
commit 3bdc1c9879
5 changed files with 172 additions and 11 deletions

View File

@@ -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) {
// 日志记录失败不影响主流程
}
}
}