From 886283cdf860231255a7926a0eb8b4eeeca20c5e 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: Fri, 7 Nov 2025 16:12:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=9A=E8=BF=87=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E8=AE=A2=E5=8D=95=E6=98=8E=E7=BB=86id=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/contractorder/api/OrderApi.java | 25 ++ .../api/dto/order/OrdDtlDTO.java | 9 +- .../contractorder/api/dto/order/OrderDTO.java | 291 ++++++++++++++++++ .../contractorder/api/OrderApiImpl.java | 204 ++++++++++++ .../purchaseorder/PrchOrdDtlDO.java | 2 +- 5 files changed, 526 insertions(+), 5 deletions(-) create mode 100644 zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/OrderApi.java create mode 100644 zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrderDTO.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/OrderApiImpl.java diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/OrderApi.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/OrderApi.java new file mode 100644 index 0000000..56c300d --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/OrderApi.java @@ -0,0 +1,25 @@ +package com.zt.plat.module.contractorder.api; + +import com.zt.plat.framework.common.pojo.CommonResult; +import com.zt.plat.module.contractorder.api.dto.order.OrderDTO; +import com.zt.plat.module.contractorder.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +@FeignClient(name = ApiConstants.NAME) +@Tag(name = "RPC 服务 - 订单") +public interface OrderApi { + String PREFIX = ApiConstants.PREFIX + "/order"; + @PostMapping(PREFIX + "/order-by-order-ids") + @Operation(summary = "通过订单id获取订单信息", description = "通过订单编号获取订单信息") + CommonResult> getOrderByOrderIds(@RequestBody List ids); + + @PostMapping(PREFIX + "/order-by-order-nos") + @Operation(summary = "通过订单号批量获取订单信息", description = "通过订单编号获取订单信息") + CommonResult> getOrderByOrderNos(@RequestBody List orderNoS); +} diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrdDtlDTO.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrdDtlDTO.java index 1473575..218ce62 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrdDtlDTO.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrdDtlDTO.java @@ -99,6 +99,11 @@ public class OrdDtlDTO { */ private String taxNum; + /** + * 税率 Y + */ + private BigDecimal taxRte; + // ========================== 采购订单特有属性(PrchOrdDtlDTO 独有)========================== /** * 含税单价;推送ERP(必须) @@ -271,10 +276,6 @@ public class OrdDtlDTO { */ private BigDecimal gross; - /** - * 税率 Y - */ - private BigDecimal taxRte; /** * 价格条件详情;推送ERP(必须):JSON diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrderDTO.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrderDTO.java new file mode 100644 index 0000000..3925ffb --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/order/OrderDTO.java @@ -0,0 +1,291 @@ +package com.zt.plat.module.contractorder.api.dto.order; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class OrderDTO { + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + /** + * ERP订单号 + */ + @TableField("ORD_SAP_NUM") + private String orderSAPNumber; + /** + * 订单号 + */ + @TableField("SYS_ORD_NUM") + private String systemOrderNumber; + /** + * 公司名称 + */ + @TableField("CPN_NAME") + private String cpName; + /** + * 公司编码;推送ERP(必须) + */ + @TableField("CPN_NUM") + private String cpNum; + /** + * 客商编码;推送ERP(必须) + */ + @TableField("SPLR_NUM") + private String supplierNumber; + /** + * 客商名称 + */ + @TableField("SPLR_NAME") + private String supplierName; + /** + * 订单类型(字典:PRCH_ORD_TP);推送ERP(必须) + */ + @TableField("TP") + private String type; + /** + * 凭证日期;推送ERP(必须) + */ + @TableField("VCHR_DT") + private LocalDateTime voucherDate; + /** + * 采购组织编码;推送ERP(必须) + */ + @TableField("PRCH_ORGZ_CD") + private String purchaseOrganizationCustomsDeclaration; + /** + * 收货工厂名称 + */ + @TableField("RCV_FACT_NAME") + private String receiveFactoryName; + /** + * 收货工厂编码;推送ERP(必须) + */ + @TableField("RCV_FACT_NUM") + private String receiveFactoryNumber; + /** + * 收货库位名称 + */ + @TableField("RCV_WRH_NAME") + private String receiveWarehouseName; + /** + * 收货库位编码;推送ERP + */ + @TableField("RCV_WRH_NUM") + private String receiveWarehouseNumber; + /** + * 采购组编码(字典:PRCH_GRP_TP);推送ERP(必须) + */ + @TableField("PRCH_GRP") + private String purchaseGroup; + /** + * 货币码(字典:CUR);推送ERP(必须) + */ + @TableField("CUR_NUM") + private String currencyNumber; + /** + * 汇率;推送ERP + */ + @TableField("EXCH_RTE") + private BigDecimal exchangeRate; + /** + * 合同纸质合同号;推送ERP(必须) + */ + @TableField("PPR_CTRT_NUM") + private String paperContractNumber; + /** + * 小协议号;推送ERP + */ + @TableField("AGR_NUM") + private String agreementNumber; + /** + * 备注;推送ERP + */ + @TableField("RMK") + private String remark; + /** + * 代理方编码;推送ERP + */ + @TableField("AGT_NUM") + private String agentNumber; + /** + * 代理方名称 + */ + @TableField("AGT_NAME") + private String agentName; + /** + * 系统合同编号 + */ + @TableField("CTRT_NUM") + private String contractNumber; + /** + * 物料编码 + */ + @TableField("MTRL_NUM") + private String materialNumber; + /** + * 物料名称 + */ + @TableField("MTRL_NAME") + private String materialName; + /** + * 合同名称 + */ + @TableField("CTRT_NAME") + private String contractName; + /** + * 小户头号 + */ + @TableField("TNT_NUM") + private String tenantNumber; + /** + * ERP公司编号 + */ + @TableField("ERP_PRCH_CPN_NUM") + private String erpPurchaseCompanyNumber; + /** + * ERP公司名称 + */ + @TableField("ERP_PRCH_CPN_NAME") + private String erpPurchaseCompanyName; + /** + * ERP客商公司编码 + */ + @TableField("ERP_SALE_CPN_NUM") + private String erpSalesCompanyNumber; + /** + * ERP客商公司名称 + */ + @TableField("ERP_SALE_CPN_NAME") + private String erpSalesCompanyName; + /** + * 采购组织名称 + */ + @TableField("PRCH_ORGZ_NAME") + private String purchaseOrganizationName; + /** + * ERP状态(字典: ERP_REQ_STS) + */ + @TableField("ERP_STS") + private String erpStatus; + /** + * 请求ERP失败原因 + */ + @TableField("CAUS") + private String cause; + /** + * 订单状态(字典:PRCH_ORD_STS) + */ + @TableField("STS") + private String status; + /** + * 采购组名称 + */ + @TableField("PRCH_GRP_NAME") + private String purchaseGroupName; + + /** + * 流程实例编号 + */ + @TableField("PRCS_INSC_ID") + private String processInstanceId; + + /** + * 流程当前任务节点id + */ + @TableField("TSK_NDE_ID") + private String taskId; + + /** + * 审批意见 + */ + @TableField("RVW_ONN") + private String reviewOpinion; + + /** + * 是否需要审批 + */ + @TableField("IS_PUSH") + private int isPush; + + /** + * 计量单位 + */ + @TableField("UNT") + private String unt; + + /** + * 物料字典 + * + */ + @TableField("MTRL_TP") + private String mtrlTp; + + /** + * 订单分类 + * + */ + @TableField("SPLY_BSN_TP") + private String splyBsnTp; + /** + * 产品组编码 + * + */ + @TableField("PDT_GRP_CDG") + private String pdtGrpCdg; + /** + * 产品组名 + */ + @TableField("PDT_GRP_NAME") + private String pdtGrpName; + /** + * 分销聚道编码 + * + */ + @TableField("SALE_ACS_CDG") + private String saleAcsCdg; + /** + * 分销聚道名称 + * + */ + @TableField("SALE_ACS_NAME") + private String saleAcsName; + /** + * 销售组织编码 + * + */ + @TableField("SALE_ORGZ_CD") + private String saleOrgzCd; + /** + * 销售组织名称 + * + */ + @TableField("SALE_ORGZ_NAME") + private String saleOrgzName; + /** + * 付款方名称 + * + */ + @TableField("PYER_NAME") + private String payerName; + /** + * 付款方编码 + * + */ + @TableField("PYER_NUM") + private String payerNum; + + /** + * 订单明细 + */ + private List OrdDtlDTOS; +} diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/OrderApiImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/OrderApiImpl.java new file mode 100644 index 0000000..311a99d --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/OrderApiImpl.java @@ -0,0 +1,204 @@ +package com.zt.plat.module.contractorder.api; + +import cn.hutool.extra.spring.SpringUtil; +import com.zt.plat.framework.common.pojo.CommonResult; +import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.module.contractorder.api.dto.order.OrdDtlDTO; +import com.zt.plat.module.contractorder.api.dto.order.OrderDTO; +import com.zt.plat.module.contractorder.api.dto.order.PurchaseOrderWithDetailsDTO; +import com.zt.plat.module.contractorder.api.dto.order.SalesOrdDtlDTO; +import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PrchOrdDtlDO; +import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO; +import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDO; +import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDetailDO; +import com.zt.plat.module.contractorder.dal.mysql.purchaseorder.PrchOrdDtlMapper; +import com.zt.plat.module.contractorder.dal.mysql.purchaseorder.PurchaseOrderMapper; +import com.zt.plat.module.contractorder.dal.mysql.salesorder.SalesOrderDetailMapper; +import com.zt.plat.module.contractorder.dal.mysql.salesorder.SalesOrderMapper; +import com.zt.plat.module.contractorder.service.purchaseorder.PurchaseOrderService; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import static com.zt.plat.framework.common.pojo.CommonResult.success; + +@RestController +@Validated +@Slf4j +public class OrderApiImpl implements OrderApi { + @Resource + private PurchaseOrderService purchaseOrderService; + + @Override + public CommonResult> getOrderByOrderIds(List ids) { + if (ids == null || ids.isEmpty()) { + throw new RuntimeException("订单id为空"); + } + List ordersByIds = purchaseOrderService.getOrdersByIds(ids.stream().map(String::valueOf).toList()); + List purchaseOrderIds = new ArrayList<>(); + List salesOrderIds = new ArrayList<>(); + List order = new ArrayList<>(); + if (ordersByIds.isEmpty()) { + return CommonResult.success(new ArrayList<>()); + } + ordersByIds.forEach(o -> { + if ("SALE".equals(o.getSplyBsnTp())) { + // 销售订单 + salesOrderIds.add(o.getId()); + } else { + // 非销售订单(采购订单) + purchaseOrderIds.add(o.getId()); + } + }); + if (!purchaseOrderIds.isEmpty()) { + order.addAll(getPoOrdByIds(purchaseOrderIds)); + } + if (!salesOrderIds.isEmpty()) { + order.addAll(getSalesOrdByIds(salesOrderIds)); + } + return success(order); + } + + @Override + public CommonResult> getOrderByOrderNos(List orderNoS) { + List orderByNos = purchaseOrderService.getOrderByNos(orderNoS); + if (orderByNos.isEmpty()) { + return success(new ArrayList<>()); + } + List order = new ArrayList<>(); + List purchaseOrderNoS = new ArrayList<>(); + List salesOrdNoS = new ArrayList<>(); + orderByNos.forEach(f -> { + if ("SALE".equals(f.getSplyBsnTp())) { + // 销售订单 + salesOrdNoS.add(f.getId()); + } else { + // 非销售订单(采购订单) + purchaseOrderNoS.add(f.getId()); + } + }); + if (!purchaseOrderNoS.isEmpty()) { + order.addAll(getPoOrdByIds(purchaseOrderNoS)); + } + if (!salesOrdNoS.isEmpty()) { + order.addAll(getSalesOrdByIds(salesOrdNoS)); + } + + return success(order); + } + + private List getOrderByIds(List ids) { + return SpringUtil.getBean(SalesOrderMapper.class).selectByIds(ids); // 采购订单与销售订单的 + } + + private List getPoOrdByIds(List ids) { + List purchaseOrderDOS = getOrderByIds(ids); + List orderDTOS = BeanUtils.toBean(purchaseOrderDOS, OrderDTO.class); + if (orderDTOS == null) { + return new ArrayList<>(); + } + PrchOrdDtlMapper prchOrdDtlMapper = SpringUtil.getBean(PrchOrdDtlMapper.class); + List orderIds = orderDTOS.stream().map(OrderDTO::getId).toList(); + List prchOrdDtlDOS = prchOrdDtlMapper.selectList(PrchOrdDtlDO::getOrdId, orderIds); + orderDTOS.forEach(o -> { + List ordDtlDTOS = new ArrayList<>(); + prchOrdDtlDOS.forEach(p -> { + + if (Objects.equals(o.getId(), p.getOrdId())) { + OrdDtlDTO ordDtlDTO = setOrderDtlDTO(o, p); + ordDtlDTOS.add(ordDtlDTO); + } + }); + o.setOrdDtlDTOS(ordDtlDTOS); + }); + return orderDTOS; + } + + private List getSalesOrdByIds(List ids) { + List salesOrderDOS = getOrderByIds(ids); + List orderDTOS = BeanUtils.toBean(salesOrderDOS, OrderDTO.class); + if (orderDTOS == null) { + return new ArrayList<>(); + } + SalesOrderDetailMapper salesOrderDetailMapper = SpringUtil.getBean(SalesOrderDetailMapper.class); + List orderIds = orderDTOS.stream().map(OrderDTO::getId).toList(); + List salesOrderDetailDOS = salesOrderDetailMapper.selectList(SalesOrderDetailDO::getOrderId, orderIds); + orderDTOS.forEach(o -> { + List salesOrdDtlDTOS = new ArrayList<>(); + salesOrderDetailDOS.forEach(s -> { + if (Objects.equals(o.getId(), s.getOrderId())) { + OrdDtlDTO ordDtlDTO = setOrderDtlDTO(o, s); + salesOrdDtlDTOS.add(ordDtlDTO); + } + }); + o.setOrdDtlDTOS(salesOrdDtlDTOS); + }); + return orderDTOS; + } + + private OrdDtlDTO setOrderDtlDTO(OrderDTO orderDTO, T t) { + OrdDtlDTO ordDtlDTO = new OrdDtlDTO(); + if (t instanceof PrchOrdDtlDO p) { + ordDtlDTO.setId(p.getId()); + ordDtlDTO.setOrderId(p.getOrdId()); + ordDtlDTO.setLineNum(p.getLineNum()); + ordDtlDTO.setMtrlName(p.getMtrlName()); + ordDtlDTO.setMtrlNum(p.getMtrlNum()); + ordDtlDTO.setFactoryName(p.getRcvFactNum()); + ordDtlDTO.setFactoryNum(p.getRcvFactNum()); + ordDtlDTO.setWarehouseName(p.getRcvWrhNum()); + ordDtlDTO.setWarehouseNum(p.getRcvWrhNum()); + ordDtlDTO.setUnit(p.getUnt()); + ordDtlDTO.setQuantity(p.getQty()); + ordDtlDTO.setProjectCategory(p.getPrjCtgr()); + ordDtlDTO.setAgreementNumber(p.getAgrNum()); + ordDtlDTO.setElementAbbreviation(p.getElemAbbr()); + ordDtlDTO.setElementName(p.getElemName()); + ordDtlDTO.setElementCode(p.getElemCdg()); + ordDtlDTO.setIsEnable(p.getIsEnb()); + ordDtlDTO.setTaxNum(p.getTaxNum()); + ordDtlDTO.setTaxRte(p.getTaxRte()); + //============================== + ordDtlDTO.setMtrlCpntNum(p.getMtrlCpntNum()); + ordDtlDTO.setMtrlCpntDsp(p.getMtrlCpntDsp()); + ordDtlDTO.setBgnDt(p.getBgnDt()); + ordDtlDTO.setDdlDt(p.getDdlDt()); + ordDtlDTO.setTrfFactName(p.getTrfFactName()); + ordDtlDTO.setTrfFactNum(p.getTrfFactNum()); + ordDtlDTO.setTrfWrhName(p.getTrfWrhName()); + ordDtlDTO.setTrfWrhNum(p.getTrfWrhNum()); + ordDtlDTO.setRmk(p.getRmk()); + + + } else if ( + t instanceof SalesOrdDtlDTO s + ) { + ordDtlDTO.setId(s.getId()); + ordDtlDTO.setOrderId(s.getOrderId()); + ordDtlDTO.setLineNum(s.getLineNumber()); + ordDtlDTO.setMtrlName(s.getMaterialName()); + ordDtlDTO.setMtrlNum(s.getMaterialNumber()); + ordDtlDTO.setFactoryName(s.getFactoryName()); + ordDtlDTO.setFactoryNum(s.getFactoryNumber()); + ordDtlDTO.setWarehouseName(s.getWarehouseName()); + ordDtlDTO.setWarehouseNum(s.getWarehouseNumber()); + ordDtlDTO.setUnit(s.getUnit()); + ordDtlDTO.setQuantity(s.getQuantity()); + ordDtlDTO.setProjectCategory(s.getProjectCategory()); + ordDtlDTO.setAgreementNumber(s.getAgreementNumber()); + ordDtlDTO.setElementAbbreviation(s.getElementAbbreviation()); + ordDtlDTO.setElementName(s.getElementName()); + ordDtlDTO.setElementCode(s.getElementNumber()); + ordDtlDTO.setIsEnable(s.getIsEnable()); + ordDtlDTO.setTaxNum(s.getTaxAcctasscat()); + //============================== + + } + return ordDtlDTO; + } +} diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/purchaseorder/PrchOrdDtlDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/purchaseorder/PrchOrdDtlDO.java index fab9a2b..ee0e10a 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/purchaseorder/PrchOrdDtlDO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/purchaseorder/PrchOrdDtlDO.java @@ -274,6 +274,6 @@ public class PrchOrdDtlDO extends BusinessBaseDO { * 税率 */ @TableField("TAX_RTE") - private String taxRte; + private BigDecimal taxRte; }