wzy 2 kuukautta sitten
vanhempi
commit
0fbb5d7ffc
73 muutettua tiedostoa jossa 3310 lisäystä ja 88 poistoa
  1. 10 0
      mjava-diwei/pom.xml
  2. 0 29
      mjava-diwei/src/main/java/com/malk/diwei/controller/ClientController.java
  3. 138 0
      mjava-diwei/src/main/java/com/malk/diwei/controller/DiweiController.java
  4. 0 20
      mjava-diwei/src/main/java/com/malk/diwei/controller/GoodsController.java
  5. 0 29
      mjava-diwei/src/main/java/com/malk/diwei/controller/ProcStepController.java
  6. 67 0
      mjava-diwei/src/main/java/com/malk/diwei/entity/Bom.java
  7. 76 0
      mjava-diwei/src/main/java/com/malk/diwei/entity/BomItem.java
  8. 37 0
      mjava-diwei/src/main/java/com/malk/diwei/entity/Department.java
  9. 46 0
      mjava-diwei/src/main/java/com/malk/diwei/entity/Employee.java
  10. 33 0
      mjava-diwei/src/main/java/com/malk/diwei/entity/GoodsParts.java
  11. 41 0
      mjava-diwei/src/main/java/com/malk/diwei/entity/GoodsStock.java
  12. 145 0
      mjava-diwei/src/main/java/com/malk/diwei/entity/Process.java
  13. 80 0
      mjava-diwei/src/main/java/com/malk/diwei/entity/ProcessItem.java
  14. 50 0
      mjava-diwei/src/main/java/com/malk/diwei/entity/ProcessMaterial.java
  15. 117 0
      mjava-diwei/src/main/java/com/malk/diwei/entity/SalesOrder.java
  16. 80 0
      mjava-diwei/src/main/java/com/malk/diwei/entity/SalesOrderItem.java
  17. 76 0
      mjava-diwei/src/main/java/com/malk/diwei/entity/WorkProcStep.java
  18. 18 0
      mjava-diwei/src/main/java/com/malk/diwei/mapper/BomItemMapper.java
  19. 18 0
      mjava-diwei/src/main/java/com/malk/diwei/mapper/BomMapper.java
  20. 18 0
      mjava-diwei/src/main/java/com/malk/diwei/mapper/DepartmentMapper.java
  21. 18 0
      mjava-diwei/src/main/java/com/malk/diwei/mapper/EmployeeMapper.java
  22. 18 0
      mjava-diwei/src/main/java/com/malk/diwei/mapper/GoodsPartsMapper.java
  23. 18 0
      mjava-diwei/src/main/java/com/malk/diwei/mapper/GoodsStockMapper.java
  24. 18 0
      mjava-diwei/src/main/java/com/malk/diwei/mapper/ProcessItemMapper.java
  25. 37 0
      mjava-diwei/src/main/java/com/malk/diwei/mapper/ProcessMapper.java
  26. 24 0
      mjava-diwei/src/main/java/com/malk/diwei/mapper/ProcessMaterialMapper.java
  27. 18 0
      mjava-diwei/src/main/java/com/malk/diwei/mapper/SalesOrderItemMapper.java
  28. 18 0
      mjava-diwei/src/main/java/com/malk/diwei/mapper/SalesOrderMapper.java
  29. 18 0
      mjava-diwei/src/main/java/com/malk/diwei/mapper/WorkProcStepMapper.java
  30. 16 0
      mjava-diwei/src/main/java/com/malk/diwei/service/BomItemService.java
  31. 16 0
      mjava-diwei/src/main/java/com/malk/diwei/service/BomService.java
  32. 16 0
      mjava-diwei/src/main/java/com/malk/diwei/service/DepartmentService.java
  33. 9 0
      mjava-diwei/src/main/java/com/malk/diwei/service/DiweiService.java
  34. 18 0
      mjava-diwei/src/main/java/com/malk/diwei/service/EmployeeService.java
  35. 16 0
      mjava-diwei/src/main/java/com/malk/diwei/service/GoodsPartsService.java
  36. 10 0
      mjava-diwei/src/main/java/com/malk/diwei/service/GoodsService.java
  37. 16 0
      mjava-diwei/src/main/java/com/malk/diwei/service/ProcessItemService.java
  38. 16 0
      mjava-diwei/src/main/java/com/malk/diwei/service/ProcessMaterialService.java
  39. 27 0
      mjava-diwei/src/main/java/com/malk/diwei/service/ProcessService.java
  40. 16 0
      mjava-diwei/src/main/java/com/malk/diwei/service/SalesOrderItemService.java
  41. 20 0
      mjava-diwei/src/main/java/com/malk/diwei/service/SalesOrderService.java
  42. 16 0
      mjava-diwei/src/main/java/com/malk/diwei/service/WorkProcStepService.java
  43. 20 0
      mjava-diwei/src/main/java/com/malk/diwei/service/impl/BomItemServiceImpl.java
  44. 20 0
      mjava-diwei/src/main/java/com/malk/diwei/service/impl/BomServiceImpl.java
  45. 20 0
      mjava-diwei/src/main/java/com/malk/diwei/service/impl/DepartmentServiceImpl.java
  46. 49 0
      mjava-diwei/src/main/java/com/malk/diwei/service/impl/DiweiServiceImpl.java
  47. 69 0
      mjava-diwei/src/main/java/com/malk/diwei/service/impl/EmployeeServiceImpl.java
  48. 20 0
      mjava-diwei/src/main/java/com/malk/diwei/service/impl/GoodsPartsServiceImpl.java
  49. 288 1
      mjava-diwei/src/main/java/com/malk/diwei/service/impl/GoodsServiceImpl.java
  50. 0 1
      mjava-diwei/src/main/java/com/malk/diwei/service/impl/ProcStepServiceImpl.java
  51. 20 0
      mjava-diwei/src/main/java/com/malk/diwei/service/impl/ProcessItemServiceImpl.java
  52. 20 0
      mjava-diwei/src/main/java/com/malk/diwei/service/impl/ProcessMaterialServiceImpl.java
  53. 733 0
      mjava-diwei/src/main/java/com/malk/diwei/service/impl/ProcessServiceImpl.java
  54. 20 0
      mjava-diwei/src/main/java/com/malk/diwei/service/impl/SalesOrderItemServiceImpl.java
  55. 160 0
      mjava-diwei/src/main/java/com/malk/diwei/service/impl/SalesOrderServiceImpl.java
  56. 20 0
      mjava-diwei/src/main/java/com/malk/diwei/service/impl/WorkProcStepServiceImpl.java
  57. 1 1
      mjava-diwei/src/main/java/com/malk/diwei/utils/MPGenerator.java
  58. 24 7
      mjava-diwei/src/main/resources/application-prod.yml
  59. 5 0
      mjava-diwei/src/main/resources/mapper/BomItemMapper.xml
  60. 5 0
      mjava-diwei/src/main/resources/mapper/BomMapper.xml
  61. 5 0
      mjava-diwei/src/main/resources/mapper/DepartmentMapper.xml
  62. 5 0
      mjava-diwei/src/main/resources/mapper/EmployeeMapper.xml
  63. 5 0
      mjava-diwei/src/main/resources/mapper/GoodsPartsMapper.xml
  64. 5 0
      mjava-diwei/src/main/resources/mapper/GoodsSizeMapper.xml
  65. 5 0
      mjava-diwei/src/main/resources/mapper/GoodsStockMapper.xml
  66. 5 0
      mjava-diwei/src/main/resources/mapper/ProcessItemMapper.xml
  67. 252 0
      mjava-diwei/src/main/resources/mapper/ProcessMapper.xml
  68. 43 0
      mjava-diwei/src/main/resources/mapper/ProcessMaterialMapper.xml
  69. 5 0
      mjava-diwei/src/main/resources/mapper/SalesOrderItemMapper.xml
  70. 5 0
      mjava-diwei/src/main/resources/mapper/SalesOrderMapper.xml
  71. 5 0
      mjava-diwei/src/main/resources/mapper/SizeMapper.xml
  72. 5 0
      mjava-diwei/src/main/resources/mapper/WorkProcStepMapper.xml
  73. 22 0
      mjava-diwei/src/test/java/com/malk/diwei/DwTest.java

+ 10 - 0
mjava-diwei/pom.xml

@@ -53,6 +53,16 @@
             <artifactId>velocity</artifactId>
             <version>1.7</version>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <scope>test</scope>
+        </dependency>
 
     </dependencies>
 

+ 0 - 29
mjava-diwei/src/main/java/com/malk/diwei/controller/ClientController.java

@@ -1,29 +0,0 @@
-package com.malk.diwei.controller;
-
-import com.malk.diwei.service.ClientService;
-import com.malk.server.common.McR;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author WZY
- * @since 2025-03-11
- */
-@RestController
-@RequestMapping("/client")
-public class ClientController {
-    @Autowired
-    private ClientService clientService;
-
-    @GetMapping("/syncClient")
-    public McR syncClient() {
-        return clientService.syncClient();
-    }
-}

+ 138 - 0
mjava-diwei/src/main/java/com/malk/diwei/controller/DiweiController.java

@@ -0,0 +1,138 @@
+package com.malk.diwei.controller;
+
+import com.malk.diwei.service.*;
+import com.malk.server.common.McR;
+import com.malk.utils.UtilServlet;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+@RestController
+@RequestMapping()
+public class DiweiController {
+    @Autowired
+    private ClientService clientService;
+
+    @Autowired
+    private GoodsService goodsService;
+
+    @Autowired
+    private ProcStepService procStepService;
+
+    @Autowired
+    private EmployeeService employeeService;
+
+    @Autowired
+    private ProcessService processService;
+
+    @Autowired
+    private SalesOrderService salesOrderService;
+
+    @Autowired
+    private DiweiService diweiService;
+
+    //同步客户
+    @GetMapping("/syncClient")
+    public McR syncClient() {
+        return clientService.syncClient();
+    }
+
+    //同步物料
+    @GetMapping("/syncGoods")
+    private McR syncGoods(){
+        return goodsService.syncGoods();
+    }
+
+    //同步工序
+    @GetMapping("/syncProcStep")
+    public McR syncProcStep(){
+        return procStepService.syncProcStep();
+    }
+
+    //同步员工
+    @GetMapping("/syncEmployee")
+    public McR syncEmployee(){
+        return employeeService.syncEmplyee();
+    }
+
+    //查询物料库存信息
+    @GetMapping("/queryGoodsStock")
+    public McR queryGoodsStock(Integer goodsId,Integer colorId,Integer sizeId){
+        return goodsService.queryGoodsStock(goodsId, colorId, sizeId);
+    }
+
+    //同步毛衫加工单
+    @GetMapping("/syncProcess")
+    public McR syncProcess(){
+        return processService.syncProcess();
+    }
+
+    //同步横机外发单
+    @GetMapping("/syncProcessOut")
+    public McR syncProcessOut(){
+        return processService.syncProcessOut();
+    }
+
+    //同步工艺外发单
+    @GetMapping("/syncProcessOut2")
+    public McR syncProcessOut2(){
+        return processService.syncProcessOut2();
+    }
+
+    //同步织片回收单
+    @GetMapping("/syncProcessOn")
+    public McR syncProcessOn(){
+        return processService.syncProcessOn();
+    }
+
+    //同步工艺回收单
+    @GetMapping("/syncProcessOn2")
+    public McR syncProcessOn2(){
+        return processService.syncProcessOn2();
+    }
+
+    //同步所有基础数据
+    @Scheduled(cron = "0 0 0 * * ?")
+    @GetMapping("/syncBaseAll")
+    public McR syncBaseAll(){
+        return diweiService.syncBaseAll();
+    }
+
+    //同步所有生产流程数据
+    @Scheduled(cron = "0 0 1 * * ?")
+    @GetMapping("/syncProcessAll")
+    public McR syncProcessAll(){
+        return diweiService.syncProcessAll();
+    }
+
+    //新增销售订单
+    @PostMapping("/addSaleOrder")
+    public McR addSaleOrder(@RequestBody Map map){
+        return salesOrderService.addSaleOrder(map);
+    }
+
+    //新增BOM
+    @PostMapping("/addBom")
+    public McR addBom(@RequestBody Map map){
+        return goodsService.addBom(map);
+    }
+
+    //查询成品最新Bom
+    @GetMapping("/queryGoodsNewBom")
+    public McR queryGoodsNewBom(int goodsId){
+        return goodsService.queryGoodsNewBom(goodsId);
+    }
+
+    //查询Bom是否存在
+    @PostMapping("/queryBomIsExist")
+    public McR queryBomIsExist(HttpServletRequest request){
+        Map data = UtilServlet.getParamMap(request);
+        String bomCode = data.get("bomCode").toString();
+        return goodsService.queryBomIsExist(bomCode);
+    }
+
+
+}

+ 0 - 20
mjava-diwei/src/main/java/com/malk/diwei/controller/GoodsController.java

@@ -1,20 +0,0 @@
-package com.malk.diwei.controller;
-
-import com.malk.diwei.service.GoodsService;
-import com.malk.server.common.McR;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/goods")
-public class GoodsController {
-    @Autowired
-    private GoodsService goodsService;
-
-    @GetMapping("/syncGoods")
-    private McR syncGoods(){
-        return goodsService.syncGoods();
-    }
-}

+ 0 - 29
mjava-diwei/src/main/java/com/malk/diwei/controller/ProcStepController.java

@@ -1,29 +0,0 @@
-package com.malk.diwei.controller;
-
-import com.malk.diwei.service.ProcStepService;
-import com.malk.server.common.McR;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author WZY
- * @since 2025-03-07
- */
-@RestController
-@RequestMapping("/procStep")
-public class ProcStepController {
-    @Autowired
-    private ProcStepService procStepService;
-
-    @GetMapping("/syncProcStep")
-    public McR syncProcStep(){
-        return procStepService.syncProcStep();
-    }
-}

+ 67 - 0
mjava-diwei/src/main/java/com/malk/diwei/entity/Bom.java

@@ -0,0 +1,67 @@
+package com.malk.diwei.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+@TableName("Bom")
+@Data
+  public class Bom implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      private Long bomID;
+
+    private Long goodsID;
+
+    private BigDecimal bomGoodsQty;
+
+    private Long bomUnitID;
+
+    private String bomDescription;
+
+    private Long bomCreatorID;
+
+    private Date bomCreateDatetime;
+
+    private Long bomUpdaterID;
+
+    private Date bomUpdateDatetime;
+
+    private Long bomApproverID;
+
+    private Date bomApproveDatetime;
+
+    private Integer bomStatus;
+
+    private String bomUnitName;
+
+    private Long bomOrgID;
+
+    private BigDecimal bomProcessPrice;
+
+    private BigDecimal bomOtherFeePrice;
+
+    private Integer bomType;
+
+    private String bomCode;
+
+    private Integer bomDisAble;
+
+    private Long bomDesignDetailID;
+
+    private String bomProofingRequirement;
+}

