Browse Source

锤子塑业代码初始化

fyz 2 months ago
parent
commit
0a859498b2
32 changed files with 1452 additions and 0 deletions
  1. 87 0
      mjava-chuizi/pom.xml
  2. 17 0
      mjava-chuizi/src/main/java/com/malk/chuizi/ChuiZiApplication.java
  3. 22 0
      mjava-chuizi/src/main/java/com/malk/chuizi/common/SeqHelper.java
  4. 24 0
      mjava-chuizi/src/main/java/com/malk/chuizi/config/KDWebApiConf.java
  5. 29 0
      mjava-chuizi/src/main/java/com/malk/chuizi/config/KDWebApiConfig.java
  6. 28 0
      mjava-chuizi/src/main/java/com/malk/chuizi/controller/ChuiziController.java
  7. 22 0
      mjava-chuizi/src/main/java/com/malk/chuizi/controller/DDController.java
  8. 83 0
      mjava-chuizi/src/main/java/com/malk/chuizi/delegate/DDDelegate.java
  9. 22 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/AccountsPayableEntity.java
  10. 26 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/Audit.java
  11. 18 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/BillQuery.java
  12. 15 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/BillTypeID.java
  13. 33 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/Customer.java
  14. 25 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/DefectEntity.java
  15. 15 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/FNumber.java
  16. 63 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/ForecastEntity.java
  17. 16 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/LinkEntry.java
  18. 33 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/Model.java
  19. 28 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/OtherMeet.java
  20. 29 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/OtherMeetEntity.java
  21. 29 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/SaleOrderEntry.java
  22. 16 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/SaleOrderFinance.java
  23. 24 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/Save.java
  24. 22 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/Submit.java
  25. 14 0
      mjava-chuizi/src/main/java/com/malk/chuizi/entity/View.java
  26. 17 0
      mjava-chuizi/src/main/java/com/malk/chuizi/service/ChuiZiService.java
  27. 472 0
      mjava-chuizi/src/main/java/com/malk/chuizi/service/impl/ChuiZiServiceImpl.java
  28. 49 0
      mjava-chuizi/src/main/resources/application-dev.yml
  29. 49 0
      mjava-chuizi/src/main/resources/application-dev2.yml
  30. 49 0
      mjava-chuizi/src/main/resources/application-prod.yml
  31. 15 0
      mjava-chuizi/src/main/resources/application.yml
  32. 61 0
      mjava-chuizi/src/main/resources/logback-spring.xml

+ 87 - 0
mjava-chuizi/pom.xml

@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.2.0.RELEASE</version> <!-- 使用最新的稳定版或其他适用版本 -->
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+
+    <groupId>com.malk.chuizi</groupId>
+    <artifactId>mjava-chuizi</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.malk</groupId>
+            <artifactId>base</artifactId>
+            <version>1.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.example</groupId>
+            <artifactId>k3cloud</artifactId>
+            <version>8.0.6</version>
+        </dependency>
+        <dependency>
+            <groupId>com.example</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.0</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </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>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
+
+
+    </dependencies>
+
+    <build>
+        <finalName>chuzii</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <executable>true</executable>
+                    <includeSystemScope>true</includeSystemScope>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 17 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/ChuiZiApplication.java

@@ -0,0 +1,17 @@
+package com.malk.chuizi;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication(scanBasePackages = {"com.malk"})
+@EnableScheduling
+public class ChuiZiApplication {
+    public static void main(String[] args) {
+        try {
+            SpringApplication.run(ChuiZiApplication.class,args);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+}

+ 22 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/common/SeqHelper.java

@@ -0,0 +1,22 @@
+package com.malk.chuizi.common;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class SeqHelper {
+    static long seq = 0L;
+    static int mod = 10000;
+
+    public SeqHelper() {
+    }
+
+    public static long genSeq() {
+        return ++seq;
+    }
+
+    public static String genNumber(String pre) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMHHmmss");
+        String id = sdf.format(new Date());
+        return pre == null ? id + (genSeq() + (long)mod) : pre + id + (genSeq() + (long)mod);
+    }
+}

+ 24 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/config/KDWebApiConf.java

@@ -0,0 +1,24 @@
+package com.malk.chuizi.config;
+
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "kingdee")
+@Slf4j
+public class KDWebApiConf {
+
+    private String XKDApiAcctID;
+
+    private String XKDApiUserName;
+
+    private String XKDApiAppID;
+
+    private String XKDApiAppSec;
+
+    private String XKDApiServerUrl;
+
+}

+ 29 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/config/KDWebApiConfig.java

