From 723daf8ee581889b7e4b2ff65d465a3f4628b7c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E8=8D=A3=E6=99=9F?= <9691125+pan-rongsheng@user.noreply.gitee.com> Date: Thu, 5 Feb 2026 16:49:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A7=94=E6=89=98=E5=8A=A0=E5=B7=A5=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=8E=A5=E5=8F=A3=E7=9B=B8=E5=85=B3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contractorder/enums/ErpConstants.java | 1 + .../EntrustOrderOrderController.java | 37 ++- .../vo/EntrustOrderDetailPageReqVO.java | 2 +- .../vo/EntrustOrderDetailRespVO.java | 42 ++- .../vo/EntrustOrderDetailSaveReqVO.java | 2 +- .../vo/EntrustOrderOrderPageReqVO.java | 6 + .../vo/EntrustOrderOrderRespVO.java | 9 +- .../vo/EntrustOrderOrderSaveReqVO.java | 5 +- .../PurchaseOrderController.java | 6 +- .../salesorder/SalesOrderController.java | 11 +- .../entrustorder/EntrustOrderOrderDO.java | 17 +- .../entrustorder/EntrustOrderOrderMapper.java | 2 +- .../EntrustOrderDetailServiceImpl.java | 105 ++++++- .../EntrustOrderOrderService.java | 9 + .../EntrustOrderOrderServiceImplImpl.java | 266 +++++++++++++++++- .../PurchaseOrderServiceImpl.java | 2 +- .../SalesOrderDetailServiceImpl.java | 124 ++++++-- .../salesorder/SalesOrderServiceImpl.java | 110 ++++---- .../admin/erp/vo/ErpOrderSaveReqVO.java | 5 +- .../admin/erp/vo/ErpOrderUpdateReqVO.java | 9 +- .../erp/service/erp/ErpOrderServiceImpl.java | 2 + 21 files changed, 629 insertions(+), 143 deletions(-) diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErpConstants.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErpConstants.java index 9fe15adb..e1d54b5d 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErpConstants.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErpConstants.java @@ -16,4 +16,5 @@ public class ErpConstants { public static final String SALES_DOCUMENT_REQUEST_FLAG_U = "U";//更新 public static final String SALES_DOCUMENT_REQUEST_FLAG_D = "D";//删除 public static final String SALES_DOCUMENT_REQUEST_FLAG_I = "I";//插入 + public static final String CONSTANTS_L = "L";//科目类别L } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/EntrustOrderOrderController.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/EntrustOrderOrderController.java index ae374398..7d950193 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/EntrustOrderOrderController.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/EntrustOrderOrderController.java @@ -51,15 +51,15 @@ public class EntrustOrderOrderController implements BusinessControllerMarker { private EntrustOrderOrderService entrustOrderOrderService; @PostMapping("/create") - @Operation(summary = "创建委托订单") - @PreAuthorize("@ss.hasPermission('bse:purchase-order:create')") + @Operation(summary = "创建委托订单")//process:order:list:OrderList:add + @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:create','process:order:list:OrderList:add')") public CommonResult createEntrustOrderOrder(@Valid @RequestBody EntrustOrderOrderSaveReqVO createReqVO) { return success(entrustOrderOrderService.createEntrustOrderOrder(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新委托订单") - @PreAuthorize("@ss.hasPermission('bse:purchase-order:update')") + @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:update','process:order:list:OrderList:edit')") public CommonResult updateEntrustOrderOrder(@Valid @RequestBody EntrustOrderOrderSaveReqVO updateReqVO) { entrustOrderOrderService.updateEntrustOrderOrder(updateReqVO); return success(true); @@ -68,7 +68,7 @@ public class EntrustOrderOrderController implements BusinessControllerMarker { @DeleteMapping("/delete") @Operation(summary = "删除委托订单") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('bse:purchase-order:delete')") + @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:delete','process:order:list:OrderList:delete')") public CommonResult deleteEntrustOrderOrder(@RequestParam("id") Long id) { entrustOrderOrderService.deleteEntrustOrderOrder(id); return success(true); @@ -77,7 +77,7 @@ public class EntrustOrderOrderController implements BusinessControllerMarker { @DeleteMapping("/delete-list") @Parameter(name = "ids", description = "编号", required = true) @Operation(summary = "批量删除委托订单") - @PreAuthorize("@ss.hasPermission('bse:purchase-order:delete')") + @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:delete','process:order:list:OrderList:delete')") public CommonResult deleteEntrustOrderOrderList(@RequestBody BatchDeleteReqVO req) { entrustOrderOrderService.deleteEntrustOrderOrderListByIds(req.getIds()); return success(true); @@ -86,25 +86,25 @@ public class EntrustOrderOrderController implements BusinessControllerMarker { @GetMapping("/get") @Operation(summary = "获得委托订单") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('bse:purchase-order:query')") + @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:query','process:order:list:OrderList:query','process:order:list:OrderList:detail')") public CommonResult getEntrustOrderOrder(@RequestParam("id") Long id) { EntrustOrderOrderDO EntrustOrderOrder = entrustOrderOrderService.getEntrustOrderOrder(id); EntrustOrderOrderRespVO bean = BeanUtils.toBean(EntrustOrderOrder, EntrustOrderOrderRespVO.class); if (bean != null) { - bean.setEntrustOrderDetails(entrustOrderOrderService.getEntrustOrderDetailListByOrderId(bean.getId())); + bean.setDetails(entrustOrderOrderService.getEntrustOrderDetailListByOrderId(bean.getId())); } return success(bean); } @GetMapping("/page") @Operation(summary = "获得委托订单分页") - @PreAuthorize("@ss.hasPermission('bse:purchase-order:query')") + @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:query','process:order:list:OrderList:query','process:order:list:OrderList:detail')") public CommonResult> getEntrustOrderOrderPage(@Valid EntrustOrderOrderPageReqVO pageReqVO) { PageResult pageResult = entrustOrderOrderService.getEntrustOrderOrderPage(pageReqVO); PageResult bean = BeanUtils.toBean(pageResult, EntrustOrderOrderRespVO.class); if (bean != null && !bean.getList().isEmpty()) { bean.getList().forEach(item -> { - item.setEntrustOrderDetails(entrustOrderOrderService.getEntrustOrderDetailListByOrderId(item.getId())); + item.setDetails(entrustOrderOrderService.getEntrustOrderDetailListByOrderId(item.getId())); }); } return success(bean); @@ -112,7 +112,7 @@ public class EntrustOrderOrderController implements BusinessControllerMarker { @GetMapping("/export-excel") @Operation(summary = "导出委托订单 Excel") - @PreAuthorize("@ss.hasPermission('bse:purchase-order:export')") + @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:export','process:order:list:OrderList:export')") @ApiAccessLog(operateType = EXPORT) public void exportEntrustOrderOrderExcel(@Valid EntrustOrderOrderPageReqVO pageReqVO, HttpServletResponse response) throws IOException { @@ -127,14 +127,14 @@ public class EntrustOrderOrderController implements BusinessControllerMarker { //关联订单 @PostMapping("/link-order") @Operation(summary = "关联订单") - @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:update','purchase:order:list:OrderList:edit')") + @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:update','process:order:list:OrderList:edit')") public CommonResult linkOrder(@RequestBody @Validated LinkOrderReqVO req) { return success(entrustOrderOrderService.linkOrder(req)); } @PostMapping("/order-by-order-id-and-type") @Operation(summary = "根据订单id和方式获取上或下游订单") - @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:query')") + @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:query','process:order:list:OrderList:query')") public CommonResult> getOrderByOrderIdAndType(@RequestBody DownOrUpOrderReqVO reqVO) { return success(entrustOrderOrderService.getOrderByOrderIdAndType(reqVO)); } @@ -142,7 +142,7 @@ public class EntrustOrderOrderController implements BusinessControllerMarker { @PostMapping("/bound-order") @Operation(summary = "获取已绑定的订单") - @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:query')") + @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:query','process:order:list:OrderList:query')") public CommonResult> boundOrder(@RequestBody DownOrUpOrderReqVO reqVO) { return success(entrustOrderOrderService.getBindOrderByOrder(reqVO)); } @@ -150,12 +150,19 @@ public class EntrustOrderOrderController implements BusinessControllerMarker { //关闭订单 @PostMapping("/close-order") @Operation(summary = "关闭订单") - @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:update')") + @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:update','process:order:list:OrderList:close')") public CommonResult closeOrder(@RequestBody List ids) { entrustOrderOrderService.closeOrder(ids); return success(true); } - //委托加工订单提交erp + //委托加工订单提交erp062 + @PostMapping("/submit-erp061") + @Operation(summary = "委托加工订单提交erp061") + @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:update','process:order:list:OrderList:edit')") + public CommonResult submitErp(@RequestParam("id") Long id) { + entrustOrderOrderService.submitErp061(id); + return success(true); + } } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderDetailPageReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderDetailPageReqVO.java index ec7b72b9..cf9e1e42 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderDetailPageReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderDetailPageReqVO.java @@ -57,7 +57,7 @@ public class EntrustOrderDetailPageReqVO extends PageParam { private LocalDateTime[] deliveryCargoEndDate; @Schema(description = "是否启用") - private Boolean isEnable; + private String isEnable; @Schema(description = "短文本") private String shortText; diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderDetailRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderDetailRespVO.java index 022cffcd..754d631d 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderDetailRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderDetailRespVO.java @@ -1,5 +1,6 @@ package com.zt.plat.module.contractorder.controller.admin.entrustorder.vo; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -47,18 +48,21 @@ public class EntrustOrderDetailRespVO { @Schema(description = "收货库位名称", example = "张三") @ExcelProperty("收货库位名称") private String receiveWarehouseName; - @Schema(description = "收货库位编码") @ExcelProperty("收货库位编码") private String receiveWarehouseNumber; - - @Schema(description = "物料名称", example = "赵六") - @ExcelProperty("物料名称") - private String materialName; - - @Schema(description = "物料编码") - @ExcelProperty("物料编码") - private String materialNumber; + @Schema(description = "发货物料名称", example = "张三") + @ExcelProperty("发货物料名称") + private String sendMaterialName; + @Schema(description = "发货物料编码", example = "李四") + @ExcelProperty("发货物料编码") + private String sendMaterialNumber; + @Schema(description = "收货物料名称", example = "王五") + @ExcelProperty("收货物料名称") + private String receiveMaterialName; + @Schema(description = "收货物料编码", example = "王五") + @ExcelProperty("收货物料编码") + private String receiveMaterialNumber; @Schema(description = "发货计量单位") @ExcelProperty("发货计量单位") @@ -85,7 +89,7 @@ public class EntrustOrderDetailRespVO { @Schema(description = "是否启用") @ExcelProperty("是否启用") - private Boolean isEnable; + private String isEnable; @Schema(description = "短文本") @ExcelProperty("短文本") @@ -125,19 +129,6 @@ public class EntrustOrderDetailRespVO { @Schema(description = "备注") @ExcelProperty("备注") private String remark; - @Schema(description = "收货物料编码") - @ExcelProperty("收货物料编码") - private String receiveMaterialNumber; - @Schema(description = "收货物料名称") - @ExcelProperty("收货物料名称") - private String receiveMaterialName; - @Schema(description = "发货物料编码") - @ExcelProperty("发货物料编码") - private String sendMaterialNumber; - @Schema(description = "发货物料名称") - @ExcelProperty("发货物料名称") - private String sendMaterialName; - @Schema(description = "税率") @ExcelProperty("税率") private BigDecimal taxRate; @@ -147,4 +138,9 @@ public class EntrustOrderDetailRespVO { @Schema(description = "行项目号") @ExcelProperty("行项目号") private Integer lineNumber; + + @Schema(description = "删除标识") + @ExcelProperty("删除标识") + private Boolean deleted; + } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderDetailSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderDetailSaveReqVO.java index e71129e6..fb3557da 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderDetailSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderDetailSaveReqVO.java @@ -64,7 +64,7 @@ public class EntrustOrderDetailSaveReqVO { private LocalDateTime deliveryCargoEndDate; @Schema(description = "是否启用") - private Boolean isEnable; + private String isEnable; @Schema(description = "短文本") private String shortText; diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderOrderPageReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderOrderPageReqVO.java index 48cb4c62..db20f377 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderOrderPageReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderOrderPageReqVO.java @@ -3,8 +3,11 @@ package com.zt.plat.module.contractorder.controller.admin.entrustorder.vo; import lombok.*; import io.swagger.v3.oas.annotations.media.Schema; import com.zt.plat.framework.common.pojo.PageParam; + import java.math.BigDecimal; + import org.springframework.format.annotation.DateTimeFormat; + import java.time.LocalDateTime; import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -125,4 +128,7 @@ public class EntrustOrderOrderPageReqVO extends PageParam { @Schema(description = "计量单位", example = "张三") private String unit; + @Schema(description = "物料类型", example = "张三") + private String mtrlTp; + } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderOrderRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderOrderRespVO.java index 713f364c..1b5a39a2 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderOrderRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderOrderRespVO.java @@ -28,6 +28,9 @@ public class EntrustOrderOrderRespVO { @Schema(description = "公司编码;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("公司编码;推送ERP(必须)") + private String cpNum; + @Schema(description = "公司名称;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("公司名称;推送ERP(必须)") private String cpName; @Schema(description = "客商编码;推送ERP(必须)", requiredMode = Schema.RequiredMode.REQUIRED) @@ -164,10 +167,12 @@ public class EntrustOrderOrderRespVO { @Schema(description = "委托加工订单明细") @ExcelProperty("委托加工订单明细") - private List entrustOrderDetails; + private List details; @ExcelProperty("计量单位") @Schema(description = "计量单位", example = "张三") private String unit; - + @ExcelProperty("物料类型") + @Schema(description = "物料类型", example = "张三") + private String mtrlTp; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderOrderSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderOrderSaveReqVO.java index f5c5f4fa..e96ce7ef 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderOrderSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/entrustorder/vo/EntrustOrderOrderSaveReqVO.java @@ -144,9 +144,12 @@ public class EntrustOrderOrderSaveReqVO { private LocalDateTime createTime; @Schema(description = "委托加工订单明细") - private List entrustOrderDetails; + private List details; @Schema(description = "计量单位", example = "张三") private String unit; + @Schema(description = "物料类型", example = "张三") + private String mtrlTp; + } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/PurchaseOrderController.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/PurchaseOrderController.java index 30575532..47814ca6 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/PurchaseOrderController.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/PurchaseOrderController.java @@ -146,10 +146,8 @@ public class PurchaseOrderController implements BusinessControllerMarker { @PostMapping("/submit-erp061") @Operation(summary = "推送ERP订单", description = "061')") @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:update','purchase:order:list:OrderList:edit')") - public CommonResult submitErp061(@RequestBody @Validated @NotEmpty(message = "采购订单id不能为空") List idsStr) { - List ids = idsStr.stream().map(Long::valueOf).toList(); - // todo 推送ERP订单 - return success(purchaseOrderService.submitErp061(ids)); + public CommonResult submitErp061(@RequestParam("id") String id) { + return success(purchaseOrderService.submitErp061(List.of(Long.valueOf(id)))); } @PostMapping("/submit-erp062") diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/SalesOrderController.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/SalesOrderController.java index 059ba315..3f1b8468 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/SalesOrderController.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/salesorder/SalesOrderController.java @@ -75,7 +75,7 @@ public class SalesOrderController implements BusinessControllerMarker { @DeleteMapping("/delete") @Operation(summary = "删除销售订单") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasAnyPermissions('base:sales-order:delete','sale:order:list:OrderList:delete')") + @PreAuthorize("@ss.hasAnyPermissions('base:sales-order:delete','sale:order:list:OrderList:delete')") public CommonResult deleteSalesOrder(@RequestParam("id") Long id) { salesOrderService.deleteSalesOrder(id); return success(true); @@ -108,7 +108,7 @@ public class SalesOrderController implements BusinessControllerMarker { @Operation(summary = "通过订单号获得销售订单") @Parameter(name = "orderNo", description = "订单号", required = true, example = "1024") @PreAuthorize("@ss.hasAnyPermissions('base:sales-order:query','sale:order:list:OrderList:query')") - public CommonResult getSalesOrderByNo(@RequestParam("orderNo") String orderNo) { + public CommonResult getSalesOrderByNo(@RequestParam("orderNo") String orderNo) { SalesOrderDO purchaseOrder = salesOrderService.getSalesOrderByOrderNo(orderNo); SalesOrderRespVO salesOrderRespVO = BeanUtils.toBean(purchaseOrder, SalesOrderRespVO.class); if (salesOrderRespVO == null) { @@ -147,9 +147,9 @@ public class SalesOrderController implements BusinessControllerMarker { //推送erp091 @PostMapping("/push-erp091") @Operation(summary = "推送erp091") - @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:update','sale:order:list:OrderList:edit')") - public CommonResult pushErp091(@RequestBody @Validated @NotEmpty(message = "销售订单id不能为空") List ids) { - ids.forEach(id -> salesOrderService.pushErp091(id)); + @PreAuthorize("@ss.hasAnyPermissions('base:purchase-order:update','sale:order:list:OrderList:edit')") + public CommonResult pushErp091(@RequestParam("id") String id) { + salesOrderService.pushErp091(id); return success(true); } @@ -209,6 +209,7 @@ public class SalesOrderController implements BusinessControllerMarker { salesOrderService.updateOrderStatusByIdOrOrderNo(req); return success(true); } + //feign测试 @GetMapping("/get-sales-order-details-by-order-id") public CommonResult getSalesOrderDetailsByOrderId(@RequestParam("orderId") Long orderId) { diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/entrustorder/EntrustOrderOrderDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/entrustorder/EntrustOrderOrderDO.java index e0ae7594..34db2567 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/entrustorder/EntrustOrderOrderDO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/entrustorder/EntrustOrderOrderDO.java @@ -45,10 +45,16 @@ public class EntrustOrderOrderDO extends BusinessBaseDO { @TableField("SYS_ORD_NUM") private String systemOrderNumber; /** - * 公司编码;推送ERP(必须) - */ - @TableField("CPN_NUM") + * 公司名称 + */ + @TableField("CPN_NAME") private String cpName; + /** + * 公司编码;推送ERP(必须) + */ + @TableField("CPN_NUM") + private String cpNum; + /** * 客商编码;推送ERP(必须) */ @@ -219,4 +225,9 @@ public class EntrustOrderOrderDO extends BusinessBaseDO { */ @TableField("UNT") private String unit; + /** + * 物料类型 + */ + @TableField("MTRL_TP") + private String mtrlTp; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/entrustorder/EntrustOrderOrderMapper.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/entrustorder/EntrustOrderOrderMapper.java index 4f49bb3c..1724eff6 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/entrustorder/EntrustOrderOrderMapper.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/entrustorder/EntrustOrderOrderMapper.java @@ -45,7 +45,7 @@ public interface EntrustOrderOrderMapper extends BaseMapperX ids) { + public void deleteEntrustOrderDetailListByIds(List ids) { // 校验存在 validateEntrustOrderDetailExists(ids); + //提交erp + submitToErp062(ids); // 删除 entrustOrderDetailMapper.deleteByIds(ids); + } + + private void submitToErp062(List ids) { + //查询订单明细 + List entrustOrderDetails = entrustOrderDetailMapper.selectByIds(ids); + if (CollUtil.isEmpty(entrustOrderDetails)) { + log.warn("提交订单明细到erp,订单明细为空,订单明细ID:{}", ids); + return; } + log.info("提交订单明细到erp,订单明细:{}", entrustOrderDetails); + //查询主订单 + EntrustOrderOrderDO entrustOrderOrderDO = SpringUtils.getBean(EntrustOrderOrderMapper.class).selectById(entrustOrderDetails.get(0).getOrderId()); + if (entrustOrderOrderDO == null) { + log.warn("提交订单明细到erp,主订单为空,订单明细ID:{}", ids); + return; + } + log.info("提交订单明细到erp,主订单:{}", entrustOrderOrderDO); + ErpOrderUpdateReqVO erpOrderUpdateReqVO = new ErpOrderUpdateReqVO(); + buildErp062Data(erpOrderUpdateReqVO, entrustOrderOrderDO, entrustOrderDetails); + } + private void buildErp062Data(ErpOrderUpdateReqVO erpOrderUpdateReqVO, EntrustOrderOrderDO order, List entrustOrderDetailList) { + erpOrderUpdateReqVO + .setPoNumber(order.getOrderSAPNumber()) + .setDeleteInd(order.getDeleted() ? "1" : null) + .setCurrency(order.getCurrencyNumber()) + .setExchRate(order.getExchangeRate()); + //exte + erpOrderUpdateReqVO + .setZzhth(order.getPaperContractNumber()) + .setZxxyh(order.getAgreementNumber()) + .setZnote(order.getRemark()) + .setZlifnr(order.getAgreementNumber()); + //item + List items = new ArrayList<>(); + List comps = new ArrayList<>(); + AtomicReference index= new AtomicReference<>(0); + entrustOrderDetailList.forEach(detail -> { + index.getAndSet(index.get() + 1); + ErpOrderUpdateReqVO.item item = new ErpOrderUpdateReqVO.item(); // item + item.setPo_item(Long.valueOf(detail.getLineNumber()));//行号 + item.setMaterial(getMtrlZhongtongCode(detail.getSendMaterialNumber()));//物料号 + item.setPlant(detail.getReceiveFactoryNumber());//工厂 + item.setStge_loc(detail.getReceiveWarehouseNumber());//库位 + item.setQuantity(String.valueOf(detail.getForecastQuantity()));// 数量 + item.setPo_unit(detail.getSendUnit());// 计量单位 + item.setNet_price(detail.getInTaxUnitPrice());// 含税单价 + item.setTax_code(detail.getTaxNumber());//税码 + item.setItem_cat(CONSTANTS_L);//科目分配类别 + item.setMatl_group(detail.getMaterialGroup());//物料组 + item.setShort_text(detail.getShortText());//短文本 + item.setDelete_ind(detail.getDeleted() ? "1" : null);//行项目删除标识 + items.add(item); + + ErpOrderUpdateReqVO.comp comp = new ErpOrderUpdateReqVO.comp(); + comp.setPo_item(Long.valueOf(detail.getLineNumber())); + comp.setSched_line(index.get()); // 计划行号 -> 计划行号(保持一致) + comp.setItem_no(index.get()); // 项目编号 -> 项目编号 + comp.setMaterial(detail.getSendMaterialNumber()); // 物料号 -> 物料号 + comp.setPlant(detail.getReceiveFactoryNumber()); // 收货工厂 -> 收货工厂 + comp.setEntry_quantity(detail.getForecastQuantity()); // 委托加工需求数量 -> 委托加工需求数量 + comp.setEntry_uom(detail.getSendUnit()); // 组件计量单位 -> 组件计量单位 + comps.add(comp); + }); + erpOrderUpdateReqVO.setItems(items); + //comp + erpOrderUpdateReqVO.setComps(comps); + + } private void validateEntrustOrderDetailExists(List ids) { List list = entrustOrderDetailMapper.selectByIds(ids); @@ -112,7 +193,25 @@ public class EntrustOrderDetailServiceImpl implements EntrustOrderDetailService @Override public void deleteEntrustOrderDetailByOrderId(List orderId) { - entrustOrderDetailMapper.delete(EntrustOrderDetailDO::getOrderId,orderId); + entrustOrderDetailMapper.delete(EntrustOrderDetailDO::getOrderId, orderId); } + public String getMtrlZhongtongCode(String materialNumber) { + MaterialInfomationPageReqDTO infomationPageReqDTO = new MaterialInfomationPageReqDTO(); + infomationPageReqDTO.setPageSize(10000); + infomationPageReqDTO.setCode(materialNumber); + CommonResult> materialInfomationPage = SpringUtils.getBean(MaterialInfomationApi.class).getMaterialInfomationPage(infomationPageReqDTO); + if (materialInfomationPage.getData() == null || materialInfomationPage.getData().getList().isEmpty()) { + throw exception(MTRL_CODE_NOT_EXISTS); + + } + MaterialInfomationRespDTO materialInfomationRespDTO = materialInfomationPage.getData().getList().get(0); + Map flatAttributes = materialInfomationRespDTO.getFlatAttributes(); + //获取中铜物料编码 + String mtrlZhongtongCode = flatAttributes.getOrDefault("mtrlZhongtongCode", "").toString(); + if (mtrlZhongtongCode.isEmpty()) { + throw exception(MTRL_CODE_NOT_EXISTS); + } + return mtrlZhongtongCode; + } } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/entrustorder/EntrustOrderOrderService.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/entrustorder/EntrustOrderOrderService.java index 0013c9dc..a84999ee 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/entrustorder/EntrustOrderOrderService.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/entrustorder/EntrustOrderOrderService.java @@ -93,4 +93,13 @@ public interface EntrustOrderOrderService { void closeOrder(List ids); List getEntrustOrderDetailListByOrderId(Long id); + + void submitErp061(Long id); + /** + * 提交erp062 + * + * @param id 编号 + */ + void submitErpUpdate062(Long id); + } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/entrustorder/EntrustOrderOrderServiceImplImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/entrustorder/EntrustOrderOrderServiceImplImpl.java index af88655b..dd6c5cc2 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/entrustorder/EntrustOrderOrderServiceImplImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/entrustorder/EntrustOrderOrderServiceImplImpl.java @@ -1,8 +1,13 @@ package com.zt.plat.module.contractorder.service.entrustorder; import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.zt.plat.framework.common.pojo.CommonResult; +import com.zt.plat.module.base.api.materialinfomation.MaterialInfomationApi; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationPageReqDTO; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationRespDTO; import com.zt.plat.module.contractorder.api.vo.contract.ContractRespVO; import com.zt.plat.module.contractorder.controller.admin.entrustorder.vo.EntrustOrderDetailRespVO; import com.zt.plat.module.contractorder.controller.admin.entrustorder.vo.EntrustOrderOrderPageReqVO; @@ -14,29 +19,35 @@ import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.LinkOr import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.PurchaseOrderRespVO; import com.zt.plat.module.contractorder.dal.dataobject.contract.SystemRelativityDO; import com.zt.plat.module.contractorder.dal.dataobject.entrustorder.EntrustOrderOrderDO; -import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO; import com.zt.plat.module.contractorder.dal.mysql.contract.SystemRelativityMapper; -import com.zt.plat.module.contractorder.dal.mysql.entrustorder.EntrustOrderDetailMapper; import com.zt.plat.module.contractorder.dal.mysql.entrustorder.EntrustOrderOrderMapper; import com.zt.plat.module.contractorder.enums.contract.DictEnum; import com.zt.plat.module.contractorder.enums.purchaseorder.OrderStatusEnum; import com.zt.plat.module.contractorder.service.contract.ContractService; +import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderSaveReqVO; +import com.zt.plat.module.erp.controller.admin.erp.vo.ErpOrderUpdateReqVO; +import com.zt.plat.module.erp.service.erp.ErpOrderService; import com.zt.plat.module.system.api.sequence.SequenceApi; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; +import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.concurrent.atomic.AtomicReference; import com.zt.plat.framework.common.pojo.PageResult; -import com.zt.plat.framework.common.pojo.PageParam; import com.zt.plat.framework.common.util.object.BeanUtils; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.module.contractorder.enums.ErpConstants.CONSTANTS_L; import static com.zt.plat.module.contractorder.enums.ErrorCodeConstants.CONTRACT_ORDER_EXISTS; +import static com.zt.plat.module.contractorder.enums.entrustorder.ErrorCodeConstants.ENTRUST_ORDER_DETAIL_NOT_EXISTS; import static com.zt.plat.module.contractorder.enums.entrustorder.ErrorCodeConstants.ENTRUST_ORDER_NOT_EXISTS; +import static com.zt.plat.module.contractorder.enums.purchaseorder.ErrorCodeConstants.MTRL_CODE_NOT_EXISTS; import static com.zt.plat.module.contractorder.enums.purchaseorder.ErrorCodeConstants.PURCHASE_ORDER_NOT_EXISTS; @@ -63,6 +74,11 @@ public class EntrustOrderOrderServiceImplImpl implements EntrustOrderOrderServic @Resource private ContractService contractService; + @Resource + private MaterialInfomationApi materialInfomationApi; + + @Resource + private ErpOrderService erpOrderService; @Override @Transactional(rollbackFor = Exception.class) @@ -75,10 +91,10 @@ public class EntrustOrderOrderServiceImplImpl implements EntrustOrderOrderServic entrustOrderOrderMapper.insert(entrustOrderOrder); EntrustOrderOrderRespVO bean = BeanUtils.toBean(entrustOrderOrder, EntrustOrderOrderRespVO.class); //批量插入委托加工订单明细 - if (createReqVO.getEntrustOrderDetails() != null && !createReqVO.getEntrustOrderDetails().isEmpty()) { - createReqVO.getEntrustOrderDetails().forEach(entrustOrderDetail -> entrustOrderDetail.setOrderId(entrustOrderOrder.getId())); - List entrustOrderDetailRespVOS = entrustOrderDetailService.insertBatchSomeColumn(createReqVO.getEntrustOrderDetails()); - bean.setEntrustOrderDetails(entrustOrderDetailRespVOS); + if (createReqVO.getDetails() != null && !createReqVO.getDetails().isEmpty()) { + createReqVO.getDetails().forEach(entrustOrderDetail -> entrustOrderDetail.setOrderId(entrustOrderOrder.getId())); + List entrustOrderDetailRespVOS = entrustOrderDetailService.insertBatchSomeColumn(createReqVO.getDetails()); + bean.setDetails(entrustOrderDetailRespVOS); } // 返回 return bean; @@ -97,14 +113,14 @@ public class EntrustOrderOrderServiceImplImpl implements EntrustOrderOrderServic // 更新 EntrustOrderOrderDO updateObj = BeanUtils.toBean(updateReqVO, EntrustOrderOrderDO.class); entrustOrderOrderMapper.updateById(updateObj); - if (updateReqVO.getEntrustOrderDetails() != null && !updateReqVO.getEntrustOrderDetails().isEmpty()) { + if (updateReqVO.getDetails() != null && !updateReqVO.getDetails().isEmpty()) { //如果明细ID为空(表示新增),则设置订单ID - updateReqVO.getEntrustOrderDetails().forEach(item -> { + updateReqVO.getDetails().forEach(item -> { if (item.getId() == null) { item.setOrderId(updateReqVO.getId()); } }); - entrustOrderDetailService.updateBatchSomeColumn(updateReqVO.getEntrustOrderDetails()); + entrustOrderDetailService.updateBatchSomeColumn(updateReqVO.getDetails()); } } @@ -241,4 +257,234 @@ public class EntrustOrderOrderServiceImplImpl implements EntrustOrderOrderServic return entrustOrderDetailService.getEntrustOrderDetailListByOrderId(id); } + @Override + public void submitErp061(Long id) { + //查询订单 + EntrustOrderOrderDO entrustOrderOrderDO = entrustOrderOrderMapper.selectById(id); + if (entrustOrderOrderDO == null) { + throw exception(ENTRUST_ORDER_NOT_EXISTS); + } + log.info("提交订单到ERP:【{}】,订单信息:【{}】", id, entrustOrderOrderDO); + List entrustOrderDetailListByOrderId = entrustOrderDetailService.getEntrustOrderDetailListByOrderId(id); + if (entrustOrderDetailListByOrderId == null || entrustOrderDetailListByOrderId.isEmpty()) { + throw exception(ENTRUST_ORDER_DETAIL_NOT_EXISTS); + } + log.info("提交订单到ERP:【{}】,订单明细信息:【{}】", id, entrustOrderDetailListByOrderId); + ErpOrderSaveReqVO erpOrderSaveReqVO = new ErpOrderSaveReqVO(); + //构建请求数据 + buildErp061Data(erpOrderSaveReqVO, entrustOrderOrderDO, entrustOrderDetailListByOrderId); + Long localOrderId = entrustOrderOrderDO.getId(); + String result = erpOrderService.submitOrderToErp061(erpOrderSaveReqVO); + log.info("提交订单到ERP:【{}】,结果:【{}】", id, result); + EntrustOrderOrderDO upVo = new EntrustOrderOrderDO(); + upVo.setId(localOrderId); + String erpId = null; // ERP订单号(PO_NUMBER) + try { + if (StringUtils.isNotBlank(result)) { + // 解析顶层JSON对象(原代码冗余解析问题修复) + JSONObject rootJson = JSONObject.parseObject(result); + String eResp = rootJson.getString("E_RESP"); + if (StringUtils.isNotBlank(eResp)) { + // 解析E_RESP为JSON对象,获取PO_NUMBER + JSONObject eRespJson = JSONObject.parseObject(eResp); + erpId = eRespJson.getString("PO_NUMBER"); + } + } + + // 3. 根据ERP订单号是否有效,设置本地订单更新属性 + if (StringUtils.isNotBlank(erpId)) { + // ERP返回有效订单号,更新为成功状态 + upVo.setOrderSAPNumber(erpId); + upVo.setCause("ERP提交成功,erpID为:" + erpId); + upVo.setErpStatus(OrderStatusEnum.FIND.getCode()); // 推送成功状态 + log.info("订单推送ERP成功,本地订单ID【{}】,ERP订单号【{}】,已更新本地状态", localOrderId, erpId); + } else { + upVo.setOrderSAPNumber(null); + upVo.setErpStatus(OrderStatusEnum.RLBK.getCode()); + upVo.setCause(result); + log.warn("订单推送ERP失败,本地订单ID【{}】,失败原因【{}】", localOrderId, result); + } + entrustOrderOrderMapper.updateById(upVo); + } catch (Exception e) { + upVo.setOrderSAPNumber(null); + upVo.setErpStatus(OrderStatusEnum.RLBK.getCode()); // 异常时强制置为失败状态 + upVo.setCause("ERP返回结果解析/处理异常:" + e.getMessage()); + // 异常时仍需更新数据库,保证订单状态一致性 + entrustOrderOrderMapper.updateById(upVo); + log.error("订单推送ERP发生异常,本地订单ID【{}】,异常信息如下", localOrderId, e); + } + } + + @Override + public void submitErpUpdate062(Long id) { + EntrustOrderOrderDO entrustOrderOrderDO = entrustOrderOrderMapper.selectById(id); + if (entrustOrderOrderDO == null) { + throw exception(ENTRUST_ORDER_NOT_EXISTS); + } + //获取订单明细 + List entrustOrderDetailList = entrustOrderDetailService.getEntrustOrderDetailListByOrderId(id); + if (entrustOrderDetailList == null || entrustOrderDetailList.isEmpty()) { + throw exception(ENTRUST_ORDER_DETAIL_NOT_EXISTS); + } + log.info("提交订单到ERP:【{}】,订单信息:【{}】", id, entrustOrderOrderDO); + log.info("提交订单到ERP:【{}】,订单明细信息:【{}】", id, entrustOrderDetailList); + ErpOrderUpdateReqVO erpOrderUpdateReqVO = new ErpOrderUpdateReqVO(); + buildErp062Data(erpOrderUpdateReqVO, entrustOrderOrderDO, entrustOrderDetailList); + String result = erpOrderService.submitOrderToErp062(erpOrderUpdateReqVO); + log.info("提交订单到ERP:【{}】,结果:【{}】", id, result); + } + + private void buildErp062Data(ErpOrderUpdateReqVO erpOrderUpdateReqVO, EntrustOrderOrderDO order, List entrustOrderDetailList) { + erpOrderUpdateReqVO + .setPoNumber(order.getOrderSAPNumber()) + .setDeleteInd(order.getDeleted() ? "1" : null) + .setCurrency(order.getCurrencyNumber()) + .setExchRate(order.getExchangeRate()); + //exte + erpOrderUpdateReqVO + .setZzhth(order.getPaperContractNumber()) + .setZxxyh(order.getAgreementNumber()) + .setZnote(order.getRemark()) + .setZlifnr(order.getAgreementNumber()); + //item + List items = new ArrayList<>(); + List comps = new ArrayList<>(); + AtomicReference index= new AtomicReference<>(0); + entrustOrderDetailList.forEach(detail -> { + index.getAndSet(index.get() + 1); + ErpOrderUpdateReqVO.item item = new ErpOrderUpdateReqVO.item(); // item + item.setPo_item(Long.valueOf(detail.getLineNumber()));//行号 + item.setMaterial(getMtrlZhongtongCode(detail.getSendMaterialNumber()));//物料号 + item.setPlant(detail.getReceiveFactoryNumber());//工厂 + item.setStge_loc(detail.getReceiveWarehouseNumber());//库位 + item.setQuantity(String.valueOf(detail.getForecastQuantity()));// 数量 + item.setPo_unit(detail.getSendUnit());// 计量单位 + item.setNet_price(detail.getInTaxUnitPrice());// 含税单价 + item.setTax_code(detail.getTaxNumber());//税码 + item.setItem_cat(CONSTANTS_L);//科目分配类别 + item.setMatl_group(detail.getMaterialGroup());//物料组 + item.setShort_text(detail.getShortText());//短文本 + item.setDelete_ind(detail.getDeleted() ? "1" : null);//行项目删除标识 + items.add(item); + + ErpOrderUpdateReqVO.comp comp = new ErpOrderUpdateReqVO.comp(); + comp.setPo_item(Long.valueOf(detail.getLineNumber())); + comp.setSched_line(index.get()); // 计划行号 -> 计划行号(保持一致) + comp.setItem_no(index.get()); // 项目编号 -> 项目编号 + comp.setMaterial(getMtrlZhongtongCode(detail.getSendMaterialNumber())); // 物料号 -> 物料号 + comp.setPlant(detail.getReceiveFactoryNumber()); // 收货工厂 -> 收货工厂 + comp.setEntry_quantity(detail.getForecastQuantity()); // 委托加工需求数量 -> 委托加工需求数量 + comp.setEntry_uom(detail.getSendUnit()); // 组件计量单位 -> 组件计量单位 + comps.add(comp); + }); + erpOrderUpdateReqVO.setItems(items); + //comp + erpOrderUpdateReqVO.setComps(comps); + + } + + private void buildErp061Data(ErpOrderSaveReqVO erpOrderSaveReqVO, EntrustOrderOrderDO order, List entrustOrderDetailList) { + //订单号 + erpOrderSaveReqVO.setOrderNo(order.getSystemOrderNumber()); + + // 1. 处理抬头信息(Head) + ErpOrderSaveReqVO.Head head = new ErpOrderSaveReqVO.Head(); + head.setComp_code(order.getCpName()); // 公司编码 -> 公司代码 + head.setVendor(order.getSupplierNumber()); // 客商编码 -> 供应商帐号 + head.setDoc_type(order.getType()); // 订单类型 -> 采购凭证类型 + head.setDoc_date(order.getVoucherDate() != null ? order.getVoucherDate().format(DateTimeFormatter.ofPattern("yyyyMMdd")) : null); // 凭证日期 -> 采购凭证日期 + head.setPurch_org(order.getPurchaseOrganizationCustomsDeclaration()); // 采购组织编码 -> 采购组织 + head.setPur_group(order.getPurchaseGroup()); // 采购组编码 -> 采购组 + head.setCurrency(order.getCurrencyNumber()); // 货币码 -> 货币码 + head.setExch_rate(order.getExchangeRate()); // 汇率 -> 汇率 + erpOrderSaveReqVO.setHead(head); + + // 2. 处理抬头扩展信息(Exte) + ErpOrderSaveReqVO.Exte exte = new ErpOrderSaveReqVO.Exte(); + exte.setZzhth(order.getPaperContractNumber()); // 合同纸质合同号 -> 纸质合同号 + exte.setZxxyh(order.getAgreementNumber()); // 小协议号 -> 小协议号 + exte.setZnote(order.getRemark()); // 备注 -> 备注 + exte.setZlifnr(order.getAgentNumber()); // 代理方编码 -> 代理方 + erpOrderSaveReqVO.setExte(exte); + //item + List items = new ArrayList<>(); + List itexes = new ArrayList<>(); + entrustOrderDetailList.forEach(detail -> { + ErpOrderSaveReqVO.Item item = new ErpOrderSaveReqVO.Item(); + item.setPo_item(detail.getLineNumber() != null ? detail.getLineNumber() : null); // 行项目 -> 行号 + item.setMaterial(getMtrlZhongtongCode(detail.getSendMaterialNumber())); // 物料编码 -> 物料号 + item.setPlant(detail.getReceiveFactoryNumber()); // 收货工厂编码 -> 工厂 + item.setStge_loc(detail.getReceiveWarehouseNumber()); // 收货库位编码 -> 库存地点 + item.setQuantity(detail.getForecastQuantity()); // 暂估数量 -> 数量 + item.setPo_unit(detail.getSendUnit()); // 计量单位 -> 计量单位 + item.setNet_price(detail.getInTaxUnitPrice()); // 含税单价 -> 含税单价 + item.setPrice_unit(detail.getInTaxUnitPrice() != null ? detail.getInTaxUnitPrice().intValue() : 1); // 价格单位 -> 价格单位 + item.setTax_code(detail.getTaxNumber()); // 税码 -> 税码 + // item.setGr_basediv(); // 是否基于GR的发票校验 -> 基于GR的发票校验 + //item.setUnlimited_dlv(detail.getIsUnlRcv()); // 是否允许无限制收货 -> 允许无限制过量交货 + //item.setBatch(detail.getBat()); // 批次 -> 批次 + item.setItem_cat(CONSTANTS_L); + item.setAcctasscat(detail.getAccountingItemAllocation()); // 科目分配类别 -> 科目分配类别 + item.setMatl_group(detail.getMaterialGroup()); // 物料组编码 -> 物料组 + item.setShort_text(detail.getShortText()); // 短文本 -> 短文本 + item.setRet_item(detail.getReturnItem()); // 退货标识 -> 退货项目标识 + item.setFree_item(detail.getFreeItem()); // 是否免费收货标识 -> 免费项目标识 + //item.setVendrbatch(String.valueOf(detail.getExternalLineNumber())); // 外部行项目号 -> 外部行项目号 +// item.setNote_xq(detail.getRemark()); // 备注信息-需求单位 -> 备注信息-需求单位 +// item.setNote_wl(detail.getRmkMtrl()); // 备注信息-物料详细 -> 备注信息-物料详细 + item.setGr_basediv("1");//TODO GR发票校验 + // 处理交货起止日期(格式:YYYYMMDD-YYYYMMDD) + StringBuilder vendMat = new StringBuilder(); + if (detail.getDeliveryCargoBeginDate() != null) { + vendMat.append(detail.getDeliveryCargoBeginDate().format(DateTimeFormatter.ofPattern("yyyyMMdd"))); + } + vendMat.append("-"); + if (detail.getDeliveryCargoEndDate() != null) { + vendMat.append(detail.getDeliveryCargoEndDate().format(DateTimeFormatter.ofPattern("yyyyMMdd"))); + } + item.setVend_mat(vendMat.toString()); + items.add(item); + + ErpOrderSaveReqVO.Itex itex = new ErpOrderSaveReqVO.Itex(); + itex.setPo_item(detail.getLineNumber() != null ? detail.getLineNumber() : null); + itex.setZmatnr(getMtrlZhongtongCode(detail.getSendMaterialNumber())); // 物料号 -> 销售物料号 +// itex.setZaufnr(detail.get()); // 统计型内部订单 -> 统计型内部订单 +// itex.setZpurty(detail.getPrchCtgr()); // 采购类别 -> 采购类别 +// itex.setZmenge(detail.getOrigWet()); // 原料湿重 -> 原料湿重 + itexes.add(itex); + + // 列表-comp + + ErpOrderSaveReqVO.Comp comp = new ErpOrderSaveReqVO.Comp(); + comp.setSched_line(detail.getLineNumber() != null ? detail.getLineNumber() : null); // 计划行号 -> 计划行号 + comp.setItem_no(detail.getLineNumber() != null ? detail.getLineNumber() : null); // 项目编号 -> 项目编号 + comp.setMaterial(getMtrlZhongtongCode(detail.getSendMaterialNumber())); // 物料号 -> 物料号 + comp.setPlant(detail.getReceiveFactoryNumber()); // 收货工厂 -> 收货工厂 + comp.setEntry_quantity(detail.getForecastQuantity()); // 委托加工需求数量 -> 委托加工需求数量 + comp.setEntry_uom(detail.getSendUnit()); // 组件计量单位 -> 组件计量单位 + }); + erpOrderSaveReqVO.setItems(items); + erpOrderSaveReqVO.setItex(itexes); + //列表-acct不需要委托订单不需要填写 + } + + public String getMtrlZhongtongCode(String materialNumber) { + MaterialInfomationPageReqDTO infomationPageReqDTO = new MaterialInfomationPageReqDTO(); + infomationPageReqDTO.setPageSize(10000); + infomationPageReqDTO.setCode(materialNumber); + CommonResult> materialInfomationPage = materialInfomationApi.getMaterialInfomationPage(infomationPageReqDTO); + if (materialInfomationPage.getData() == null || materialInfomationPage.getData().getList().isEmpty()) { + throw exception(MTRL_CODE_NOT_EXISTS); + + } + MaterialInfomationRespDTO materialInfomationRespDTO = materialInfomationPage.getData().getList().get(0); + Map flatAttributes = materialInfomationRespDTO.getFlatAttributes(); + //获取中铜物料编码 + String mtrlZhongtongCode = flatAttributes.getOrDefault("mtrlZhongtongCode", "").toString(); + if (mtrlZhongtongCode.isEmpty()) { + throw exception(MTRL_CODE_NOT_EXISTS); + } + return mtrlZhongtongCode; + } + } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java index d7e3516a..514fb610 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/purchaseorder/PurchaseOrderServiceImpl.java @@ -292,7 +292,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { head.setComp_code(order.getCpNum()); // 公司编码 -> 公司代码 head.setVendor(order.getSupplierNumber()); // 客商编码 -> 供应商帐号 head.setDoc_type(order.getType()); // 订单类型 -> 采购凭证类型 - head.setDoc_date(order.getVoucherDate() != null ? order.getVoucherDate().toLocalDate() : null); // 凭证日期 -> 采购凭证日期 + head.setDoc_date(order.getVoucherDate() != null ? order.getVoucherDate().format(DateTimeFormatter.ofPattern("yyyyMMdd")) : null); // 凭证日期 -> 采购凭证日期 head.setPurch_org(order.getPurchaseOrganizationCustomsDeclaration()); // 采购组织编码 -> 采购组织 head.setPur_group(order.getPurchaseGroup()); // 采购组编码 -> 采购组 head.setCurrency(order.getCurrencyNumber()); // 货币码 -> 货币码 diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderDetailServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderDetailServiceImpl.java index af3cef44..ebbb293d 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderDetailServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderDetailServiceImpl.java @@ -3,6 +3,7 @@ package com.zt.plat.module.contractorder.service.salesorder; import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONException; +import com.alibaba.fastjson2.JSONObject; import com.zt.plat.framework.common.exception.ErrorCode; import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.util.spring.SpringUtils; @@ -60,6 +61,7 @@ public class SalesOrderDetailServiceImpl implements SalesOrderDetailService { private BillMainApi billMainApi; @Resource private ElementService elementService; + @Override @Transactional public SalesOrderDetailRespVO createSalesOrderDetail(SalesOrderDetailSaveReqVO createReqVO) { @@ -79,12 +81,12 @@ public class SalesOrderDetailServiceImpl implements SalesOrderDetailService { return; } ElementDO elementBySymbol = elementService.getElementBySymbol(salesOrderDetail.getElementAbbreviation()); - if (elementBySymbol!=null){ - salesOrderDetail.setElementName(elementBySymbol.getName()); - salesOrderDetail.setElementNumber(elementBySymbol.getCoding()); - }else { - log.warn("元素编号【{}】不存在,订单号【{}】", salesOrderDetail.getElementAbbreviation(), salesOrderDetail.getOrderId()); - } + if (elementBySymbol != null) { + salesOrderDetail.setElementName(elementBySymbol.getName()); + salesOrderDetail.setElementNumber(elementBySymbol.getCoding()); + } else { + log.warn("元素编号【{}】不存在,订单号【{}】", salesOrderDetail.getElementAbbreviation(), salesOrderDetail.getOrderId()); + } } @@ -93,10 +95,23 @@ public class SalesOrderDetailServiceImpl implements SalesOrderDetailService { public List createSalesOrderDetail(List createReqVOS) { List salesOrderDetailDOS = BeanUtils.toBean(createReqVOS, SalesOrderDetailDO.class); salesOrderDetailDOS.forEach(salesOrderDetail -> { + // 设置物料信息 setElemInfo(salesOrderDetail); createReqVOS.forEach(createReqVO -> salesOrderDetail.setOrderId(Long.valueOf(createReqVO.getOrderId()))); + List jsonArrays = JSONArray.parseArray(salesOrderDetail.getPriceConditionDetail(), JSONArray.class); + for (JSONArray jsonArray : jsonArrays) { + for (int i = 0; i < jsonArray.size(); i++) { + // 解析单个JSON字符串为JSONObject + JSONObject jsonObject = JSONObject.parseObject(jsonArray.getString(i)); + // 添加updateflag字段 + jsonObject.put("flag", ErpConstants.SALES_DOCUMENT_REQUEST_FLAG_U); + // 将处理后的JSON对象转为字符串并加入strList + String processedJson = jsonObject.toString(); + log.info(jsonObject.toString()); + } + } + salesOrderDetail.setPriceConditionDetail(jsonArrays.toString()); }); - // 设置物料信息 salesOrderDetailMapper.insertBatch(salesOrderDetailDOS); return BeanUtils.toBean(salesOrderDetailDOS, SalesOrderDetailRespVO.class); @@ -113,9 +128,62 @@ public class SalesOrderDetailServiceImpl implements SalesOrderDetailService { @Override public void updateSalesOrderDetailList(List updateReqVO) { - salesOrderDetailMapper.insertOrUpdate(BeanUtils.toBean(updateReqVO, SalesOrderDetailDO.class)); - } + // 1. VO转DO + List beanList = BeanUtils.toBean(updateReqVO, SalesOrderDetailDO.class); + beanList.forEach(this::setElemInfo); + beanList.forEach(item -> { + String priceConditionDetail = item.getPriceConditionDetail(); + // 空值校验,避免空指针异常 + if (priceConditionDetail == null || priceConditionDetail.isEmpty()) { + return; + } + + // 2. 解析外层JSON数组(原逻辑是List,符合嵌套数组结构) + List outerJsonArrays = JSONArray.parseArray(priceConditionDetail, JSONArray.class); + if (item.getId() != null && !outerJsonArrays.isEmpty()) { + // 遍历外层数组 + for (int outerIdx = 0; outerIdx < outerJsonArrays.size(); outerIdx++) { + JSONArray innerJsonArray = outerJsonArrays.get(outerIdx); + if (innerJsonArray == null || innerJsonArray.isEmpty()) { + continue; + } + + // 3. 处理内层数组元素:过滤D,修改I为U + List processedElements = new ArrayList<>(); + for (int innerIdx = 0; innerIdx < innerJsonArray.size(); innerIdx++) { + String originalJsonStr = innerJsonArray.getString(innerIdx); + // 空JSON字符串校验 + if (originalJsonStr == null || originalJsonStr.isEmpty()) { + continue; + } + JSONObject jsonObject = JSONObject.parseObject(originalJsonStr); + String flag = jsonObject.getString("flag"); + + // 根据flag处理:D删除,I改U,其他保留(若有) + if (ErpConstants.SALES_DOCUMENT_REQUEST_FLAG_D.equals(flag)) { + // flag为D,跳过(即删除该元素) + continue; + } else if (ErpConstants.SALES_DOCUMENT_REQUEST_FLAG_I.equals(flag)) { + // flag为I,修改为U + jsonObject.put("flag", ErpConstants.SALES_DOCUMENT_REQUEST_FLAG_U); + processedElements.add(jsonObject); + } else { + // 其他情况(如已有U),保留原对象 + processedElements.add(jsonObject); + } + } + // 4. 替换内层数组为处理后的结果 + JSONArray newInnerJsonArray = JSONArray.parseArray(JSONArray.toJSONString(processedElements)); + outerJsonArrays.set(outerIdx, newInnerJsonArray); + } + } + // 5. 重新设置处理后的JSON字符串 + item.setPriceConditionDetail(outerJsonArrays.toString()); + }); + // 6. 批量插入/更新 + salesOrderDetailMapper.insertOrUpdate(beanList); + } @Override public void deleteSalesOrderDetail(Long id) { // 校验存在 @@ -137,12 +205,13 @@ public class SalesOrderDetailServiceImpl implements SalesOrderDetailService { // 删除 salesOrderDetailMapper.deleteByIds(ids); } + private void submitErpDelete092(List ids) { //删除订单明细提交erp log.info("开始处理ERP 092 删除订单明细:{}", ids); //根据订单明细查询订单 SalesOrderDO salesOrderDO = SpringUtils.getBean(SalesOrderMapper.class).selectById(ids.get(0)); - if(salesOrderDO.getOrderSAPNumber() == null){ + if (salesOrderDO.getOrderSAPNumber() == null) { log.warn("订单编号【{}】尚未提交erp", ids.get(0)); return; } @@ -152,6 +221,7 @@ public class SalesOrderDetailServiceImpl implements SalesOrderDetailService { String result = SpringUtils.getBean(ErpOrderService.class).submitOrderToErp092(salesDocumentRequestVO); log.info("ERP 092 删除订单明细结果:{}", result); } + public void buildSalesDocumentRequestData(SalesDocumentRequestVO salesDocumentRequestVO, SalesOrderDO salesOrderDO, List salesOrderDetailList) { //head-抬头 salesDocumentRequestVO.setSalesdocument(salesOrderDO.getOrderSAPNumber()); @@ -166,20 +236,20 @@ public class SalesOrderDetailServiceImpl implements SalesOrderDetailService { //item List items = new ArrayList<>(); salesOrderDetailList.forEach(salesOrderDetail -> { - MaterialInfomationPageReqDTO infomationPageReqDTO=new MaterialInfomationPageReqDTO(); + MaterialInfomationPageReqDTO infomationPageReqDTO = new MaterialInfomationPageReqDTO(); infomationPageReqDTO.setPageSize(10000); infomationPageReqDTO.setCode(salesOrderDetail.getMaterialNumber()); CommonResult> materialInfomationPage = SpringUtils.getBean(MaterialInfomationApi.class).getMaterialInfomationPage(infomationPageReqDTO); - if (materialInfomationPage.getData()==null || materialInfomationPage.getData().getList().isEmpty()){ - throw exception(MTRL_CODE_NOT_EXISTS); + if (materialInfomationPage.getData() == null || materialInfomationPage.getData().getList().isEmpty()) { + throw exception(MTRL_CODE_NOT_EXISTS); } MaterialInfomationRespDTO materialInfomationRespDTO = materialInfomationPage.getData().getList().get(0); Map flatAttributes = materialInfomationRespDTO.getFlatAttributes(); //获取中铜物料编码 String mtrlZhongtongCode = flatAttributes.getOrDefault("mtrlZhongtongCode", "").toString(); - if (mtrlZhongtongCode.isEmpty()){ - throw exception(MTRL_CODE_NOT_EXISTS); + if (mtrlZhongtongCode.isEmpty()) { + throw exception(MTRL_CODE_NOT_EXISTS); } SalesDocumentRequestVO.Item item = getItem(salesOrderDetail, mtrlZhongtongCode); items.add(item); @@ -191,13 +261,23 @@ public class SalesOrderDetailServiceImpl implements SalesOrderDetailService { return; // 空字符串直接跳过 } try { - // 解析 JSON 数组,捕获格式错误 - List strList = JSONArray.parseArray(priceConditionDetail, String.class); - if (salesOrderDetailRespVO.getId() != null){ - - }else { - + List strList = new ArrayList<>(); + // 解析 JSON 数组 + List jsonArrays = JSONArray.parseArray(priceConditionDetail, JSONArray.class); + if (salesOrderDetailRespVO.getId() != null) { + for (JSONArray jsonArray : jsonArrays) { + for (int i = 0; i < jsonArray.size(); i++) { + // 解析单个JSON字符串为JSONObject + JSONObject jsonObject = JSONObject.parseObject(jsonArray.getString(i)); + // 添加updateflag字段 + jsonObject.put("updateflag", ErpConstants.SALES_DOCUMENT_REQUEST_FLAG_D); + // 将处理后的JSON对象转为字符串并加入strList + String processedJson = jsonObject.toString(); + strList.add(processedJson); + } + } } + // 将处理后的JSON字符串列表合并到conds conds.addAll(strList); } catch (JSONException e) { // 处理解析失败(例如打日志、忽略错误数据等) @@ -221,6 +301,7 @@ public class SalesOrderDetailServiceImpl implements SalesOrderDetailService { item.setShip_point(salesOrderDetail.getShippingPlace());//装运地点 return item; } + private void validateBillMainCanDelete(List ids) { ids.forEach(id -> { CommonResult booleanCommonResult = billMainApi.notOffsetIsExistOrderDetailId(id); @@ -230,6 +311,7 @@ public class SalesOrderDetailServiceImpl implements SalesOrderDetailService { } }); } + private void validateSalesOrderDetailExists(List ids) { List list = salesOrderDetailMapper.selectByIds(ids); if (CollUtil.isEmpty(list) || list.size() != ids.size()) { diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java index 0c1bcad5..4c6e9d75 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/salesorder/SalesOrderServiceImpl.java @@ -176,8 +176,7 @@ public class SalesOrderServiceImpl implements SalesOrderService { @Override public SalesOrderDO getSalesOrder(Long id, String splyBsnTp) { - return salesOrderMapper.selectOne(new LambdaQueryWrapper().eq(SalesOrderDO::getId, id) - .eq(splyBsnTp != null && !splyBsnTp.isEmpty(), SalesOrderDO::getSplyBsnTp, splyBsnTp)); + return salesOrderMapper.selectOne(new LambdaQueryWrapper().eq(SalesOrderDO::getId, id).eq(splyBsnTp != null && !splyBsnTp.isEmpty(), SalesOrderDO::getSplyBsnTp, splyBsnTp)); } @Override @@ -302,15 +301,11 @@ public class SalesOrderServiceImpl implements SalesOrderService { log.info("ERP返回结果:{}", result); SalesOrderDO upVo = new SalesOrderDO(); upVo.setId(salesOrderDO.getId()); - if (result != null && !result.trim().isEmpty()) { + JSONObject rootObj = JSONObject.parseObject(result); + String flag = rootObj.getString("flag"); + if (result != null && !result.trim().isEmpty()&&"S".equals(flag)) { try { // ========== FastJSON2 核心解析 ========== - // 1. 解析顶层JSON对象 - JSONObject rootObj = JSONObject.parseObject(result); - - // 2. 提取顶层标识(S表示成功) - String flag = rootObj.getString("flag"); - // 3. 解析E_RESP String eRespStr = rootObj.getString("E_RESP"); String salesdocument = null; @@ -332,7 +327,7 @@ public class SalesOrderServiceImpl implements SalesOrderService { } // 5. 业务成功/失败判断 - if ("S".equals(flag) && salesdocument != null && !salesdocument.isEmpty()) { + if (salesdocument != null && !salesdocument.isEmpty()) { // 成功:更新为FIND状态 upVo.setErpStatus(OrderStatusEnum.FIND.getCode()); upVo.setCause("ERP订单提交成功,SAP单号:" + salesdocument); @@ -361,9 +356,8 @@ public class SalesOrderServiceImpl implements SalesOrderService { upVo.setCause("解析ERP返回结果失败:" + e.getMessage()); } } else { - // result为空的情况 upVo.setErpStatus(OrderStatusEnum.RLBK.getCode()); - upVo.setCause("ERP返回结果为空"); + upVo.setCause(rootObj.toString().isBlank()?"ERP返回结果为空":rootObj.toString()); } // 执行数据库更新 salesOrderMapper.updateById(upVo); @@ -501,10 +495,7 @@ public class SalesOrderServiceImpl implements SalesOrderService { List taskList = bpmTaskApi.getTaskListByProcessInstanceId(salesOrderDO.getProcessInstanceId()).getData(); // 筛选出当前待处理的任务(未结束的任务) - BpmTaskRespDTO undoTask = taskList.stream() - .filter(task -> task.getEndTime() == null) - .findFirst() - .orElse(null); + BpmTaskRespDTO undoTask = taskList.stream().filter(task -> task.getEndTime() == null).findFirst().orElse(null); if (ObjectUtils.isEmpty(undoTask)) { throw new RuntimeException("未找到待审批的任务节点"); @@ -586,17 +577,16 @@ public class SalesOrderServiceImpl implements SalesOrderService { List salesOrderDOS = salesOrderMapper.selectList(new LambdaQueryWrapper().eq(SalesOrderDO::getContractNumber, systemContractNumber)); salesOrderDOS.forEach(p -> { - DownOrUpOrderRespVO downOrUpOrderRespVO = new DownOrUpOrderRespVO(); - downOrUpOrderRespVO.setOrderId(String.valueOf(p.getId())); - downOrUpOrderRespVO.setOrderNo(p.getSystemOrderNumber()); - downOrUpOrderRespVO.setOrderType(reqVO.getOrderType()); - downOrUpOrderRespVO.setContractId(String.valueOf(p.getId())); - downOrUpOrderRespVO.setContractName(p.getContractName()); - downOrUpOrderRespVO.setContractNumber(p.getContractNumber()); - downOrUpOrderRespVO.setOrder(BeanUtils.toBean(p, SalesOrderRespVO.class)); - orderList.add(downOrUpOrderRespVO); - } - ); + DownOrUpOrderRespVO downOrUpOrderRespVO = new DownOrUpOrderRespVO(); + downOrUpOrderRespVO.setOrderId(String.valueOf(p.getId())); + downOrUpOrderRespVO.setOrderNo(p.getSystemOrderNumber()); + downOrUpOrderRespVO.setOrderType(reqVO.getOrderType()); + downOrUpOrderRespVO.setContractId(String.valueOf(p.getId())); + downOrUpOrderRespVO.setContractName(p.getContractName()); + downOrUpOrderRespVO.setContractNumber(p.getContractNumber()); + downOrUpOrderRespVO.setOrder(BeanUtils.toBean(p, SalesOrderRespVO.class)); + orderList.add(downOrUpOrderRespVO); + }); } return orderList; @@ -650,14 +640,12 @@ public class SalesOrderServiceImpl implements SalesOrderService { } private String getStatusByBpmProcessInstanceCode(Integer code) { - return Optional.ofNullable(code) - .map(c -> switch (c) { - case -1, 3, 4 -> OrderStatusEnum.REJECTED.getCode(); - case 1 -> OrderStatusEnum.APPROVING.getCode(); - case 2 -> OrderStatusEnum.TO_SUBMIT_ERP.getCode(); - default -> throw new IllegalArgumentException("未定义的BPM状态码:" + c); - }) - .orElseThrow(() -> new IllegalArgumentException("BPM状态码不能为null")); + return Optional.ofNullable(code).map(c -> switch (c) { + case -1, 3, 4 -> OrderStatusEnum.REJECTED.getCode(); + case 1 -> OrderStatusEnum.APPROVING.getCode(); + case 2 -> OrderStatusEnum.TO_SUBMIT_ERP.getCode(); + default -> throw new IllegalArgumentException("未定义的BPM状态码:" + c); + }).orElseThrow(() -> new IllegalArgumentException("BPM状态码不能为null")); } private String R() { @@ -719,9 +707,39 @@ public class SalesOrderServiceImpl implements SalesOrderService { return; // 空字符串直接跳过 } try { - // 解析 JSON 数组,捕获格式错误 - List strList = JSONArray.parseArray(priceConditionDetail, String.class); - // List jsonArrays = JSONArray.parseArray(priceConditionDetail, JSONArray.class); + List strList = new ArrayList<>(); + // 解析 JSON 数组 + List jsonArrays = JSONArray.parseArray(priceConditionDetail, JSONArray.class); + if (salesOrderDetailRespVO.getId() != null) { + for (JSONArray jsonArray : jsonArrays) { + for (int i = 0; i < jsonArray.size(); i++) { + // 解析单个JSON字符串为JSONObject + JSONObject jsonObject = JSONObject.parseObject(jsonArray.getString(i)); + // 添加updateflag字段 + jsonObject.put("updateflag", ErpConstants.SALES_DOCUMENT_REQUEST_FLAG_I); + // 将处理后的JSON对象转为字符串并加入strList + String processedJson = jsonObject.toString(); + strList.add(processedJson); + } + } + } else { + for (JSONArray jsonArray : jsonArrays) { + for (int i = 0; i < jsonArray.size(); i++) { + // 解析单个JSON字符串为JSONObject + JSONObject jsonObject = JSONObject.parseObject(jsonArray.getString(i)); + // 添加updateflag字段 + if (ErpConstants.SALES_DOCUMENT_REQUEST_FLAG_D.equals(jsonObject.get("flag"))) { + jsonObject.put("updateflag", ErpConstants.SALES_DOCUMENT_REQUEST_FLAG_D); + } + // 移除flag字段 + jsonObject.remove("flag"); + // 将处理后的JSON对象转为字符串并加入strList + String processedJson = jsonObject.toString(); + strList.add(processedJson); + } + } + } + // 将处理后的JSON字符串列表合并到conds conds.addAll(strList); } catch (JSONException e) { // 处理解析失败(例如打日志、忽略错误数据等) @@ -752,22 +770,16 @@ public class SalesOrderServiceImpl implements SalesOrderService { public WarehouseFactoryRespVO getBoundFactoryAndWarehouse(String factoryCode, String warehouseCode) { // 1. 查询主库信息,空值直接抛异常(精准异常信息) - InternalWarehouseDO internalWarehouseDO = internalWarehouseService - .getInternalWarehouseByFactoryCodeAndWarehouseCode(factoryCode, warehouseCode); + InternalWarehouseDO internalWarehouseDO = internalWarehouseService.getInternalWarehouseByFactoryCodeAndWarehouseCode(factoryCode, warehouseCode); if (internalWarehouseDO == null) { - throw exception(WAREHOUSE_CODE_OR_FACTORY_CODE_NOT_EXISTS, - "工厂编码:" + factoryCode + ",仓库编码:" + warehouseCode + " 不存在关联记录"); + throw exception(WAREHOUSE_CODE_OR_FACTORY_CODE_NOT_EXISTS, "工厂编码:" + factoryCode + ",仓库编码:" + warehouseCode + " 不存在关联记录"); } // 2. Stream流式查询+过滤,直接获取符合条件的唯一VO,空值抛异常 - return warehouseFactoryService.getWarehouseFactoryByMainId(String.valueOf(internalWarehouseDO.getId())) - .stream() + return warehouseFactoryService.getWarehouseFactoryByMainId(String.valueOf(internalWarehouseDO.getId())).stream() // 过滤条件:MMSI类型+操作类型匹配ERP常量 - .filter(vo -> ErpConstants.WAREHOUSE_MMSITYPE_SALE.equals(vo.getMmsiType()) - && ErpConstants.WAREHOUSE_TYPE_SHIPPING.equals(vo.getOperationType())) + .filter(vo -> ErpConstants.WAREHOUSE_MMSITYPE_SALE.equals(vo.getMmsiType()) && ErpConstants.WAREHOUSE_TYPE_SHIPPING.equals(vo.getOperationType())) // 取第一个匹配结果(无结果则抛指定异常) - .findFirst() - .orElseThrow(() -> exception(WAREHOUSE_CODE_OR_FACTORY_CODE_NOT_EXISTS, - "工厂编码:" + factoryCode + ",仓库编码:" + warehouseCode + " 无符合操作条件的库位")); + .findFirst().orElseThrow(() -> exception(WAREHOUSE_CODE_OR_FACTORY_CODE_NOT_EXISTS, "工厂编码:" + factoryCode + ",仓库编码:" + warehouseCode + " 无符合操作条件的库位")); } } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpOrderSaveReqVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpOrderSaveReqVO.java index 4934e792..755010a0 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpOrderSaveReqVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpOrderSaveReqVO.java @@ -59,7 +59,7 @@ public class ErpOrderSaveReqVO { @Schema(description = "采购凭证日期(YYYY-MM-DD)", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "采购凭证日期不能为空") - private LocalDate doc_date; // BEDAT DATS8 + private String doc_date; // BEDAT DATS8 @Schema(description = "采购组织", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "采购组织不能为空") @@ -174,6 +174,9 @@ public class ErpOrderSaveReqVO { @Schema(description = "行项目扩展信息") @Data public static class Itex { + @Schema(description = "行号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "行号不能为空") + private Integer po_item; @Schema(description = "销售物料号(科目分配类别为S时必填)") private String zmatnr; diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpOrderUpdateReqVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpOrderUpdateReqVO.java index b3b2b8f3..6cb8991b 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpOrderUpdateReqVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpOrderUpdateReqVO.java @@ -224,6 +224,11 @@ public class ErpOrderUpdateReqVO { @Data public static class comp { + @Schema(description = "行号(EBELP)", requiredMode = Schema.RequiredMode.REQUIRED, example = "00010") + @NotEmpty(message = "行号不能为空") + @ExcelProperty("行号") + private Long po_item; + @Schema(description = "计划行号(ETENR),从1开始编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotNull(message = "计划行号不能为空") @ExcelProperty("计划行号") @@ -237,12 +242,12 @@ public class ErpOrderUpdateReqVO { @Schema(description = "加工前物料号(MATNR)", requiredMode = Schema.RequiredMode.REQUIRED, example = "M0020001") @NotEmpty(message = "加工前物料号不能为空") @ExcelProperty("加工前物料号") - private String comp_material; + private String material; @Schema(description = "委托加工发货工厂(PLANT)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1001") @NotEmpty(message = "委托加工发货工厂不能为空") @ExcelProperty("委托发货工厂") - private String comp_plant; + private String plant; @Schema(description = "委托加工需求数量(MENGE),保留3位小数", requiredMode = Schema.RequiredMode.REQUIRED, example = "95.000") @NotNull(message = "委托加工需求数量不能为空") diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpOrderServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpOrderServiceImpl.java index 070e7b03..19bc497a 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpOrderServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpOrderServiceImpl.java @@ -36,7 +36,9 @@ public class ErpOrderServiceImpl implements ErpOrderService { req.put("comp", createVo.getComps()); req.put("exte", createVo.getExte()); req.put("acct", createVo.getAccts()); + req.put("itex", createVo.getItex()); reqDTO.setReq(req); + String reqJson = com.alibaba.fastjson2.JSON.toJSONString(reqDTO); return submitToErp(reqDTO); }