+ 76 - 0
mjava-diwei/src/main/java/com/malk/diwei/entity/BomItem.java

@@ -0,0 +1,76 @@
+package com.malk.diwei.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+@TableName("BomItem")
+@Data
+  public class BomItem implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      private Long bomID;
+
+      private Long bomItemID;
+
+    private Integer bomItemNo;
+
+    private Long bomItemGoodsID;
+
+    private BigDecimal bomItemQty;
+
+    private Long bomItemUnitID;
+
+    private String bomItemUnitName;
+
+    private BigDecimal bomItemPrice;
+
+    private BigDecimal bomItemAmount;
+
+    private String bomItemDescription;
+
+    private Long bomGoodsColorID;
+
+    private Long bomMaterialColorID;
+
+    private Long bomMaterialSizeID;
+
+    private Long bomGoodsSizeID;
+
+    private Long bomItemGoodsVendorID;
+
+    private BigDecimal bomItemLossRate;
+
+    private Boolean isSplitSize;
+
+    private Boolean isMainItem;
+
+    private Integer bomItemGroup;
+
+    private String bomMaterialBatchNo;
+
+    private String bomMaterialColorNo;
+
+    private Long bomItemGoodsPartsID;
+
+    private Boolean bomItemIsMainMaterial;
+
+    private String bomItemColorWay;
+
+    private String bomItemPartsMachineType;
+
+    private String bomItemPartsNeedleType;
+}

+ 37 - 0
mjava-diwei/src/main/java/com/malk/diwei/entity/Department.java

@@ -0,0 +1,37 @@
+package com.malk.diwei.entity;
+
+import java.io.Serializable;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-31
+ */
+@TableName("Department")
+@Data
+  public class Department implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      private Long deptID;
+
+    private String deptCode;
+
+    private String deptName;
+
+    private Integer deptOrderNo;
+
+    private String deptDescription;
+
+    private Long parentDeptID;
+
+    private Long deptOrgID;
+}

+ 46 - 0
mjava-diwei/src/main/java/com/malk/diwei/entity/Employee.java

@@ -0,0 +1,46 @@
+package com.malk.diwei.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-24
+ */
+@TableName("Employee")
+@Data
+  public class Employee implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      private Long empID;
+
+    private String empCode;
+
+    private String empName;
+
+    private String empSex;
+
+    private Long deptID;
+
+    private Integer empWorkStatus;
+
+    private Integer empIsSalesman;
+
+    private Long jobID;
+
+    private Integer empIsQCMerchandiser;
+
+    private String empGamUserID;
+
+}

+ 33 - 0
mjava-diwei/src/main/java/com/malk/diwei/entity/GoodsParts.java

@@ -0,0 +1,33 @@
+package com.malk.diwei.entity;
+
+import java.io.Serializable;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-31
+ */
+@TableName("GoodsParts")
+@Data
+  public class GoodsParts implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      private Long goodsPartsID;
+
+    private String goodsPartsCode;
+
+    private String goodsPartsName;
+
+    private Integer goodsPartsNo;
+
+    private Boolean goodsPartsDisable;
+}

+ 41 - 0
mjava-diwei/src/main/java/com/malk/diwei/entity/GoodsStock.java

@@ -0,0 +1,41 @@
+package com.malk.diwei.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-25
+ */
+@TableName("GoodsStock")
+@Data
+  public class GoodsStock implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      private Long goodsStockID;
+
+    private Long goodsID;
+
+    private Long colorID;
+
+    private Long sizeID;
+
+    private Long warehouseID;
+
+    private BigDecimal goodsStockStartQty;
+
+    private BigDecimal goodsStockInQty;
+
+    private BigDecimal goodsStockOutQty;
+}

+ 145 - 0
mjava-diwei/src/main/java/com/malk/diwei/entity/Process.java

@@ -0,0 +1,145 @@
+package com.malk.diwei.entity;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-27
+ */
+@TableName("Process")
+@Data
+  public class Process implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long processID;
+
+    private Date processDate;
+
+    private String processCode;
+
+    private Date processDeliveryDate;
+
+    private Long factoryID;
+
+    private Integer processStatus;
+
+    private Integer processIsDone;
+
+    private Integer processAborted;
+
+    private Integer processIsPrinted;
+
+    private Integer processDeleteFlag;
+
+    private Long processCreatorID;
+
+    private Date processCreateDatetime;
+
+    private Long processUpdaterID;
+
+    private Date processUpdateDatetime;
+
+    private Long processApproverID;
+
+    private Date processApproveDatetime;
+
+    private String processDescription;
+
+    private String processLinkMan;
+
+    private String processLinkTel;
+
+    private String processLinkMob;
+
+    private Long processOrgID;
+
+    private String entityObjKey;
+
+    private Integer processMaterialPickIsDone;
+
+    private Integer processSecondMaterialPickIsDone;
+
+    private Long processBomID;
+
+    private Integer processOutSideType;
+
+    private Integer processReceiptType;
+
+    private Integer processHadCard;
+
+    private Integer processCardConfirmType;
+
+    private Integer processIsUseStepReferStock;
+
+    private Integer processIsUseStepReferOutSideN;
+
+    private String processChuangCi;
+
+    private Integer processIsSettle;
+
+    private Integer processPrintedTimes;
+
+    private Long processDeptID;
+
+    private Integer processFrom;
+
+    private Date processSalesDeliveryDate;
+
+    private Date processSocketFinishedDate;
+
+    private Date processWeavingFinishedDate;
+
+    private Date processHadProDate;
+
+    private Date processReprintDate;
+
+    private String processSOGoodsName;
+
+    private String processSOGoodsCode;
+
+    private Long processSOGoodsId;
+
+    private String processSOClientOrderCode;
+
+    private String processSOClientName;
+
+    private String processSOClientCode;
+
+    private Long processSOClientID;
+
+    private Long processMerchandiserID;
+
+    private Date processReceiptDate;
+
+    private Date processCutDate;
+
+    private Long pCGoodsID;
+
+    private String processPOCodes;
+
+    private String processBOInfo;
+
+    private String processBOKey;
+
+    private Long processSalesmanID;
+
+    private Long processReferSOID;
+
+    private Date processUrgentTime;
+
+    private Long processQCMerchandiserID;
+
+    private Integer processBoardFalg;
+}

+ 80 - 0
mjava-diwei/src/main/java/com/malk/diwei/entity/ProcessItem.java

@@ -0,0 +1,80 @@
+package com.malk.diwei.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-27
+ */
+@TableName("ProcessItem")
+@Data
+  public class ProcessItem implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      private Long processID;
+
+      private Long processItemID;
+
+    private Integer processItemNo;
+
+    private Long goodsID;
+
+    private Long unitID;
+
+    private Long colorID;
+
+    private Long sizeID;
+
+    private BigDecimal processItemQty;
+
+    private String processItemDesc;
+
+    private BigDecimal processItemDeliveryQty;
+
+    private Long processItemReferBillID;
+
+    private Long processItemReferBillItemID;
+
+    private Long processItemGroupID;
+
+    private Integer processItemAborted;
+
+    private String processItemReferBillCode;
+
+    private String processItemReferObjKey;
+
+    private Long processOSNWPSID;
+
+    private Long processOSNWPSProcStepID;
+
+    private Integer processOSNIsConfirm;
+
+    private Long processOSNConfirmQty;
+
+    private BigDecimal processItemCardConfirmQty;
+
+    private BigDecimal processItemBeyondQty;
+
+    private BigDecimal processItemReturnQty;
+
+    private Long processItemReferBillItemID2;
+
+    private String processItemReferObjKey2;
+
+    private String processItemReferBillCode2;
+
+    private Long processItemReferBillID2;
+
+    private BigDecimal processItemCutQty;
+}

+ 50 - 0
mjava-diwei/src/main/java/com/malk/diwei/entity/ProcessMaterial.java

@@ -0,0 +1,50 @@
+package com.malk.diwei.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-31
+ */
+@TableName("ProcessMaterial")
+@Data
+  public class ProcessMaterial implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      private Long processMaterialID;
+
+    private Long processID;
+
+    private Long goodsID;
+
+    private Long unitID;
+
+    private Long colorID;
+
+    private Long sizeID;
+
+    private BigDecimal processMaterialQty;
+
+    private BigDecimal processMaterialPickQty;
+
+    private BigDecimal processMaterialPrice;
+
+    private String processMaterialColorVCode;
+
+    private String processMaterialDes;
+
+    private Long processMaterialGoodsPartsID;
+
+    private String processMaterialBatchNo;
+}

+ 117 - 0
mjava-diwei/src/main/java/com/malk/diwei/entity/SalesOrder.java

@@ -0,0 +1,117 @@
+package com.malk.diwei.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+@TableName("SalesOrder")
+@Data
+  public class SalesOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      private Long salesOrderID;
+
+    private Date salesOrderDate;
+
+    private String salesOrderCode;
+
+    private Long clientID;
+
+    private String salesOrderContractNo;
+
+    private String salesOrderLinkMan;
+
+    private Date salesOrderDeliveryDate;
+
+    private String salesOrderDeliveryAddress;
+
+    private String salesOrderLinkTel;
+
+    private String salesOrderDescription;
+
+    private Long salesOrderCreatorID;
+
+    private Long salesOrderUpdaterID;
+
+    private Date salesOrderUpdateDatetime;
+
+    private Long salesOrderApproverID;
+
+    private Date salesOrderApproveDatetime;
+
+    private Integer salesOrderStatus;
+
+    private Integer salesOrderIsDone;
+
+    private Integer salesOrderAborted;
+
+    private Integer salesOrderDeleteFlag;
+
+    private Long salesOrderLastItemID;
+
+    private Date salesOrderCreateDatetime;
+
+    private Long salesmanID;
+
+    private Integer salesOrderIsPrinted;
+
+    private Long salesOrderOrgID;
+
+    private String salesOrderLinkMob;
+
+    private String entityObjKey;
+
+    private Integer salesOrderFrom;
+
+    private Integer salesOrderIsMrp;
+
+    private Integer salesOrderPrintedTimes;
+
+    private Integer salesOrderNoNeedMrp;
+
+    private String salesOrderTrustee;
+
+    private Integer salesOrderIsInvoice;
+
+    private String salesOrderGUID;
+
+    private BigDecimal salesOrderDiscount;
+
+    private BigDecimal salesOrderYZPercent;
+
+    private BigDecimal salesOrderDZPercent;
+
+    private String salesOrderWFCAuthor;
+
+    private String salesOrderWFCNodeName;
+
+    private String salesOrderWFCNodeID;
+
+    private String salesOrderWFCNodeMemo;
+
+    private Long salesOrderFollowEmpID;
+
+    private Integer salesOrderProperty;
+
+    private String salesOrderDeptName;
+
+    private Long salesOrderDeptID;
+
+    private Long salesOrderQCFollowEmpID;
+
+    private Integer salesOrderBoardFalg;
+}

+ 80 - 0
mjava-diwei/src/main/java/com/malk/diwei/entity/SalesOrderItem.java

@@ -0,0 +1,80 @@
+package com.malk.diwei.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+@TableName("SalesOrderItem")
+@Data
+  public class SalesOrderItem implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      private Long salesOrderID;
+
+      private Long salesOrderItemID;
+
+    private Integer salesOrderItemNo;
+
+    private Long goodsID;
+
+    private BigDecimal salesOrderItemPrice;
+
+    private BigDecimal salesOrderItemQty;
+
+    private BigDecimal salesOrderItemAmount;
+
+    private BigDecimal salesOrderItemDeliveryQty;
+
+    private String salesOrderItemDescription;
+
+    private Long unitID;
+
+    private Long colorID;
+
+    private Long sizeID;
+
+    private Boolean salesOrderItemAborted;
+
+    private BigDecimal salesOrderItemOrigPrice;
+
+    private Integer salesOrderItemDiscRate;
+
+    private BigDecimal salesOrderItemDiscAmount;
+
+    private Boolean salesOrderItemIsGift;
+
+    private Long salesOrderItemGroupID;
+
+    private BigDecimal salesOrderItemPurchaseQty;
+
+    private BigDecimal salesOrderItemDistributionDeilveryQty;
+
+    private BigDecimal salesOrderItemDistributionQty;
+
+    private Boolean salesOrderItemIsInvoice;
+
+    private BigDecimal salesOrderItemInvoiceAmount;
+
+    private BigDecimal salesOrderItemInvoiceQty;
+
+    private BigDecimal salesOrderItemDiscount;
+
+    private BigDecimal salesOrderItemReturnQty;
+
+    private BigDecimal salesOrderItemProcessQty;
+
+    private BigDecimal salesOrderItemPackingQty;
+}

+ 76 - 0
mjava-diwei/src/main/java/com/malk/diwei/entity/WorkProcStep.java

@@ -0,0 +1,76 @@
+package com.malk.diwei.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-04-02
+ */
+@TableName("WorkProcStep")
+@Data
+  public class WorkProcStep implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      private Long wpsid;
+
+    private Long wPSProcessID;
+
+    private Long processID;
+
+    private Long wPSProcStepID;
+
+    private String wPSProcStepCode;
+
+    private String wPSProcStepName;
+
+    private Integer wPSProcStepType;
+
+    private Long wPSFactoryID;
+
+    private Integer wPSProcStepSequence;
+
+    private BigDecimal wPSProcStepPrice;
+
+    private Integer wPSConfirmQty;
+
+    private Integer wPSHadRecordQty;
+
+    private Integer wPSIsByHand;
+
+    private String wPSProcStepDescription;
+
+    private Long goodsID;
+
+    private Integer wPSIsAbort;
+
+    private Integer wPSNotAlowConfirmPrice;
+
+    private Integer wPSProcStepIsReferStock;
+
+    private Integer wPSProcStepIsReferOutSizeN;
+
+    private Integer wPSProcStepIsFKM;
+
+    private Integer wPSColorSizeType;
+
+    private BigDecimal wpsProcStepGoodsMiShu;
+
+    private Integer workProcStepIsReferMiShu;
+
+    private Integer wPSBeyondQty;
+
+    private Integer wPSReturnQty;
+
+    private String wpsdes_Confirm;
+}

+ 18 - 0
mjava-diwei/src/main/java/com/malk/diwei/mapper/BomItemMapper.java

@@ -0,0 +1,18 @@
+package com.malk.diwei.mapper;
+
+import com.malk.diwei.entity.BomItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+@Mapper
+public interface BomItemMapper extends BaseMapper<BomItem> {
+
+}

+ 18 - 0
mjava-diwei/src/main/java/com/malk/diwei/mapper/BomMapper.java

@@ -0,0 +1,18 @@
+package com.malk.diwei.mapper;
+
+import com.malk.diwei.entity.Bom;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+@Mapper
+public interface BomMapper extends BaseMapper<Bom> {
+
+}

+ 18 - 0
mjava-diwei/src/main/java/com/malk/diwei/mapper/DepartmentMapper.java