@@ -0,0 +1,29 @@
+package com.malk.chuizi.config;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+public class KDWebApiConfig {
+    private Properties properties = new Properties();
+
+    public KDWebApiConfig(String filePath) throws IOException {
+        try (FileInputStream input = new FileInputStream(filePath)) {
+            properties.load(input);
+        }
+    }
+
+    public String getProperty(String key) {
+        return properties.getProperty(key);
+    }
+
+    public static void main(String[] args) {
+        try {
+            KDWebApiConfig config = new KDWebApiConfig("mjava-jianhui/src/main/resources/application-dev.yml");
+            System.out.println("AcctID: " + config.getProperty("X-KDApi-AcctID"));
+            // 打印其他属性...
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 28 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/controller/ChuiziController.java

@@ -0,0 +1,28 @@
+package com.malk.chuizi.controller;
+
+import com.malk.chuizi.service.ChuiZiService;
+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.PostMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class ChuiziController {
+
+    @Autowired
+    private ChuiZiService jianhuiService;
+
+    @GetMapping("/test")
+    public McR test(){
+        return McR.success();
+    }
+
+    //新增其他应付单
+//    @PostMapping("/saveOtherMeet")
+//    public McR saveOtherMeet(String processInstanceId) {
+//        return jianhuiService.saveOtherMeet(processInstanceId);
+//    }
+
+
+}

+ 22 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/controller/DDController.java

@@ -0,0 +1,22 @@
+package com.malk.chuizi.controller;
+
+import com.malk.controller.DDCallbackController;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 钉钉事件回调 3_1
+ * -
+ * [子项目直接继承即可有调用, 无需实现]
+ * -
+ * 注解 @RequestMapping 路径不能重复 [主子项目属同一个项目];
+ * 获取项目回调请求地址, https://mc.cloudpure.cn/frp/xxx/dd/callback [调试代理: frp + nginx]
+ */
+@Slf4j
+@RestController
+@RequestMapping("/dd")
+public class DDController extends DDCallbackController {
+
+
+}

+ 83 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/delegate/DDDelegate.java

@@ -0,0 +1,83 @@
+package com.malk.chuizi.delegate;
+
+import com.malk.chuizi.service.ChuiZiService;
+import com.malk.delegate.DDEvent;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Personnel;
+import com.malk.service.dingtalk.DDClient_Workflow;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * OA审批事件 [主项目也有实现, 添加 @Primary 优先注入主项目实现]
+ * -
+ * 取消方案: 撤销和拒绝流程不继续执行连接器, 因此不使用连接器与轮询审批记录方案 [低效而且占用较高钉钉api调次数];
+ * 优化方案: 通过事件订阅实现实时同步所有审批状态, 定时查询钉钉回调失败记录 [配置钉钉事件Delegate, 添加定时任务]
+ */
+@Slf4j
+@Service
+@Primary
+public class DDDelegate implements DDEvent {
+
+    @Autowired
+    ChuiZiService chuiZiService;
+
+    @Autowired
+    private DDClient ddClient;
+
+    @Autowired
+    private DDClient_Workflow ddClient_workflow;
+    // 审批任务回调执行业务逻辑
+    @Async
+    @Override
+    public void executeEvent_Task_Finish(String processInstanceId, String processCode, boolean isAgree, String remark) {
+        log.info("executeEvent_Task_Finish");
+    }
+
+    @Async
+    @Override
+    public void executeEvent_Task_Start(String processInstanceId, String processCode) {
+        log.info("executeEvent_Task_Start");
+    }
+
+    @Async
+    @Override
+    public void executeEvent_Task_Redirect(String processInstanceId, String processCode) {
+        log.info("executeEvent_Task_Redirect");
+    }
+
+    @Async
+    @Override
+    public void executeEvent_Instance_Start(String processInstanceId, String processCode) {
+        log.info("executeEvent_Instance_Start");
+    }
+
+
+    /// dingtalk
+    final String APP_EKY = "ding9seotugcsfjlgy8h";
+    final String APP_SECRET = "4k6hoCDUwwpUG5WXijfWcnzIm97j_zGquJqXJgrkBcyp2vo7ceV6dO-nSDUUDMhE";
+    // 审批实例回调执行业务逻辑
+    @Async
+    @Override
+    public void executeEvent_Instance_Finish(String processInstanceId, String processCode, boolean isAgree, boolean isTerminate, String staffId) {
+        log.info("executeEvent_Instance_Finish:{}",processCode);
+        String approveResult = isAgree ? "agree" : "refuse";
+//        if (isTerminate) approveResult = "terminated";
+        if  (isAgree){
+            String token = ddClient.getAccessToken(APP_EKY, APP_SECRET);
+            Map processData = ddClient_workflow.getProcessInstanceId(token, processInstanceId);
+            log.info("开始执行回调:{}",processInstanceId);
+            if ("PROC-82233BD3-A274-4B90-8710-97D9F9663634".equals(processCode)){
+                chuiZiService.saveAccountsPayable(processData);
+            }else if ("PROC-D362D97E-916B-4865-B932-13D4A3B4DF1C".equals(processCode)){
+                chuiZiService.saveOtherMeet(processData);
+            }
+        }
+        log.info("审批实例回调执行业务逻辑, {}", approveResult);
+    }
+}

+ 22 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/AccountsPayableEntity.java

@@ -0,0 +1,22 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AccountsPayableEntity {
+    //实体主键
+    private FNumber FEntryID;
+    //结算方式
+    private FNumber FSETTLETYPEID;
+    //付款用途
+    private FNumber FPURPOSEID;
+    //应付金额
+    private Double FPAYTOTALAMOUNTFOR;
+    //付款金额
+    private Double FPAYAMOUNTFOR_E;
+
+    //关联明细
+    private List<Object> FPaySubEntity;
+}

+ 26 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/Audit.java

@@ -0,0 +1,26 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class Audit {
+    private int CreateOrgId;
+
+    private List<String> Numbers;
+
+    private String Ids;
+
+    private String InterationFlags;
+
+    private int UseOrgId;
+
+    private String NetworkCtrl;
+
+    private Boolean IsVerifyProcInst;
+
+    private String IgnoreInterationFlag;
+
+    private Boolean UseBatControlTimes;
+}

+ 18 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/BillQuery.java

@@ -0,0 +1,18 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class BillQuery {
+    private String FormId;
+    private String FieldKeys;
+    private List<Map> FilterString;
+    private String OrderString;
+    private int TopRowCount;
+    private int StartRow;
+    private int Limit;
+    private String SubSystemId;
+}

+ 15 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/BillTypeID.java

@@ -0,0 +1,15 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+@Data
+public class BillTypeID {
+    public BillTypeID(String FNUMBER) {
+        this.FNUMBER = FNUMBER;
+    }
+
+    public BillTypeID() {
+    }
+
+    private String FNUMBER;
+}

+ 33 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/Customer.java

@@ -0,0 +1,33 @@
+package com.malk.chuizi.entity;
+
+public class Customer {
+    long CustID;
+    String FNumber;
+    public long getCustID() {
+        return CustID;
+    }
+    public void setCustID(long custID) {
+        CustID = custID;
+    }
+    public String getFNumber() {
+        return FNumber;
+    }
+    public void setFNumber(String fNumber) {
+        FNumber = fNumber;
+    }
+    public String getFName() {
+        return FName;
+    }
+    public void setFName(String fName) {
+        FName = fName;
+    }
+    String FName;
+
+    String FShortName;
+    public String getFShortName() {
+        return FShortName;
+    }
+    public void setFShortName(String fShortName) {
+        FShortName = fShortName;
+    }
+}

+ 25 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/DefectEntity.java

@@ -0,0 +1,25 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DefectEntity {
+    //物料id
+    private FNumber FMateridlId;
+    //供应商
+    private FNumber FSupplierId;
+    //单位
+    private FNumber FUnitID;
+    //检验不良数量
+    private double FInspectDefectQty;
+    //不良处理
+    private String FDefProcess;
+    //不良数量
+    private double FDefectiveQty;
+    //使用决策备注
+    private String FMemo;
+    //关联明细
+    private List<Object> FEntity_Link;
+}

+ 15 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/FNumber.java

@@ -0,0 +1,15 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+@Data
+public class FNumber {
+    public FNumber() {
+    }
+
+    public FNumber(String FNumber) {
+        this.FNumber = FNumber;
+    }
+
+    private String FNumber;
+}

+ 63 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/ForecastEntity.java

@@ -0,0 +1,63 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+@Data
+public class ForecastEntity {
+    //供应组织
+    private FNumber FSupplyOrgId;
+    //客户id
+    private FNumber FCustID;
+    //产品类型
+    private String FProductType;
+    //物料id
+    private FNumber FMaterialID;
+    //单位id
+    private FNumber FUnitID;
+    //数量
+    private double FQty;
+    //预测开始日期
+    private String FStartDate;
+    //预测结束日期
+    private String FEndDate;
+    //基础单位id
+    private FNumber FBaseUnitID;
+    //基础数量
+    private double FBaseQty;
+    //基础订单数量
+    private double FBaseOrderQty;
+    //基础核销数量
+    private double FBaseWriteOffQty;
+    //基础选配数量
+    private double FBaseSelPrdQty;
+    //均化类型
+    private String FAVERATYPE;
+    //均化周期
+    private int FAveraCycle;
+    //库存组织id
+    private FNumber FStockOrgId;
+    //货主类型
+    private String FOwnerTypeId;
+    //货主id
+    private FNumber FOwnerId;
+    //预留类型
+    private String FReserveType;
+    //需求优先级
+    private int FPriority;
+    //核销数量
+    private double FWriteOffQty;
+    //订单数量
+    private double FOrderQty;
+    //选配数量
+    private double FSelPrdQty;
+    //备注
+    private String FRemark;
+    //是否MRP
+    private boolean FIsMRP;
+    //BOM条目id
+    private int FBomEntryId;
+    //是否MRP计算
+    private boolean FISMRPCAL;
+    //变更标识
+    private String FChangeFlag;
+}

+ 16 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/LinkEntry.java

@@ -0,0 +1,16 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+@Data
+public class LinkEntry {
+    private FNumber FMaterialId;
+    private FNumber FUnitID;
+    private double FQty;
+    private FNumber FPriceUnitId;
+    private double FTaxPrice;
+    private boolean FIsFree;
+    private double FEntryTaxRate;
+    private String FDeliveryDate;
+    private String FEntryNote;
+}

+ 33 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/Model.java

@@ -0,0 +1,33 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class Model {
+    private int FID;
+    private BillTypeID FBillTypeID;//单据类型
+    private String FDATE;//业务日期
+    private String FENDDATE_H;//到期日
+    private String FCONTACTUNITTYPE;//往来单位类型
+    private FNumber FCONTACTUNIT;//往来单位
+    private FNumber FCURRENCYID ;//币别
+    private Double FTOTALAMOUNTFOR_H;//总金额
+    private Double FNOTSETTLEAMOUNTFOR;//未借款金额
+    private FNumber FDEPARTMENTID;//申请部门
+    private FNumber SettlementOrgan;//结算组织(暂无字段)
+    private FNumber PaymentOrgan;//付款组织(暂无字段)
+    private FNumber PurchasingOrgan;//采购组织(暂无字段)
+    private FNumber FPURCHASEDEPTID;//采购部门
+    private FNumber FPURCHASERGROUPID;//采购组
+    private FNumber FPURCHASERID;//采购员
+    private String FRemarks ;//备注
+    private String FREMARK ;//备注
+    private String FBUSINESSTYPE;//业务类型
+    private String FRECTUNITTYPE;//收款单位类型
+    private FNumber FRECTUNIT;//收款单位
+    private List<Object> FEntity;//明细
+    private List<OtherMeetEntity> otherMeetEntityList;//明细
+    private List<AccountsPayableEntity> FPAYBILLENTRY;//明细
+}

+ 28 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/OtherMeet.java

@@ -0,0 +1,28 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OtherMeet {
+    private int FID;
+    private FNumber FBillTypeID;//单据类型
+    private String FDATE;//业务日期
+    private String FENDDATE_H;//到期日
+    private String FCONTACTUNITTYPE;//往来单位类型
+    private FNumber FCONTACTUNIT;//往来单位
+    private FNumber FCURRENCYID ;//币别
+    private Double FTOTALAMOUNTFOR_H;//总金额
+    private Double FNOTSETTLEAMOUNTFOR;//未借款金额
+    private FNumber FDEPARTMENTID;//申请部门
+    private FNumber SettlementOrgan;//结算组织(暂无字段)
+    private FNumber PaymentOrgan;//付款组织(暂无字段)
+    private FNumber PurchasingOrgan;//采购组织(暂无字段)
+    private FNumber FPURCHASEDEPTID;//采购部门
+    private FNumber FPURCHASERGROUPID;//采购组
+    private FNumber FPURCHASERID;//采购员
+    private String FRemarks ;//备注
+    private List<Object> FEntity;//明细
+
+}

+ 29 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/OtherMeetEntity.java

@@ -0,0 +1,29 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OtherMeetEntity {
+    //实体主键
+    private FNumber FEntryID;
+    //费用项目编码
+    private FNumber FCOSTID;
+    //费用项目名称
+    private FNumber FCOSTNAME;
+    //费用承担部门
+    private FNumber FCOSTDEPARTMENTID;
+    //发票类型
+    private String FINVOICETYPE;
+    //税率
+    private Double FEntryTaxRate;
+    //不含税金额
+    private Double FNOTAXAMOUNTFOR;
+    //税额
+    private Double FTAXAMOUNTFOR;
+    //总金额
+    private Double FTOTALAMOUNTFOR;
+    //关联明细
+    private List<Object> FPaySubEntity;
+}

+ 29 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/SaleOrderEntry.java

@@ -0,0 +1,29 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+@Data
+public class SaleOrderEntry {
+    private FNumber FMaterialId;
+    private FNumber FUnitID;
+    private double FQty;
+    private FNumber FPriceUnitId;
+//    private double FPriceUnitQty;
+//    private double FPrice;
+    private double FTaxPrice;
+    private boolean FIsFree;
+    private double FEntryTaxRate;
+    /*private double FTaxAmount_LC;
+    private double FAmount_LC;
+    private double FAllAmount_LC;*/
+    private String FDeliveryDate;
+    /*private FNumber FStockFNumber;
+    private FNumber FSettleOrgIds;
+    private String FOwnerTypeId;
+    private FNumber FOwnerId;*/
+    private String FEntryNote;
+/*    private double F_WMVJ_Decimal;
+    private double F_WMVJ_Amount;
+    private double F_WMVJ_Qty;
+    private boolean F_WMVJ_CheckBox;*/
+}

+ 16 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/SaleOrderFinance.java

@@ -0,0 +1,16 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+@Data
+public class SaleOrderFinance {
+    private FNumber FSettleCurrId;
+    private boolean FIsIncludedTax;
+    private boolean FIsPriceExcludeTax;
+    /*private FNumber FExchangeTypeId;
+    private double FMarginLevel;
+    private double FMargin;
+    private boolean FOverOrgTransDirect;
+    private double FAllDisCount;
+    private int FXPKID_F;*/
+}

+ 24 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/Save.java

@@ -0,0 +1,24 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+@Data
+public class Save {
+        //默认为空 需要时选择性赋值
+/*        private List<String> NeedUpDateFields;
+        private List<String> NeedReturnFields;
+        private boolean IsDeleteEntry;
+        private String SubSystemId;
+        private boolean IsVerifyBaseDataField;
+        private boolean IsEntryBatchFill;
+        private boolean ValidateFlag;
+        private boolean NumberSearch;
+        private boolean IsAutoAdjustField;
+        private String InterationFlags;
+        private boolean IgnoreInterationFlag;
+        private boolean IsControlPrecision;
+        private boolean ValidateRepeatJson;*/
+
+        //保存实体
+        private Model model;
+}

+ 22 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/Submit.java

@@ -0,0 +1,22 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class Submit {
+    private int CreateOrgId;
+
+    private List<String> Numbers;
+
+    private String Ids;
+
+    private int SelectedPostId;
+
+    private int UseOrgId;
+
+    private Boolean NetworkCtrl;
+
+    private Boolean IgnoreInterationFlag;
+}

+ 14 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/entity/View.java

@@ -0,0 +1,14 @@
+package com.malk.chuizi.entity;
+
+import lombok.Data;
+
+@Data
+public class View {
+    private int CreateOrgId;
+
+    private String Number;
+
+    private String Id;
+
+    private Boolean IsSortBySeq;
+}

+ 17 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/service/ChuiZiService.java

@@ -0,0 +1,17 @@
+package com.malk.chuizi.service;
+
+import com.malk.server.common.McR;
+
+import java.util.Map;
+
+public interface ChuiZiService {
+
+    /**
+     * 费用报销应付单
+     * @param
+     * @return
+     */
+    McR saveOtherMeet(Map processData);
+
+    McR saveAccountsPayable(Map processData);
+}

+ 472 - 0
mjava-chuizi/src/main/java/com/malk/chuizi/service/impl/ChuiZiServiceImpl.java

@@ -0,0 +1,472 @@
+package com.malk.chuizi.service.impl;
+
+import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.kingdee.bos.webapi.entity.IdentifyInfo;
+import com.kingdee.bos.webapi.entity.RepoRet;
+import com.kingdee.bos.webapi.sdk.K3CloudApi;
+import com.malk.chuizi.config.KDWebApiConf;
+import com.malk.chuizi.entity.*;
+import com.malk.chuizi.service.ChuiZiService;
+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.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Personnel;
+import com.malk.service.dingtalk.DDClient_Workflow;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.util.*;
+
+import static org.junit.Assert.fail;
+
+@Slf4j
+@Service
+public class ChuiZiServiceImpl implements ChuiZiService {
+    @Autowired
+    private KDWebApiConf kdWebApiConf;
+
+    @Autowired
+    private DDClient ddClient;
+
+    @Autowired
+    private DDClient_Personnel ddClientPersonnel;
+
+    @Autowired
+    private DDClient_Workflow ddClient_workflow;
+
+    @Value("${dingtalk.agentId}")
+    private Long agentId;
+
+    @Autowired
+    private YDClient ydClient;
+
+    //单据状态
+    private static final Map<String,String> FDOCUMENTSTATUS = new HashMap<>();
+    static{
+        FDOCUMENTSTATUS.put("Z","暂存");
+        FDOCUMENTSTATUS.put("A","创建");
+        FDOCUMENTSTATUS.put("B","审核中");
+        FDOCUMENTSTATUS.put("C","已审核");
+        FDOCUMENTSTATUS.put("D","重新审核");
+    }
+
+    //整单状态
+    private static final Map<String,String> AUDITSTATUS = new HashMap<>();
+    static{
+        AUDITSTATUS.put("U","未审核");
+        AUDITSTATUS.put("A","已审核");
+        AUDITSTATUS.put("I","审核中");
+        AUDITSTATUS.put("P","部分审核");
+        AUDITSTATUS.put("R","重新审核");
+    }
+
+    //禁用状态
+    private static final Map<String,String> FFORBIDSTATUS = new HashMap<>();
+    static{
+        FFORBIDSTATUS.put("A","否");
+        FFORBIDSTATUS.put("B","是");
+    }
+
+    private static final Map<String,String> FFORBIDDENSTATUS = new HashMap<>();
+    static{
+        FFORBIDDENSTATUS.put("0","否");
+        FFORBIDDENSTATUS.put("1","是");
+    }
+
+    private static final Map<String,String> FERPCLSID = new HashMap<>();
+    static {
+        FERPCLSID.put("10","资产");
+        FERPCLSID.put("9","配置");
+        FERPCLSID.put("2","自制");
+        FERPCLSID.put("11","费用");
+        FERPCLSID.put("12","模型");
+        FERPCLSID.put("5","虚拟");
+        FERPCLSID.put("7","一次性");
+        FERPCLSID.put("13","产品系列");
+        FERPCLSID.put("3","委外");
+        FERPCLSID.put("4","特征");
+        FERPCLSID.put("6","服务");
+        FERPCLSID.put("1","外购");
+    }
+
+    private static final Map<String,String> BUSINESS_TYPE = new HashMap<>();
+    static {
+        BUSINESS_TYPE.put("8","发货检验");
+        BUSINESS_TYPE.put("25","生产退料检验");
+        BUSINESS_TYPE.put("26","委外退料检验");
+        BUSINESS_TYPE.put("3","产品检验");
+        BUSINESS_TYPE.put("20","其他检验");
+        BUSINESS_TYPE.put("6","委外工序");
+        BUSINESS_TYPE.put("10","受托材料检验");
+        BUSINESS_TYPE.put("2","委外检验");
+        BUSINESS_TYPE.put("21","工序巡检");
+        BUSINESS_TYPE.put("7","退货检验");
+        BUSINESS_TYPE.put("9","生产线检验");
+        BUSINESS_TYPE.put("1","采购检验");
+        BUSINESS_TYPE.put("4","库存检验");
+        BUSINESS_TYPE.put("5","工序自制");
+    }
+
+    private static final Map<String,String> INSPECT_RESULT = new HashMap<>();
+    static {
+        INSPECT_RESULT.put("1","合格");
+        INSPECT_RESULT.put("2","不合格");
+        INSPECT_RESULT.put("3","保留");
+    }
+    private static final Map<String,String> DEPARTMENT = new HashMap<>();
+    static {
+        DEPARTMENT.put("经营管理部","CZ00104");
+        DEPARTMENT.put("人事行政部","CZ00105");
+        DEPARTMENT.put("销售部","CZ00106");
+        DEPARTMENT.put("技术部","CZ00107");
+        DEPARTMENT.put("IT部门","CZ00107");
+        DEPARTMENT.put("后勤部","CZ00108");
+        DEPARTMENT.put("资材部","CZ00109");
+        DEPARTMENT.put("原料仓库组","CZ0010902");
+        DEPARTMENT.put("成品仓库组","CZ0010903");
+        DEPARTMENT.put("生产计划组","CZ0010904");
+        DEPARTMENT.put("客户服务组","CZ0010905");
+        DEPARTMENT.put("品质部","CZ00110");
+        DEPARTMENT.put("一车间检验组","CZ0011001");
+        DEPARTMENT.put("二车间检验组","CZ0011002");
+        DEPARTMENT.put("三车间检验组","CZ0011003");
+        DEPARTMENT.put("生产部","CZ00111");
+        DEPARTMENT.put("一车间生产组","CZ0011101");
+        DEPARTMENT.put("二车间生产组","CZ0011103");
+        DEPARTMENT.put("三车间生产组","CZ0011105");
+        DEPARTMENT.put("总经办","CZ00101");
+        DEPARTMENT.put("审计部","CZ00102");
+        DEPARTMENT.put("财务部","CZ00103");
+    }
+    private static final Map<String,String> PAYMENT_METHOD = new HashMap<>();
+    static {
+        PAYMENT_METHOD.put("现金","JSFS01_SYS");
+        PAYMENT_METHOD.put("现金支票","JSFS02_SYS");
+        PAYMENT_METHOD.put("转账支票","JSFS03_SYS");
+        PAYMENT_METHOD.put("电汇","JSFS04_SYS");
+        PAYMENT_METHOD.put("信汇","JSFS05_SYS");
+        PAYMENT_METHOD.put("商业承兑汇票","JSFS06_SYS");
+        PAYMENT_METHOD.put("银行承兑汇票","JSFS07_SYS");
+        PAYMENT_METHOD.put("信用证","JSFS08_SYS");
+        PAYMENT_METHOD.put("应收票据背书","JSFS09_SYS");
+        PAYMENT_METHOD.put("票据退票","JSFS12_SYS");
+        PAYMENT_METHOD.put("保证金转货款","JSFS22_SYS");
+        PAYMENT_METHOD.put("微信","JSFS31_SYS");
+        PAYMENT_METHOD.put("支付宝","JSFS32_SYS");
+        PAYMENT_METHOD.put("供应链票据","JSFS36_SYS");
+        PAYMENT_METHOD.put("内部转销","JSFS41_SYS");
+        PAYMENT_METHOD.put("认领结算","JSFS81_SYS");
+
+    }
+    private IdentifyInfo initIden(){
+        //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。
+        //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。
+        //读取配置,初始化SDK
+        IdentifyInfo iden = new IdentifyInfo();
+        iden.setUserName(kdWebApiConf.getXKDApiUserName());
+        iden.setAppId(kdWebApiConf.getXKDApiAppID());
+        iden.setdCID(kdWebApiConf.getXKDApiAcctID());
+        iden.setAppSecret(kdWebApiConf.getXKDApiAppSec());
+        iden.setServerUrl(kdWebApiConf.getXKDApiServerUrl());
+
+        return iden;
+    }
+
+    private String getString(Object object){
+        return object == null ? "" : object.toString();
+    }
+
+
+    /// dingtalk
+    final String APP_EKY = "ding9seotugcsfjlgy8h";
+    final String APP_SECRET = "4k6hoCDUwwpUG5WXijfWcnzIm97j_zGquJqXJgrkBcyp2vo7ceV6dO-nSDUUDMhE";
+    @Override
+    public McR saveOtherMeet(Map processData) {
+        String userId = String.valueOf(processData.get("originatorUserId"));
+        String workId = getNumberByUserId(userId);
+        Save save = new Save();
+
+        Model otherMeet = new Model();
+        otherMeet.setFCONTACTUNITTYPE("BD_Empinfo");
+        otherMeet.setFBillTypeID(new BillTypeID("QTYFD02_SYS"));
+        otherMeet.setFCONTACTUNIT(new FNumber(workId));//员工号
+        otherMeet.setFDATE(LocalDateTimeUtil.format(LocalDate.now(),"yyyy-MM-dd"));
+        otherMeet.setFENDDATE_H(LocalDateTimeUtil.format(LocalDate.now(),"yyyy-MM-dd"));
+        otherMeet.setFCURRENCYID(new FNumber("PRE001"));//币别
+        final double[] sum = {0.0,0.0};
+        List<Map> formComponentValues = (List<Map>) processData.get("formComponentValues");
+        Map<String, Object> mainData = new HashMap<>();
+        List<Map<String,Object>> sonData = new ArrayList<>();
+        formComponentValues.forEach(e->{
+            String name = e.get("name").toString();
+            if ("金蝶科目".equals(name) || "报销科目".equals(name) || "归属部门".equals(name) || "发票类型".equals(name) || "申请人".equals(name) ) {
+                mainData.put(name, e.get("value"));
+            } else if ("TableField".equals(e.get("componentType"))) {
+                Object parse = JSON.parse(e.get("value").toString());
+                JSONArray jsonArray = JSON.parseArray(parse.toString());
+                for (int i = 0; i < jsonArray.size(); i++) {
+                    JSONObject jsonObject = (JSONObject) jsonArray.get(i);
+                    Object rowValue = jsonObject.get("rowValue");
+                    JSONArray array = JSON.parseArray(rowValue.toString());
+                    for (int i1 = 0; i1 < array.size(); i1++) {
+                        jsonObject = (JSONObject) array.get(i1);
+                        if (jsonObject.containsKey("extendValue")){
+                            rowValue = jsonObject.get("extendValue");
+                            jsonObject = JSONObject.parseObject(rowValue.toString());
+                            rowValue = jsonObject.get("list");
+                            JSONArray array1 =  JSON.parseArray(rowValue.toString());
+                            for (int i2 = 0; i2 < array1.size(); i2++) {
+                                jsonObject = (JSONObject) array1.get(i2);
+                                if (jsonObject.containsKey("rowValue")){
+                                    rowValue = jsonObject.get("rowValue");
+                                    JSONArray array2 = JSON.parseArray(rowValue.toString());
+                                    for (int l = 0; l < array2.size(); l++) {
+                                        Map<String, Object> map = new HashMap<>();
+                                        jsonObject = (JSONObject) array2.get(l);
+                                        //需要改成金额
+                                        if ("金额".equals(jsonObject.get("label"))){
+                                            double amount = Double.parseDouble(jsonObject.get("value") == null ? "0.0" : jsonObject.get("value").toString());
+                                            sum[0] = sum[0] + amount;
+                                            sum[1] = sum[1] + amount;
+                                            map.put("amount",amount);
+
+                                            sonData.add(map);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        });
+        List<Object> objects  = new ArrayList<>();
+        if (ObjectUtil.isNotNull(sonData) && sonData.size()>0){
+            sonData.forEach(e->{
+                OtherMeetEntity otherMeetEntity = new OtherMeetEntity();
+                otherMeetEntity.setFCOSTID(new FNumber(mainData.get("金蝶科目").toString()));
+                otherMeetEntity.setFINVOICETYPE(mainData.get("发票类型").toString());
+                otherMeetEntity.setFCOSTDEPARTMENTID(new FNumber(DEPARTMENT.get(mainData.get("归属部门").toString())));
+                otherMeetEntity.setFEntryTaxRate(0.0);
+                otherMeetEntity.setFNOTAXAMOUNTFOR(Double.parseDouble(e.get("amount").toString()));
+                otherMeetEntity.setFTAXAMOUNTFOR(0.0);
+                otherMeetEntity.setFTOTALAMOUNTFOR(Double.parseDouble(e.get("amount").toString()));
+                otherMeetEntity.setFPaySubEntity(null);
+
+                objects.add(otherMeetEntity);
+            });
+        }
+        otherMeet.setFEntity(objects);
+
+        save.setModel(otherMeet);
+        System.out.println(save);
+
+        try{
+            K3CloudApi client = new K3CloudApi(initIden());
+            //业务对象标识
+            String formId = "AP_OtherPayable";
+            //调用接口
+            String resultJson = client.save(formId,JSONObject.toJSONString(save));
+            //用于记录结果
+            Gson gson = new Gson();
+            //对返回结果进行解析和校验
+            RepoRet repoRet = gson.fromJson(resultJson, RepoRet.class);
+
+            if (isTrue(repoRet)){
+                String id = repoRet.getResult().getId();
+
+                Submit submit = new Submit();
+                submit.setIds(id);
+                //提交
+                String resultJson2 = client.submit(formId, JSONObject.toJSONString(submit));
+                RepoRet repoRet2 = gson.fromJson(resultJson2, RepoRet.class);
+                isTrue(repoRet2);
+
+//                String orderCode = repoRet2.getResult().getResponseStatus().getSuccessEntitys().get(0).getNumber();
+
+//                ydClient.operateData(YDParam.builder()
+////                        .formInstId(formInstId)
+//                        .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_m6yntxmz",orderCode)))
+//                        .build(), YDConf.FORM_OPERATION.update);
+
+                if (isTrue(repoRet2)){
+                    Audit audit = new Audit();
+                    audit.setIds(id);
+                    //审核
+                    String resultJson3 = client.audit(formId,JSONObject.toJSONString(audit));
+                    RepoRet repoRet3 = gson.fromJson(resultJson3, RepoRet.class);
+                    isTrue(repoRet3);
+                }
+            }
+        } catch (Exception e) {
+            McR.errorUnknown(e.getMessage());
+        }
+
+        return McR.success();
+    }
+
+    @Override
+    public McR saveAccountsPayable(Map processData) {
+//        String userId = String.valueOf(processData.get("originatorUserId"));
+        Save save = new Save();
+
+        Model otherMeet = new Model();
+        otherMeet.setFCONTACTUNITTYPE("BD_Supplier");
+        otherMeet.setFBillTypeID(new BillTypeID("FKDLX01_SYS"));
+        otherMeet.setFDATE(LocalDateTimeUtil.format(LocalDate.now(),"yyyy-MM-dd"));
+        otherMeet.setFCURRENCYID(new FNumber("PRE001"));//币别
+        otherMeet.setFRECTUNIT(new FNumber("1000159"));
+        otherMeet.setFCONTACTUNIT(new FNumber("1000159"));
+        List<Map> formComponentValues = (List<Map>) processData.get("formComponentValues");
+        Map<String, Object> mainData = new HashMap<>();
+
+        formComponentValues.forEach(e->{
+            String name = e.get("name").toString();
+            mainData.put(name, e.get("value"));
+        });
+        List<AccountsPayableEntity> objects  = new ArrayList<>();
+        if (ObjectUtil.isNotNull(mainData)){
+            //主表
+            otherMeet.setFREMARK(mainData.get("付款事由").toString());
+            //明细
+            AccountsPayableEntity accountsPayableEntity = new AccountsPayableEntity();
+            accountsPayableEntity.setFSETTLETYPEID(new FNumber(PAYMENT_METHOD.get(mainData.get("付款方式"))));//结算方式
+            accountsPayableEntity.setFPURPOSEID(new FNumber("SFKYT09_SYS"));//付款用途
+            accountsPayableEntity.setFPAYTOTALAMOUNTFOR(Double.parseDouble(mainData.get("付款总额").toString()));
+            accountsPayableEntity.setFPAYAMOUNTFOR_E(Double.parseDouble(mainData.get("付款总额").toString()));
+
+            objects.add(accountsPayableEntity);
+        }
+        otherMeet.setFPAYBILLENTRY(objects);
+
+        save.setModel(otherMeet);
+        System.out.println(save);
+
+        try{
+            K3CloudApi client = new K3CloudApi(initIden());
+            //业务对象标识
+            String formId = "AP_PAYBILL";
+            //调用接口
+            String resultJson = client.save(formId,JSONObject.toJSONString(save));
+            //用于记录结果
+            Gson gson = new Gson();
+            //对返回结果进行解析和校验
+            RepoRet repoRet = gson.fromJson(resultJson, RepoRet.class);
+
+            if (isTrue(repoRet)){
+                String id = repoRet.getResult().getId();
+
+                Submit submit = new Submit();
+                submit.setIds(id);
+                //提交
+                String resultJson2 = client.submit(formId, JSONObject.toJSONString(submit));
+                RepoRet repoRet2 = gson.fromJson(resultJson2, RepoRet.class);
+                isTrue(repoRet2);
+
+                if (isTrue(repoRet2)){
+                    Audit audit = new Audit();
+                    audit.setIds(id);
+                    //审核
+                    String resultJson3 = client.audit(formId,JSONObject.toJSONString(audit));
+                    RepoRet repoRet3 = gson.fromJson(resultJson3, RepoRet.class);
+                    isTrue(repoRet3);
+                }
+            }
+        } catch (Exception e) {
+            McR.errorUnknown(e.getMessage());
+        }
+
+        return McR.success();
+    }
+
+    public String getNumberByUserId(String workingEmployeeIds) {
+//        log.info("根据钉钉人员id获取员工工号:{}",workingEmployeeIds);
+        List<String> filterList = new ArrayList<>();
+        filterList.add("sys00-jobNumber");
+        List<Map> employeeInfos = ddClientPersonnel.getEmployeeInfos(ddClient.getAccessToken(), Arrays.asList(workingEmployeeIds), agentId, filterList);
+        final String[] value = {""};
+        employeeInfos.forEach(e -> {
+            List<Map> mapList = (List<Map>) e.get("field_data_list");
+            mapList.forEach(m -> {
+                List<Map> valueList = (List<Map>) m.get("field_value_list");
+                value[0] = ObjectUtil.isNotNull(valueList.get(0).get("value")) ? valueList.get(0).get("value").toString() : null;
+            });
+        });
+        return value[0];
+    }
+
+    private String getMultiLanguageTextName(Object object){
+        if (Objects.nonNull(object)){
+            Map map = (Map) object;
+            List<Map> multiLanguageText = (List<Map>) map.get("MultiLanguageText");
+            String value = getString(multiLanguageText.get(0).get("Name"));
+
+            return value;
+        }
+        return null;
+    }
+
+    private String getMultiLanguageTextSpecification(Object object){
+        if (Objects.nonNull(object)){
+            Map map = (Map) object;
+            List<Map> multiLanguageText = (List<Map>) map.get("MultiLanguageText");
+            String value = getString(multiLanguageText.get(0).get("Specification"));
+
+            return value;
+        }
+        return null;
+    }
+
+    private String getEntryNumber(Object object){
+        if (Objects.nonNull(object)){
+            Map map = (Map) object;
+            String value =  getString(map.get("Number"));
+
+            return value;
+        }
+        return null;
+    }
+
+
+    private boolean isTrue(RepoRet repoRet){
+        Gson gson = new Gson();
+
+        if (repoRet.getResult().getResponseStatus().isIsSuccess()) {
+            System.out.printf("接口返回结果: %s%n", gson.toJson(repoRet.getResult()));
+            return true;
+        } else {
+            fail("接口返回结果: " + gson.toJson(repoRet.getResult().getResponseStatus()));
+            return false;
+        }
+    }
+
+    private List<Map> getYdFormDataList(String formUuid, String searchCondition, YDConf.FORM_QUERY formQuery) {
+        List<Map> list = new ArrayList<>();
+        DDR_New ddrNew = new DDR_New();
+        int pageNumber = 1;
+        int pageSize = 100;
+        do {
+            ddrNew = ydClient.queryData(YDParam.builder().formUuid(formUuid)
+                    .searchCondition(searchCondition)
+                    .pageNumber(pageNumber)
+                    .pageSize(pageSize).build(), formQuery);
+
+            list.addAll((List<Map>) ddrNew.getData());
+            pageNumber++;
+        }while (ddrNew.getTotalCount() > ddrNew.getPageNumber() * pageSize);
+        return list;
+    }
+
+
+}

+ 49 - 0
mjava-chuizi/src/main/resources/application-dev.yml

@@ -0,0 +1,49 @@
+#测试学习
+server:
+  port: 8109
+  servlet:
+    context-path: /chuizi
+
+enable:
+  scheduling: false
+logging:
+  config: classpath:logback-spring.xml
+  path: /home/server/chuzi/log/
+  level:
+    com.malk.*: debug
+
+# dingtalk
+dingtalk:
+  agentId: 3746535996
+  appKey: ding9seotugcsfjlgy8h
+  appSecret: 4k6hoCDUwwpUG5WXijfWcnzIm97j_zGquJqXJgrkBcyp2vo7ceV6dO-nSDUUDMhE
+  corpId:
+  aesKey: 2qpILM4GJXsv9A24pcLMhzsjsVLhjAarqZzHVl4DgKa
+  token: 93TmIb21XoFozsu5o5unY6p
+#  operator:
+
+#aliwork:
+#  appType: APP_XPPVVMG6HA0GNDPJV4C1
+#  systemToken: 8R7668D1P92RSNTS7OKZG5UR9P333QA7GAJ4MTG
+
+#测试环境
+kingdee:
+# 第三方系统登录授权的账套ID
+  X-KDApi-AcctID: 67d92ff7f69ac8
+  # 第三方系统登录授权的用户
+  X-KDApi-UserName: Administrator
+  # 第三方系统登录授权的应用ID
+  X-KDApi-AppID: 312000_T+5I1yGE2urX5XTuxeSL6z1HSuS8SBrE
+  # 第三方系统登录授权的应用密钥
+  X-KDApi-AppSec: a8cfbf47aa504a528bc5c75d4de2f71d
+  # 服务Url地址(公有云统一走网关sdk底层已处理,无需传X-KDApi-ServerUrl,下面这行需要注释)
+  X-KDApi-ServerUrl: http://124.71.139.0:8283/K3cloud
+  # 账套语系,默认2052
+  # X-KDApi-LCID: 2052
+  # 组织编码,启用多组织时配置对应的组织编码才有效
+  # X-KDApi-OrgNum: 100
+  # 允许的最大连接延时,单位为秒
+  # X-KDApi-ConnectTimeout: 120
+  # 允许的最大读取延时,单位为秒
+  # X-KDApi-RequestTimeout: 120
+

+ 49 - 0
mjava-chuizi/src/main/resources/application-dev2.yml

@@ -0,0 +1,49 @@
+#钉钉测试
+server:
+  port: 9030
+  servlet:
+    context-path: /chuizi
+
+enable:
+  scheduling: false
+logging:
+  config: classpath:logback-spring.xml
+  path: /home/server/jianhui/log/
+  level:
+    com.malk.*: debug
+
+# dingtalk
+dingtalk:
+  agentId: 3366214854
+  appKey: dingntvkzjzxdx8h2m1s
+  appSecret: YfaV5mYOL4F--P8P_G9aD8DP_a8_IgM6dBILsSaTb4LeUZYSntacol55O1tJuqcU
+  corpId: ding923faa53d9d45937acaaa37764f94726
+  aesKey:
+  token:
+  operator: 344749020127590108
+
+aliwork:
+  appType: APP_XPPVVMG6HA0GNDPJV4C1
+  systemToken: 8R7668D1P92RSNTS7OKZG5UR9P333QA7GAJ4MTG
+
+#测试环境
+kingdee:
+# 第三方系统登录授权的账套ID
+  X-KDApi-AcctID: 67adb125bcb53e
+  # 第三方系统登录授权的用户
+  X-KDApi-UserName: Administrator
+  # 第三方系统登录授权的应用ID
+  X-KDApi-AppID: 303494_XZ8JQZuu3mnb49Xu3+XDzd+NzNx7wANv
+  # 第三方系统登录授权的应用密钥
+  X-KDApi-AppSec: 9ba984bc11a14bf1883e23ac223cc733
+  # 服务Url地址(公有云统一走网关sdk底层已处理,无需传X-KDApi-ServerUrl,下面这行需要注释)
+  X-KDApi-ServerUrl: http://124.71.139.0:8283/k3cloud/
+  # 账套语系,默认2052
+  # X-KDApi-LCID: 2052
+  # 组织编码,启用多组织时配置对应的组织编码才有效
+  # X-KDApi-OrgNum: 100
+  # 允许的最大连接延时,单位为秒
+  # X-KDApi-ConnectTimeout: 120
+  # 允许的最大读取延时,单位为秒
+  # X-KDApi-RequestTimeout: 120
+

+ 49 - 0
mjava-chuizi/src/main/resources/application-prod.yml

@@ -0,0 +1,49 @@
+#钉钉测试
+server:
+  port: 8109
+  servlet:
+    context-path: /chuizi
+
+enable:
+  scheduling: false
+logging:
+  config: classpath:logback-spring.xml
+  path: /home/server/jianhui/log/
+  level:
+    com.malk.*: INFO
+
+# dingtalk
+dingtalk:
+  agentId: 3746535996
+  appKey: ding9seotugcsfjlgy8h
+  appSecret: 4k6hoCDUwwpUG5WXijfWcnzIm97j_zGquJqXJgrkBcyp2vo7ceV6dO-nSDUUDMhE
+  corpId:
+  aesKey: 2qpILM4GJXsv9A24pcLMhzsjsVLhjAarqZzHVl4DgKa
+  token: 93TmIb21XoFozsu5o5unY6p
+#  operator:
+
+#aliwork:
+#  appType: APP_XPPVVMG6HA0GNDPJV4C1
+#  systemToken: 8R7668D1P92RSNTS7OKZG5UR9P333QA7GAJ4MTG
+
+#正式环境 锤子塑业2025数据中心
+kingdee:
+  # 第三方系统登录授权的账套ID
+  X-KDApi-AcctID: 670624589dd479
+  # 第三方系统登录授权的用户
+  X-KDApi-UserName: administrator
+  # 第三方系统登录授权的应用ID
+  X-KDApi-AppID: 309474_23ev0dtszrH/7/xH0c5OQY9MTJ0aWOmu
+  # 第三方系统登录授权的应用密钥
+  X-KDApi-AppSec: c9545d83ed7b44728dc0288ca3b3c07d
+  # 服务Url地址(公有云统一走网关sdk底层已处理,无需传X-KDApi-ServerUrl,下面这行需要注释)
+  X-KDApi-ServerUrl: http://124.71.139.0:8283/K3cloud
+  # 账套语系,默认2052
+  # X-KDApi-LCID: 2052
+  # 组织编码,启用多组织时配置对应的组织编码才有效
+  # X-KDApi-OrgNum: 100
+  # 允许的最大连接延时,单位为秒
+  # X-KDApi-ConnectTimeout: 120
+  # 允许的最大读取延时,单位为秒
+  # X-KDApi-RequestTimeout: 120
+

+ 15 - 0
mjava-chuizi/src/main/resources/application.yml

@@ -0,0 +1,15 @@
+spring:
+  profiles:
+    active: dev
+  servlet:
+    multipart:
+      max-file-size: 100MB
+      max-request-size: 100MB
+  http:
+    enabled: false
+
+#  configuration:
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  global-config:
+    db-config:
+      id-type: auto

+ 61 - 0
mjava-chuizi/src/main/resources/logback-spring.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration debug="false" scan="false" scanPeriod="60 seconds">
+    <springProperty scope="context" name="LOG_HOME" source="logging.path" defaultValue="/home/server/log/"/>
+    <property name="FileNamePattern" value="${LOG_HOME}%d{yyyyMM}/%d{dd}"/>
+
+    <!-- 定义控制台输出 -->
+    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - [%thread] - %-5level - %logger{50} - %msg%n</pattern>
+        </layout>
+    </appender>
+
+    <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 指定日志文件的名称 -->
+        <!--<file>${FileNamePattern}/info.log</file>-->
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${FileNamePattern}/info-%i.log</fileNamePattern>
+            <MaxHistory>30</MaxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <MaxFileSize>30MB</MaxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n</pattern>
+        </layout>
+    </appender>
+
+    <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
+        <discriminator>
+            <Key>processid</Key>
+            <DefaultValue>sys</DefaultValue>
+        </discriminator>
+        <sift>
+            <appender name="FILE-${processid}"
+                      class="ch.qos.logback.core.rolling.RollingFileAppender">
+                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+                    <FileNamePattern>
+                        ${FileNamePattern}/${processid}.log
+                    </FileNamePattern>
+                </rollingPolicy>
+                <layout class="ch.qos.logback.classic.PatternLayout">
+                    <Pattern>
+                        %d{yyyyMMdd:HH:mm:ss.SSS} [%thread] %-5level %msg%n
+                    </Pattern>
+                </layout>
+            </appender>
+        </sift>
+    </appender>
+
+
+    <!-- 日志输出级别 -->
+    <logger name="org.springframework" level="debug"  additivity="false"/>
+    <logger name="com.malk.connecter" level="debug"/>
+    <root level="INFO">
+        <appender-ref ref="stdout"/>
+        <appender-ref ref="appLogAppender"/>
+        <appender-ref ref="SIFT"/>
+    </root>
+</configuration>