From 7bd3cb7134a71a8da89e602dcd73e177eece0eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 10 Jun 2026 08:25:07 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix(file):=20=E4=BF=AE=E5=A4=8D=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E9=94=81=E5=AE=9A=E9=80=BB=E8=BE=91=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=AB=9E=E6=80=81=E6=9D=A1=E4=BB=B6=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加了 Redis 键不存在时的条件检查分支 - 实现了 setIfAbsent 原子操作避免并发锁定冲突 - 移除了冗余的锁定失败兜底错误提示 - 优化了分布式锁的实现机制 --- .../com/nflg/qms/admin/service/QmsFileControllerService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsFileControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsFileControllerService.java index 74477be4..550b3c2a 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsFileControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsFileControllerService.java @@ -653,9 +653,9 @@ public class QmsFileControllerService { User lockedUser = userService.getById(lockedUserId); VUtil.trueThrowBusinessError(true).throwMessage("文件已被用户【" + lockedUser.getUserName() + "】锁定"); } + }else { + redisTemplate.opsForValue().setIfAbsent(key, currentUserId, 15, TimeUnit.SECONDS); } - // key 在两次 Redis 操作间隙恰好过期,仍属于锁定失败,需兜底报错 - VUtil.trueThrowBusinessError(true).throwMessage("文件已被锁定"); } else { file.setCurrentLockUserName(UserUtil.getUserName()); fileService.updateById(file); From 2f60e99f3bbcc615c502f8af0c8d584286645380 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 10 Jun 2026 08:33:07 +0800 Subject: [PATCH 2/2] =?UTF-8?q?refactor(qms):=20=E4=BF=AE=E6=94=B9COA?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=8F=91=E5=B8=83=E5=8A=9F=E8=83=BD=E7=9A=84?= =?UTF-8?q?=E7=89=A9=E6=96=99=E6=A0=87=E8=AF=86=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将QmsCoaTaskAddQO中的物料字段从materialNo改为materialId - 更新publish方法返回值类型为Long,返回任务ID - 移除按物料编号查询物料的逻辑,直接使用传入的物料ID - 调整控制器中待办事项标题的生成方式,使用物料编号显示 - 修改新增和发布流程中物料ID的设置方式,统一使用qo.getMaterialId() --- .../controller/QmsCoaTaskController.java | 12 ++++-- .../wms/common/pojo/qo/QmsCoaTaskAddQO.java | 12 ++++-- .../service/IQmsCoaTaskService.java | 2 +- .../service/impl/QmsCoaTaskServiceImpl.java | 43 ++++++++++--------- 4 files changed, 41 insertions(+), 28 deletions(-) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsCoaTaskController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsCoaTaskController.java index 0ae37147..9f2610ca 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsCoaTaskController.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsCoaTaskController.java @@ -14,9 +14,11 @@ import com.nflg.wms.common.pojo.vo.QmsCoaTaskVO; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.QmsCoaTask; +import com.nflg.wms.repository.entity.QmsQcMaterial; import com.nflg.wms.repository.entity.QmsTodoItem; import com.nflg.wms.repository.service.IDictionaryItemService; import com.nflg.wms.repository.service.IQmsCoaTaskService; +import com.nflg.wms.repository.service.IQmsQcMaterialService; import com.nflg.wms.repository.service.IQmsTodoItemService; import com.nflg.wms.starter.BaseController; import jakarta.annotation.Resource; @@ -47,6 +49,9 @@ public class QmsCoaTaskController extends BaseController { @Resource private IDictionaryItemService dictionaryItemService; + @Resource + private IQmsQcMaterialService qcMaterialService; + /** * 新增COA通知任务 * 状态默认为0(待发送) @@ -85,15 +90,16 @@ public class QmsCoaTaskController extends BaseController { @Transactional @PostMapping("publish") public ApiResult publish(@Valid @RequestBody QmsCoaTaskAddQO qo) { - coaTaskService.publish(qo); + Long taskId = coaTaskService.publish(qo); Long dictionaryItemServiceId = dictionaryItemService.getIdByCode("MessageType", "COANotificationSent"); VUtil.trueThrowBusinessError(Objects.isNull(dictionaryItemServiceId)).throwMessage("消息类型不存在"); // 推送COA通知 + QmsQcMaterial qcMaterial = qcMaterialService.getById(qo.getMaterialId()); todoItemService.add(new QmsTodoItem() - .setTitle("COA通知" + qo.getMaterialNo()) + .setTitle("物料" + qcMaterial.getMaterialNo() + "需要上传COA报告") .setCode(basdeSerialNumberControllerService.generateSerialNumber(32)) .setSourceTypeId(dictionaryItemServiceId) - .setSourceId(coaTaskService.lambdaQuery().eq(QmsCoaTask::getMaterialId, qo.getMaterialNo()).one().getId()) + .setSourceId(taskId) .setCreateUserId(UserUtil.getUserId()) .setCreateUserName(UserUtil.getUserName()) .setCreateTime(java.time.LocalDateTime.now()) diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsCoaTaskAddQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsCoaTaskAddQO.java index 7cba432a..28c9b097 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsCoaTaskAddQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsCoaTaskAddQO.java @@ -19,11 +19,17 @@ public class QmsCoaTaskAddQO { @NotBlank(message = "供应商编号不能为空") private String supplierCode; +// /** +// * 物料编号(必传,用于查询 qms_qc_material.id) +// */ +// @NotBlank(message = "物料编号不能为空") +// private String materialNo; + /** - * 物料编号(必传,用于查询 qms_qc_material.id) + * 物料ID */ - @NotBlank(message = "物料编号不能为空") - private String materialNo; + @NotNull(message = "物料ID不能为空") + private Long materialId; /** * 报告要求(必传) diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsCoaTaskService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsCoaTaskService.java index e9d0a4b7..ba3303c6 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsCoaTaskService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsCoaTaskService.java @@ -36,7 +36,7 @@ public interface IQmsCoaTaskService extends IService { /** * 直接发布COA通知任务(状态改为1,填入发送时间) */ - void publish(QmsCoaTaskAddQO qo); + Long publish(QmsCoaTaskAddQO qo); /** * 批量发送(状态改为1,填入发送时间) diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsCoaTaskServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsCoaTaskServiceImpl.java index cad39428..f58d5afc 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsCoaTaskServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsCoaTaskServiceImpl.java @@ -57,19 +57,19 @@ public class QmsCoaTaskServiceImpl extends ServiceImpl