@@ -0,0 +1,18 @@
+package com.malk.diwei.mapper;
+
+import com.malk.diwei.entity.Department;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-31
+ */
+@Mapper
+public interface DepartmentMapper extends BaseMapper<Department> {
+
+}

+ 18 - 0
mjava-diwei/src/main/java/com/malk/diwei/mapper/EmployeeMapper.java

@@ -0,0 +1,18 @@
+package com.malk.diwei.mapper;
+
+import com.malk.diwei.entity.Employee;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-24
+ */
+@Mapper
+public interface EmployeeMapper extends BaseMapper<Employee> {
+
+}

+ 18 - 0
mjava-diwei/src/main/java/com/malk/diwei/mapper/GoodsPartsMapper.java

@@ -0,0 +1,18 @@
+package com.malk.diwei.mapper;
+
+import com.malk.diwei.entity.GoodsParts;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-31
+ */
+@Mapper
+public interface GoodsPartsMapper extends BaseMapper<GoodsParts> {
+
+}

+ 18 - 0
mjava-diwei/src/main/java/com/malk/diwei/mapper/GoodsStockMapper.java

@@ -0,0 +1,18 @@
+package com.malk.diwei.mapper;
+
+import com.malk.diwei.entity.GoodsStock;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-25
+ */
+@Mapper
+public interface GoodsStockMapper extends BaseMapper<GoodsStock> {
+
+}

+ 18 - 0
mjava-diwei/src/main/java/com/malk/diwei/mapper/ProcessItemMapper.java

@@ -0,0 +1,18 @@
+package com.malk.diwei.mapper;
+
+import com.malk.diwei.entity.ProcessItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-27
+ */
+@Mapper
+public interface ProcessItemMapper extends BaseMapper<ProcessItem> {
+
+}

+ 37 - 0
mjava-diwei/src/main/java/com/malk/diwei/mapper/ProcessMapper.java

@@ -0,0 +1,37 @@
+package com.malk.diwei.mapper;
+
+import com.malk.diwei.entity.Process;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-27
+ */
+@Mapper
+public interface ProcessMapper extends BaseMapper<Process> {
+
+    //查询加工单加工产品
+    List<Map> selectProductById(Long processID);
+
+    //查询加工单 横机/附件外发明细
+    List<Map> selectProcessONDetailByCode(String processCode);
+
+    //查询外发单外发明细
+    List<Map> selectOutSideDetails(Long processID);
+
+    List<Map> selectOnDetails(String processONDetailCode);
+
+    List<Map> selectOnCardBarDetails(String processONDetailCode);
+
+    Map selectOnBaseInfo(String processONDetailCode);
+
+    List<Map> selectOnCardBarDetails2(String processONDetailCode);
+}

+ 24 - 0
mjava-diwei/src/main/java/com/malk/diwei/mapper/ProcessMaterialMapper.java

@@ -0,0 +1,24 @@
+package com.malk.diwei.mapper;
+
+import com.malk.diwei.entity.ProcessMaterial;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-31
+ */
+@Mapper
+public interface ProcessMaterialMapper extends BaseMapper<ProcessMaterial> {
+
+    List<Map> selectProcessMaterialByGoodsProperty(@Param("processId") Long processId,@Param("goodsProperty") int goodsProperty);
+
+}

+ 18 - 0
mjava-diwei/src/main/java/com/malk/diwei/mapper/SalesOrderItemMapper.java

@@ -0,0 +1,18 @@
+package com.malk.diwei.mapper;
+
+import com.malk.diwei.entity.SalesOrderItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+@Mapper
+public interface SalesOrderItemMapper extends BaseMapper<SalesOrderItem> {
+
+}

+ 18 - 0
mjava-diwei/src/main/java/com/malk/diwei/mapper/SalesOrderMapper.java

@@ -0,0 +1,18 @@
+package com.malk.diwei.mapper;
+
+import com.malk.diwei.entity.SalesOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+@Mapper
+public interface SalesOrderMapper extends BaseMapper<SalesOrder> {
+
+}

+ 18 - 0
mjava-diwei/src/main/java/com/malk/diwei/mapper/WorkProcStepMapper.java

@@ -0,0 +1,18 @@
+package com.malk.diwei.mapper;
+
+import com.malk.diwei.entity.WorkProcStep;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-04-02
+ */
+@Mapper
+public interface WorkProcStepMapper extends BaseMapper<WorkProcStep> {
+
+}

+ 16 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/BomItemService.java

@@ -0,0 +1,16 @@
+package com.malk.diwei.service;
+
+import com.malk.diwei.entity.BomItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+public interface BomItemService extends IService<BomItem> {
+
+}

+ 16 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/BomService.java

@@ -0,0 +1,16 @@
+package com.malk.diwei.service;
+
+import com.malk.diwei.entity.Bom;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+public interface BomService extends IService<Bom> {
+
+}

+ 16 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/DepartmentService.java

@@ -0,0 +1,16 @@
+package com.malk.diwei.service;
+
+import com.malk.diwei.entity.Department;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-31
+ */
+public interface DepartmentService extends IService<Department> {
+
+}

+ 9 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/DiweiService.java

@@ -0,0 +1,9 @@
+package com.malk.diwei.service;
+
+import com.malk.server.common.McR;
+
+public interface DiweiService {
+    McR syncBaseAll();
+
+    McR syncProcessAll();
+}

+ 18 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/EmployeeService.java

@@ -0,0 +1,18 @@
+package com.malk.diwei.service;
+
+import com.malk.diwei.entity.Employee;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.malk.server.common.McR;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-24
+ */
+public interface EmployeeService extends IService<Employee> {
+
+    McR syncEmplyee();
+}

+ 16 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/GoodsPartsService.java

@@ -0,0 +1,16 @@
+package com.malk.diwei.service;
+
+import com.malk.diwei.entity.GoodsParts;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-31
+ */
+public interface GoodsPartsService extends IService<GoodsParts> {
+
+}

+ 10 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/GoodsService.java

@@ -4,6 +4,8 @@ import com.malk.diwei.entity.Goods;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.malk.server.common.McR;
 
+import java.util.Map;
+
 /**
  * <p>
  *  服务类
@@ -15,4 +17,12 @@ import com.malk.server.common.McR;
 public interface GoodsService extends IService<Goods> {
 
     McR syncGoods();
+
+    McR queryGoodsStock(Integer goodsId, Integer colorId, Integer sizeId);
+
+    McR addBom(Map map);
+
+    McR queryGoodsNewBom(int goodsId);
+
+    McR queryBomIsExist(String bomCode);
 }

+ 16 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/ProcessItemService.java

@@ -0,0 +1,16 @@
+package com.malk.diwei.service;
+
+import com.malk.diwei.entity.ProcessItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-04-02
+ */
+public interface ProcessItemService extends IService<ProcessItem> {
+
+}

+ 16 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/ProcessMaterialService.java

@@ -0,0 +1,16 @@
+package com.malk.diwei.service;
+
+import com.malk.diwei.entity.ProcessMaterial;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-31
+ */
+public interface ProcessMaterialService extends IService<ProcessMaterial> {
+
+}

+ 27 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/ProcessService.java

@@ -0,0 +1,27 @@
+package com.malk.diwei.service;
+
+import com.malk.diwei.entity.Process;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.malk.server.common.McR;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-27
+ */
+public interface ProcessService extends IService<Process> {
+
+    McR syncProcess();
+
+    McR syncProcessOut();
+
+    McR syncProcessOut2();
+
+    McR syncProcessOn();
+
+    McR syncProcessOn2();
+
+}

+ 16 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/SalesOrderItemService.java

@@ -0,0 +1,16 @@
+package com.malk.diwei.service;
+
+import com.malk.diwei.entity.SalesOrderItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+public interface SalesOrderItemService extends IService<SalesOrderItem> {
+
+}

+ 20 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/SalesOrderService.java

@@ -0,0 +1,20 @@
+package com.malk.diwei.service;
+
+import com.malk.diwei.entity.SalesOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.malk.server.common.McR;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+public interface SalesOrderService extends IService<SalesOrder> {
+
+    McR addSaleOrder(Map map);
+}

+ 16 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/WorkProcStepService.java

@@ -0,0 +1,16 @@
+package com.malk.diwei.service;
+
+import com.malk.diwei.entity.WorkProcStep;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-04-02
+ */
+public interface WorkProcStepService extends IService<WorkProcStep> {
+
+}

+ 20 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/impl/BomItemServiceImpl.java

@@ -0,0 +1,20 @@
+package com.malk.diwei.service.impl;
+
+import com.malk.diwei.entity.BomItem;
+import com.malk.diwei.mapper.BomItemMapper;
+import com.malk.diwei.service.BomItemService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+@Service
+public class BomItemServiceImpl extends ServiceImpl<BomItemMapper, BomItem> implements BomItemService {
+
+}

+ 20 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/impl/BomServiceImpl.java

@@ -0,0 +1,20 @@
+package com.malk.diwei.service.impl;
+
+import com.malk.diwei.entity.Bom;
+import com.malk.diwei.mapper.BomMapper;
+import com.malk.diwei.service.BomService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+@Service
+public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomService {
+
+}

+ 20 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/impl/DepartmentServiceImpl.java

@@ -0,0 +1,20 @@
+package com.malk.diwei.service.impl;
+
+import com.malk.diwei.entity.Department;
+import com.malk.diwei.mapper.DepartmentMapper;
+import com.malk.diwei.service.DepartmentService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-31
+ */
+@Service
+public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Department> implements DepartmentService {
+
+}

+ 49 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/impl/DiweiServiceImpl.java

@@ -0,0 +1,49 @@
+package com.malk.diwei.service.impl;
+
+import com.malk.diwei.service.*;
+import com.malk.server.common.McR;
+import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DiweiServiceImpl implements DiweiService {
+    @Autowired
+    private ClientService clientService;
+
+    @Autowired
+    private GoodsService goodsService;
+
+    @Autowired
+    private ProcStepService procStepService;
+
+    @Autowired
+    private EmployeeService employeeService;
+
+    @Autowired
+    private ProcessService processService;
+
+    @Async
+    @Override
+    public McR syncBaseAll() {
+        clientService.syncClient();
+        goodsService.syncGoods();
+        procStepService.syncProcStep();
+        employeeService.syncEmplyee();
+
+        return McR.success();
+    }
+
+    @Async
+    @Override
+    public McR syncProcessAll() {
+        processService.syncProcess();
+        processService.syncProcessOut();
+        processService.syncProcessOut2();
+        processService.syncProcessOn();
+        processService.syncProcessOn2();
+
+        return McR.success();
+    }
+}

+ 69 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/impl/EmployeeServiceImpl.java

@@ -0,0 +1,69 @@
+package com.malk.diwei.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.malk.diwei.entity.Employee;
+import com.malk.diwei.mapper.EmployeeMapper;
+import com.malk.diwei.service.EmployeeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-24
+ */
+@Service
+public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {
+    @Autowired
+    private EmployeeMapper employeeMapper;
+
+    @Autowired
+    private YDClient ydClient;
+
+    @Override
+    public McR syncEmplyee() {
+        List<Employee> employeeList = employeeMapper.selectList(null);
+        for (Employee employee : employeeList) {
+            Map formData = new HashMap();
+
+            formData.put("textField_m8msenxy",employee.getEmpName());//名称
+            formData.put("textField_m8msenxz",employee.getEmpCode());//员工编号
+            formData.put("numberField_m8mseny0",employee.getEmpID());//员工id
+            formData.put("radioField_m8msenya",employee.getEmpSex().equals("M") ? "男" : "女");//员工性别
+            formData.put("numberField_m8msenyl",employee.getDeptID());//部门id
+            formData.put("selectField_m8msenyb",employee.getEmpIsSalesman() == 1 ? "是" : "否");//业务员
+            formData.put("numberField_m8mu7y3d",employee.getJobID());//职位id
+            formData.put("selectField_m8msenyj",employee.getEmpIsQCMerchandiser() != null && employee.getEmpIsQCMerchandiser() == 1 ? "是" : "否");//QC跟单
+            formData.put("selectField_m8msenyk",employee.getEmpWorkStatus() == 1 ? "正常" : "停用");//状态
+
+
+            //精准匹配
+            List<Map> jsonString = new ArrayList<>();
+            jsonString.add(UtilMap.map("key, value, type, operator, componentName", "textField_m8msenxz",employee.getEmpCode(),"TEXT","eq","TextField"));
+
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-DDF42AE83D864D88B78721F823E082DFCKUB")
+                    .searchCondition(JSONObject.toJSONString(jsonString))
+                    .formDataJson(JSONObject.toJSONString(formData))
+                    .build(), YDConf.FORM_OPERATION.upsert);
+
+
+        }
+        return McR.success();
+    }
+}

+ 20 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/impl/GoodsPartsServiceImpl.java

@@ -0,0 +1,20 @@
+package com.malk.diwei.service.impl;
+
+import com.malk.diwei.entity.GoodsParts;
+import com.malk.diwei.mapper.GoodsPartsMapper;
+import com.malk.diwei.service.GoodsPartsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-31
+ */
+@Service
+public class GoodsPartsServiceImpl extends ServiceImpl<GoodsPartsMapper, GoodsParts> implements GoodsPartsService {
+
+}

+ 288 - 1
mjava-diwei/src/main/java/com/malk/diwei/service/impl/GoodsServiceImpl.java

@@ -3,6 +3,7 @@ package com.malk.diwei.service.impl;
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.google.common.base.Strings;
 import com.malk.diwei.entity.*;
 import com.malk.diwei.mapper.*;
 import com.malk.diwei.service.GoodsService;
@@ -10,12 +11,17 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.server.common.McR;
+import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilHttp;
+import com.malk.utils.UtilList;
 import com.malk.utils.UtilMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -54,13 +60,25 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
     @Autowired
     private SizeMapper sizeMapper;
 
