From f61043f70c126c4b464a4ebc7dd635fcf7b679df Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 24 七月 2026 17:25:33 +0800
Subject: [PATCH] feat(erp): 为ERP模块添加附件功能支持
---
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/ErpSaleOrderController.java | 5
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderSaveReqVO.java | 3
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/ErpFinancePaymentController.java | 6 +
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/ErpFinanceReceiptController.java | 6 +
yudao-server/src/main/resources/application-test.yaml | 2
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/order/ErpPurchaseOrderSaveReqVO.java | 3
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java | 68 +++++++++++++
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestRespVO.java | 8 +
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/order/ErpPurchaseOrderRespVO.java | 4
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/receipt/ErpFinanceReceiptSaveReqVO.java | 3
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java | 19 +++
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/payment/ErpFinancePaymentRespVO.java | 4
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseRequestMapper.java | 1
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/enums/storage/StorageRecordTypeEnum.java | 26 +++++
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java | 17 +++
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestSaveReqVO.java | 3
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java | 17 +++
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/receipt/ErpFinanceReceiptRespVO.java | 4
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseRequestController.java | 5
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/payment/ErpFinancePaymentSaveReqVO.java | 3
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestPageReqVO.java | 3
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java | 20 +++
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseOrderController.java | 5
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinanceReceiptServiceImpl.java | 20 +++
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderRespVO.java | 4
25 files changed, 244 insertions(+), 15 deletions(-)
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/ErpFinancePaymentController.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/ErpFinancePaymentController.java
index 09e2469..5001490 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/ErpFinancePaymentController.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/ErpFinancePaymentController.java
@@ -19,6 +19,7 @@
import cn.iocoder.yudao.module.erp.service.finance.ErpAccountService;
import cn.iocoder.yudao.module.erp.service.finance.ErpFinancePaymentService;
import cn.iocoder.yudao.module.erp.service.purchase.ErpSupplierService;
+import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import io.swagger.v3.oas.annotations.Operation;
@@ -55,6 +56,8 @@
@Resource
private AdminUserApi adminUserApi;
+ @Resource
+ private StorageAttachmentApi storageAttachmentApi;
@PostMapping("/create")
@Operation(summary = "鍒涘缓浠樻鍗�")
@@ -100,7 +103,8 @@
}
List<ErpFinancePaymentItemDO> paymentItemList = financePaymentService.getFinancePaymentItemListByPaymentId(id);
return success(BeanUtils.toBean(payment, ErpFinancePaymentRespVO.class, financePaymentVO ->
- financePaymentVO.setItems(BeanUtils.toBean(paymentItemList, ErpFinancePaymentRespVO.Item.class))));
+ financePaymentVO.setItems(BeanUtils.toBean(paymentItemList, ErpFinancePaymentRespVO.Item.class))
+ .setAttachmentList(storageAttachmentApi.listAttachments("erp_finance_payment", id))));
}
@GetMapping("/page")
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/ErpFinanceReceiptController.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/ErpFinanceReceiptController.java
index b6c905f..9ae4160 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/ErpFinanceReceiptController.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/ErpFinanceReceiptController.java
@@ -19,6 +19,7 @@
import cn.iocoder.yudao.module.erp.service.finance.ErpFinanceReceiptService;
import cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi;
import cn.iocoder.yudao.module.crm.api.customer.dto.CrmCustomerRespDTO;
+import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import io.swagger.v3.oas.annotations.Operation;
@@ -55,6 +56,8 @@
@Resource
private AdminUserApi adminUserApi;
+ @Resource
+ private StorageAttachmentApi storageAttachmentApi;
@PostMapping("/create")
@Operation(summary = "鍒涘缓鏀舵鍗�")
@@ -100,7 +103,8 @@
}
List<ErpFinanceReceiptItemDO> receiptItemList = financeReceiptService.getFinanceReceiptItemListByReceiptId(id);
return success(BeanUtils.toBean(receipt, ErpFinanceReceiptRespVO.class, financeReceiptVO ->
- financeReceiptVO.setItems(BeanUtils.toBean(receiptItemList, ErpFinanceReceiptRespVO.Item.class))));
+ financeReceiptVO.setItems(BeanUtils.toBean(receiptItemList, ErpFinanceReceiptRespVO.Item.class))
+ .setAttachmentList(storageAttachmentApi.listAttachments("erp_finance_receipt", id))));
}
@GetMapping("/page")
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/payment/ErpFinancePaymentRespVO.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/payment/ErpFinancePaymentRespVO.java
index df89465..7086437 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/payment/ErpFinancePaymentRespVO.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/payment/ErpFinancePaymentRespVO.java
@@ -2,6 +2,7 @@
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
+import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@@ -54,6 +55,9 @@
@Schema(description = "澶囨敞", example = "浣犵寽")
private String remark;
+ @Schema(description = "闄勪欢鍒楄〃")
+ private List<StorageBlobRespDTO> attachmentList;
+
@Schema(description = "鍒涘缓浜�", example = "鑺嬮亾")
private String creator;
@Schema(description = "鍒涘缓浜哄悕绉�", example = "鑺嬮亾")
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/payment/ErpFinancePaymentSaveReqVO.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/payment/ErpFinancePaymentSaveReqVO.java
index e50577b..2e3bac0 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/payment/ErpFinancePaymentSaveReqVO.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/payment/ErpFinancePaymentSaveReqVO.java
@@ -39,6 +39,9 @@
@Schema(description = "澶囨敞", example = "浣犵寽")
private String remark;
+ @Schema(description = "闄勪欢 blobId 鍒楄〃", example = "[1, 2, 3]")
+ private List<Long> blobIds;
+
@Schema(description = "浠樻椤瑰垪琛�", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "浠樻椤瑰垪琛ㄤ笉鑳戒负绌�")
@Valid
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/receipt/ErpFinanceReceiptRespVO.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/receipt/ErpFinanceReceiptRespVO.java
index 2398e06..943b220 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/receipt/ErpFinanceReceiptRespVO.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/receipt/ErpFinanceReceiptRespVO.java
@@ -2,6 +2,7 @@
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
+import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@@ -54,6 +55,9 @@
@Schema(description = "澶囨敞", example = "浣犵寽")
private String remark;
+ @Schema(description = "闄勪欢鍒楄〃")
+ private List<StorageBlobRespDTO> attachmentList;
+
@Schema(description = "鍒涘缓浜�", example = "鑺嬮亾")
private String creator;
@Schema(description = "鍒涘缓浜哄悕绉�", example = "鑺嬮亾")
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/receipt/ErpFinanceReceiptSaveReqVO.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/receipt/ErpFinanceReceiptSaveReqVO.java
index 126edf8..093e9e1 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/receipt/ErpFinanceReceiptSaveReqVO.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/receipt/ErpFinanceReceiptSaveReqVO.java
@@ -39,6 +39,9 @@
@Schema(description = "澶囨敞", example = "浣犵寽")
private String remark;
+ @Schema(description = "闄勪欢 blobId 鍒楄〃", example = "[1, 2, 3]")
+ private List<Long> blobIds;
+
@Schema(description = "鏀舵椤瑰垪琛�", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "鏀舵椤瑰垪琛ㄤ笉鑳戒负绌�")
@Valid
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseOrderController.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseOrderController.java
index 517926d..f2694ec 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseOrderController.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseOrderController.java
@@ -18,6 +18,7 @@
import cn.iocoder.yudao.module.erp.service.purchase.ErpSupplierService;
import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
+import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import io.swagger.v3.oas.annotations.Operation;
@@ -56,6 +57,8 @@
private MdmItemApi mdmItemApi;
@Resource
private AdminUserApi adminUserApi;
+ @Resource
+ private StorageAttachmentApi storageAttachmentApi;
@PostMapping("/create")
@Operation(summary = "鍒涘缓閲囪喘璁㈠崟")
@@ -125,7 +128,7 @@
item.setStockCount(BigDecimal.ZERO);
MapUtils.findAndThen(itemMap, item.getProductId(), mdmItem -> item.setProductName(mdmItem.getName())
.setProductBarCode(mdmItem.getBarCode()));
- }))));
+ })).setAttachmentList(storageAttachmentApi.listAttachments("erp_purchase_order", id))));
}
@GetMapping("/page")
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseRequestController.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseRequestController.java
index 814f10e..1bc4f5a 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseRequestController.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseRequestController.java
@@ -20,6 +20,7 @@
import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
+import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import io.swagger.v3.oas.annotations.Operation;
@@ -59,6 +60,8 @@
private AdminUserApi adminUserApi;
@Resource
private DeptApi deptApi;
+ @Resource
+ private StorageAttachmentApi storageAttachmentApi;
@PostMapping("/create")
@Operation(summary = "鍒涘缓閲囪喘鐢宠")
@@ -100,7 +103,7 @@
purchaseRequestVO.setItems(BeanUtils.toBean(purchaseRequestItemList, ErpPurchaseRequestRespVO.Item.class, item -> {
MapUtils.findAndThen(itemMap, item.getProductId(), mdmItem -> item.setProductName(mdmItem.getName())
.setProductBarCode(mdmItem.getBarCode()));
- }))));
+ })).setAttachmentList(storageAttachmentApi.listAttachments("erp_purchase_request", id))));
}
@GetMapping("/page")
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/order/ErpPurchaseOrderRespVO.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/order/ErpPurchaseOrderRespVO.java
index 7692ec1..51cdf18 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/order/ErpPurchaseOrderRespVO.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/order/ErpPurchaseOrderRespVO.java
@@ -2,6 +2,7 @@
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
+import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@@ -67,6 +68,9 @@
@ExcelProperty("澶囨敞")
private String remark;
+ @Schema(description = "闄勪欢鍒楄〃")
+ private List<StorageBlobRespDTO> attachmentList;
+
@Schema(description = "鍒涘缓浜�", example = "鑺嬮亾")
private String creator;
@Schema(description = "鍒涘缓浜哄悕绉�", example = "鑺嬮亾")
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/order/ErpPurchaseOrderSaveReqVO.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/order/ErpPurchaseOrderSaveReqVO.java
index 81a46ee..201068d 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/order/ErpPurchaseOrderSaveReqVO.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/order/ErpPurchaseOrderSaveReqVO.java
@@ -35,6 +35,9 @@
@Schema(description = "澶囨敞", example = "浣犵寽")
private String remark;
+ @Schema(description = "闄勪欢 blobId 鍒楄〃", example = "[1, 2, 3]")
+ private List<Long> blobIds;
+
@Schema(description = "璁㈠崟娓呭崟鍒楄〃")
private List<Item> items;
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestPageReqVO.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestPageReqVO.java
index 2ee0563..5916e59 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestPageReqVO.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestPageReqVO.java
@@ -39,4 +39,7 @@
@Schema(description = "浜у搧缂栧彿", example = "1")
private Long productId;
+ @Schema(description = "鍏ュ簱鐘舵�侊紙0:鏈叆搴� 1:閮ㄥ垎鍏ュ簱 2:鍏ㄩ儴鍏ュ簱锛�", example = "0")
+ private Integer inStatus;
+
}
\ No newline at end of file
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestRespVO.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestRespVO.java
index a0dd200..0107c1f 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestRespVO.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestRespVO.java
@@ -1,10 +1,12 @@
package cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.request;
+import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
+import java.util.List;
@Schema(description = "绠$悊鍚庡彴 - ERP 閲囪喘鐢宠 Response VO")
@Data
@@ -18,6 +20,9 @@
@Schema(description = "鐘舵��", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
private Integer status;
+
+ @Schema(description = "宸ヤ綔娴佺紪鍙�", example = "1043")
+ private String processInstanceId;
@Schema(description = "鐢宠浜虹紪鍙�", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long requestUserId;
@@ -67,6 +72,9 @@
@Schema(description = "澶囨敞", example = "澶囨敞")
private String remark;
+ @Schema(description = "闄勪欢鍒楄〃")
+ private List<StorageBlobRespDTO> attachmentList;
+
@Schema(description = "鍒涘缓鏃堕棿")
private LocalDateTime createTime;
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestSaveReqVO.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestSaveReqVO.java
index a405917..2019f86 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestSaveReqVO.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestSaveReqVO.java
@@ -36,6 +36,9 @@
@Schema(description = "澶囨敞", example = "澶囨敞")
private String remark;
+ @Schema(description = "闄勪欢 blobId 鍒楄〃", example = "[1, 2, 3]")
+ private List<Long> blobIds;
+
@Schema(description = "鐢宠鏄庣粏鍒楄〃", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "鐢宠鏄庣粏涓嶈兘涓虹┖")
@Valid
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 488e818..7005b01 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
@@ -20,6 +20,7 @@
import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
import cn.iocoder.yudao.module.mes.api.mps.MesProMpsApi;
import cn.iocoder.yudao.module.mes.api.salesnotice.MesWmSalesNoticeApi;
+import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import io.swagger.v3.oas.annotations.Operation;
@@ -61,6 +62,8 @@
private MesWmSalesNoticeApi salesNoticeApi;
@Resource
private MesProMpsApi mpsApi;
+ @Resource
+ private StorageAttachmentApi storageAttachmentApi;
@PostMapping("/create")
@Operation(summary = "鍒涘缓閿�鍞鍗�")
@@ -131,7 +134,7 @@
item.setStockCount(BigDecimal.ZERO);
MapUtils.findAndThen(itemMap, item.getProductId(), mdmItem -> item.setProductName(mdmItem.getName())
.setProductBarCode(mdmItem.getBarCode()));
- }))));
+ })).setAttachmentList(storageAttachmentApi.listAttachments("erp_sale_order", id))));
}
@GetMapping("/page")
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderRespVO.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderRespVO.java
index 4c7add4..f28a6e2 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderRespVO.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderRespVO.java
@@ -2,6 +2,7 @@
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
+import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@@ -76,6 +77,9 @@
@ExcelProperty("澶囨敞")
private String remark;
+ @Schema(description = "闄勪欢鍒楄〃")
+ private List<StorageBlobRespDTO> attachmentList;
+
@Schema(description = "鍒涘缓浜�", example = "鑺嬮亾")
private String creator;
@Schema(description = "鍒涘缓浜哄悕绉�", example = "鑺嬮亾")
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderSaveReqVO.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderSaveReqVO.java
index 841f14a..ce7f420 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderSaveReqVO.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderSaveReqVO.java
@@ -44,6 +44,9 @@
@Schema(description = "澶囨敞", example = "浣犵寽")
private String remark;
+ @Schema(description = "闄勪欢 blobId 鍒楄〃", example = "[1, 2, 3]")
+ private List<Long> blobIds;
+
@Schema(description = "璁㈠崟娓呭崟鍒楄〃")
private List<Item> items;
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseRequestMapper.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseRequestMapper.java
index 9fbd884..0c989a6 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseRequestMapper.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseRequestMapper.java
@@ -37,6 +37,7 @@
.eqIfPresent(ErpPurchaseRequestDO::getRequestDeptId, pageReqVO.getRequestDeptId())
.eqIfPresent(ErpPurchaseRequestDO::getSupplierId, pageReqVO.getSupplierId())
.eqIfPresent(ErpPurchaseRequestDO::getStatus, pageReqVO.getStatus())
+ .eqIfPresent(ErpPurchaseRequestDO::getInStatus, pageReqVO.getInStatus())
.betweenIfPresent(ErpPurchaseRequestDO::getRequestTime, pageReqVO.getRequestTime())
.orderByDesc(ErpPurchaseRequestDO::getId));
}
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java
index e4c6b89..61b2c53 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java
@@ -12,6 +12,7 @@
import cn.iocoder.yudao.module.erp.dal.redis.no.ErpNoRedisDAO;
import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus;
import cn.iocoder.yudao.module.erp.service.purchase.ErpSupplierService;
+import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
@@ -52,6 +53,9 @@
@Resource
private AdminUserApi adminUserApi;
+ @Resource
+ private StorageAttachmentApi storageAttachmentApi;
+
@Override
@Transactional(rollbackFor = Exception.class)
public Long createFinancePayment(ErpFinancePaymentSaveReqVO createReqVO) {
@@ -82,6 +86,10 @@
// 2.2 鎻掑叆浠樻鍗曢」
paymentItems.forEach(o -> o.setPaymentId(payment.getId()));
financePaymentItemMapper.insertBatch(paymentItems);
+
+ // 2.3 缁戝畾闄勪欢
+ storageAttachmentApi.bindAttachments("file", "erp_finance_payment",
+ payment.getId(), createReqVO.getBlobIds());
// 3. 鏇存柊閲囪喘鍏ュ簱銆侀��璐х殑浠樻閲戦鎯呭喌
updatePurchasePrice(paymentItems);
@@ -116,6 +124,12 @@
financePaymentMapper.updateById(updateObj);
// 2.2 鏇存柊浠樻鍗曢」
updateFinancePaymentItemList(updateReqVO.getId(), paymentItems);
+ // 2.3 鏇存柊闄勪欢
+ if (updateReqVO.getBlobIds() != null) {
+ storageAttachmentApi.deleteAttachmentsByRecord("erp_finance_payment", updateReqVO.getId());
+ storageAttachmentApi.bindAttachments("file", "erp_finance_payment",
+ updateReqVO.getId(), updateReqVO.getBlobIds());
+ }
}
private void calculateTotalPrice(ErpFinancePaymentDO payment, List<ErpFinancePaymentItemDO> paymentItems) {
@@ -193,9 +207,11 @@
// 2. 閬嶅巻鍒犻櫎锛屽苟璁板綍鎿嶄綔鏃ュ織
payments.forEach(payment -> {
- // 2.1 鍒犻櫎浠樻鍗�
+ // 2.1 鍒犻櫎闄勪欢
+ storageAttachmentApi.deleteAttachmentsByRecord("erp_finance_payment", payment.getId());
+ // 2.2 鍒犻櫎浠樻鍗�
financePaymentMapper.deleteById(payment.getId());
- // 2.2 鍒犻櫎浠樻鍗曢」
+ // 2.3 鍒犻櫎浠樻鍗曢」
List<ErpFinancePaymentItemDO> paymentItems = financePaymentItemMapper.selectListByPaymentId(payment.getId());
financePaymentItemMapper.deleteByIds(convertSet(paymentItems, ErpFinancePaymentItemDO::getId));
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinanceReceiptServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinanceReceiptServiceImpl.java
index 7c84c15..9ed875a 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinanceReceiptServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinanceReceiptServiceImpl.java
@@ -12,6 +12,7 @@
import cn.iocoder.yudao.module.erp.dal.mysql.finance.ErpFinanceReceiptMapper;
import cn.iocoder.yudao.module.erp.dal.redis.no.ErpNoRedisDAO;
import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus;
+import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
@@ -52,6 +53,9 @@
@Resource
private AdminUserApi adminUserApi;
+ @Resource
+ private StorageAttachmentApi storageAttachmentApi;
+
@Override
@Transactional(rollbackFor = Exception.class)
public Long createFinanceReceipt(ErpFinanceReceiptSaveReqVO createReqVO) {
@@ -82,6 +86,10 @@
// 2.2 鎻掑叆鏀舵鍗曢」
receiptItems.forEach(o -> o.setReceiptId(receipt.getId()));
financeReceiptItemMapper.insertBatch(receiptItems);
+
+ // 2.3 缁戝畾闄勪欢
+ storageAttachmentApi.bindAttachments("file", "erp_finance_receipt",
+ receipt.getId(), createReqVO.getBlobIds());
// 3. 鏇存柊閿�鍞嚭搴撱�侀��璐х殑鏀舵閲戦鎯呭喌
updateSalePrice(receiptItems);
@@ -116,6 +124,12 @@
financeReceiptMapper.updateById(updateObj);
// 2.2 鏇存柊鏀舵鍗曢」
updateFinanceReceiptItemList(updateReqVO.getId(), receiptItems);
+ // 2.3 鏇存柊闄勪欢
+ if (updateReqVO.getBlobIds() != null) {
+ storageAttachmentApi.deleteAttachmentsByRecord("erp_finance_receipt", updateReqVO.getId());
+ storageAttachmentApi.bindAttachments("file", "erp_finance_receipt",
+ updateReqVO.getId(), updateReqVO.getBlobIds());
+ }
}
private void calculateTotalPrice(ErpFinanceReceiptDO receipt, List<ErpFinanceReceiptItemDO> receiptItems) {
@@ -196,9 +210,11 @@
// 2. 閬嶅巻鍒犻櫎锛屽苟璁板綍鎿嶄綔鏃ュ織
receipts.forEach(receipt -> {
- // 2.1 鍒犻櫎鏀舵鍗�
+ // 2.1 鍒犻櫎闄勪欢
+ storageAttachmentApi.deleteAttachmentsByRecord("erp_finance_receipt", receipt.getId());
+ // 2.2 鍒犻櫎鏀舵鍗�
financeReceiptMapper.deleteById(receipt.getId());
- // 2.2 鍒犻櫎鏀舵鍗曢」
+ // 2.3 鍒犻櫎鏀舵鍗曢」
List<ErpFinanceReceiptItemDO> receiptItems = financeReceiptItemMapper.selectListByReceiptId(receipt.getId());
financeReceiptItemMapper.deleteByIds(convertSet(receiptItems, ErpFinanceReceiptItemDO::getId));
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java
index 7e24cea..cb939a8 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java
@@ -27,6 +27,7 @@
import cn.iocoder.yudao.module.erp.enums.ErpPurchaseOrderInStatusEnum;
import cn.iocoder.yudao.module.erp.service.finance.ErpAccountService;
import cn.iocoder.yudao.module.mes.api.arrivalnotice.MesArrivalNoticeApi;
+import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.repository.ProcessDefinition;
@@ -86,6 +87,9 @@
@Resource
private ErpPurchaseRequestMapper purchaseRequestMapper;
+ @Resource
+ private StorageAttachmentApi storageAttachmentApi;
+
@Override
@Transactional(rollbackFor = Exception.class)
public Long createPurchaseOrder(ErpPurchaseOrderSaveReqVO createReqVO) {
@@ -112,6 +116,9 @@
// 2.2 鎻掑叆璁㈠崟椤�
purchaseOrderItems.forEach(o -> o.setOrderId(purchaseOrder.getId()));
purchaseOrderItemMapper.insertBatch(purchaseOrderItems);
+ // 2.3 缁戝畾闄勪欢
+ storageAttachmentApi.bindAttachments("file", "erp_purchase_order",
+ purchaseOrder.getId(), createReqVO.getBlobIds());
return purchaseOrder.getId();
}
@@ -139,6 +146,12 @@
purchaseOrderMapper.updateById(updateObj);
// 2.2 鏇存柊璁㈠崟椤�
updatePurchaseOrderItemList(updateReqVO.getId(), purchaseOrderItems);
+ // 2.3 鏇存柊闄勪欢
+ if (updateReqVO.getBlobIds() != null) {
+ storageAttachmentApi.deleteAttachmentsByRecord("erp_purchase_order", updateReqVO.getId());
+ storageAttachmentApi.bindAttachments("file", "erp_purchase_order",
+ updateReqVO.getId(), updateReqVO.getBlobIds());
+ }
}
private void calculateTotalPrice(ErpPurchaseOrderDO purchaseOrder, List<ErpPurchaseOrderItemDO> purchaseOrderItems) {
@@ -374,7 +387,11 @@
// 2. 閬嶅巻鍒犻櫎
purchaseOrders.forEach(purchaseOrder -> {
+ // 2.1 鍒犻櫎闄勪欢
+ storageAttachmentApi.deleteAttachmentsByRecord("erp_purchase_order", purchaseOrder.getId());
+ // 2.2 鍒犻櫎璁㈠崟
purchaseOrderMapper.deleteById(purchaseOrder.getId());
+ // 2.3 鍒犻櫎璁㈠崟椤�
purchaseOrderItemMapper.deleteByOrderId(purchaseOrder.getId());
});
}
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java
index f12da1b..50e8bb6 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java
@@ -25,6 +25,7 @@
import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus;
import cn.iocoder.yudao.module.erp.enums.ErpPurchaseRequestStatusEnum;
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
+import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import jakarta.annotation.Resource;
@@ -81,6 +82,8 @@
private AdminUserApi adminUserApi;
@Resource
private DeptApi deptApi;
+ @Resource
+ private StorageAttachmentApi storageAttachmentApi;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -111,7 +114,11 @@
calculateTotalPrice(purchaseRequest, requestItems);
purchaseRequestMapper.insert(purchaseRequest);
- // 6. 鎻掑叆鐢宠鏄庣粏
+ // 6. 缁戝畾闄勪欢
+ storageAttachmentApi.bindAttachments("file", "erp_purchase_request",
+ purchaseRequest.getId(), createReqVO.getBlobIds());
+
+ // 7. 鎻掑叆鐢宠鏄庣粏
requestItems.forEach(o -> o.setRequestId(purchaseRequest.getId()));
purchaseRequestItemMapper.insertBatch(requestItems);
@@ -137,6 +144,13 @@
// 5. 鏇存柊鐢宠鏄庣粏
updatePurchaseRequestItemList(updateReqVO.getId(), requestItems);
+
+ // 6. 鏇存柊闄勪欢
+ if (updateReqVO.getBlobIds() != null) {
+ storageAttachmentApi.deleteAttachmentsByRecord("erp_purchase_request", updateReqVO.getId());
+ storageAttachmentApi.bindAttachments("file", "erp_purchase_request",
+ updateReqVO.getId(), updateReqVO.getBlobIds());
+ }
}
private void calculateTotalPrice(ErpPurchaseRequestDO purchaseRequest, List<ErpPurchaseRequestItemDO> requestItems) {
@@ -195,6 +209,7 @@
});
purchaseRequests.forEach(purchaseRequest -> {
+ storageAttachmentApi.deleteAttachmentsByRecord("erp_purchase_request", purchaseRequest.getId());
purchaseRequestMapper.deleteById(purchaseRequest.getId());
purchaseRequestItemMapper.deleteByRequestId(purchaseRequest.getId());
});
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java
index a9ad090..42ab39c 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java
@@ -21,6 +21,7 @@
import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
import cn.iocoder.yudao.module.mes.api.mps.MesProMpsApi;
import cn.iocoder.yudao.module.mes.api.mps.dto.MesProMpsCreateReqDTO;
+import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@@ -73,6 +74,9 @@
@Resource
private MesProMpsApi mpsApi;
+ @Resource
+ private StorageAttachmentApi storageAttachmentApi;
+
@Override
@Transactional(rollbackFor = Exception.class)
public Long createSaleOrder(ErpSaleOrderSaveReqVO createReqVO) {
@@ -103,6 +107,9 @@
// 2.2 鎻掑叆璁㈠崟椤�
saleOrderItems.forEach(o -> o.setOrderId(saleOrder.getId()));
saleOrderItemMapper.insertBatch(saleOrderItems);
+ // 2.3 缁戝畾闄勪欢
+ storageAttachmentApi.bindAttachments("file", "erp_sale_order",
+ saleOrder.getId(), createReqVO.getBlobIds());
return saleOrder.getId();
}
@@ -133,6 +140,12 @@
saleOrderMapper.updateById(updateObj);
// 2.2 鏇存柊璁㈠崟椤�
updateSaleOrderItemList(updateReqVO.getId(), saleOrderItems);
+ // 2.3 鏇存柊闄勪欢
+ if (updateReqVO.getBlobIds() != null) {
+ storageAttachmentApi.deleteAttachmentsByRecord("erp_sale_order", updateReqVO.getId());
+ storageAttachmentApi.bindAttachments("file", "erp_sale_order",
+ updateReqVO.getId(), updateReqVO.getBlobIds());
+ }
}
private void calculateTotalPrice(ErpSaleOrderDO saleOrder, List<ErpSaleOrderItemDO> saleOrderItems) {
@@ -370,9 +383,11 @@
// 2. 閬嶅巻鍒犻櫎锛屽苟璁板綍鎿嶄綔鏃ュ織
saleOrders.forEach(saleOrder -> {
- // 2.1 鍒犻櫎璁㈠崟
+ // 2.1 鍒犻櫎闄勪欢
+ storageAttachmentApi.deleteAttachmentsByRecord("erp_sale_order", saleOrder.getId());
+ // 2.2 鍒犻櫎璁㈠崟
saleOrderMapper.deleteById(saleOrder.getId());
- // 2.2 鍒犻櫎璁㈠崟椤�
+ // 2.3 鍒犻櫎璁㈠崟椤�
saleOrderItemMapper.deleteByOrderId(saleOrder.getId());
});
}
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java
index a707cf5..eff04b4 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java
@@ -13,13 +13,22 @@
import cn.iocoder.yudao.module.mes.dal.mysql.pro.mps.MesProMpsMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.pro.mps.MesProMpsMergeItemMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.pro.feedback.MesProFeedbackMapper;
+import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderMapper;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.feedback.MesProFeedbackDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProductBomDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProductDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProcessDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;
import cn.iocoder.yudao.module.mes.enums.pro.MesProMpsStatusEnum;
import cn.iocoder.yudao.module.mes.enums.pro.MesProFeedbackStatusEnum;
import cn.iocoder.yudao.module.mes.enums.pro.MesProWorkOrderSourceTypeEnum;
import cn.iocoder.yudao.module.mes.service.md.autocode.MesMdAutoCodeRecordService;
import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
+import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProductService;
+import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProcessService;
import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
+import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderProcessService;
+import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.process.MesProWorkOrderProcessSaveReqVO;
import cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@@ -30,9 +39,11 @@
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
@@ -66,6 +77,14 @@
private CrmCustomerApi customerApi;
@Resource
private MesProFeedbackMapper feedbackMapper;
+ @Resource
+ private MesProWorkOrderMapper workOrderMapper;
+ @Resource
+ private MesProRouteProductService routeProductService;
+ @Resource
+ private MesProRouteProcessService routeProcessService;
+ @Resource
+ private MesProWorkOrderProcessService workOrderProcessService;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -491,6 +510,20 @@
* 鏍规嵁 MPS 鍒涘缓鐢熶骇宸ュ崟
*/
private Long createWorkOrderFromMps(MesProMpsDO mps, BigDecimal quantity) {
+ // 1. 鏍¢獙浜у搧鏄惁瀛樺湪宸ヨ壓璺嚎
+ MesProRouteProductDO routeProduct = routeProductService.getRouteProductByItemId(mps.getProductId());
+ if (routeProduct == null) {
+ throw exception(PRO_ROUTE_NOT_EXISTS);
+ }
+ Long routeId = routeProduct.getRouteId();
+
+ // 2. 鏍¢獙宸ヨ壓璺嚎鏄惁鏈夊伐搴�
+ List<MesProRouteProcessDO> routeProcesses = routeProcessService.getRouteProcessListByRouteId(routeId);
+ if (CollUtil.isEmpty(routeProcesses)) {
+ throw exception(PRO_ROUTE_ENABLE_NO_PROCESS);
+ }
+
+ // 3. 鍒涘缓鐢熶骇宸ュ崟
MesProWorkOrderSaveReqVO workOrderReq = new MesProWorkOrderSaveReqVO();
workOrderReq.setCode(generateWorkOrderCode());
workOrderReq.setName("鐢熶骇宸ュ崟-" + mps.getCode());
@@ -505,7 +538,40 @@
Long workOrderId = workOrderService.createWorkOrder(workOrderReq);
- // 宸ュ崟鐩存帴纭涓哄凡纭鐘舵�侊紙璺宠繃鑽夌锛�
+ // 4. 鏇存柊宸ュ崟宸ヨ壓璺嚎
+ workOrderMapper.updateById(new MesProWorkOrderDO().setId(workOrderId).setRouteId(routeId));
+
+ // 5. 淇濆瓨宸ュ崟宸ュ簭锛堜粠宸ヨ壓璺嚎宸ュ簭甯﹀叆锛屽惈鎶曟枡BOM锛�
+ Map<Long, List<MesProRouteProductBomDO>> bomMap = routeProcessService.getRouteProcessBomMapByProductId(mps.getProductId());
+ List<MesProWorkOrderProcessSaveReqVO> processList = new ArrayList<>();
+ for (MesProRouteProcessDO rp : routeProcesses) {
+ MesProWorkOrderProcessSaveReqVO process = new MesProWorkOrderProcessSaveReqVO();
+ process.setWorkOrderId(workOrderId);
+ process.setProcessId(rp.getProcessId());
+ process.setSort(rp.getSort());
+ process.setKeyFlag(rp.getKeyFlag());
+ process.setCheckFlag(rp.getCheckFlag());
+ process.setBackflushFlag(rp.getBackflushFlag());
+ process.setOutputItemId(rp.getOutputItemId());
+ process.setColorCode(rp.getColorCode());
+ // 甯﹀叆宸ュ簭鎶曟枡BOM
+ List<MesProRouteProductBomDO> routeBomItems = bomMap != null ? bomMap.get(rp.getProcessId()) : null;
+ if (CollUtil.isNotEmpty(routeBomItems)) {
+ List<MesProWorkOrderProcessSaveReqVO.BomItem> bomItems = new ArrayList<>();
+ for (MesProRouteProductBomDO bomDO : routeBomItems) {
+ MesProWorkOrderProcessSaveReqVO.BomItem bomItem = new MesProWorkOrderProcessSaveReqVO.BomItem();
+ bomItem.setItemId(bomDO.getItemId());
+ bomItem.setQuantity(bomDO.getQuantity());
+ bomItem.setRemark(bomDO.getRemark());
+ bomItems.add(bomItem);
+ }
+ process.setBomItems(bomItems);
+ }
+ processList.add(process);
+ }
+ workOrderProcessService.batchSaveWorkOrderProcess(processList);
+
+ // 6. 宸ュ崟鐩存帴纭涓哄凡纭鐘舵��
workOrderService.confirmWorkOrder(workOrderId);
return workOrderId;
diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/enums/storage/StorageRecordTypeEnum.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/enums/storage/StorageRecordTypeEnum.java
index 07dd94e..1a7e647 100644
--- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/enums/storage/StorageRecordTypeEnum.java
+++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/enums/storage/StorageRecordTypeEnum.java
@@ -30,7 +30,31 @@
NOTICE("notice", "閫氱煡鍏憡"),
// ===== 澶村儚 =====
- AVATAR("avatar", "澶村儚");
+ AVATAR("avatar", "澶村儚"),
+
+ // ===== ERP 閲囪喘 =====
+ ERP_PURCHASE_REQUEST("erp_purchase_request", "ERP 閲囪喘鐢宠"),
+ ERP_PURCHASE_ORDER("erp_purchase_order", "ERP 閲囪喘璁㈠崟"),
+
+ // ===== ERP 閿�鍞� =====
+ ERP_SALE_ORDER("erp_sale_order", "ERP 閿�鍞鍗�"),
+
+ // ===== ERP 璐㈠姟 =====
+ ERP_FINANCE_RECEIPT("erp_finance_receipt", "ERP 鏀舵鍗�"),
+ ERP_FINANCE_PAYMENT("erp_finance_payment", "ERP 浠樻鍗�"),
+
+ // ===== CRM =====
+ CRM_SALE_QUOTATION("crm_sale_quotation", "CRM 閿�鍞姤浠峰崟"),
+ CRM_FOLLOW_UP_RECORD("crm_follow_up_record", "CRM 璺熻繘璁板綍"),
+
+ // ===== HRM =====
+ HRM_LEAVE_APPLICATION("hrm_leave_application", "HRM 璇峰亣鐢宠"),
+ HRM_TRANSFER_APPLICATION("hrm_transfer_application", "HRM 璋冨姩鐢宠"),
+ HRM_RESIGNATION_APPLICATION("hrm_resignation_application", "HRM 绂昏亴鐢宠"),
+ HRM_ATTENDANCE_EXCEPTION("hrm_attendance_exception", "HRM 鑰冨嫟寮傚父"),
+
+ // ===== MES =====
+ MES_PD_DOCUMENT("mes_pd_document", "MES 璁捐璧勬枡");
private final String type;
private final String description;
diff --git a/yudao-server/src/main/resources/application-test.yaml b/yudao-server/src/main/resources/application-test.yaml
index de24e07..fd03e38 100644
--- a/yudao-server/src/main/resources/application-test.yaml
+++ b/yudao-server/src/main/resources/application-test.yaml
@@ -264,7 +264,7 @@
miniprogram-state: developer # 璺宠浆灏忕▼搴忕被鍨嬶細寮�鍙戠増涓� 鈥渄eveloper鈥濓紱浣撻獙鐗堜负 鈥渢rial鈥濅负锛涙寮忕増涓� 鈥渇ormal鈥�
tencent-lbs-key: TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E # QQ 鍦板浘鐨勫瘑閽� https://lbs.qq.com/service/staticV2/staticGuide/staticDoc
storage: # 鏂囦欢涓婁紶閰嶇疆
- path: /data/uploads # 鏂囦欢瀛樺偍鏍圭洰褰�
+ path: /data/javaWork/mom/file # 鏂囦欢瀛樺偍鏍圭洰褰�
url-prefix: /admin-api/system/storage-blob # URL璺緞鍓嶇紑
domain: https://test.your-domain.com # 鍩熷悕鍓嶇紑锛堟寜瀹為檯鍩熷悕閰嶇疆锛�
expired: 120 # token杩囨湡鏃堕棿锛堝垎閽燂級
--
Gitblit v1.9.3