From 8f5be003e52fdbf034d1955216143bd184ebbdb4 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期四, 23 七月 2026 15:50:54 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_business' into dev_business
---
/dev/null | 149 -------------------------------------------------
yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/dal/mysql/unit/MdmUnitMeasureMapper.java | 6 ++
yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/unit/MdmUnitMeasureServiceImpl.java | 6 +
.claude/rules/frontend-project.md | 16 +++++
4 files changed, 27 insertions(+), 150 deletions(-)
diff --git a/.claude/rules/frontend-project.md b/.claude/rules/frontend-project.md
new file mode 100644
index 0000000..ee5100d
--- /dev/null
+++ b/.claude/rules/frontend-project.md
@@ -0,0 +1,16 @@
+# 鍓嶇椤圭洰瑙勫垯
+
+## 瑙勫垯
+
+- `mom-pro2-before` 鏄墠绔」鐩紝浣嶄簬鍚庣椤圭洰鏍圭洰褰曚笅锛坄D:\鐗涢┈\鍗楅�歕鍚庣\mom-pro2-after\mom-pro2-before`锛夈��
+- 鍙互鏌ョ湅鍓嶇浠g爜浣滀负鍙傝�冿紝甯姪鐞嗚В涓氬姟閫昏緫銆佽璁″悗绔柟妗堛��
+- **鏈粡鐢ㄦ埛鏄庣‘鍏佽锛岀姝慨鏀瑰墠绔」鐩腑鐨勪换浣曟枃浠躲��**
+
+## 浣跨敤鍦烘櫙
+
+| 鍏佽 | 绂佹 |
+|------|------|
+| 璇诲彇鍓嶇鏂囦欢浜嗚В鐜版湁瀹炵幇 | 淇敼鍓嶇浠g爜 |
+| 鍙傝�冨墠绔� API 璋冪敤鏂瑰紡璁捐鍚庣鎺ュ彛 | 鏂板鍓嶇缁勪欢/椤甸潰 |
+| 鍙傝�冨墠绔暟鎹粨鏋勭悊瑙d笟鍔� | 鍒犻櫎鍓嶇鏂囦欢 |
+| 鍦ㄥ墠绔」鐩腑鎼滅储/鏌ユ壘浠g爜 | 閲嶆瀯鍓嶇浠g爜 |
\ No newline at end of file
diff --git a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/dal/mysql/unit/MdmUnitMeasureMapper.java b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/dal/mysql/unit/MdmUnitMeasureMapper.java
index e9ad95b..e0bc513 100644
--- a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/dal/mysql/unit/MdmUnitMeasureMapper.java
+++ b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/dal/mysql/unit/MdmUnitMeasureMapper.java
@@ -6,6 +6,7 @@
import cn.iocoder.yudao.module.mdm.controller.admin.unit.vo.MdmUnitMeasurePageReqVO;
import cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Delete;
import java.util.Collection;
import java.util.List;
@@ -47,4 +48,9 @@
return selectList(MdmUnitMeasureDO::getId, ids);
}
+ /**
+ * 鐗╃悊鍒犻櫎鍚岀紪鐮佺殑宸茶蒋鍒犻櫎璁板綍
+ */
+ @Delete("DELETE FROM mdm_unit_measure WHERE code = #{code} AND deleted = 1")
+ void physicalDeleteByCode(String code);
}
\ No newline at end of file
diff --git a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/unit/MdmUnitMeasureServiceImpl.java b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/unit/MdmUnitMeasureServiceImpl.java
index f3c581d..c85b6de 100644
--- a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/unit/MdmUnitMeasureServiceImpl.java
+++ b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/unit/MdmUnitMeasureServiceImpl.java
@@ -11,6 +11,7 @@
import cn.iocoder.yudao.module.mdm.dal.mysql.unit.MdmUnitMeasureMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import java.util.*;
@@ -65,13 +66,16 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public void deleteUnitMeasure(Long id) {
// 鏍¢獙瀛樺湪
- validateUnitMeasureExists(id);
+ MdmUnitMeasureDO unitMeasure = validateUnitMeasureExists(id);
// 鏍¢獙鏄惁琚墿鏂欎娇鐢紙鐩存帴浣跨敤 Mapper 閬垮厤寰幆渚濊禆锛�
if (itemMapper.selectCountByUnitMeasureId(id) > 0) {
throw exception(MDM_UNIT_MEASURE_EXISTS_ITEM);
}
+ // 鍏堟竻鐞嗗悓缂栫爜鐨勫凡杞垹闄よ剰鏁版嵁锛岄伩鍏嶅綋鍓嶈褰曡蒋鍒犳椂瑙﹀彂鍞竴閿啿绐�
+ unitMeasureMapper.physicalDeleteByCode(unitMeasure.getCode());
// 鍒犻櫎
unitMeasureMapper.deleteById(id);
}
diff --git a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImplTest.java b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImplTest.java
deleted file mode 100644
index 5332d13..0000000
--- a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImplTest.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package cn.iocoder.yudao.module.mes.service.wm.arrivalnotice;
-
-import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
-import cn.iocoder.yudao.module.mes.dal.dataobject.wm.arrivalnotice.MesWmArrivalNoticeDO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.wm.arrivalnotice.MesWmArrivalNoticeLineDO;
-import cn.iocoder.yudao.module.mes.dal.mysql.wm.arrivalnotice.MesWmArrivalNoticeMapper;
-import cn.iocoder.yudao.module.mes.enums.wm.MesWmArrivalNoticeStatusEnum;
-import org.junit.jupiter.api.Test;
-import org.springframework.context.annotation.Import;
-import org.springframework.test.context.bean.override.mockito.MockitoBean;
-
-import jakarta.annotation.Resource;
-
-import java.math.BigDecimal;
-import java.util.Arrays;
-
-import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
-import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
-import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
-import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.*;
-
-/**
- * {@link MesWmArrivalNoticeServiceImpl} 鐨勫崟鍏冩祴璇�
- *
- * @author 鑺嬮亾婧愮爜
- */
-@Import(MesWmArrivalNoticeServiceImpl.class)
-public class MesWmArrivalNoticeServiceImplTest extends BaseDbUnitTest {
-
- @Resource
- private MesWmArrivalNoticeServiceImpl arrivalNoticeService;
-
- @Resource
- private MesWmArrivalNoticeMapper arrivalNoticeMapper;
-
- @MockitoBean
- private MesWmArrivalNoticeLineService arrivalNoticeLineService;
-
- @Test
- public void testUpdateArrivalNoticeWhenIqcFinish_success_allLinesChecked() {
- // mock 鏁版嵁锛氭彃鍏ヤ竴鏉″緟璐ㄦ鐨勫埌璐ч�氱煡鍗�
- MesWmArrivalNoticeDO notice = randomPojo(MesWmArrivalNoticeDO.class, o -> {
- o.setStatus(MesWmArrivalNoticeStatusEnum.PENDING_QC.getStatus());
- });
- arrivalNoticeMapper.insert(notice);
- // 鍑嗗鍙傛暟
- Long noticeId = notice.getId();
- Long lineId = randomLongId();
- Long iqcId = randomLongId();
- BigDecimal qualifiedQuantity = BigDecimal.valueOf(100);
-
- // mock 琛屾湇鍔℃柟娉曪細鎵�鏈夐渶妫�琛岄兘宸插畬鎴愶紙iqcId 涓嶄负绌猴級
- MesWmArrivalNoticeLineDO line1 = randomPojo(MesWmArrivalNoticeLineDO.class, o -> {
- o.setNoticeId(noticeId);
- o.setIqcCheckFlag(true);
- o.setIqcId(iqcId); // 宸叉瀹�
- });
- MesWmArrivalNoticeLineDO line2 = randomPojo(MesWmArrivalNoticeLineDO.class, o -> {
- o.setNoticeId(noticeId);
- o.setIqcCheckFlag(false); // 涓嶉渶瑕佹楠�
- o.setIqcId(null);
- });
- when(arrivalNoticeLineService.getArrivalNoticeLineListByNoticeId(eq(noticeId)))
- .thenReturn(Arrays.asList(line1, line2));
-
- // 璋冪敤
-// arrivalNoticeService.updateArrivalNoticeWhenIqcFinish(noticeId, lineId, iqcId, qualifiedQuantity);
-
- // 鏂█锛氳鍥炲啓琚皟鐢�
-// verify(arrivalNoticeLineService).updateArrivalNoticeLineWhenIqcFinish(eq(lineId), eq(iqcId), eq(qualifiedQuantity));
- // 鏂█锛氫富琛ㄧ姸鎬佹洿鏂颁负寰呭叆搴�
- MesWmArrivalNoticeDO updatedNotice = arrivalNoticeMapper.selectById(noticeId);
- assertEquals(MesWmArrivalNoticeStatusEnum.PENDING_RECEIPT.getStatus(), updatedNotice.getStatus());
- }
-
- @Test
- public void testUpdateArrivalNoticeWhenIqcFinish_success_hasUncheckedLines() {
- // mock 鏁版嵁锛氭彃鍏ヤ竴鏉″緟璐ㄦ鐨勫埌璐ч�氱煡鍗�
- MesWmArrivalNoticeDO notice = randomPojo(MesWmArrivalNoticeDO.class, o -> {
- o.setStatus(MesWmArrivalNoticeStatusEnum.PENDING_QC.getStatus());
- });
- arrivalNoticeMapper.insert(notice);
- // 鍑嗗鍙傛暟
- Long noticeId = notice.getId();
- Long lineId = randomLongId();
- Long iqcId = randomLongId();
- BigDecimal qualifiedQuantity = BigDecimal.valueOf(50);
-
- // mock 琛屾湇鍔℃柟娉曪細杩樻湁鏈畬鎴愮殑闇�妫�琛�
- MesWmArrivalNoticeLineDO line1 = randomPojo(MesWmArrivalNoticeLineDO.class, o -> {
- o.setNoticeId(noticeId);
- o.setIqcCheckFlag(true);
- o.setIqcId(iqcId); // 宸叉瀹�
- });
- MesWmArrivalNoticeLineDO line2 = randomPojo(MesWmArrivalNoticeLineDO.class, o -> {
- o.setNoticeId(noticeId);
- o.setIqcCheckFlag(true);
- o.setIqcId(null); // 杩樻湭妫�楠�
- });
- when(arrivalNoticeLineService.getArrivalNoticeLineListByNoticeId(eq(noticeId)))
- .thenReturn(Arrays.asList(line1, line2));
-
- // 璋冪敤
-// arrivalNoticeService.updateArrivalNoticeWhenIqcFinish(noticeId, lineId, iqcId, qualifiedQuantity);
-
- // 鏂█锛氳鍥炲啓琚皟鐢�
-// verify(arrivalNoticeLineService).updateArrivalNoticeLineWhenIqcFinish(eq(lineId), eq(iqcId), eq(qualifiedQuantity));
- // 鏂█锛氫富琛ㄧ姸鎬佷笉鍙橈紝浠嶇劧鏄緟璐ㄦ
- MesWmArrivalNoticeDO updatedNotice = arrivalNoticeMapper.selectById(noticeId);
- assertEquals(MesWmArrivalNoticeStatusEnum.PENDING_QC.getStatus(), updatedNotice.getStatus());
- }
-
- @Test
- public void testUpdateArrivalNoticeWhenIqcFinish_noticeNotExists() {
- // 鍑嗗鍙傛暟
- Long noticeId = randomLongId();
- Long lineId = randomLongId();
- Long iqcId = randomLongId();
- BigDecimal qualifiedQuantity = BigDecimal.valueOf(100);
-
- // 璋冪敤锛屽苟鏂█寮傚父
-// assertServiceException(
-// () -> arrivalNoticeService.updateArrivalNoticeWhenIqcFinish(noticeId, lineId, iqcId, qualifiedQuantity),
-// WM_ARRIVAL_NOTICE_NOT_EXISTS);
- }
-
- @Test
- public void testUpdateArrivalNoticeWhenIqcFinish_statusNotPendingQc() {
- // mock 鏁版嵁锛氭彃鍏ヤ竴鏉¤崏绋跨姸鎬佺殑鍒拌揣閫氱煡鍗曪紙闈炲緟璐ㄦ锛�
- MesWmArrivalNoticeDO notice = randomPojo(MesWmArrivalNoticeDO.class, o -> {
- o.setStatus(MesWmArrivalNoticeStatusEnum.PREPARE.getStatus());
- });
- arrivalNoticeMapper.insert(notice);
- // 鍑嗗鍙傛暟
- Long noticeId = notice.getId();
- Long lineId = randomLongId();
- Long iqcId = randomLongId();
- BigDecimal qualifiedQuantity = BigDecimal.valueOf(100);
-
- // 璋冪敤锛屽苟鏂█寮傚父
-// assertServiceException(
-// () -> arrivalNoticeService.updateArrivalNoticeWhenIqcFinish(noticeId, lineId, iqcId, qualifiedQuantity),
-// WM_ARRIVAL_NOTICE_STATUS_NOT_PENDING_QC);
- }
-
-}
--
Gitblit v1.9.3