From 96a020a65509f807ac3d27872f903e22f2218165 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 31 七月 2026 16:54:43 +0800
Subject: [PATCH] 员工新增修改问题解决

---
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/ErpSaleOrderController.java                          |   15 +++++
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeSaveReqVO.java                     |    6 +-
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeEducationMapper.java                         |    4 +
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeWorkHistoryMapper.java                       |    4 +
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java                               |   66 +++++++++++++++++++--
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderItemRespVO.java                 |   48 ++++++++++++++++
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeEmergencyContactMapper.java                  |    4 +
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/salesnotice/vo/line/MesWmSalesNoticeLineSaveReqVO.java |    3 +
 8 files changed, 139 insertions(+), 11 deletions(-)

diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/ErpSaleOrderController.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/ErpSaleOrderController.java
index a96501b..3e2adf4 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/ErpSaleOrderController.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/ErpSaleOrderController.java
@@ -10,6 +10,7 @@
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi;
 import cn.iocoder.yudao.module.crm.api.customer.dto.CrmCustomerRespDTO;
+import cn.iocoder.yudao.module.erp.controller.admin.sale.vo.order.ErpSaleOrderItemRespVO;
 import cn.iocoder.yudao.module.erp.controller.admin.sale.vo.order.ErpSaleOrderPageReqVO;
 import cn.iocoder.yudao.module.erp.controller.admin.sale.vo.order.ErpSaleOrderRespVO;
 import cn.iocoder.yudao.module.erp.controller.admin.sale.vo.order.ErpSaleOrderSaveReqVO;
@@ -119,6 +120,20 @@
         return success(true);
     }
 
+    @GetMapping("/item/list-by-order-id")
+    @Operation(summary = "鏌ヨ閿�鍞鍗曠殑鐗╂枡鏄庣粏鍒楄〃锛堢敤浜庡彂璐ч�氱煡鍗曞垱寤猴級")
+    @Parameter(name = "orderId", description = "閿�鍞鍗曠紪鍙�", required = true, example = "1")
+    @PreAuthorize("@ss.hasPermission('erp:sale-order:query')")
+    public CommonResult<List<ErpSaleOrderItemRespVO>> getSaleOrderItemListByOrderId(@RequestParam("orderId") Long orderId) {
+        List<ErpSaleOrderItemDO> itemList = saleOrderService.getSaleOrderItemListByOrderId(orderId);
+        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
+                convertSet(itemList, ErpSaleOrderItemDO::getProductId));
+        return success(BeanUtils.toBean(itemList, ErpSaleOrderItemRespVO.class, vo -> {
+            MapUtils.findAndThen(itemMap, vo.getProductId(), item ->
+                    vo.setProductName(item.getName()).setProductBarCode(item.getBarCode()));
+        }));
+    }
+
     @GetMapping("/get")
     @Operation(summary = "鑾峰緱閿�鍞鍗�")
     @Parameter(name = "id", description = "缂栧彿", required = true, example = "1024")
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderItemRespVO.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderItemRespVO.java
new file mode 100644
index 0000000..7ca8f8f
--- /dev/null
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderItemRespVO.java
@@ -0,0 +1,48 @@
+package cn.iocoder.yudao.module.erp.controller.admin.sale.vo.order;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * ERP 閿�鍞鍗曢」 Response VO锛堜緵鍓嶇鍙戣揣閫氱煡鍗曞垱寤烘椂鏌ヨ璁㈠崟鏄庣粏锛�
+ */
+@Schema(description = "绠$悊鍚庡彴 - ERP 閿�鍞鍗曢」 Response VO")
+@Data
+public class ErpSaleOrderItemRespVO {
+
+    @Schema(description = "缂栧彿锛堥攢鍞鍗曡ID锛�", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long id;
+
+    @Schema(description = "閿�鍞鍗曠紪鍙�", example = "1")
+    private Long orderId;
+
+    @Schema(description = "鐗╂枡缂栧彿", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long productId;
+
+    @Schema(description = "鐗╂枡鍚嶇О", example = "浜у搧A")
+    private String productName;
+
+    @Schema(description = "鐗╂枡鏉$爜", example = "12345678")
+    private String productBarCode;
+
+    @Schema(description = "璁¢噺鍗曚綅缂栧彿", example = "1")
+    private Long productUnitId;
+
+    @Schema(description = "璁¢噺鍗曚綅鍚嶇О", example = "涓�")
+    private String productUnitName;
+
+    @Schema(description = "浜у搧鍗曚环", example = "100.00")
+    private BigDecimal productPrice;
+
+    @Schema(description = "鏁伴噺", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
+    private BigDecimal count;
+
+    @Schema(description = "鎬讳环", example = "1000.00")
+    private BigDecimal totalPrice;
+
+    @Schema(description = "澶囨敞", example = "澶囨敞")
+    private String remark;
+
+}
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeSaveReqVO.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeSaveReqVO.java
index 243900d..90a8d45 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeSaveReqVO.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeSaveReqVO.java
@@ -94,14 +94,14 @@
 
     @Schema(description = "鏁欒偛缁忓巻鍒楄〃")
     @Valid
-    private List<HrmEmployeeEducationSaveReqVO> educationList;
+    private List<HrmEmployeeEducationSaveReqVO> educations;
 
     @Schema(description = "宸ヤ綔缁忓巻鍒楄〃")
     @Valid
-    private List<HrmEmployeeWorkHistorySaveReqVO> workHistoryList;
+    private List<HrmEmployeeWorkHistorySaveReqVO> workHistories;
 
     @Schema(description = "绱ф�ヨ仈绯讳汉鍒楄〃")
     @Valid
-    private List<HrmEmployeeEmergencyContactSaveReqVO> emergencyContactList;
+    private List<HrmEmployeeEmergencyContactSaveReqVO> emergencyContacts;
 
 }
\ No newline at end of file
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeEducationMapper.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeEducationMapper.java
index 35aea9b..d9390eb 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeEducationMapper.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeEducationMapper.java
@@ -19,4 +19,8 @@
         return selectList(HrmEmployeeEducationDO::getEmployeeId, employeeId);
     }
 
+    default void deleteByEmployeeId(Long employeeId) {
+        delete(HrmEmployeeEducationDO::getEmployeeId, employeeId);
+    }
+
 }