+    @Autowired
+    private GoodsStockMapper goodsStockMapper;
+
+    @Autowired
+    private EmployeeMapper employeeMapper;
+
+    @Autowired
+    private BomMapper bomMapper;
+
     @Autowired
     private YDClient ydClient;
 
     public McR syncGoods() {
         //查询昨天修改的物料
         LambdaQueryWrapper<Goods> goodsLambdaQueryWrapper = new LambdaQueryWrapper<>();
-//        goodsLambdaQueryWrapper.ge(Goods::getGoodsUpdateDatetime,DateUtil.yesterday());
+        goodsLambdaQueryWrapper.ge(Goods::getGoodsUpdateDatetime,"2025-03-12 00:00:00")
+                .or()
+                .ge(Goods::getGoodsCreateDatetime,"2025-03-12 00:00:00");
+        //DateUtil.beginOfDay(DateUtil.yesterday())
         List<Goods> goods = goodsMapper.selectList(goodsLambdaQueryWrapper);
 
         for (Goods good : goods) {
@@ -155,6 +173,7 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
                     colorLambdaQueryWrapper.eq(Color::getColorID,goodsColor.getColorID());
                     Color color = colorMapper.selectOne(colorLambdaQueryWrapper);
                     if (Objects.nonNull(color)){
+                        colorMap.put("numberField_m8o7fxr6",color.getColorID());
                         colorMap.put("textField_m85b219g",color.getColorName());
                     }
                     colorList.add(colorMap);
@@ -174,6 +193,7 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
                     sizeLambdaQueryWrapper.eq(Size::getSizeID,goodsSize.getSizeID());
                     Size size = sizeMapper.selectOne(sizeLambdaQueryWrapper);
                     if (Objects.nonNull(size)){
+                        sizeMap.put("numberField_m8o7fxr7",size.getSizeID());
                         sizeMap.put("textField_m85b219m",size.getSizeName());
                     }
                     sizeMap.put("textField_m85b219o",goodsSize.getGoodsSizeDes());//备注
@@ -190,8 +210,275 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
                     .searchCondition(JSONObject.toJSONString(searchCondition))
                     .formDataJson(JSONObject.toJSONString(formData))
                     .build(), YDConf.FORM_OPERATION.upsert);
+
+            //临时更新数据
+            /*List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
+                    .formUuid("FORM-06568CCD028F45278F6D571FDD5B91A5X2FX")
+                    .searchCondition(JSONObject.toJSONString(searchCondition))
+                    .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+
+            if(Objects.nonNull(data) && !data.isEmpty()){
+                String formInstId = data.get(0).get("formInstanceId").toString();
+                ydClient.operateData(YDParam.builder()
+                        .formInstId(formInstId)
+                        .updateFormDataJson(JSONObject.toJSONString(formData))
+                        .useLatestVersion(true)
+                        .build(), YDConf.FORM_OPERATION.update);
+            }*/
+
+
+        }
+
+        return McR.success();
+    }
+
+    @Override
+    public McR queryGoodsStock(Integer goodsId, Integer colorId, Integer sizeId) {
+        LambdaQueryWrapper<GoodsStock> goodsStockLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        goodsStockLambdaQueryWrapper.eq(GoodsStock::getGoodsID,goodsId)
+                .eq(GoodsStock::getColorID,colorId)
+                .eq(GoodsStock::getSizeID,sizeId);
+        GoodsStock goodsStock = goodsStockMapper.selectOne(goodsStockLambdaQueryWrapper);
+        if (Objects.nonNull(goodsStock)){
+            BigDecimal goodsStockInQty = goodsStock.getGoodsStockInQty();
+            return McR.success(goodsStockInQty);
+        }else {
+            return McR.success(-1);
+        }
+    }
+
+    @Override
+    public McR addBom(Map map) {
+        if (Objects.isNull(map.get("formInstId"))){
+            return McR.errorParam("实例id为空!");
+        }
+        String formInstId = map.get("formInstId").toString();
+
+        Map formData = ydClient.queryData(YDParam.builder()
+                .formInstId(formInstId)
+                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+
+        Map data = new HashMap();
+
+        data.put("BomCode",formData.get("textField_m85ngbmt"));//单据编码
+        data.put("BomGoodsCode",formData.get("textField_m913mbyz"));//款号
+        data.put("BomProcessPrice",formData.get("numberField_m85ngbna"));//其他工费
+        data.put("BomOtherFeePrice",formData.get("numberField_m85ngbnb"));//其他费用
+
+        String creator = formData.get("textField_m913mbz1").toString();
+        LambdaQueryWrapper<Employee> employeeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        employeeLambdaQueryWrapper.eq(Employee::getEmpName,creator)
+                        .or().eq(Employee::getEmpGamUserID,creator);
+        Employee employee = employeeMapper.selectOne(employeeLambdaQueryWrapper);
+        if (Objects.nonNull(employee)){
+            data.put("BomCreatEmp",creator);//制单人
+        }else {
+            data.put("BomCreatEmp","蒂维");//制单人
+        }
+        data.put("BomOrgName","总部");//组织机构
+        data.put("BomDes",formData.get("textareaField_m85ngbnc"));//备注
+        data.put("BomProofingRequirement",formData.get("textareaField_m85ngbne"));//工艺要求
+
+        //获取所有子表明细(大于50条)
+        //原料明细
+        List<Map> materialDetails2 = getInnerTable("FORM-9A64B193700349F6A090D0D0D38A7F5CK8BG",formInstId,"tableField_m85ngbnd",1,50);
+        //原料分码明细
+        List<Map> materialDetails3 = getInnerTable("FORM-9A64B193700349F6A090D0D0D38A7F5CK8BG",formInstId,"tableField_m8cg47od",1,50);
+        //辅料明细
+        List<Map> sMaterialDetails2 = getInnerTable("FORM-9A64B193700349F6A090D0D0D38A7F5CK8BG",formInstId,"tableField_m8i5xg6k",1,50);
+        //辅料分码明细
+        List<Map> sMaterialDetails3 = getInnerTable("FORM-9A64B193700349F6A090D0D0D38A7F5CK8BG",formInstId,"tableField_m8ih0mhc",1,50);
+
+
+
+        //原料明细
+        List<Map> materialItems = new ArrayList<>();
+
+        for (Map materialDetail : materialDetails2) {
+            Map detail = new HashMap();
+
+            if (Strings.isNullOrEmpty(materialDetail.get("textField_m8i5xg6m").toString())){
+                continue;
+            }
+
+            String uuid = materialDetail.get("textField_m8cg47ol").toString();
+            detail.put("GoodsPartsName",materialDetail.get("selectField_m88elwmx"));//部件
+            detail.put("GoodsColorName",materialDetail.get("textField_m88elwlo"));//成品颜色
+            detail.put("GoodsColorWay",materialDetail.get("textField_m85ngbni"));//色位
+
+            boolean isSplit = false;
+            if (materialDetail.get("radioField_m85ngbnp") != null && materialDetail.get("radioField_m85ngbnp").toString().equals("是")) {
+                isSplit = true;
+            }
+
+            detail.put("GoodsColorIsSplitSize",isSplit);//分码
+            detail.put("MaterialCode",materialDetail.get("textField_m8i5xg6m"));//原料货号
+            detail.put("MaterialColorName",materialDetail.get("textField_m88elwmt"));//原料颜色
+            detail.put("MaterialColorNo",materialDetail.get("textField_m85ngbnn"));//原料色号
+            detail.put("MaterialDes",materialDetail.get("textareaField_m85ngbnu"));//明细备注
+
+            //分码
+            if (isSplit) {
+                List<Map> collect2 = materialDetails3.stream().filter(item ->
+                                item.get("textField_m8cg47of").toString().contains(uuid))
+                        .collect(Collectors.toList());
+
+                for (Map map1 : collect2) {
+                    Map detail2 = new HashMap(detail);
+                    detail2.put("GoodsSizeName",map1.get("textField_m8cg47og"));//成品尺码
+                    detail2.put("MaterialQty",map1.get("numberField_m8cg47oh"));//需求数
+                    detail2.put("MaterialLossRate",map1.get("numberField_m8cg47oi"));//损耗率
+                    detail2.put("MaterialPrice",map1.get("numberField_m8cg47oj"));//成本单价
+                    detail2.put("MaterialVendorName",map1.get("textField_m913mbza"));//供应商
+
+                    materialItems.add(detail2);
+                }
+            }else {
+                detail.put("MaterialQty",materialDetail.get("numberField_m85ngbnq"));//需求数
+                detail.put("MaterialLossRate",materialDetail.get("numberField_m85ngbns"));//损耗率
+                detail.put("MaterialPrice",materialDetail.get("numberField_m85ngbnr"));//成本单价
+                detail.put("MaterialVendorName",materialDetail.get("textField_m913mbz6"));//供应商
+
+                materialItems.add(detail);
+            }
+
+        }
+
+        data.put("MaterialItems",materialItems);//原料明细
+
+        //辅料明细
+        List<Map> sMaterialItems = new ArrayList<>();
+
+        for (Map sMaterialDetail : sMaterialDetails2) {
+            Map detail = new HashMap();
+
+            if (Strings.isNullOrEmpty(sMaterialDetail.get("textField_m8i5xg69").toString())){
+                continue;
+            }
+
+            String uuid = sMaterialDetail.get("textField_m8i5xg65").toString();
+            detail.put("GoodsColorName",sMaterialDetail.get("textField_m8i5xg66"));//成品颜色
+
+            boolean isSplit = false;
+            if (sMaterialDetail.get("radioField_m8i5xg6c") != null && sMaterialDetail.get("radioField_m8i5xg6c").toString().equals("是")) {
+                isSplit = true;
+            }
+
+            detail.put("GoodsColorIsSplitSize",isSplit);//分码
+            detail.put("SMaterialCode",sMaterialDetail.get("textField_m8i5xg69"));//辅料货号
+            detail.put("SMaterialColorName",sMaterialDetail.get("selectField_m96or1zu"));//辅料颜色
+            detail.put("SMaterialDes",sMaterialDetail.get("textareaField_m8i5xg6j"));//明细备注
+
+            //分码
+            if (isSplit) {
+                List<Map> collect2 = sMaterialDetails3.stream().filter(item ->
+                                item.get("textField_m8ih0mh5").toString().contains(uuid))
+                        .collect(Collectors.toList());
+
+                for (Map map1 : collect2) {
+                    Map detail2 = new HashMap(detail);
+
+                    detail2.put("GoodsSizeName",map1.get("textField_m8ih0mh6"));//成品尺码
+                    detail2.put("SMaterialQty",map1.get("numberField_m8ih0mh7"));//需求数
+                    detail2.put("SMaterialLossRate",map1.get("numberField_m8ih0mh8"));//损耗率
+                    detail2.put("SMaterialPrice",map1.get("numberField_m8ih0mh9"));//成本单价
+                    detail2.put("SMaterialVendorName",map1.get("textField_m913mbzc"));//供应商
+
+                    sMaterialItems.add(detail2);
+                }
+            }else {
+                detail.put("SMaterialQty",sMaterialDetail.get("numberField_m8i5xg6e"));//需求数
+                detail.put("SMaterialLossRate",sMaterialDetail.get("numberField_m8i5xg6g"));//损耗率
+                detail.put("SMaterialPrice",sMaterialDetail.get("numberField_m8i5xg6f"));//成本单价
+                detail.put("SMaterialVendorName",sMaterialDetail.get("textField_m913mbzb"));//供应商
+
+                sMaterialItems.add(detail);
+            }
         }
 
+        data.put("SMaterialItems",sMaterialItems);
+
+        //工序明细
+        List<Map> stepItems = new ArrayList<>();
+
+        List<Map> stepItemList = (List<Map>) formData.get("tableField_m85ngbmz");
+        if (Objects.nonNull(stepItemList)){
+            for (Map stepItem : stepItemList) {
+                Map map1 = new HashMap();
+                map1.put("StepName",stepItem.get("textField_m85ngbn0"));//工序名称
+                map1.put("StepUseTime",stepItem.get("numberField_m85ngbn2"));//单间耗时
+                map1.put("StepPrice",stepItem.get("numberField_m85ngbn3"));//工序单价
+                map1.put("StepDes",stepItem.get("textareaField_m85ngbn4"));//备注
+
+                stepItems.add(map1);
+            }
+        }
+
+        //工序为空时也需传
+        data.put("StepItems",stepItems);//工序明细
+
+
+        String s = UtilHttp.doPost("http://47.98.200.166/EpiErp5_DiWei_2023/rest/SyncBom_DW", null, null, data);
+
+        System.out.println(s);
+        String[] jsonParts = s.split("(?<=})"); // 按 } 分割
+
+        for (String jsonPart : jsonParts) {
+            Map parse = (Map) JSONObject.parse(jsonPart);
+            if(Objects.nonNull(parse.get("errcode"))){
+                if (!parse.get("errcode").toString().equals("0")){
+                    return McR.errorUnknown("新增失败!失败原因:"+parse.get("errmsg").toString());
+                }
+            }
+        }
+
+        return McR.success();
+    }
+
+    @Override
+    public McR queryGoodsNewBom(int goodsId) {
+        LambdaQueryWrapper<Bom> bomLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        bomLambdaQueryWrapper.eq(Bom::getGoodsID,goodsId)
+                        .orderByDesc(Bom::getBomID);
+
+
+
+        List<Bom> bomList = bomMapper.selectList(bomLambdaQueryWrapper);
+
+        if (Objects.nonNull(bomList) && !bomList.isEmpty()){
+            return McR.success("当前货号存在最新启用BOM:"+bomList.get(0).getBomCode());
+        }else {
+            return McR.success("未查询到BOM信息!");
+        }
+    }
+
+    @Override
+    public McR queryBomIsExist(String bomCode) {
+        LambdaQueryWrapper<Bom> bomLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        bomLambdaQueryWrapper.eq(Bom::getBomCode,bomCode);
+        List<Bom> bomList = bomMapper.selectList(bomLambdaQueryWrapper);
+        if (Objects.nonNull(bomList) && !bomList.isEmpty()){
+            return McR.errorUnknown("当前BOM已存在!");
+        }
         return McR.success();
     }
+
+    private List<Map> getInnerTable(String formUuid, String formInstId, String tableField, int pageNumber, int pageSize) {
+        List<Map> details = new ArrayList<>();
+        DDR_New ddrNew = new DDR_New();
+
+        do {
+            ddrNew = ydClient.queryData(YDParam.builder()
+                    .formUuid(formUuid)
+                    .formInstId(formInstId)
+                    .tableFieldId(tableField)
+                    .pageNumber(pageNumber)
+                    .pageSize(pageSize)
+                    .build(), YDConf.FORM_QUERY.retrieve_details);
+            details.addAll((List<Map>)ddrNew.getData());
+            pageNumber++;
+        }while (ddrNew.getTotalCount() > pageSize * ddrNew.getPageNumber());
+
+        return details;
+    }
 }

+ 0 - 1
mjava-diwei/src/main/java/com/malk/diwei/service/impl/ProcStepServiceImpl.java

