feat(wms): 添加钢卷变更日志功能

- 新增钢卷变更日志的Service接口及实现类
- 创建钢卷变更日志的业务对象BO和视图对象VO
- 实现钢卷变更日志的控制器提供CRUD操作接口
- 添加钢卷变更日志的数据库映射和表结构定义
- 开发钢卷变更日志注解和AOP切面自动记录变更
- 定义钢卷变更类型的枚举类支持多种变更场景
- 在钢卷相关业务方法中集成变更日志记录功能
- 创建钢卷变更日志的数据表SQL脚本文件
This commit is contained in:
2026-07-11 13:36:04 +08:00
parent 59dfa4f2b8
commit ed08134191
15 changed files with 962 additions and 0 deletions

View File

@@ -16,6 +16,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.helper.LoginHelper;
import com.klp.common.utils.DateUtils;
import com.klp.common.utils.StringUtils;
import com.klp.wms.annotation.CoilChangeLog;
import com.klp.wms.enums.CoilChangeType;
import com.klp.domain.*;
import com.klp.domain.bo.*;
import com.klp.domain.vo.*;
@@ -1850,6 +1852,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
@Override
@Transactional(rollbackFor = Exception.class)
@CoilChangeLog(value = "质量改判", changeType = CoilChangeType.QUALITY_CHANGE)
public void updateQualityStatus(Long coilId, String newQuality, String reason) {
if (coilId == null || StringUtils.isBlank(newQuality)) {
log.warn("updateQualityStatus 参数不足: coilId={}, newQuality={}", coilId, newQuality);
@@ -1903,6 +1906,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
*/
@Override
@Transactional(rollbackFor = Exception.class)
@CoilChangeLog(value = "入场收货", changeType = CoilChangeType.INSERT, coilIdBoField = "coilId")
public WmsMaterialCoilVo insertByBo(WmsMaterialCoilBo bo) {
// 检查当前钢卷号是否重复(新增)
Map<String, Object> duplicateCheck = checkCoilNoDuplicate(null, null, bo.getCurrentCoilNo(), null);
@@ -2056,6 +2060,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
*/
@Override
@Transactional(rollbackFor = Exception.class)
@CoilChangeLog(value = "钢卷加工", changeType = CoilChangeType.PROCESS, coilIdBoField = "coilId")
public String updateByBo(WmsMaterialCoilBo bo, String qrcodeStepType) {
String result;
// 判断是否批量更新
@@ -2084,6 +2089,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
*/
@Override
@Transactional(rollbackFor = Exception.class)
@CoilChangeLog(value = "简单更新", changeType = CoilChangeType.UPDATE, coilIdBoField = "coilId")
public Boolean updateSimple(WmsMaterialCoilBo bo) {
if (bo.getCoilId() == null) {
throw new RuntimeException("钢卷ID不能为空");
@@ -3279,6 +3285,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
* 批量删除钢卷物料表
*/
@Override
@CoilChangeLog(value = "删除", changeType = CoilChangeType.DELETE, coilIdParam = "ids", isBatch = true)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
@@ -4010,6 +4017,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
* @return
*/
@Override
@CoilChangeLog(value = "发货", changeType = CoilChangeType.EXPORT)
public int exportCoil(Long coilId) {
// 检查独占状态
validateCoilOperationPermission(coilId, "发货");
@@ -4090,6 +4098,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
*/
@Override
@Transactional(rollbackFor = Exception.class)
@CoilChangeLog(value = "合卷", changeType = CoilChangeType.MERGE, coilIdBoField = "coilId")
public Long mergeCoils(WmsMaterialCoilBo bo) {
if (bo.getNewCoils() == null || bo.getNewCoils().isEmpty()) {
throw new RuntimeException("合卷操作需要提供参与合卷的钢卷列表");
@@ -4176,6 +4185,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
*/
@Override
@Transactional
@CoilChangeLog(value = "发货撤回", changeType = CoilChangeType.UPDATE)
public int withdrawExportCoil(Long coilId) {
// 参数校验
if (coilId == null) {
@@ -4205,6 +4215,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
* @return 是否更新成功
*/
@Override
@CoilChangeLog(value = "批量更新发货状态", changeType = CoilChangeType.UPDATE, coilIdParam = "coilIds", isBatch = true)
public Boolean batchUpdateDeliveryStatus(List<Long> coilIds, Integer status) {
if (coilIds == null || coilIds.isEmpty()) {
return false;
@@ -4616,6 +4627,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
*/
@Override
@Transactional(rollbackFor = Exception.class)
@CoilChangeLog(value = "回滚", changeType = CoilChangeType.ROLLBACK, coilIdParam = "currentCoilId")
public Map<String, Object> rollbackCoil(Long currentCoilId) {
Map<String, Object> result = new HashMap<>();
result.put("success", false);
@@ -5596,6 +5608,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
*/
@Override
@Transactional(rollbackFor = Exception.class)
@CoilChangeLog(value = "创建子卷", changeType = CoilChangeType.SPLIT, coilIdParam = "parentCoilId")
public WmsMaterialCoilVo createChildCoilInSpecialSplit(Long parentCoilId, WmsMaterialCoilBo childCoilBo, Long pendingActionId) {
// 1. 查询母卷信息
WmsMaterialCoil parentCoil = baseMapper.selectById(parentCoilId);
@@ -5921,6 +5934,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
*/
@Override
@Transactional(rollbackFor = Exception.class)
@CoilChangeLog(value = "退货", changeType = CoilChangeType.PROCESS)
public WmsMaterialCoilVo returnCoil(Long coilId) {
if (coilId == null) {
throw new RuntimeException("钢卷ID不能为空");
@@ -6200,6 +6214,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
}
@Override
@CoilChangeLog(value = "修复材质异常", changeType = CoilChangeType.UPDATE)
public Boolean fixMaterialMismatchCoils(Long coilId) {
WmsMaterialCoil coil = baseMapper.selectById(coilId);
if (coil == null) {
@@ -6616,6 +6631,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
}
@Override
@CoilChangeLog(value = "解锁钢卷", changeType = CoilChangeType.UPDATE)
public Boolean unlockCoil(Long coilId) {
if (coilId == null) {
throw new RuntimeException("钢卷ID不能为空");