\ No newline at end of file
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeEmergencyContactMapper.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeEmergencyContactMapper.java
index 8a592ba..03e93cf 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeEmergencyContactMapper.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeEmergencyContactMapper.java
@@ -21,4 +21,8 @@
                 .orderByAsc(HrmEmployeeEmergencyContactDO::getSort));
     }
 
+    default void deleteByEmployeeId(Long employeeId) {
+        delete(HrmEmployeeEmergencyContactDO::getEmployeeId, employeeId);
+    }
+
 }
\ No newline at end of file
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeWorkHistoryMapper.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeWorkHistoryMapper.java
index 465e9c9..cb1b988 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeWorkHistoryMapper.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeWorkHistoryMapper.java
@@ -19,4 +19,8 @@
         return selectList(HrmEmployeeWorkHistoryDO::getEmployeeId, employeeId);
     }
 
+    default void deleteByEmployeeId(Long employeeId) {
+        delete(HrmEmployeeWorkHistoryDO::getEmployeeId, employeeId);
+    }
+
 }
\ No newline at end of file
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java
index 72fadf6..58632cf 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java
@@ -113,24 +113,24 @@
         employeeMapper.insert(employee);
         Long employeeId = employee.getId();
         // 7. 鍚屾娣诲姞鏁欒偛缁忓巻