@@ -46,7 +46,6 @@ public class ProcStepServiceImpl extends ServiceImpl<ProcStepMapper, ProcStep> i
     @Override
     public McR syncProcStep() {
         LambdaQueryWrapper<ProcStep>  procStepLambdaQueryWrapper = new LambdaQueryWrapper();
-        procStepLambdaQueryWrapper.eq(ProcStep::getProcStepType, 1);
 
         List<ProcStep> list = procStepMapper.selectList(procStepLambdaQueryWrapper);
 

+ 20 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/impl/ProcessItemServiceImpl.java

@@ -0,0 +1,20 @@
+package com.malk.diwei.service.impl;
+
+import com.malk.diwei.entity.ProcessItem;
+import com.malk.diwei.mapper.ProcessItemMapper;
+import com.malk.diwei.service.ProcessItemService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-04-02
+ */
+@Service
+public class ProcessItemServiceImpl extends ServiceImpl<ProcessItemMapper, ProcessItem> implements ProcessItemService {
+
+}

+ 20 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/impl/ProcessMaterialServiceImpl.java

@@ -0,0 +1,20 @@
+package com.malk.diwei.service.impl;
+
+import com.malk.diwei.entity.ProcessMaterial;
+import com.malk.diwei.mapper.ProcessMaterialMapper;
+import com.malk.diwei.service.ProcessMaterialService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-31
+ */
+@Service
+public class ProcessMaterialServiceImpl extends ServiceImpl<ProcessMaterialMapper, ProcessMaterial> implements ProcessMaterialService {
+
+}

+ 733 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/impl/ProcessServiceImpl.java

@@ -0,0 +1,733 @@
+package com.malk.diwei.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.malk.diwei.entity.*;
+import com.malk.diwei.entity.Process;
+import com.malk.diwei.mapper.*;
+import com.malk.diwei.service.ProcessService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-27
+ */
+@Service
+public class ProcessServiceImpl extends ServiceImpl<ProcessMapper, Process> implements ProcessService {
+    @Autowired
+    private ProcessMapper processMapper;
+
+    @Autowired
+    private DepartmentMapper departmentMapper;
+
+    @Autowired
+    private EmployeeMapper employeeMapper;
+
+    @Autowired
+    private ProcessMaterialMapper processMaterialMapper;
+
+    @Autowired
+    private YDClient ydClient;
+
+    @Autowired
+    private BomMapper bomMapper;
+
+    @Autowired
+    private GoodsMapper goodsMapper;
+
+    @Autowired
+    private ColorMapper colorMapper;
+
+    @Autowired
+    private UnitMapper unitMapper;
+
+    @Autowired
+    private GoodsPartsMapper goodsPartsMapper;
+
+    @Autowired
+    private WorkProcStepMapper workProcStepMapper;
+
+    @Autowired
+    private ClientMapper clientMapper;
+
+    @Autowired
+    private ProcessItemMapper processItemMapper;
+
+    @Autowired
+    private ProcessONDetailMapper processONDetailMapper;
+
+    private static final Map PROC_STEP_TYPE = new HashMap<>();
+
+    static {
+        PROC_STEP_TYPE.put(1, "厂内工序");
+        PROC_STEP_TYPE.put(3, "裁剪工序");
+        PROC_STEP_TYPE.put(4, "工艺委外工序");
+    }
+
+    @Override
+    public McR syncProcess() {
+        LambdaQueryWrapper<Process> processLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        processLambdaQueryWrapper.and(wrapper -> wrapper.ge(Process::getProcessUpdateDatetime, DateUtil.beginOfDay(DateUtil.yesterday()))
+                .or()
+                .ge(Process::getProcessCreateDatetime,DateUtil.beginOfDay(DateUtil.yesterday())))
+                .eq(Process::getEntityObjKey,"ProductionSW")
+                .eq(Process::getProcessStatus,2);
+
+        /*processLambdaQueryWrapper.and(wrapper -> wrapper.ge(Process::getProcessUpdateDatetime, "2025-04-10 00:00:00")
+                        .or()
+                        .ge(Process::getProcessCreateDatetime,"2025-04-10 00:00:00"))
+                .eq(Process::getEntityObjKey,"ProductionSW")
+                .eq(Process::getProcessStatus,2);*/
+        List<Process> processeList= processMapper.selectList(processLambdaQueryWrapper);
+
+        for (Process process : processeList) {
+            Map formData = new HashMap();
+
+            formData.put("dateField_m8pi90ec", process.getProcessDate().getTime());//单据日期
+            formData.put("textField_m8pi90ei",process.getProcessCode());//单据编号
+
+            LambdaQueryWrapper<Bom> bomLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            bomLambdaQueryWrapper.eq(Bom::getBomID, process.getProcessBomID());
+            Bom bom = bomMapper.selectOne(bomLambdaQueryWrapper);
+
+            formData.put("textField_m8pi90ej",bom.getBomCode());//BOM
+            formData.put("dateField_m8pi90eo",process.getProcessDeliveryDate().getTime());//交货日期
+
+            if (process.getProcessDeptID() != null && process.getProcessDeptID() != 0){
+                LambdaQueryWrapper<Department> departmentLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                departmentLambdaQueryWrapper.eq(Department::getDeptID, process.getProcessDeptID());
+                Department department = departmentMapper.selectOne(departmentLambdaQueryWrapper);
+                formData.put("textField_m8pi90eq",department.getDeptName());//部门
+            }
+
+            formData.put("textField_m8pi90es","总部");//组织机构
+            formData.put("textField_m8pi90ex",process.getProcessSOClientName());//订单客户
+            formData.put("textField_m8pi90ey",process.getProcessSOClientOrderCode());//客户订单号
+            formData.put("textField_m8pi90ez",process.getProcessSOGoodsCode());//订单款号
+
+            if (process.getProcessQCMerchandiserID() != null && process.getProcessQCMerchandiserID() != 0){
+                LambdaQueryWrapper<Employee> employeeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                employeeLambdaQueryWrapper.eq(Employee::getEmpID, process.getProcessQCMerchandiserID());
+                Employee employee = employeeMapper.selectOne(employeeLambdaQueryWrapper);
+
+                formData.put("textField_m8pi90f4",employee.getEmpName());//QC跟单
+            }
+
+            formData.put("textareaField_m8pi90f6",process.getProcessDescription());//备注
+
+            //加工产品
+            List<Map> list = processMapper.selectProductById(process.getProcessID());
+            List<Map> collect = list.stream().map(map -> {
+                Map map1 = new HashMap();
+                map1.put("textField_m8pi90fa",map.get("GoodsCode"));//款号
+                map1.put("textField_m8pi90fe",map.get("GoodsName"));//款名
+                map1.put("textField_m8pi90fi",map.get("UnitName"));//单位
+                map1.put("numberField_m8pi90fk",map.get("qty"));//加工数
+                map1.put("textField_m8pi90fm",map.get("ProcessItemReferBillCode"));//引用单据编号
+
+                return map1;
+            }).collect(Collectors.toList());
+
+            formData.put("tableField_m8pi90f9",collect);
+
+            //加工件数
+            int num1 = 0;
+            for (Map map : list) {
+                num1 += ((BigDecimal) map.get("qty")).intValue();
+            }
+            formData.put("numberField_m8pi90hw",num1);
+
+
+
+            //横机/附件外发明细
+            List<Map> processDetailList = processMapper.selectProcessONDetailByCode(process.getProcessCode());
+            List<Map> processDetails = new ArrayList<>();
+            for (Map processDetail : processDetailList) {
+                Map map = new HashMap();
+                map.put("textField_m8pi90fo",processDetail.get("ProcessCode"));//外发单号
+                map.put("dateField_m8pi90fc",((Date)processDetail.get("ProcessDate")).getTime());//外发日期
+                //状态
+                int status = ((Short) processDetail.get("ProcessStatus")).intValue();
+                switch (status){
+                    case 1:map.put("textField_m8pi90fp","草稿");break;
+                    case 2:map.put("textField_m8pi90fp","已提交");break;
+                    case 3:map.put("textField_m8pi90fp","已审核");break;
+                    default:break;
+                }
+                map.put("textField_m8pi90fq",processDetail.get("ClientName"));//加工厂
+                map.put("textField_m8pi90fr",processDetail.get("GoodsPartsName"));//部件
+                map.put("textField_m8pi90ft",processDetail.get("WPSProcStepName"));//工序
+                map.put("textField_m8pi90fv",processDetail.get("GoodsNeedleType"));//针型
+                map.put("textField_m8pi90fx",processDetail.get("GoodsMachineType"));//机型
+                map.put("numberField_m8pi90fz",processDetail.get("WPSHadRecordQty"));//外发数
+
+
+                processDetails.add(map);
+            }
+
+            formData.put("tableField_m8pi90fn",processDetails);
+
+
+            //原料需求
+            double num2 = 0.0;
+            List<Map> processMaterialList = processMaterialMapper.selectProcessMaterialByGoodsProperty(process.getProcessID(),3);
+            List<Map> processMaterials = new ArrayList<>();
+            for (Map processMaterial : processMaterialList) {
+                Map map = new HashMap();
+
+                map.put("textField_m8pi90g3",processMaterial.get("GoodsPartsName"));//部件
+                map.put("textField_m8pi90g5",processMaterial.get("GoodsCode"));//原料编码
+                map.put("textField_m8pi90g7",processMaterial.get("GoodsName"));//原料名称
+                map.put("textField_m8pi90g9",processMaterial.get("ColorName"));//颜色
+                map.put("textField_m8pi90gb",processMaterial.get("ProcessMaterialColorVCode"));//色号
+                map.put("textField_m8pi90gd",processMaterial.get("ProcessMaterialDes"));//批号
+                map.put("textField_m8pi90gf",processMaterial.get("UnitName"));//单位
+                map.put("numberField_m8pi90gh",processMaterial.get("ProcessMaterialQty"));//需求数
+
+                num2 += Double.parseDouble(processMaterial.get("ProcessMaterialQty").toString());
+
+                processMaterials.add(map);
+            }
+
+            formData.put("tableField_m8pi90g2",processMaterials);
+            formData.put("numberField_m8pi90hy",num2);
+
+            //辅料需求
+            double num3 = 0.0;
+            List<Map> processMaterialList2 = processMaterialMapper.selectProcessMaterialByGoodsProperty(process.getProcessID(),4);
+            List<Map> processMaterials2 = new ArrayList<>();
+            for (Map processMaterial : processMaterialList2) {
+                Map map = new HashMap();
+
+                map.put("textField_m8pi90h5",processMaterial.get("GoodsCode"));//辅料编码
+                map.put("textField_m8pi90h6",processMaterial.get("GoodsName"));//辅料名称
+                map.put("textField_m8pi90h7",processMaterial.get("ColorName"));//颜色
+                map.put("textField_m8pi90h9",processMaterial.get("GoodsSpecs"));//规格
+                map.put("textField_m8pi90ha",processMaterial.get("UnitName"));//单位
+                map.put("numberField_m8pi90hb",processMaterial.get("ProcessMaterialQty"));//需求数
+                map.put("numberField_m8pi90he",processMaterial.get("ProcessMaterialPickQty"));//已领数
+
+                num3 += Double.parseDouble(processMaterial.get("ProcessMaterialQty").toString());
+
+                processMaterials2.add(map);
+            }
+
+            formData.put("tableField_m8pi90hc",processMaterials2);
+            formData.put("numberField_m8pi90hz",num3);
+
+            //加工工艺
+            LambdaQueryWrapper<WorkProcStep> workProcStepLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            workProcStepLambdaQueryWrapper.eq(WorkProcStep::getProcessID,process.getProcessID());
+            List<WorkProcStep> workProcStepList = workProcStepMapper.selectList(workProcStepLambdaQueryWrapper);
+            List<Map> workProcSteps = new ArrayList<>();
+            for (WorkProcStep workProcStep : workProcStepList) {
+                Map map = new HashMap();
+                map.put("textField_m8pi90hh",workProcStep.getWPSProcStepName());//工序
+
+                int wpsProcStepType = workProcStep.getWPSProcStepType();
+                map.put("textField_m8pi90hj",PROC_STEP_TYPE.get(wpsProcStepType));//类型
+                map.put("radioField_m8zkxbjm",workProcStep.getWPSProcStepIsFKM() == 1 ? "是" : "否");//横机
+
+                int WPSConfirmQty = 0;
+                if (wpsProcStepType == 4){
+                    WPSConfirmQty = workProcStep.getWPSConfirmQty();
+                }else {
+                    WPSConfirmQty =  ((BigDecimal)list.get(0).get("qty")).intValue();
+                }
+                int WPSHadRecordQty = workProcStep.getWPSHadRecordQty();
+                int WPSUnRecordQty = WPSConfirmQty - WPSHadRecordQty;
+
+                map.put("numberField_m8pi90hp",WPSConfirmQty);//应排
+                map.put("numberField_m8pi90hq",WPSHadRecordQty);//已排
+                map.put("numberField_m8pi90hr",WPSUnRecordQty);//未排
+
+                Long wpsFactoryID = workProcStep.getWPSFactoryID();
+                if (wpsFactoryID != null && wpsFactoryID != 0){
+                    LambdaQueryWrapper<Client> clientLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                    clientLambdaQueryWrapper.eq(Client::getClientID,workProcStep.getWPSFactoryID());
+                    Client client = clientMapper.selectOne(clientLambdaQueryWrapper);
+                    if (client != null){
+                        map.put("textField_m8pi90hn",client.getClientName());//委外加工厂
+                    }
+                }
+
+                workProcSteps.add(map);
+            }
+
+            formData.put("tableField_m8pi90hg",workProcSteps);
+
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-233DD96AE9A342C69DFF33016370504ETO2Z")
+                    .searchCondition(JSONObject.toJSONString(Arrays.asList(YDConf.searchCondition_TextFiled("textField_m8pi90ei",process.getProcessCode(),"eq"))))
+                    .formDataJson(JSONObject.toJSONString(formData))
+                    .build(), YDConf.FORM_OPERATION.upsert);
+        }
+
+        return McR.success();
+    }
+
+    @Override
+    public McR syncProcessOut() {
+        LambdaQueryWrapper<Process> processLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        processLambdaQueryWrapper.and(wrapper -> wrapper.ge(Process::getProcessUpdateDatetime, DateUtil.beginOfDay(DateUtil.yesterday()))
+                        .or()
+                .ge(Process::getProcessCreateDatetime,DateUtil.beginOfDay(DateUtil.yesterday())))
+                .eq(Process::getEntityObjKey,"ProductionProcOutSideN")
+                .eq(Process::getProcessOutSideType,3)
+                .eq(Process::getProcessStatus,2);
+
+        /*processLambdaQueryWrapper.and(wrapper -> wrapper.ge(Process::getProcessUpdateDatetime, "2025-04-10 00:00:00")
+                        .or()
+                        .ge(Process::getProcessCreateDatetime,"2025-04-10 00:00:00"))
+                .eq(Process::getEntityObjKey,"ProductionProcOutSideN")
+                .eq(Process::getProcessOutSideType,3)
+                .eq(Process::getProcessStatus,2);*/
+
+
+        List<Process> processeList= processMapper.selectList(processLambdaQueryWrapper);
+
+        for (Process process : processeList) {
+            Map formData = new HashMap();
+
+            formData.put("dateField_m8pi90ec", process.getProcessDate().getTime());//单据日期
+            formData.put("textField_m8pi90ei",process.getProcessCode());//单据编号
+            formData.put("textField_m8pi90es","总部");//组织机构
+            formData.put("dateField_m8pi90eo",process.getProcessDeliveryDate().getTime());//交货日期
+
+            LambdaQueryWrapper<Client> clientLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            clientLambdaQueryWrapper.eq(Client::getClientID,process.getFactoryID());
+            Client client = clientMapper.selectOne(clientLambdaQueryWrapper);
+            if (Objects.nonNull(client)){
+                formData.put("textField_m8pi90ex",client.getClientName());//加工厂
+            }
+
+            if (process.getProcessSalesmanID() != null && process.getProcessSalesmanID() != 0){
+                LambdaQueryWrapper<Employee> employeeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                employeeLambdaQueryWrapper.eq(Employee::getEmpID, process.getProcessSalesmanID());
+                Employee employee = employeeMapper.selectOne(employeeLambdaQueryWrapper);
+
+                formData.put("textField_m8pjta80",employee.getEmpName());//业务跟单
+            }
+
+            if (process.getProcessQCMerchandiserID() != null && process.getProcessQCMerchandiserID() != 0){
+                LambdaQueryWrapper<Employee> employeeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                employeeLambdaQueryWrapper.eq(Employee::getEmpID, process.getProcessQCMerchandiserID());
+                Employee employee = employeeMapper.selectOne(employeeLambdaQueryWrapper);
+
+                formData.put("textField_m8pi90f4",employee.getEmpName());//QC跟单
+            }
+
+            formData.put("textareaField_m8pi90f6",process.getProcessDescription());//备注
+
+            //外发明细
+            List<Map> outSideDetails = new ArrayList<>();
+            List<Map> outSideDetailList = processMapper.selectOutSideDetails(process.getProcessID());
+            int num = 0;
+            for (Map outSideDetail : outSideDetailList) {
+                Map map = new HashMap();
+
+                map.put("textField_m8pjta82",outSideDetail.get("GoodsPartsName"));//部件
+                map.put("textField_m8pi90fa",outSideDetail.get("GoodsCode"));//款号
+                map.put("textField_m8pi90fe",outSideDetail.get("GoodsName"));//款名
+                map.put("textField_m8pjta83",outSideDetail.get("GoodsNeedleType"));//针型
+                map.put("textField_m8pjta84",outSideDetail.get("GoodsMachineType"));//机型
+                map.put("textField_m8pjta85",outSideDetail.get("ColorName"));//颜色
+                map.put("textField_m8pi90fi",outSideDetail.get("SizeName"));//尺码
+                map.put("textField_m8pjta86",outSideDetail.get("WPSProcStepName"));//工序
+                map.put("numberField_m8pi90fk",outSideDetail.get("ProcessONDetailQty"));//外发数
+                map.put("numberField_m8pjta87",outSideDetail.get("WPSProcStepPrice"));//工序单价
+                map.put("textareaField_m8pjta88",outSideDetail.get("ProcessItemDesc"));//备注
+                map.put("textField_m8pi90fm",outSideDetail.get("ProcessItemReferBillCode"));//加工单号
+
+                num += ((BigDecimal) outSideDetail.get("ProcessONDetailQty")).intValue();
+
+                outSideDetails.add(map);
+            }
+
+            formData.put("tableField_m8pi90f9",outSideDetails);
+            formData.put("numberField_m8pi90hw",num);//外发数合计
+
+            List<Map> processMaterialList = processMaterialMapper.selectProcessMaterialByGoodsProperty(process.getProcessID(),3);
+            List<Map> processMaterials = new ArrayList<>();
+            for (Map processMaterial : processMaterialList) {
+                Map map = new HashMap();
+
+                map.put("textField_m8pi90g3",processMaterial.get("GoodsPartsName"));//部件
+                map.put("textField_m8pi90g5",processMaterial.get("GoodsCode"));//原料编码
+                map.put("textField_m8pi90g7",processMaterial.get("GoodsName"));//原料名称
+                map.put("textField_m8pi90g9",processMaterial.get("ColorName"));//颜色
+                map.put("textField_m8pi90gb",processMaterial.get("ProcessMaterialColorVCode"));//色号
+                map.put("textField_m8pi90gd",processMaterial.get("ProcessMaterialDes"));//批号
+                map.put("textField_m8pi90gf",processMaterial.get("UnitName"));//单位
+                map.put("numberField_m8pi90gh",processMaterial.get("ProcessMaterialQty"));//需求数
+                map.put("numberField_m8pjta81",processMaterial.get("ProcessMaterialPickQty"));//已领数
+
+                processMaterials.add(map);
+            }
+
+            formData.put("tableField_m8pi90g2",processMaterials);
+
+            //辅料需求
+            List<Map> processMaterialList2 = processMaterialMapper.selectProcessMaterialByGoodsProperty(process.getProcessID(),4);
+            List<Map> processMaterials2 = new ArrayList<>();
+            for (Map processMaterial : processMaterialList2) {
+                Map map = new HashMap();
+
+                map.put("textField_m8pi90h5",processMaterial.get("GoodsCode"));//辅料编码
+                map.put("textField_m8pi90h6",processMaterial.get("GoodsName"));//辅料名称
+                map.put("textField_m8pi90h7",processMaterial.get("ColorName"));//颜色
+                map.put("textField_m8pi90h9",processMaterial.get("GoodsSpecs"));//规格
+                map.put("textField_m8pi90ha",processMaterial.get("UnitName"));//单位
+                map.put("numberField_m8pi90hb",processMaterial.get("ProcessMaterialQty"));//需求数
+
+                processMaterials2.add(map);
+            }
+
+            formData.put("tableField_m8pi90hc",processMaterials2);
+
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-BEEFBB3E63CB427DA0FFD4391780ED2AAIQ4")
+                    .searchCondition(JSONObject.toJSONString(Arrays.asList(YDConf.searchCondition_TextFiled("textField_m8pi90ei",process.getProcessCode(),"eq"))))
+                    .formDataJson(JSONObject.toJSONString(formData))
+                    .build(), YDConf.FORM_OPERATION.upsert);
+        }
+
+        return McR.success();
+    }
+
+    @Override
+    public McR syncProcessOut2() {
+        LambdaQueryWrapper<Process> processLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        processLambdaQueryWrapper.and(wrapper -> wrapper.ge(Process::getProcessUpdateDatetime, DateUtil.beginOfDay(DateUtil.yesterday()))
+                        .or()
+                        .ge(Process::getProcessCreateDatetime,DateUtil.beginOfDay(DateUtil.yesterday())))
+                .eq(Process::getEntityObjKey,"ProductionProcOutSideN")
+                .eq(Process::getProcessOutSideType,0)
+                .eq(Process::getProcessStatus,2);
+
+        /*processLambdaQueryWrapper.and(wrapper -> wrapper.ge(Process::getProcessUpdateDatetime, "2025-04-10 00:00:00")
+                        .or()
+                        .ge(Process::getProcessCreateDatetime,"2025-04-10 00:00:00"))
+                .eq(Process::getEntityObjKey,"ProductionProcOutSideN")
+                .eq(Process::getProcessOutSideType,0)
+                .eq(Process::getProcessStatus,2);*/
+        List<Process> processeList= processMapper.selectList(processLambdaQueryWrapper);
+
+        for (Process process : processeList) {
+            Map formData = new HashMap();
+
+            formData.put("dateField_m8pi90ec", process.getProcessDate().getTime());//单据日期
+            formData.put("textField_m8pi90ei",process.getProcessCode());//单据编号
+            formData.put("textField_m8pi90es","总部");//组织机构
+            formData.put("dateField_m8pi90eo",process.getProcessDeliveryDate().getTime());//交货日期
+
+            LambdaQueryWrapper<Client> clientLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            clientLambdaQueryWrapper.eq(Client::getClientID,process.getFactoryID());
+            Client client = clientMapper.selectOne(clientLambdaQueryWrapper);
+            if (Objects.nonNull(client)){
+                formData.put("textField_m8pi90ex",client.getClientName());//加工厂
+            }
+
+            formData.put("textareaField_m8pi90f6",process.getProcessDescription());//备注
+
+            //外发明细
+            double num = 0;
+            double price = 0;
+            List<Map> outSideDetails = new ArrayList<>();
+            List<Map> outSideDetailList = processMapper.selectOutSideDetails(process.getProcessID());
+
+            for (Map outSideDetail : outSideDetailList) {
+                Map map = new HashMap();
+
+                map.put("textField_m8pi90fa",outSideDetail.get("GoodsCode"));//款号
+                map.put("textField_m8pjta85",outSideDetail.get("ColorName"));//颜色
+                map.put("textField_m8pi90fi",outSideDetail.get("SizeName"));//尺码
+                if (Objects.isNull(outSideDetail.get("ColorName")) && Objects.isNull(outSideDetail.get("SizeName"))){
+                    map.put("textField_m8pld6zz","不分色码");
+                }else {
+                    map.put("textField_m8pld6zz","分色分码");
+                }
+                map.put("textField_m8pjta86",outSideDetail.get("WPSProcStepName"));//工序
+                map.put("numberField_m8pi90fk",outSideDetail.get("ProcessItemQty"));//委外件数
+                map.put("numberField_m8pjta87",outSideDetail.get("WPSProcStepPrice"));//工序单价
+                map.put("textareaField_m8pjta88",outSideDetail.get("ProcessItemDesc"));//备注
+                map.put("textField_m8pi90fm",outSideDetail.get("ProcessItemReferBillCode"));//加工单号
+
+                num += ((BigDecimal) outSideDetail.get("ProcessONDetailQty")).doubleValue();
+                price += ((BigDecimal) outSideDetail.get("WPSProcStepPrice")).doubleValue();
+
+                outSideDetails.add(map);
+            }
+
+            formData.put("tableField_m8pi90f9",outSideDetails);
+            formData.put("numberField_m8pi90hw",num);//数量合计
+            formData.put("numberField_m8pld6zw",price);//金额合计
+
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-CBB8EADCBBD84982BAD3C6F38CB56171V6PS")
+                    .searchCondition(JSONObject.toJSONString(Arrays.asList(YDConf.searchCondition_TextFiled("textField_m8pi90ei",process.getProcessCode(),"eq"))))
+                    .formDataJson(JSONObject.toJSONString(formData))
+                    .build(), YDConf.FORM_OPERATION.upsert);
+        }
+
+        return McR.success();
+    }
+
+    @Override
+    public McR syncProcessOn() {
+        LambdaQueryWrapper<ProcessONDetail> processONDetailLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        processONDetailLambdaQueryWrapper.and(wrapper -> wrapper.ge(ProcessONDetail::getProcessONDetailUpdateDate, DateUtil.beginOfDay(DateUtil.yesterday()))
+                .or()
+                .ge(ProcessONDetail::getProcessONDetailCreatDate,DateUtil.beginOfDay(DateUtil.yesterday())))
+                .eq(ProcessONDetail::getProcessONDetailType,2)//回收
+                .eq(ProcessONDetail::getProcessONDetailReceiptWay,2)//扫码录入
+                .like(ProcessONDetail::getProcessONDetailCode,"PCWR");
+
+
+        /*processONDetailLambdaQueryWrapper.and(wrapper -> wrapper.ge(ProcessONDetail::getProcessONDetailUpdateDate, "2025-04-10 00:00:00")
+                        .or()
+                        .ge(ProcessONDetail::getProcessONDetailCreatDate,"2025-04-10 00:00:00"))
+                .eq(ProcessONDetail::getProcessONDetailType,2)//回收
+                .eq(ProcessONDetail::getProcessONDetailReceiptWay,2)//扫码录入
+                .like(ProcessONDetail::getProcessONDetailCode,"PCWR");*/
+        List<ProcessONDetail> processONDetails = processONDetailMapper.selectList(processONDetailLambdaQueryWrapper);
+
+        Set<String> processONDetailCodeSet = new HashSet<>();
+        for (ProcessONDetail processONDetail : processONDetails) {
+            String processONDetailCode = processONDetail.getProcessONDetailCode();
+            processONDetailCodeSet.add(processONDetailCode);
+        }
+
+        for (String processONDetailCode : processONDetailCodeSet) {
+            Map formData = new HashMap();
+
+            //基础信息
+            Map base = processMapper.selectOnBaseInfo(processONDetailCode);
+            formData.put("dateField_m8pi90ec",((Date)base.get("ProcessONDetailDate")).getTime());//单据日期
+            formData.put("textField_m99n1t8f",base.get("ProcessONDetailCode"));//回收单号
+            formData.put("textField_m8pkxdg5",base.get("WPSProcStepName"));//工序
+            formData.put("textField_m8pi90ex",base.get("ClientName"));//加工厂
+
+            //关联明细
+            List<Map> details = new ArrayList<>();
+            List<Map> detailList = processMapper.selectOnDetails(processONDetailCode);
+            int sumQty = 0;
+            double sumWeight = 0;
+            for (Map detail : detailList) {
+                Map map= new HashMap();
+
+                map.put("textField_m8pkxdf6",detail.get("GoodsCode"));//款号
+                map.put("textField_m99n1t8d",detail.get("GoodsName"));//款名
+                map.put("textField_m99n1t8e",detail.get("GoodsPartsName"));//部件
+                map.put("textField_m8pkxdfa",detail.get("ColorName"));//颜色
+                map.put("textField_m8pkxdfb",detail.get("SizeName"));//尺码
+                map.put("numberField_m99n1t88",detail.get("ProcessONDetailQty"));//件数
+                map.put("numberField_m99n1t89",detail.get("ProcessONDetailWeight"));//重量
+                map.put("textField_m99n1t8a",detail.get("ProcessCode"));//外发单号
+                map.put("textField_m99n1t8b",detail.get("ProcessItemReferBillCode"));//毛衫加工单
+
+                sumQty += ((BigDecimal) detail.get("ProcessONDetailQty")).intValue();
+                sumWeight += ((BigDecimal) detail.get("ProcessONDetailWeight")).doubleValue();
+
+                details.add(map);
+            }
+
+            formData.put("tableField_m8pkxdfh",details);
+            formData.put("numberField_m8pkxdgc",sumQty);//件数合计
+            formData.put("numberField_m8pkxdgd",sumWeight);//重量合计
+
+            //款号汇总
+            //将details根据款号、款名、颜色、尺码进行分组,计算总件数、总数量
+            List<Map<String, Object>> summaryList = details.stream()
+                    .collect(Collectors.groupingBy(
+                            detail -> {
+                                // 使用款号、款名、颜色、尺码作为分组键
+                                return detail.get("textField_m8pkxdf6") + "-" +
+                                        detail.get("textField_m99n1t8d") + "-" +
+                                        detail.get("textField_m8pkxdfa") + "-" +
+                                        detail.get("textField_m8pkxdfb");
+                            }
+                    ))
+                    .entrySet().stream()
+                    .map(entry -> {
+                        Map<String, Object> groupSummary = new HashMap<>();
+                        List<Map> groupDetails = entry.getValue();
+                        int totalQty = groupDetails.stream()
+                                .mapToInt(detail -> ((BigDecimal) detail.get("numberField_m99n1t88")).intValue())
+                                .sum();
+                        double totalWeight = groupDetails.stream()
+                                .mapToDouble(detail -> ((BigDecimal) detail.get("numberField_m99n1t89")).doubleValue())
+                                .sum();
+
+                        // 设置汇总信息
+                        groupSummary.put("textField_m99n1t87", entry.getKey().split("-")[0]); //款号
+                        groupSummary.put("textField_m99n1t8c", entry.getKey().split("-")[1]); //款名
+                        groupSummary.put("textField_m8pkxdfl", entry.getKey().split("-")[2]); //颜色
+                        groupSummary.put("textField_m8pkxdfm", entry.getKey().split("-")[3]); //尺码
+                        groupSummary.put("numberField_m8pkxdfn", totalQty); //总件数
+                        groupSummary.put("numberField_m8pkxdfw", totalWeight); //总重量
+
+                        return groupSummary;
+                    })
+                    .collect(Collectors.toList());
+
+            formData.put("tableField_m8pkxdfj",summaryList);
+
+            //条码明细
+            List<Map> cardBarDetails = new ArrayList<>();
+            List<Map> cardBarDetailList = processMapper.selectOnCardBarDetails(processONDetailCode);
+            for (Map cardBarDetail : cardBarDetailList) {
+                Map map= new HashMap();
+                map.put("textField_m99n1t8p",cardBarDetail.get("ProceCardBarCode"));//条码
+
+                cardBarDetails.add(map);
+            }
+            formData.put("tableField_m99n1t8k",cardBarDetails);
+
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-C003D6F6769F400FA324851889EE458EOH9H")
+                    .searchCondition(JSONObject.toJSONString(Arrays.asList(YDConf.searchCondition_TextFiled("textField_m99n1t8f",processONDetailCode,"eq"))))
+                    .formDataJson(JSONObject.toJSONString(formData))
+                    .build(), YDConf.FORM_OPERATION.upsert);
+
+        }
+
+        return McR.success();
+    }
+
+    @Override
+    public McR syncProcessOn2() {
+        LambdaQueryWrapper<ProcessONDetail> processONDetailLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        processONDetailLambdaQueryWrapper.and(wrapper -> wrapper.ge(ProcessONDetail::getProcessONDetailUpdateDate, DateUtil.beginOfDay(DateUtil.yesterday()))
+                        .or()
+                        .ge(ProcessONDetail::getProcessONDetailCreatDate,DateUtil.beginOfDay(DateUtil.yesterday())))//
+                .eq(ProcessONDetail::getProcessONDetailType,2)//回收
+                .eq(ProcessONDetail::getProcessONDetailReceiptWay,2)//扫码录入
+                .like(ProcessONDetail::getProcessONDetailCode,"PCNR");
+
+        /*processONDetailLambdaQueryWrapper.and(wrapper -> wrapper.ge(ProcessONDetail::getProcessONDetailUpdateDate, "2025-04-10 00:00:00")
+                        .or()
+                        .ge(ProcessONDetail::getProcessONDetailCreatDate,"2025-04-10 00:00:00"))//
+                .eq(ProcessONDetail::getProcessONDetailType,2)//回收
+                .eq(ProcessONDetail::getProcessONDetailReceiptWay,2)//扫码录入
+                .like(ProcessONDetail::getProcessONDetailCode,"PCNR");*/
+        List<ProcessONDetail> processONDetails = processONDetailMapper.selectList(processONDetailLambdaQueryWrapper);
+
+        Set<String> processONDetailCodeSet = new HashSet<>();
+        for (ProcessONDetail processONDetail : processONDetails) {
+            String processONDetailCode = processONDetail.getProcessONDetailCode();
+            processONDetailCodeSet.add(processONDetailCode);
+        }
+
+        for (String processONDetailCode : processONDetailCodeSet) {
+            Map formData = new HashMap();
+
+            //基础信息
+            Map base = processMapper.selectOnBaseInfo(processONDetailCode);
+            formData.put("dateField_m8pi90ec",((Date)base.get("ProcessONDetailDate")).getTime());//单据日期
+            formData.put("textField_m99n1t8f",base.get("ProcessONDetailCode"));//回收单号
+            formData.put("textField_m8pkxdg5",base.get("WPSProcStepName"));//工序
+            formData.put("textField_m8pi90ex",base.get("ClientName"));//加工厂
+
+            //关联明细
+            List<Map> details = new ArrayList<>();
+            List<Map> detailList = processMapper.selectOnDetails(processONDetailCode);
+            int sumQty = 0;
+            double sumWeight = 0;
+            for (Map detail : detailList) {
+                Map map= new HashMap();
+
+                map.put("textField_m8pkxdf6",detail.get("GoodsCode"));//款号
+                map.put("textField_m99n1t8d",detail.get("GoodsName"));//款名
+                map.put("textField_m99n1t8e",detail.get("GoodsPartsName"));//部件
+                map.put("textField_m8pkxdfa",detail.get("ColorName"));//颜色
+                map.put("textField_m8pkxdfb",detail.get("SizeName"));//尺码
+                map.put("numberField_m99n1t88",detail.get("ProcessONDetailQty"));//件数
+                map.put("numberField_m99n1t89",detail.get("ProcessONDetailWeight"));//重量
+                map.put("textField_m99n1t8a",detail.get("ProcessCode"));//外发单号
+                map.put("textField_m99n1t8b",detail.get("ProcessItemReferBillCode"));//毛衫加工单
+
+                sumQty += ((BigDecimal) detail.get("ProcessONDetailQty")).intValue();
+                sumWeight += ((BigDecimal) detail.get("ProcessONDetailWeight")).doubleValue();
+
+                details.add(map);
+            }
+
+            formData.put("tableField_m8pkxdfh",details);
+            formData.put("numberField_m8pkxdgc",sumQty);//件数合计
+            formData.put("numberField_m8pkxdgd",sumWeight);//重量合计
+
+            //款号汇总
+            //将details根据款号、款名、颜色、尺码进行分组,计算总件数、总数量
+            List<Map<String, Object>> summaryList = details.stream()
+                    .collect(Collectors.groupingBy(
+                            detail -> {
+                                // 使用款号、款名、颜色、尺码作为分组键
+                                return detail.get("textField_m8pkxdf6") + "-" +
+                                        detail.get("textField_m99n1t8d") + "-" +
+                                        detail.get("textField_m8pkxdfa") + "-" +
+                                        detail.get("textField_m8pkxdfb");
+                            }
+                    ))
+                    .entrySet().stream()
+                    .map(entry -> {
+                        Map<String, Object> groupSummary = new HashMap<>();
+                        List<Map> groupDetails = entry.getValue();
+                        int totalQty = groupDetails.stream()
+                                .mapToInt(detail -> ((BigDecimal) detail.get("numberField_m99n1t88")).intValue())
+                                .sum();
+                        double totalWeight = groupDetails.stream()
+                                .mapToDouble(detail -> ((BigDecimal) detail.get("numberField_m99n1t89")).doubleValue())
+                                .sum();
+
+                        // 设置汇总信息
+                        groupSummary.put("textField_m99n1t87", entry.getKey().split("-")[0]); //款号
+                        groupSummary.put("textField_m99n1t8c", entry.getKey().split("-")[1]); //款名
+                        groupSummary.put("textField_m8pkxdfl", entry.getKey().split("-")[2]); //颜色
+                        groupSummary.put("textField_m8pkxdfm", entry.getKey().split("-")[3]); //尺码
+                        groupSummary.put("numberField_m8pkxdfn", totalQty); //总件数
+                        groupSummary.put("numberField_m8pkxdfw", totalWeight); //总重量
+
+                        return groupSummary;
+                    })
+                    .collect(Collectors.toList());
+
+            formData.put("tableField_m8pkxdfj",summaryList);
+
+            //条码明细
+            List<Map> cardBarDetails = new ArrayList<>();
+            List<Map> cardBarDetailList = processMapper.selectOnCardBarDetails2(processONDetailCode);
+            for (Map cardBarDetail : cardBarDetailList) {
+                Map map= new HashMap();
+                map.put("textField_m99n1t8p",cardBarDetail.get("ProceCardBarCode"));//条码
+
+                cardBarDetails.add(map);
+            }
+            formData.put("tableField_m99n1t8k",cardBarDetails);
+
+            ydClient.operateData(YDParam.builder()
+                    .formUuid("FORM-B6D30D0FD0064383BBD45DD64078B31E3KQK")
+                    .searchCondition(JSONObject.toJSONString(Arrays.asList(YDConf.searchCondition_TextFiled("textField_m99n1t8f",processONDetailCode,"eq"))))
+                    .formDataJson(JSONObject.toJSONString(formData))
+                    .build(), YDConf.FORM_OPERATION.upsert);
+
+        }
+
+        return McR.success();
+    }
+}

+ 20 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/impl/SalesOrderItemServiceImpl.java

@@ -0,0 +1,20 @@
+package com.malk.diwei.service.impl;
+
+import com.malk.diwei.entity.SalesOrderItem;
+import com.malk.diwei.mapper.SalesOrderItemMapper;
+import com.malk.diwei.service.SalesOrderItemService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+@Service
+public class SalesOrderItemServiceImpl extends ServiceImpl<SalesOrderItemMapper, SalesOrderItem> implements SalesOrderItemService {
+
+}

+ 160 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/impl/SalesOrderServiceImpl.java

@@ -0,0 +1,160 @@
+package com.malk.diwei.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.malk.diwei.entity.Color;
+import com.malk.diwei.entity.Employee;
+import com.malk.diwei.entity.SalesOrder;
+import com.malk.diwei.entity.Size;
+import com.malk.diwei.mapper.ColorMapper;
+import com.malk.diwei.mapper.EmployeeMapper;
+import com.malk.diwei.mapper.SalesOrderMapper;
+import com.malk.diwei.mapper.SizeMapper;
+import com.malk.diwei.service.SalesOrderService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilHttp;
+import com.malk.utils.UtilMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-03-28
+ */
+@Service
+public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOrder> implements SalesOrderService {
+    @Autowired
+    private YDClient ydClient;
+
+    @Autowired
+    private ColorMapper colorMapper;
+
+    @Autowired
+    private SizeMapper sizeMapper;
+
+    @Autowired
+    private EmployeeMapper employeeMapper;
+
+    @Autowired
+    private SalesOrderMapper salesOrderMapper;
+
+    @Override
+    public McR addSaleOrder(Map map) {
+        if (Objects.isNull(map.get("formInstId"))){
+            return McR.errorParam("实例id为空!");
+        }
+        String formInstId = map.get("formInstId").toString();
+
+        Map formData = ydClient.queryData(YDParam.builder()
+                .formInstId(formInstId)
+                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+
+        Map salesOrder = new HashMap();
+        //将时间戳转化为字符串 年月日格式
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+        LambdaQueryWrapper<SalesOrder> salesOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        salesOrderLambdaQueryWrapper.ge(SalesOrder::getSalesOrderCreateDatetime, DateUtil.beginOfDay(new Date()))
+                .orderByDesc(SalesOrder::getSalesOrderID);
+        List<SalesOrder> salesOrderList = salesOrderMapper.selectList(salesOrderLambdaQueryWrapper);
+        String newSalesOrderCode = "";
+        if (Objects.nonNull(salesOrderList) && !salesOrderList.isEmpty()){
+            String salesOrderCode = salesOrderList.get(0).getSalesOrderCode();//格式:SO-yyyyMMdd-0001
+
+            //salesOrderCode累加
+            String[] split = salesOrderCode.split("-");
+            int i = Integer.parseInt(split[2]) + 1;
+
+            newSalesOrderCode = "SO-"+split[1]+"-"+String.format("%04d",i);
+        }else {
+            newSalesOrderCode = "SO-"+sdf.format(new Date())+"-0001";
+        }
+
+        salesOrder.put("SalesOrderCode",newSalesOrderCode);//订单编号
+        salesOrder.put("SalesOrderDate",sdf.format(new Date((long) formData.get("dateField_m8mpzwsh"))));//销售订单日期
+        salesOrder.put("ClientName",formData.get("textField_m8s4mqfv"));//客户名称
+        salesOrder.put("ClientLinkMan",formData.get("textField_m8mpzwst"));//联系记录
+        salesOrder.put("ClientLinkMob",formData.get("textField_m8mpzwsu"));//联系手机
+        salesOrder.put("ClientLinkTel",formData.get("textField_m8mpzwsv"));//联系电话
+        salesOrder.put("SalesOrderDeptName",formData.get("textField_m8mv98nf"));//部门
+        salesOrder.put("SalesOrderContractNo",formData.get("textField_m8mpzwt1"));//合同号
+        //订单性质
+        if (Objects.nonNull(formData.get("selectField_m8mpzwt2"))){
+            switch (formData.get("selectField_m8mpzwt2").toString()){
+                case "销售样":
+                    salesOrder.put("SalesOrderProperty",1);
+                    break;
+                case "大货订单":
+                    salesOrder.put("SalesOrderProperty",2);
+                    break;
+            }
+        }
+        salesOrder.put("SalesOrderDZPercent",formData.get("numberField_m8mpzwt7"));//短装数
+        salesOrder.put("SalesOrderYZPercent",formData.get("numberField_m8mpzwt8"));//溢装数
+        salesOrder.put("SalesOrderDeliveryDate",sdf.format(new Date((long) formData.get("dateField_m8mpzwso"))));//交货日期
+        salesOrder.put("SalesOrderDeliveryAddress",formData.get("textareaField_m8mpzwtj"));//交货地址
+        salesOrder.put("SalesmanName",formData.get("textField_m8s4mqg0"));//业务员
+
+        String creator = formData.get("textField_m8mpzwt0").toString();
+        LambdaQueryWrapper<Employee> employeeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        employeeLambdaQueryWrapper.eq(Employee::getEmpName,creator)
+                .or().eq(Employee::getEmpGamUserID,creator);
+        Employee employee = employeeMapper.selectOne(employeeLambdaQueryWrapper);
+        if (Objects.nonNull(employee)){
+            salesOrder.put("SalesOrderCreatEmp",creator);//制单人
+        }else {
+            salesOrder.put("SalesOrderCreatEmp","蒂维");//制单人
+        }
+
+        salesOrder.put("SalesOrderFollowEmp",formData.get("textField_m8s4mqg0"));//业务跟单
+        salesOrder.put("SalesOrderQCFollowEmp",formData.get("textField_m8s4mqg2"));//QC跟单
+        salesOrder.put("SalesOrderDescription",formData.get("textareaField_m8mpzwti"));//单据备注
+        salesOrder.put("SalesOrderOrgName","总部");//组织机构
+
+        List<Map> billItems = new ArrayList<>();
+        List<Map> details = (List<Map>) formData.get("tableField_m8mpzwtk");
+        for (Map detail : details) {
+            Map billItem = new HashMap();
+            billItem.put("GoodsCode",formData.get("textField_m8mpzwtl"));//款号
+
+            billItem.put("ColorName",detail.get("selectField_m8nxpzya"));//颜色
+            billItem.put("SizeName",detail.get("selectField_m8nxpzy8"));//尺码
+            billItem.put("SalesOrderItemPrice",detail.get("numberField_m8mpzwtu"));//销售单价
+            billItem.put("SalesOrderItemQty",detail.get("numberField_m8mpzwts"));//订单件数
+            billItem.put("SalesOrderItemAmount",detail.get("numberField_m8mpzwtv"));//订单金额
+            billItem.put("SalesOrderItemIsGift",detail.get("radioField_m8mpzwtw").toString().equals("是"));//是否赠品
+            billItem.put("SalesOrderItemDescription",detail.get("textareaField_m8mpzwtt"));//明细备注
+
+            billItems.add(billItem);
+        }
+
+        salesOrder.put("BillItems",billItems);
+
+        String s = UtilHttp.doPost("http://47.98.200.166/EpiErp5_DiWei_2023/rest/SyncSalesOrder_DW", null, null, salesOrder);
+
+        Map parse = (Map) JSONObject.parse(s);
+
+        if (!parse.get("errcode").toString().equals("0")){
+            return McR.errorUnknown("新增失败!失败原因:"+parse.get("errmsg").toString());
+        }else {
+            ydClient.operateData(YDParam.builder()
+                    .formInstId(formInstId)
+                    .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_m9cgygm3",newSalesOrderCode)))
+                    .build(), YDConf.FORM_OPERATION.update);
+        }
+
+        return McR.success();
+    }
+}

+ 20 - 0
mjava-diwei/src/main/java/com/malk/diwei/service/impl/WorkProcStepServiceImpl.java

@@ -0,0 +1,20 @@
+package com.malk.diwei.service.impl;
+
+import com.malk.diwei.entity.WorkProcStep;
+import com.malk.diwei.mapper.WorkProcStepMapper;
+import com.malk.diwei.service.WorkProcStepService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author WZY
+ * @since 2025-04-02
+ */
+@Service
+public class WorkProcStepServiceImpl extends ServiceImpl<WorkProcStepMapper, WorkProcStep> implements WorkProcStepService {
+
+}

+ 1 - 1
mjava-diwei/src/main/java/com/malk/diwei/utils/MPGenerator.java

@@ -35,7 +35,7 @@ public class MPGenerator {
                             .entity("entity");
                 })
                 .strategyConfig(builder -> {
-                    builder.addInclude("Size")
+                    builder.addInclude("ProcessONDetail")
                             .entityBuilder().enableLombok();
                 })
                 .templateEngine(new VelocityTemplateEngine())