-        if (CollUtil.isNotEmpty(createReqVO.getEducationList())) {
-            createReqVO.getEducationList().forEach(educationVO -> {
+        if (CollUtil.isNotEmpty(createReqVO.getEducations())) {
+            createReqVO.getEducations().forEach(educationVO -> {
                 HrmEmployeeEducationDO education = BeanUtils.toBean(educationVO, HrmEmployeeEducationDO.class);
                 education.setEmployeeId(employeeId);
                 educationMapper.insert(education);
             });
         }
         // 8. 鍚屾娣诲姞宸ヤ綔缁忓巻
-        if (CollUtil.isNotEmpty(createReqVO.getWorkHistoryList())) {
-            createReqVO.getWorkHistoryList().forEach(workHistoryVO -> {
+        if (CollUtil.isNotEmpty(createReqVO.getWorkHistories())) {
+            createReqVO.getWorkHistories().forEach(workHistoryVO -> {
                 HrmEmployeeWorkHistoryDO workHistory = BeanUtils.toBean(workHistoryVO, HrmEmployeeWorkHistoryDO.class);
                 workHistory.setEmployeeId(employeeId);
                 workHistoryMapper.insert(workHistory);
             });
         }
         // 9. 鍚屾娣诲姞绱ф�ヨ仈绯讳汉
-        if (CollUtil.isNotEmpty(createReqVO.getEmergencyContactList())) {
-            createReqVO.getEmergencyContactList().forEach(emergencyContactVO -> {
+        if (CollUtil.isNotEmpty(createReqVO.getEmergencyContacts())) {
+            createReqVO.getEmergencyContacts().forEach(emergencyContactVO -> {
                 HrmEmployeeEmergencyContactDO emergencyContact = BeanUtils.toBean(emergencyContactVO, HrmEmployeeEmergencyContactDO.class);
                 emergencyContact.setEmployeeId(employeeId);
                 emergencyContactMapper.insert(emergencyContact);
@@ -148,6 +148,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void updateEmployee(HrmEmployeeSaveReqVO updateReqVO) {
         // 鏍¢獙瀛樺湪
         HrmEmployeeDO employee = validateEmployeeExists(updateReqVO.getId());
@@ -160,20 +161,69 @@
                 && employeeMapper.selectByPhone(updateReqVO.getPhone()) != null) {
             throw exception(EMPLOYEE_PHONE_EXISTS);
         }
-        // 鏇存柊
+        // 鏇存柊鍛樺伐涓昏〃
         HrmEmployeeDO updateObj = BeanUtils.toBean(updateReqVO, HrmEmployeeDO.class);
         // roleIds 瀛樺偍涓� JSON
         if (CollUtil.isNotEmpty(updateReqVO.getRoleIds())) {
             updateObj.setRoleIds(JSONUtil.toJsonStr(updateReqVO.getRoleIds()));
         }
         employeeMapper.updateById(updateObj);
+        Long employeeId = updateReqVO.getId();
+
+        // 鍚屾鏁欒偛缁忓巻
+        syncEducationList(employeeId, updateReqVO.getEducations());
+        // 鍚屾宸ヤ綔缁忓巻
+        syncWorkHistoryList(employeeId, updateReqVO.getWorkHistories());
+        // 鍚屾绱ф�ヨ仈绯讳汉
+        syncEmergencyContactList(employeeId, updateReqVO.getEmergencyContacts());
+    }
+
+    private void syncEducationList(Long employeeId, List<HrmEmployeeEducationSaveReqVO> newList) {
+        educationMapper.deleteByEmployeeId(employeeId);
+        if (CollUtil.isNotEmpty(newList)) {
+            newList.forEach(vo -> {
+                HrmEmployeeEducationDO education = BeanUtils.toBean(vo, HrmEmployeeEducationDO.class);
+                education.setId(null);
+                education.setEmployeeId(employeeId);
+                educationMapper.insert(education);
+            });
+        }
+    }
+
+    private void syncWorkHistoryList(Long employeeId, List<HrmEmployeeWorkHistorySaveReqVO> newList) {
+        workHistoryMapper.deleteByEmployeeId(employeeId);
+        if (CollUtil.isNotEmpty(newList)) {
+            newList.forEach(vo -> {
+                HrmEmployeeWorkHistoryDO workHistory = BeanUtils.toBean(vo, HrmEmployeeWorkHistoryDO.class);
+                workHistory.setId(null);
+                workHistory.setEmployeeId(employeeId);
+                workHistoryMapper.insert(workHistory);
+            });
+        }
+    }
+
+    private void syncEmergencyContactList(Long employeeId, List<HrmEmployeeEmergencyContactSaveReqVO> newList) {
+        emergencyContactMapper.deleteByEmployeeId(employeeId);
+        if (CollUtil.isNotEmpty(newList)) {
+            newList.forEach(vo -> {
+                HrmEmployeeEmergencyContactDO emergencyContact = BeanUtils.toBean(vo, HrmEmployeeEmergencyContactDO.class);
+                emergencyContact.setId(null);
+                emergencyContact.setEmployeeId(employeeId);
+                emergencyContactMapper.insert(emergencyContact);
+            });
+        }
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void deleteEmployee(Long id) {
         // 鏍¢獙瀛樺湪
         validateEmployeeExists(id);
-        // 鍒犻櫎
+        // 绾ц仈鍒犻櫎瀛愯〃
+        educationMapper.deleteByEmployeeId(id);
+        workHistoryMapper.deleteByEmployeeId(id);
+        emergencyContactMapper.deleteByEmployeeId(id);
+        // 鍒犻櫎鍛樺伐
         employeeMapper.deleteById(id);
     }
 
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/salesnotice/vo/line/MesWmSalesNoticeLineSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/salesnotice/vo/line/MesWmSalesNoticeLineSaveReqVO.java
index d6ba341..35af7ca 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/salesnotice/vo/line/MesWmSalesNoticeLineSaveReqVO.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/salesnotice/vo/line/MesWmSalesNoticeLineSaveReqVO.java
@@ -18,6 +18,9 @@
     @NotNull(message = "鍙戣揣閫氱煡鍗曠紪鍙蜂笉鑳戒负绌�")
     private Long noticeId;
 
+    @Schema(description = "閿�鍞鍗曟槑缁咺D", example = "1")
+    private Long saleOrderItemId;
+
     @Schema(description = "鐗╂枡缂栧彿", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     @NotNull(message = "鐗╂枡缂栧彿涓嶈兘涓虹┖")
     private Long itemId;

--
Gitblit v1.9.3