+ 24 - 7
mjava-diwei/src/main/resources/application-prod.yml

@@ -11,17 +11,34 @@ logging:
   level:
     com.malk.*: debug
 
+spring:
+  datasource:
+    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+    url: jdbc:sqlserver://47.98.200.166:1433;databaseName=GT_DB_Epi5
+    username: dw
+    password: Goodtek2008
+
+mybatis-plus:
+  configuration:
+    #开启驼峰命名自动映射
+    map-underscore-to-camel-case: false
+    #开启日志打印
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  type-aliases-package: com.malk.diwei.entity
+  #扫描mapper文件
+  mapper-locations: classpath:mapper/*.xml
+
 # dingtalk
 dingtalk:
-  agentId: 3366214854
-  appKey: dingntvkzjzxdx8h2m1s
-  appSecret: YfaV5mYOL4F--P8P_G9aD8DP_a8_IgM6dBILsSaTb4LeUZYSntacol55O1tJuqcU
-  corpId: ding923faa53d9d45937acaaa37764f94726
+  agentId:
+  appKey: dinglrt7qaqjmlnwaaul
+  appSecret: FBWNzNC8i9srucJmqo5iOo61icmbzA_dDquuIzVXYa2hSlP8aGIrhYPeQXemqy3Z
+  corpId:
   aesKey:
   token:
-  operator: 344749020127590108
+  operator:
 
 aliwork:
-  appType: APP_XPPVVMG6HA0GNDPJV4C1
-  systemToken: 8R7668D1P92RSNTS7OKZG5UR9P333QA7GAJ4MTG
+  appType: APP_D7TTZKL8C03JKEWCNW74
+  systemToken: TCC66771RQETFGT5DYPUGAXP4GRC29A6HCV7MV19
 

+ 5 - 0
mjava-diwei/src/main/resources/mapper/BomItemMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.diwei.mapper.BomItemMapper">
+
+</mapper>

+ 5 - 0
mjava-diwei/src/main/resources/mapper/BomMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.diwei.mapper.BomMapper">
+
+</mapper>

+ 5 - 0
mjava-diwei/src/main/resources/mapper/DepartmentMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.diwei.mapper.DepartmentMapper">
+
+</mapper>

+ 5 - 0
mjava-diwei/src/main/resources/mapper/EmployeeMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.diwei.mapper.EmployeeMapper">
+
+</mapper>

+ 5 - 0
mjava-diwei/src/main/resources/mapper/GoodsPartsMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.diwei.mapper.GoodsPartsMapper">
+
+</mapper>

+ 5 - 0
mjava-diwei/src/main/resources/mapper/GoodsSizeMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.diwei.mapper.GoodsSizeMapper">
+
+</mapper>

+ 5 - 0
mjava-diwei/src/main/resources/mapper/GoodsStockMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.diwei.mapper.GoodsStockMapper">
+
+</mapper>

+ 5 - 0
mjava-diwei/src/main/resources/mapper/ProcessItemMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.diwei.mapper.ProcessItemMapper">
+
+</mapper>

+ 252 - 0
mjava-diwei/src/main/resources/mapper/ProcessMapper.xml

@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.diwei.mapper.ProcessMapper">
+    <select id="selectProductById" resultType="java.util.Map">
+        select
+            g.GoodsCode,
+            g.GoodsName,
+            u.UnitName,
+            tmp.qty,
+            tmp.ProcessItemReferBillCode
+        from
+            (
+                select
+                    ProcessID,
+                    GoodsID ,
+                    UnitID,
+                    SUM(ProcessItemQty) as qty,
+                    ProcessItemReferBillCode
+                from
+                    ProcessItem
+                where
+                    ProcessID = #{processID}
+                group by
+                    ProcessID,
+                    GoodsID ,
+                    UnitID,
+                    ProcessItemReferBillCode) tmp
+                INNER join Goods g
+                           on
+                               tmp.GoodsID = g.GoodsID
+                inner join Unit u
+                           on
+                               tmp.UnitID = u.UnitID
+    </select>
+    <select id="selectProcessONDetailByCode" resultType="java.util.Map">
+        SELECT
+            p.ProcessID ,p.ProcessCode ,p.ProcessDate ,p.ProcessStatus ,c.ClientName ,gp2.GoodsPartsName,
+            wps.WPSProcStepName,g.GoodsID ,g.GoodsNeedleType,g.GoodsMachineType,wps.WPSHadRecordQty
+        from
+            ProcessItem pi2
+        inner join
+            Process p
+        on
+            pi2.ProcessID = p.ProcessID
+        inner join
+            WorkProcStep wps
+        on
+            pi2.ProcessID = wps.ProcessID
+        inner join
+            Goods g
+        on
+            wps.GoodsID = g.GoodsID
+        inner join
+            Client c
+        ON
+            wps.WPSFactoryID = c.ClientID
+        inner JOIN
+            (
+            select
+                pm.ProcessID,gp.GoodsPartsName
+            from
+                ProcessMaterial pm
+            inner join
+                GoodsParts gp
+            on
+                pm.ProcessMaterialGoodsPartsID = gp.GoodsPartsID
+            group by
+                pm.ProcessID,gp.GoodsPartsName
+            ) gp2
+        on
+            pi2.ProcessID = gp2.ProcessID
+        where
+            pi2.ProcessItemReferBillCode = #{processCode}
+    </select>
+    <select id="selectOutSideDetails" resultType="java.util.Map">
+        --查询外发单外发明细
+        select
+            gp.GoodsPartsName ,
+            g.GoodsCode ,
+            g.GoodsName ,
+            g.GoodsNeedleType ,
+            g.GoodsMachineType ,
+            c.ColorName,
+            s.SizeName ,
+            wps.WPSProcStepName ,
+            po.ProcessONDetailQty,
+            wps.WPSProcStepPrice ,
+            po.ProcessONDetailDes,
+            pi2.ProcessItemReferBillCode
+        from
+            ProcessItem pi2
+        inner join
+            ProcessONDetail po
+        on
+            po.ProcessID = pi2.ProcessID
+        left join
+            PCONDetailParts pp
+        on
+            po.ProcessONDetailID = pp.ProcessONDetailID
+        left join
+            GoodsParts gp
+        on
+            pp.GoodsPartsID = gp.GoodsPartsID
+        left join
+            Goods g
+        on
+            pi2.GoodsID = g.GoodsID
+        left join
+            Color c
+        on
+            po.PCNODColorID = c.ColorID
+        left join
+            [Size] s
+        on
+            po.PCNODSizeID = s.SizeID
+        left join
+            WorkProcStep wps
+        on
+            pi2.ProcessID = wps.ProcessID
+        where
+            pi2.ProcessID = #{processID}
+        and
+            po.ProcessONDetailType = 1
+    </select>
+
+    <select id="selectOnDetails" resultType="java.util.Map">
+        --查询回收单关联明细
+        select
+            po.ProcessID,
+            po.ProcessItemID,
+            g.GoodsCode,
+            g.GoodsName,
+            gp.GoodsPartsName ,
+            c.ColorName,
+            s.SizeName,
+            po.ProcessONDetailQty,
+            po.ProcessONDetailWeight,
+            p.ProcessCode,
+            po.PCONDPackageBarCode,
+            pi2.ProcessItemReferBillCode
+        from
+            ProcessONDetail po
+        left join
+            Process p
+        on
+            po.ProcessID = p.ProcessID
+        left join
+            ProcessItem pi2
+        on
+            pi2.ProcessID = po.ProcessID and pi2.ProcessItemID = po.ProcessItemID
+        left JOIN
+            PCONDetailParts pp
+        on
+            po.ProcessONDetailID = pp.ProcessONDetailID
+        left join
+            GoodsParts gp
+        on
+            pp.GoodsPartsID = gp.GoodsPartsID
+        left JOIN
+            Goods g
+        on
+            pi2.GoodsID = g.GoodsID
+        left JOIN
+            Color c
+        on
+            po.PCNODColorID = c.ColorID
+        left JOIN
+            [Size] s
+        on
+            po.PCNODSizeID = s.SizeID
+        where
+            po.processONDetailCode = #{processONDetailCode}
+        AND
+            ProcessONDetailType = 2
+        and
+            ProcessONDetailReceiptWay = 2
+    </select>
+
+    <select id="selectOnCardBarDetails" resultType="java.util.Map">
+        --查询回收单条码明细
+        SELECT
+            po.ProcessONDetailID,
+            po.ProcessONDetailCode,
+            pbc.ProceCardID,
+            pc.ProceCardBarCode
+        from
+            ProcessONDetail po
+        inner join
+            PCONDetailBarCode pbc
+        on
+            po.ProcessONDetailID = pbc.ProcessONDetailID
+        INNER JOIN
+            ProcessCard pc
+        on
+            pbc.ProceCardID = pc.ProceCardID
+        where
+            po.ProcessONDetailCode = #{processONDetailCode}
+        order BY
+            pc.ProceCardBarCode
+    </select>
+
+    <select id="selectOnBaseInfo" resultType="java.util.Map">
+        --查询回收单基础信息
+        select top 1
+	        po.ProcessONDetailDate,
+            po.ProcessONDetailCode,
+            wps.WPSProcStepName,
+            c.ClientName
+        from
+            ProcessONDetail po
+        inner join
+            WorkProcStep wps
+        on
+            po.ProcessID = wps.ProcessID
+        inner JOIN
+            Client c
+        on
+            wps.WPSFactoryID = c.ClientID
+        where
+            ProcessONDetailCode = #{processONDetailCode}
+        AND
+            ProcessONDetailType = 2
+        and
+            ProcessONDetailReceiptWay = 2
+        group by
+            po.ProcessONDetailDate,
+            po.ProcessONDetailCode,
+            wps.WPSProcStepName,
+            c.ClientName
+    </select>
+    <select id="selectOnCardBarDetails2" resultType="java.util.Map">
+        --查询工艺回收单条码明细
+        SELECT
+            po.ProcessONDetailID ,po.ProcessONDetailCode,pc2.ProceCardID ,pc.ProceCardBarCode,
+            pc2.PCONDDetailCardQty,pc2.PCONDCProcStepID,pc2.PCONDCFactoryName,pc2.PCONDCProcessCode
+        from
+            ProcessONDetail po
+                inner join
+            PCONDetailCard pc2
+            on
+                po.ProcessONDetailID = pc2.ProcessONDetailID
+                INNER JOIN
+            ProcessCard pc
+            on
+                pc2.ProceCardID = pc.ProceCardID
+        where
+            po.ProcessONDetailCode = #{processONDetailCode}
+        order BY
+            pc.ProceCardBarCode
+    </select>
+
+</mapper>

+ 43 - 0
mjava-diwei/src/main/resources/mapper/ProcessMaterialMapper.xml

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.diwei.mapper.ProcessMaterialMapper">
+
+    <select id="selectProcessMaterialByGoodsProperty" resultType="java.util.Map">
+        SELECT
+            pm.ProcessMaterialID,
+            pm.ProcessID,
+            gp.GoodsPartsName,
+            g.GoodsID,
+            g.GoodsCode,
+            g.GoodsName,
+            g.GoodsSpecs,
+            c.ColorName,
+            pm.ProcessMaterialColorVCode,
+            pm.ProcessMaterialDes,
+            u.UnitName,
+            pm.ProcessMaterialQty,
+            pm.ProcessMaterialPickQty
+        from
+            ProcessMaterial pm
+        left join
+            Goods g
+        on
+            pm.GoodsID = g.GoodsID
+        left join
+            GoodsParts gp
+        on
+            pm.ProcessMaterialGoodsPartsID = gp.GoodsPartsID
+        left join
+            Color c
+        on
+            pm.ColorID = c.ColorID
+        left join
+            Unit u
+        on
+            pm.UnitID = u.UnitID
+        where
+            pm.ProcessID = #{processId}
+        and
+            g.GoodsProperty = #{goodsProperty}
+    </select>
+</mapper>

+ 5 - 0
mjava-diwei/src/main/resources/mapper/SalesOrderItemMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.diwei.mapper.SalesOrderItemMapper">
+
+</mapper>

+ 5 - 0
mjava-diwei/src/main/resources/mapper/SalesOrderMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.diwei.mapper.SalesOrderMapper">
+
+</mapper>

+ 5 - 0
mjava-diwei/src/main/resources/mapper/SizeMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.diwei.mapper.SizeMapper">
+
+</mapper>

+ 5 - 0
mjava-diwei/src/main/resources/mapper/WorkProcStepMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.malk.diwei.mapper.WorkProcStepMapper">
+
+</mapper>

+ 22 - 0
mjava-diwei/src/test/java/com/malk/diwei/DwTest.java

@@ -0,0 +1,22 @@
+package com.malk.diwei;
+
+import com.malk.diwei.service.ProcessService;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@Slf4j
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class DwTest {
+    @Autowired
+    private ProcessService processService;
+
+    @Test
+    public void test(){
+        processService.syncProcess();
+    }
+}