wangxin 1 сар өмнө
parent
commit
bfe242fdff

+ 6 - 0
kdwebapi.properties

@@ -0,0 +1,6 @@
+X-KDApi-AcctID =2059530634610622464
+X-KDApi-AppID=310358_wf2qQdFP3Nq4R9Uox01L6y9H1iSdTMns
+X-KDApi-AppSec =2165a264100b42b8b338c6fb95cee78b
+X-KDApi-UserName =MES-syn
+X-KDApi-LCID=2052
+X-KDApi-ServerUrl=https://deimaishi.test.ik3cloud.com/k3cloud

BIN
lib/gson-2.8.0.jar


BIN
lib/k3cloud-webapi-sdk-java1.8-v8.2.0.jar


+ 11 - 1
pom.xml

@@ -333,8 +333,18 @@
             <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
             <version>3.5.2</version>
         </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <version>RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
 
-<!--        <dependency>-->
+        <!--        <dependency>-->
 <!--            <groupId>com.ezhizao</groupId>-->
 <!--            <artifactId>snms-spring-boot-starter</artifactId>-->
 <!--            <version>0.0.2</version>-->

+ 24 - 0
src/main/java/cn/ezhizao/javasdk/TestCaseSuit.java

@@ -0,0 +1,24 @@
+package cn.ezhizao.javasdk;
+
+import cn.ezhizao.javasdk.accountbalance.GlrptAccoutBalanceTest;
+import cn.ezhizao.javasdk.customer.BdCustomerTest;
+import cn.ezhizao.javasdk.material.BdMaterialTest;
+import cn.ezhizao.javasdk.material.bdMaterialFlexTest;
+
+import cn.ezhizao.javasdk.purpurchaseorder.PurTest;
+import cn.ezhizao.javasdk.saleorder.SavexSaleOrder;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses({ BdMaterialTest.class,
+        PurTest.class, GlrptAccoutBalanceTest.class,
+        bdMaterialFlexTest.class, PurTest.class,
+        SavexSaleOrder.class, BdCustomerTest.class
+})
+
+
+
+public class TestCaseSuit {
+}

+ 69 - 0
src/main/java/cn/ezhizao/javasdk/accountbalance/GlrptAccoutBalanceTest.java

@@ -0,0 +1,69 @@
+package cn.ezhizao.javasdk.accountbalance;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.kingdee.bos.webapi.entity.DataCenter;
+import com.kingdee.bos.webapi.entity.RepoRet;
+import com.kingdee.bos.webapi.sdk.K3CloudApi;
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.junit.Assert.fail;
+
+public class GlrptAccoutBalanceTest {
+    K3CloudApi api = new K3CloudApi();
+    String json = "{\n" +
+            "  \"FieldKeys\": \"FBALANCEID,FBALANCENAME,FACCTTYPE,FACCTGROUP,FDETAILNUMBER,FDETAILNAME,FCyName\",\n" +
+            "  \"SchemeId\": \"97ffa1271acc4846b209ea05ac8dec9c\",\n" +
+            "  \"StartRow\": 0,\n" +
+            "  \"Limit\": 2000,\n" +
+            "  \"IsVerifyBaseDataField\": \"false\",\n" +
+            "  \"Model\": {\n" +
+            "    \"FACCTBOOKID\": {\n" +
+            "      \"FNumber\": \"001\"\n" +
+            "    },\n" +
+            "    \"FCURRENCY\": \"1\",\n" +
+            "    \"FSTARTYEAR\": \"2021\",\n" +
+            "    \"FSTARTPERIOD\": \"12\",\n" +
+            "    \"FENDYEAR\": \"2021\",\n" +
+            "    \"FBALANCELEVEL\": \"1\",\n" +
+            "    \"FENDPERIOD\": \"12\",\n" +
+            "    \"FFORBIDBALANCE\": true,\n" +
+            "    \"FBALANCEZERO\": true,\n" +
+            "    \"FPERIODNOBALANCE\": true,\n" +
+            "    \"FYEARNOBALANCE\": true\n" +
+            "  },\n" +
+            "  \"PkEntryIds\": []\n" +
+            "}";
+
+    /* 科目余额表 (GL_RPT_AccountBalance) 的查询报表数据功能 */
+    @Test
+    public void testGetSysReportDataAccountBalance()  throws Exception{
+        String sFormId = "GL_RPT_AccountBalance";
+        String result = api.getSysReportData(sFormId,json);
+        JsonObject resultjson = new JsonParser().parse(result).getAsJsonObject();
+        boolean isSuccess = false;
+        if(null != resultjson.get("Result")) {
+            JsonObject rsJson = resultjson.get("Result").getAsJsonObject();
+            if(null != rsJson.get("IsSuccess")) {
+                isSuccess = rsJson.get("IsSuccess").getAsBoolean();
+            }
+        }
+        if (isSuccess){
+            System.out.println("科目余额表报表数据:" + result);
+        }
+        else {
+            fail("科目余额表报表数据:" + result);
+        }
+    }
+
+    @Test
+    public void testGetDataCenters() throws Exception{
+        List<DataCenter> result = api.getDataCenters();
+        Gson gson = new Gson();
+        System.out.println("dataCenters:" + gson.toJson(result));
+    }
+}

+ 22 - 0
src/main/java/cn/ezhizao/javasdk/common/SeqHelper.java

@@ -0,0 +1,22 @@
+package cn.ezhizao.javasdk.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);
+    }
+}

+ 50 - 0
src/main/java/cn/ezhizao/javasdk/customer/BdCustomer.java

@@ -0,0 +1,50 @@
+package cn.ezhizao.javasdk.customer;
+
+public class BdCustomer {
+    long CustID;
+    String FNumber;
+    String FName;
+    Long msterID;
+
+    public long getCustID() {
+        return CustID;
+    }
+
+    public void setCustID(long custID) {
+        CustID = custID;
+    }
+
+    public String getFNumber() {
+        return FNumber;
+    }
+
+    public void setFNumber(String FNumber) {
+        this.FNumber = FNumber;
+    }
+
+    public String getFName() {
+        return FName;
+    }
+
+    public void setFName(String FName) {
+        this.FName = FName;
+    }
+
+    public String getFShortName() {
+        return FShortName;
+    }
+
+    public void setFShortName(String FShortName) {
+        this.FShortName = FShortName;
+    }
+
+    String FShortName;
+
+    public Long getMsterID() {
+        return msterID;
+    }
+
+    public void setMsterID(Long msterID) {
+        this.msterID = msterID;
+    }
+}

+ 238 - 0
src/main/java/cn/ezhizao/javasdk/customer/BdCustomerTest.java

@@ -0,0 +1,238 @@
+package cn.ezhizao.javasdk.customer;
+
+import static org.junit.Assert.fail;
+
+import java.util.*;
+
+import com.google.gson.JsonObject;
+import com.kingdee.bos.webapi.entity.*;
+import com.kingdee.bos.webapi.sdk.K3CloudApi;
+import cn.ezhizao.javasdk.common.SeqHelper;
+import com.google.gson.Gson;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class BdCustomerTest {
+    static String FNumber = SeqHelper.genNumber("BC");
+    static String FNumber2 = SeqHelper.genNumber("BC");
+    static String FName = "aukh_" + UUID.randomUUID().toString();
+    static String FShortName = "aukh_" + UUID.randomUUID().toString();
+    static K3CloudApi api = new K3CloudApi();
+
+
+    /* 本接口用于实现客户 (BD_Customer) 的保存功能 */
+    @Test
+    public   void atestSaveCustomer() throws Exception {
+        String para = "{\"FName\":  "+"\""+FName+"\""+",\"FNumber\": "+"\""+FNumber+"\""+",\"FCreateOrgId\": {\"FNumber\": \"100\"},\"FUseOrgId\": {\"FNumber\": \"100\"},\"FCOUNTRY\": {    \"FNumber\": \"China\"},\"FINVOICETITLE\": \"zzl\",\"FCustTypeId\": {    \"FNumber\": \"KHLB001_SYS\"},\"FTRADINGCURRID\": {    \"FNumber\": \"PRE001\"},\"FInvoiceType\": \"1\",\"FTaxType\": {    \"FNumber\": \"SFL02_SYS\"},\"FPriority\": 1,\"FTaxRate\": {    \"FNumber\": \"SL02_SYS\"},\"FISCREDITCHECK\": true,\"FIsTrade\": true    }";
+        Map<String, Object> map = new HashMap<>();
+        map = new Gson().fromJson(para, map.getClass());
+        SaveResult sRet = api.save("BD_Customer", new SaveParam<Map>(map));
+        Gson gson = new Gson();
+        if (sRet.isSuccessfully()) {
+            System.out.printf("客户保存接口: %s%n", gson.toJson(sRet.getResult()));
+        } else {
+            fail("客户保存接口: " + gson.toJson(sRet.getResult()));
+        }
+    }
+
+    /* 本接口用于实现客户 (BD_Customer) 的保存功能 */
+    @Test
+    public   void btestSaveCustomer2() throws Exception {
+        String para2 = "{\"FName\": \"zzl\",\"FNumber\": "+"\""+FNumber2+"\""+",\"FCreateOrgId\": {\"FNumber\": \"100\"},\"FUseOrgId\": {\"FNumber\": \"100\"},\"FCOUNTRY\": {    \"FNumber\": \"China\"},\"FINVOICETITLE\": \"zzl\",\"FCustTypeId\": {    \"FNumber\": \"KHLB001_SYS\"},\"FTRADINGCURRID\": {    \"FNumber\": \"PRE001\"},\"FInvoiceType\": \"1\",\"FTaxType\": {    \"FNumber\": \"SFL02_SYS\"},\"FPriority\": 1,\"FTaxRate\": {    \"FNumber\": \"SL02_SYS\"},\"FISCREDITCHECK\": true,\"FIsTrade\": true    }";
+        Map<String, Object> map = new HashMap<>();
+        map = new Gson().fromJson(para2, map.getClass());
+        SaveResult sRet = api.save("BD_Customer", new SaveParam<Map>(map),InvokeMode.Syn);
+        Gson gson = new Gson();
+        if (sRet.isSuccessfully()) {
+            System.out.printf("客户保存接口: %s%n", gson.toJson(sRet.getResult()));
+        } else {
+            fail("客户保存接口: " + gson.toJson(sRet.getResult()));
+        }
+    }
+
+    /*本接口用于实现客户 (BD_Customer) 的提交功能*/
+    @Test
+    public   void ctestSubmitCustomer() throws Exception {
+        OperateParam para = new  OperateParam();
+        List<String> Numbers = Arrays.asList(FNumber);;
+        para.setNumbers(Numbers);
+        OperatorResult result = api.submit("BD_Customer", para);
+        Gson gson = new Gson();
+         if (result.getResult().getResponseStatus().isIsSuccess()) {
+            System.out.printf("客户提交接口: %s%n", gson.toJson(result.getResult()));
+        } else {
+            fail("客户提交接口:" + gson.toJson(result.getResult()));
+        }
+
+    }
+
+    /*本接口用于实现客户 (BD_Customer) 的审核功能*/
+    @Test
+    public   void dtestauditCustomer() throws Exception {
+        OperateParam para = new  OperateParam();
+        List<String> Numbers = Arrays.asList(FNumber);;
+        para.setNumbers(Numbers);
+        OperatorResult result = api.audit("BD_Customer", para );
+        Gson gson = new Gson();
+        if (result.getResult().getResponseStatus().isIsSuccess()) {
+            System.out.printf("客户审核接口: %s%n", gson.toJson(result.getResult()));
+        } else {
+            fail("客户审核接口: " + gson.toJson(result.getResult().getResponseStatus()));
+        }
+
+    }
+
+    /*本接口用于实现客户 (BD_Customer) 的反审核功能*/
+    @Test
+    public   void etestunauditCustomer() throws Exception {
+        OperateParam para = new  OperateParam();
+        List<String> Numbers = Arrays.asList(FNumber);
+        para.setNumbers(Numbers);
+        OperatorResult result = api.unAudit("BD_Customer", para);
+        Gson gson = new Gson();
+        if (result.getResult().getResponseStatus().isIsSuccess()) {
+
+            System.out.printf("客户反审核接口: %s%n", gson.toJson(result.getResult()));
+        } else {
+            fail("客户反审核接口: " + gson.toJson(result.getResult().getResponseStatus()));
+        }
+    }
+
+
+    /*本接口用于实现客户 (BD_Customer) 的禁用功能*/
+    @Test
+    public   void ftestForbidCustomer() throws Exception {
+        JsonObject jsonData = new JsonObject();
+        jsonData.addProperty("Numbers", FNumber);
+        String result = api.excuteOperation("BD_Customer","Forbid", jsonData.toString());
+        Gson gson = new Gson();
+        RepoRet repoRet = gson.fromJson(result, RepoRet.class);
+        if (repoRet.getResult().getResponseStatus().isIsSuccess()) {
+
+            System.out.printf("客户禁用接口: %s%n", gson.toJson(repoRet.getResult()));
+        } else {
+            fail("客户禁用接口: " + gson.toJson(repoRet.getResult().getResponseStatus()));
+        }
+    }
+
+    /*本接口用于实现客户 (BD_Customer) 的反禁用功能*/
+    @Test
+    public   void gtestenableCustomer() throws Exception {
+        JsonObject jsonData = new JsonObject();
+        jsonData.addProperty("Numbers", FNumber);
+        String result = api.excuteOperation("BD_Customer","enable", jsonData.toString());
+        Gson gson = new Gson();
+        RepoRet repoRet = gson.fromJson(result, RepoRet.class);
+        if (repoRet.getResult().getResponseStatus().isIsSuccess()) {
+
+            System.out.printf("客户反禁用接口: %s%n", gson.toJson(repoRet.getResult()));
+        } else {
+            fail("客户反禁用接口: %s%n "+ gson.toJson(repoRet.getResult().getResponseStatus()));
+        }
+    }
+
+    /*本接口用于实现客户 (BD_Customer) 的查看功能*/
+    @Test
+    public   void htestviewCustomer() throws Exception {
+        OperateParam para = new  OperateParam();
+        para.setNumber(FNumber);
+        OperatorResult result = api.view("BD_Customer", para);
+        Gson gson = new Gson();
+        if (result.getResult().getResponseStatus().isIsSuccess()) {
+            System.out.printf("客户查看接口: %s%n", gson.toJson(result.getResult()));
+        } else {
+            fail("客户查看接口: " + gson.toJson(result.getResult()));
+        }
+    }
+
+    /*本接口用于实现客户 (BD_Customer) 的查看功能*/
+    @Test
+    public   void htestviewCustomer2() throws Exception {
+        OperateParam para = new  OperateParam();
+        para.setNumber(FNumber);
+        OperatorResult<BdCustomer> result = api.view("BD_Customer", para, BdCustomer.class);
+        Gson gson = new Gson();
+        System.out.printf("result: %s%n", gson.toJson(result));
+        if (result.getResult().getResponseStatus().isIsSuccess()) {
+            System.out.printf("客户查看接口: %s%n", gson.toJson(result.getResult()));
+        } else {
+            fail("客户查看接口: " + gson.toJson(result.getResult()));
+        }
+    }
+
+    /*本接口用于实现客户 (BD_Customer)的单据查询功能*/
+    @Test
+    public void itestQueryCustomer() throws Exception {
+        QueryParam para = new QueryParam();
+        para.setFormId("BD_Customer");
+        para.setFieldKeys("FNumber,FName,");
+        para.setFilterString("Fnumber=\'"+FNumber+"\'");
+        Gson gson = new Gson();
+        List result = api.executeBillQuery(para,BdCustomer.class);
+        System.out.println("客户单据查询接口: " + gson.toJson(result));
+
+
+    }
+
+    /*本接口用于实现客户 (BD_Customer) 的删除功能*/
+    @Test
+    public   void jtestdeleteCustomer() throws Exception {
+        OperateParam para = new  OperateParam();
+        List<String> Numbers = Arrays.asList(FNumber);
+        para.setNumbers(Numbers);
+        OperatorResult result = api.delete("BD_Customer",para);
+        Gson gson = new Gson();
+        if (result.getResult().getResponseStatus().isIsSuccess()) {
+            System.out.printf("客户删除接口: %s%n", gson.toJson(result.getResult()));
+        } else {
+            fail("客户删除接口: " + gson.toJson(result.getResult().getResponseStatus()));
+        }
+    }
+
+    /*本接口用于实现客户 (BD_Customer) 的批量提交功能*/
+    @Test
+    public   void kbatchsaveCustomer() throws Exception {
+        String para = "[{\"FName\": "+"\""+"aukh_" + UUID.randomUUID().toString()+"\""+",\"FNumber\": "+"\""+SeqHelper.genNumber("KH")+"\""+",\"FCreateOrgId\": {\"FNumber\": \"100\"},\"FUseOrgId\": {\"FNumber\": \"100\"},\"FCOUNTRY\": {\"FNumber\": \"China\"},\"FINVOICETITLE\": \"zzl\",\"FCustTypeId\": {\"FNumber\": \"KHLB001_SYS\"},\"FTRADINGCURRID\": {\"FNumber\": \"PRE001\"},\"FInvoiceType\": \"1\",\"FTaxType\": {\"FNumber\": \"SFL02_SYS\"},\"FPriority\": 1,\"FTaxRate\": {\"FNumber\": \"SL02_SYS\"},\"FISCREDITCHECK\": true,\"FIsTrade\": true},{\"FName\": "+"\""+"auwl_" + UUID.randomUUID().toString()+"\""+",\"FNumber\": "+"\""+SeqHelper.genNumber("KH")+"\""+",\"FCreateOrgId\": {\"FNumber\": \"100\"},\"FUseOrgId\": {\"FNumber\": \"100\"},\"FCOUNTRY\": {\"FNumber\": \"China\"},\"FINVOICETITLE\": \"zzl\",\"FCustTypeId\": {\"FNumber\": \"KHLB001_SYS\"},\"FTRADINGCURRID\": {\"FNumber\": \"PRE001\"},\"FInvoiceType\": \"1\",\"FTaxType\": {\"FNumber\": \"SFL02_SYS\"},\"FPriority\": 1,\"FTaxRate\": {\"FNumber\": \"SL02_SYS\"},\"FISCREDITCHECK\": true,\"FIsTrade\": true}]";
+        // 批量保存客户信息
+        List<Map<String, Object>> list  = new ArrayList<>();
+        list = new Gson().fromJson(para, list.getClass());
+        SaveResult sRet = api.batchSave("BD_Customer", new BatchSave<>(list));
+        Gson gson = new Gson();
+        if (sRet.isSuccessfully()) {
+            System.out.printf("客户批量保存接口: %s%n", gson.toJson(sRet.getResult()));
+        } else {
+            fail("客户保存接口: " + gson.toJson(sRet.getResult()));
+        }
+    }
+
+    /*本接口用于实现客户 (BD_Customer) 的批量提交功能2*/
+    @Test
+    public   void lbatchsaveCustomer2() throws Exception {
+        String para = "[{\"FName\": "+"\""+"aukh_" + UUID.randomUUID().toString()+"\""+",\"FNumber\": "+"\""+SeqHelper.genNumber("KH")+"\""+",\"FCreateOrgId\": {\"FNumber\": \"100\"},\"FUseOrgId\": {\"FNumber\": \"100\"},\"FCOUNTRY\": {\"FNumber\": \"China\"},\"FINVOICETITLE\": \"zzl\",\"FCustTypeId\": {\"FNumber\": \"KHLB001_SYS\"},\"FTRADINGCURRID\": {\"FNumber\": \"PRE001\"},\"FInvoiceType\": \"1\",\"FTaxType\": {\"FNumber\": \"SFL02_SYS\"},\"FPriority\": 1,\"FTaxRate\": {\"FNumber\": \"SL02_SYS\"},\"FISCREDITCHECK\": true,\"FIsTrade\": true}]";
+        // 批量保存客户信息(传请求模式)
+        List<Map<String, Object>> list  = new ArrayList<>();
+        list = new Gson().fromJson(para, list.getClass());
+        SaveResult sRet = api.batchSave("BD_Customer", new BatchSave<>(list),InvokeMode.Syn);
+        Gson gson = new Gson();
+        if (sRet.isSuccessfully()) {
+            System.out.printf("客户批量保存接口: %s%n", gson.toJson(sRet.getResult()));
+        } else {
+            fail("客户保存接口: " + gson.toJson(sRet.getResult()));
+        }
+    }
+
+    /*本接口用于获取账套信息*/
+    @Test
+    public   void ngetDataCenters() throws Exception {
+        List datacenter = api.getDataCenters();
+        Gson gson = new Gson();
+        System.out.printf("或则环境账套信息:%s%n",gson.toJson(datacenter));
+
+
+    }
+
+}

+ 40 - 0
src/main/java/cn/ezhizao/javasdk/material/BdMaterial.java

@@ -0,0 +1,40 @@
+package cn.ezhizao.javasdk.material;
+
+public class BdMaterial {
+    String FNumber;
+    String FName;
+    String FCreateOrgId;
+    int FUseOrgId;
+
+    public String getFNumber() {
+        return FNumber;
+    }
+
+    public void setFNumber(String FNumber) {
+        this.FNumber = FNumber;
+    }
+
+    public String getFName() {
+        return FName;
+    }
+
+    public void setFName(String FName) {
+        this.FName = FName;
+    }
+
+    public String getFCreateOrgId() {
+        return FCreateOrgId;
+    }
+
+    public void setFCreateOrgId(String FCreateOrgId) {
+        this.FCreateOrgId = FCreateOrgId;
+    }
+
+    public int getFUseOrgId() {
+        return FUseOrgId;
+    }
+
+    public void setFUseOrgId(int FUseOrgId) {
+        this.FUseOrgId = FUseOrgId;
+    }
+}

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 39 - 0
src/main/java/cn/ezhizao/javasdk/material/BdMaterialTest.java


+ 186 - 0
src/main/java/cn/ezhizao/javasdk/material/BdMaterialTest2.java

@@ -0,0 +1,186 @@
+package cn.ezhizao.javasdk.material;
+
+import cn.ezhizao.javasdk.common.SeqHelper;
+import com.google.gson.Gson;
+import com.kingdee.bos.webapi.entity.RepoRet;
+import com.kingdee.bos.webapi.sdk.K3CloudApi;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+import java.util.*;
+
+import static org.junit.Assert.fail;
+
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class BdMaterialTest2 {
+    static String FNumber = SeqHelper.genNumber("WL");
+    static String FName = "auwl_" + UUID.randomUUID().toString();
+
+//    static K3CloudApi api = new K3CloudApi();
+
+    /*本接口用于实现物料 (BD_Material) 的批量保存功能*/
+    @Test
+    public void stestBatchSaveCustomer() throws Exception {
+        K3CloudApi api = new K3CloudApi();
+
+        String data = "{\n" +
+                "\t\"IsautoSubmitAndAudit\": true,\n" +
+                "\t\"creator\": 0,\n" +
+                "\t\"model\": [\n" +
+                "\t\t{\n" +
+                "\t\t\t\"FMATERIALID\": 0,\n" +
+                "\t\t\t\"fBaseUnitId\": {\n" +
+                "\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t},\n" +
+                "\t\t\t\"fCreateOrgId\": {\n" +
+                "\t\t\t\t\"FNumber\": \"100\"\n" +
+                "\t\t\t},\n" +
+                "\t\t\t\"fMaterialGroup\": {\n" +
+                "\t\t\t\t\"FNumber\": \"C.A\"\n" +
+                "\t\t\t},\n" +
+                "\t\t\t\"fName\": \"测试物料\",\n" +
+                "\t\t\t\"fNumber\": \"C.A.111222\",\n" +
+                "\t\t\t\"fSubHeadEntity\": {\n" +
+                "\t\t\t\t\"fRetailUnitID\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t\t}\n" +
+                "\t\t\t},\n" +
+                "\t\t\t\"fUseOrgId\": {\n" +
+                "\t\t\t\t\"FNumber\": \"100\"\n" +
+                "\t\t\t},\n" +
+                "\t\t\t\"subHeadEntity\": {\n" +
+                "\t\t\t\t\"fBaseUnitId\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t\t},\n" +
+                "\t\t\t\t\"fCategoryID\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"CHLB01_SYS\"\n" +
+                "\t\t\t\t},\n" +
+                "\t\t\t\t\"fErpClsID\": \"1\",\n" +
+                "\t\t\t\t\"fFeatureItem\": \"1\",\n" +
+                "\t\t\t\t\"fIsAsset\": false,\n" +
+                "\t\t\t\t\"fIsInventory\": true,\n" +
+                "\t\t\t\t\"fIsProduce\": false,\n" +
+                "\t\t\t\t\"fIsPurchase\": true,\n" +
+                "\t\t\t\t\"fIsSale\": true,\n" +
+                "\t\t\t\t\"fIsSubContract\": false,\n" +
+                "\t\t\t\t\"fVOLUMEUNITID\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t\t},\n" +
+                "\t\t\t\t\"fWEIGHTUNITID\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t\t}\n" +
+                "\t\t\t},\n" +
+                "\t\t\t\"subHeadEntity1\": {\n" +
+                "\t\t\t\t\"fExpPeriod\": 90,\n" +
+                "\t\t\t\t\"fExpUnit\": \"D\",\n" +
+                "\t\t\t\t\"fIsBatchManage\": true,\n" +
+                "\t\t\t\t\"fIsKFPeriod\": true,\n" +
+                "\t\t\t\t\"fStoreUnitID\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t\t}\n" +
+                "\t\t\t},\n" +
+                "\t\t\t\"subHeadEntity2\": {\n" +
+                "\t\t\t\t\"fSalePriceUnitId\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t\t},\n" +
+                "\t\t\t\t\"fSaleUnitId\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t\t}\n" +
+                "\t\t\t},\n" +
+                "\t\t\t\"subHeadEntity3\": {\n" +
+                "\t\t\t\t\"fPurchasePriceUnitId\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t\t},\n" +
+                "\t\t\t\t\"fPurchaseUnitId\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t\t}\n" +
+                "\t\t\t},\n" +
+                "\t\t\t\"subHeadEntity4\": {},\n" +
+                "\t\t\t\"subHeadEntity5\": {\n" +
+                "\t\t\t\t\"fBOMUnitId\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t\t},\n" +
+                "\t\t\t\t\"fFinishReceiptOverRate\": 0.0,\n" +
+                "\t\t\t\t\"fFinishReceiptShortRate\": 0.0,\n" +
+                "\t\t\t\t\"fIsMainPrd\": false,\n" +
+                "\t\t\t\t\"fMinIssueUnitId\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t\t},\n" +
+                "\t\t\t\t\"fProduceUnitId\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t\t},\n" +
+                "\t\t\t\t\"f_RPNY_MAH\": 1,\n" +
+                "\t\t\t\t\"f_RPNY_QTYBATTERIES\": 1,\n" +
+                "\t\t\t\t\"f_RPNY_TOTALENERGY\": 3.16,\n" +
+                "\t\t\t\t\"f_RPNY_VOLTAGE\": 3.16\n" +
+                "\t\t\t},\n" +
+                "\t\t\t\"subHeadEntity6\": {\n" +
+                "\t\t\t\t\"FCheckIncoming\": false,\n" +
+                "\t\t\t\t\"FCheckStock\": false\n" +
+                "\t\t\t},\n" +
+                "\t\t\t\"subHeadEntity7\": {\n" +
+                "\t\t\t\t\"fSubconPriceUnitId\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t\t},\n" +
+                "\t\t\t\t\"fSubconUnitId\": {\n" +
+                "\t\t\t\t\t\"FNumber\": \"kg\"\n" +
+                "\t\t\t\t}\n" +
+                "\t\t\t}\n" +
+                "\t\t}\n" +
+                "\t],\n" +
+                "\t\"needReturnFields\": [\n" +
+                "\t\t\"FMATERIALID\"\n" +
+                "\t],\n" +
+                "\t\"needUpDateFields\": [\n" +
+                "\t\t\"FExpUnit\",\n" +
+                "\t\t\"FExpPeriod\",\n" +
+                "\t\t\"FMATERIALID\",\n" +
+                "\t\t\"FErpClsID\",\n" +
+                "\t\t\"FName\",\n" +
+                "\t\t\"FNumber\",\n" +
+                "\t\t\"FSpecification\",\n" +
+                "\t\t\"FUseOrgId\",\n" +
+                "\t\t\"FCategoryID\",\n" +
+                "\t\t\"FMaterialGroup\",\n" +
+                "\t\t\"FRetailUnitID\",\n" +
+                "\t\t\"FWEIGHTUNITID\",\n" +
+                "\t\t\"FVOLUMEUNITID\",\n" +
+                "\t\t\"FIsPurchase\",\n" +
+                "\t\t\"FIsInventory\",\n" +
+                "\t\t\"FIsSubContract\",\n" +
+                "\t\t\"FIsSale\",\n" +
+                "\t\t\"FIsAsset\",\n" +
+                "\t\t\"FIsProduce\",\n" +
+                "\t\t\"FIsBatchManage\",\n" +
+                "\t\t\"F_RPNY_MAH\",\n" +
+                "\t\t\"F_RPNY_VOLTAGE\",\n" +
+                "\t\t\"F_RPNY_QTYBATTERIES\",\n" +
+                "\t\t\"F_RPNY_TOTALENERGY\",\n" +
+                "\t\t\"SubHeadEntity1\",\n" +
+                "\t\t\"SubHeadEntity2\",\n" +
+                "\t\t\"SubHeadEntity3\",\n" +
+                "\t\t\"SubHeadEntity4\",\n" +
+                "\t\t\"SubHeadEntity5\",\n" +
+                "\t\t\"SubHeadEntity6\",\n" +
+                "\t\t\"SubHeadEntity7\",\n" +
+                "\t\t\"SubHeadEntity\",\n" +
+                "\t\t\"FSubHeadEntity\"\n" +
+                "\t]\n" +
+                "}";
+        // 批量保存物料信息
+        String sRet = api.batchSave("BD_Material", data);
+        Gson gson = new Gson();
+        RepoRet repoRet = gson.fromJson(sRet, RepoRet.class);
+        System.out.println(String.format("批量保持物料:%s", gson.toJson(repoRet.getResult())));
+
+    }
+
+
+
+}
+
+
+
+

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 25 - 0
src/main/java/cn/ezhizao/javasdk/material/bdMaterialFlexTest.java


+ 227 - 0
src/main/java/cn/ezhizao/javasdk/purpurchaseorder/FBillHead.java

@@ -0,0 +1,227 @@
+package cn.ezhizao.javasdk.purpurchaseorder;
+
+import lombok.Data;
+
+@Data
+public class FBillHead {
+
+    private Integer fId; // 实体主键
+    private String fBillNo; // 单据编号
+    private String fDocumentStatus; // 单据状态
+    private String fApproverId; // 审核人
+    private String fApproveDate; // 审核日期
+    private String fModifierId; // 修改人
+    private String fCreateDate; // 创建日期
+    private String fCreatorId; // 创建人
+    private String fModifyDate; // 修改日期
+    private String fCancelDate; // 作废日期
+    private String fCanceler; // 作废人
+    private String fCancelStatus; // 作废状态
+    private String fDescription; // 备注
+    private String fBillType; // 单据类型
+    private Boolean fTrustteed; // 受托
+    private Integer fWorkShopID0; // 生产车间
+    private Integer fPrdOrgId; // 生产组织
+    private Integer fPlannerID; // 计划员
+    private String fDate; // 单据日期
+    private String fOwnerTypeId; // 货主类型
+    private Integer fOwnerId; // 货主
+    private Integer fWorkGroupId; // 计划组
+    private String fBusinessType; // 销售业务类型
+    private Boolean fIsRework; // 是否返工
+    private Boolean fIsEntrust; // 组织受托加工
+    private Integer fEnTrustOrgId; // 委托组织
+    private String fPPBOMType; // 用料清单展开
+    private Boolean fIssueMtrl; // 生产发料
+    private Boolean fIsQCMO; // 期初生产订单
+//    private String fScanBox; // 序列号上传
+    private String f_TSXL_Text_uky; // 月标识
+    private String f_TSXL_DDLB; // 订单类别
+    private String f_TSXL_thdh; // 退货单号
+//    private String f_TSXL_ywy1; // 业务员
+
+
+//    private Integer fEntryId; // 实体主键
+    private String fParentRowId; // 父级行主键
+    private Integer fRowExpandType; // 行展开类型
+    private String fRowId; // 行标识
+    private Integer fMaterialId; // 物料编码
+    private String fMaterialName; // 物料名称
+    private String fSpecification; // 规格型号
+    private String fProductType; // 产品类型
+    private Double fQty; // 制造数量
+    private String fPlanFinishDate; // 计划完工时间
+    private String fPlanStartDate; // 计划开工时间
+    private Integer fLot; // 批号
+    private String fMTONO; // 计划跟踪号
+    private String fProjectNo; // 项目编号
+    private Double fBaseUnitQty; // 基
+
+    // 本单位数量
+    private Integer fGroup; // 组别
+    private Integer fBomId; // BOM版本
+    private Integer fRoutingId; // 工艺路线
+    private Double fYieldRate; // 成品率%
+    private Double fStockInLimitH; // 入库上限
+    private Double fStockInLimitL; // 入库下限
+    private Double fStockInQuaSelAuxQty; // 合格品入库选单数量
+    private Double fStockInQuaSelQty; // 基本单位合格品入库选单数量
+    private Double fStockInFailSelQty; // 基本单位不合格品入库选单数量
+    private Double fStockInFailSelAuxQty; // 不合格品入库选单数量
+    private Double fStockInQuaQty; // 基本单位合格品入库数量
+    private Double fStockInQuaAuxQty; // 合格品入库数量
+    private Double fStockInFailQty; // 基本单位不合格品入库数量
+    private Double fStockInFailAuxQty; // 不合格品入库数量
+    private Integer fStockInOrgId; // 入库组织
+    private Integer fStockId; // 仓库
+    private String fStockLocId; // 仓位
+//    private String fF100004; // 原材料仓库
+//    private String fF100005; // 博世原材料仓库
+//    private String fF100006; // 辅料仓库
+//    private String fF100007; // 金华德原材料仓库
+    private String fOperId; // 产出工序
+    private String fProcessId; // 产出作业编码
+    private String fCostRate; // 成本权重
+    private String fMemoItem; // 备注
+    private String fPlanConfirmDate; // 计划确认日期
+    private String fScheduleDate; // 排程日期
+    private String fConveyDate; // 下达日期
+    private String fStartDate; // 开工日期
+    private String fFinishDate; // 完工日期
+    private String fCloseDate; // 结案日期
+    private String fCostDate; // 结算日期
+    private String fCreateType; // 生成方式
+    private String fSrcBillId; // 来源单据ID
+    private String fSrcBillEntryId; // 来源单据分录内码
+    private String fSaleOrderId; // 销售订单ID
+    private String fSaleOrderNo; // 需求单据
+    private String fSaleOrderEntryId; // 销售订单分录内码
+    private String fRequestOrgId; // 需求组织
+    private String fRepQuaSelQty; // 基本单位汇报选单数量
+    private String fRepFailQty; // 基本单位不合格数量
+    private String fRepQuaSelAuxQty; // 汇报选单数量
+    private String fRepQuaAuxQty; // 合格数量
+    private String fRepFailAuxQty; // 不合格数量
+    private String fRepQuaQty; // 基本单位合格数量
+    private String fStatus; // 业务状态
+    private String fUnitId; // 单位
+    private String fBaseUnitId; // 基本单位
+    private String fAuxPropId; // 辅助属性
+    private String fBaseStockInLimitH; // 基本单位入库上限
+    private String fBaseStockInLimitL; // 基本单位入库下限
+    private String fStockInUlRatio; // 入库上限比例
+    private String fSrcBillType; // 源单类型
+    private String fSrcBillNo; // 源单编号
+    private String fSrcBillEntrySeq; // 源单分录行号
+    private String fSaleOrderEntrySeq; // 需求单据行号
+    private String fBaseYieldQty; // 基本单位成品数量
+    private String fCopyEntryId; // 联副产品分录内码
+    private String fIsSuspend; // 挂起状态
+    private String fStockInLlRatio; // 入库下限比例
+    private String fBFLowId; // 业务流程
+    private String fRepFailSelQty; // 基本单位汇报不合格选单数量
+    private String fRepFailSelAuxQty; // 汇报不合格选单数量
+    private String fWorkShopID; // 生产车间
+    private String fReqType; // 需求类型
+    private String fPriority; // 需求优先级
+    private String fSTOCKREADY; // 备料套数
+    private String fBaseStockReady; // 基本单位备料数量
+    private String fBaseScrapQty; // 基本单位报废数量
+    private String fScrapQty; // 报废数量
+    private String fBaseRepairQty; // 基本单位返修数量
+    private String fRepairQty; // 返修数量
+    private String fBaseStockInScrapSelQty; // 基本单位报废品入库选单数量
+    private String fStockInScrapSelQty; // 报废品入库选单数量
+    private String fBaseStockInScrapQty; // 基本报废品入库数量
+    private String fStockInScrapQty; // 报废品入库数量
+    private String fInStockOwnerTypeId; // 入库货主类型
+    private String fInStockOwnerId; // 入库货主
+    private String fInStockType; // 入库类型-推入库单用
+    private String fCheckProduct; // 产品检验
+    private String fOutPutOptQueue; // 产出序列
+    private String fBaseRptFinishQty; // 基本单位汇报完成数量
+    private String fRptFinishQty; // 汇报完成数量
+    private String fQAIP; // 紧急放行
+    private String fYieldQty; // 成品数量
+    private String fISBACKFLUSH; // 倒冲领料
+    private String fNoStockInQty; // 未入库数量
+    private String fBaseNoStockInQty; // 基本单位未入库数量
+    private String fReqSrc; // 需求来源
+    private String fForceCloserId; // 结案人
+    private String fREMWorkShopId; // 产线
+    private String fScheduleSeq; // 排产序号
+    private String fScheduleStartTime; // 排程开工时间
+    private String fScheduleFinishTime; // 排程完工时间
+    private String fCloseType; // 结案类型
+    private String fScheduleProcSplit; // 排程工序拆分数
+    private String fSNUnitID; // 序列号单位
+    private String fSNQty; // 序列号单位数量
+    private String fReStkQty; // 退库数量
+    private String fBaseReStkQty; // 基本单位退库数量
+    private String fReStkQuaQty; // 合格品退库数量
+    private String fBaseReStkQuaQty; // 基本合格品退库数量
+    private String fReStkFailQty; // 不合格品退库数量
+    private String fBaseReStkFailQty; // 基本报废品退库数量
+    private String fReStkScrapQty; // 报废品退库数量
+    private String fBaseReStkScrapQty; // 基本报废品退库数量
+    private String fPickMtlQty; // 领补套数
+    private String fBasePickMtlQty; // 基本单位领补套数
+    private String fISNEWLC; // 是否手工新增联副产品
+    private String fPickMtrlStatus; // 领料状态
+    private String fBaseIssueQty; // 基本单位发料通知套数
+    private String fIssueQty; // 发料通知套数
+    private String fSrcSplitBillNo; // 源拆分订单编号
+    private String fSrcSplitSeq; // 源拆分订单行号
+    private String fSrcSplitEntryId; // 源拆分订单分录内码
+    private String fSrcSplitId; // 源拆分生产订单内码
+    private String fMOChangeFlag; // 变更标志
+    private String fSRCBOMENTRYID; // 上级订单BOM分录内码
+    private String fReStkReMadeQty; // 返工品退库数量
+    private String fBaseReStkReMadeQty; // 基本单位返工品退库数量
+    private String fBaseReMadeQty; // 基本单位返工数量
+    private String fReMadeQty; // 返工数量
+    private String fBaseStockInReMadeQty; // 基本单位返工品入库数量
+    private String fStockInReMadeQty; // 返工品入库数量
+    private String fBaseStockInReMadeSelQty; // 基本单位返工品入库选单数量
+    private String fStockInReMadeSelQty; // 返工品入库选单数量
+    private String FCloseReason ; // 强制结案原因
+    private String fBaseScheduledQtySum; // 基本单位已排产数量
+    private String fScheduledQtySum; // 已排产数量
+    private String fScheduleStatus; // 排产状态
+    private String fIsFirstInspect; // 首检
+    private String fFirstInspectStatus; // 首检状态
+    private String fConfirmId; // 计划确认人
+    private String fReleaseId; // 下达人
+    private String fStartID; // 开工人
+    private String fFinishId; // 完工人
+    private String fIsMRP; // 已预留
+    private String fBaseSampleDamageQty; // 基本单位样本破坏数
+    private String fSampleDamageQty; // 样本破坏数
+    private String fISENABLESCHEDULE; // 启用日排产
+    private String fPathEntryId; // BOM展开路径
+    private String fPPBOMENTRYID; // 用料清单分录内码
+    private String fBOMENTRYID; // BOM分录内码
+    private String fSrcFormID; // 用料清单类型
+    private String fMatchQty; // 预计齐套数量
+    private String fInvMatchQty; // 库存齐套数
+    private String fCompleteCon; // 齐套状况
+    private String fRemarks; // 跟进备注
+    private String fMatchDate; // 预计齐套日期
+    private String fNOTECOBY; // 联副产品备注
+    private String fDirectStockInQuaQty; // 直送合格品入库数量
+    private String fDirectPickMtrlSelQty; // 直送领料选单数
+    private String fBaseDirectStockInQuaQty; // 直送基本合格品入库数量
+    private String fBaseDirectPickMtrlSelQty; // 直送基本单位领料选单数
+    private String fFirstQCControlType; // 首检控制方式
+    private String fISMRPCAL; // 已计划运算
+    private String fIsGenerateOrder; // 生成下级订单标志
+    private String fANALYSEPRIORITY; // 齐套优先级
+    private String f_TSXL_LLBM; // 领料部门
+    private String f_TSXL_JHSL; // 计划数量
+    private String f_TSXL_FPQK; // 分批情况
+    private String f_TSXL_SPSL; // 首批数量
+    private String f_TSXL_WPSL; // 尾批数量
+    private String f_TSXL_gybb; // 工艺版本
+    private String f_TSXL_CPZT; // 产品状态
+    private String f_TSXL_ddy; // 调度员
+}

+ 15 - 0
src/main/java/cn/ezhizao/javasdk/purpurchaseorder/KingdDeeJson.java

@@ -0,0 +1,15 @@
+package cn.ezhizao.javasdk.purpurchaseorder;
+
+import lombok.Data;
+
+// 金蝶生产订单单据查询参数
+@Data
+public class KingdDeeJson {
+    private String formId; // 表单 ID
+    private String fieldKeys; // 字段键
+    private int topRowCount; // 顶部行数
+    private int limit; // 查询限制
+    private int startRow; // 起始行
+    private String filterString; // 过滤条件字符串
+    private String orderString; // 排序条件字符串
+}

+ 69 - 0
src/main/java/cn/ezhizao/javasdk/purpurchaseorder/PurTest.java

@@ -0,0 +1,69 @@
+package cn.ezhizao.javasdk.purpurchaseorder;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+import cn.ezhizao.javasdk.common.SeqHelper;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.kingdee.bos.webapi.entity.RepoRet;
+import com.kingdee.bos.webapi.sdk.K3CloudApi;
+import org.junit.FixMethodOrder;
+import org.junit.runners.MethodSorters;
+import org.testng.annotations.Test;
+
+import static junit.framework.TestCase.fail;
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class   PurTest {
+    K3CloudApi api = new K3CloudApi();
+    static String FNumber = SeqHelper.genNumber("CGDD");
+    static String FName = "aucgdd_" + UUID.randomUUID().toString();
+
+
+
+    /* 生产订单查询 */
+    @Test
+    public void executeBillQuery() throws Exception {
+        // 创建 KingdeeJson 对象并设置字段值
+        FBillHead fBillHead = new FBillHead();
+        // 获取 fBillHead 类的所有字段
+        Field[] fields = fBillHead.getClass().getDeclaredFields();
+        // 构建 fieldKeys 参数字符串
+        StringBuilder fieldKeysBuilder = new StringBuilder();
+        for (Field field : fields) {
+            // 获取字段名
+            String fieldName = field.getName();
+            // 根据实际需求处理字段名,例如驼峰转下划线等
+            // 这里假设直接使用字段名,实际可能需要转换
+            fieldKeysBuilder.append(fieldName).append(",");
+        }
+        // 去掉最后一个逗号
+        if (fieldKeysBuilder.length() > 0) {
+            fieldKeysBuilder.deleteCharAt(fieldKeysBuilder.length() - 1);
+        }
+        KingdDeeJson kingdeeJson = new KingdDeeJson();
+        String fieldKeys = fieldKeysBuilder.toString();
+        kingdeeJson.setFieldKeys(fieldKeys);
+        kingdeeJson.setFormId("PRD_MO");
+        kingdeeJson.setTopRowCount(0);
+        kingdeeJson.setLimit(10);
+        kingdeeJson.setStartRow(0);
+        kingdeeJson.setFilterString("fId = 100193");
+        kingdeeJson.setOrderString("FID ASC");
+        Gson gson = new Gson();
+        String json = gson.toJson(kingdeeJson);
+        List<List<Object>> lists = api.executeBillQuery(json);
+
+        List<FBillHead> fBillHeadList = new ArrayList<>();
+
+        System.out.println("采购订单保存接口: " + lists);
+        json=gson.toJson(lists);
+        System.out.println("json: " + json);
+    }
+
+
+
+}

+ 205 - 0
src/main/java/cn/ezhizao/javasdk/saleorder/SavexSaleOrder.java

@@ -0,0 +1,205 @@
+package cn.ezhizao.javasdk.saleorder;
+
+import cn.ezhizao.javasdk.common.SeqHelper;
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.kingdee.bos.webapi.entity.RepoRet;
+import com.kingdee.bos.webapi.sdk.K3CloudApi;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+import java.util.UUID;
+
+import static org.junit.Assert.fail;
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class SavexSaleOrder {
+    K3CloudApi api = new K3CloudApi();
+    static String FNumber = SeqHelper.genNumber("XSDD");
+    static String FName = "auxsdd_" + UUID.randomUUID().toString();
+    private static String saleid = "";
+
+    String json = "{\n" +
+            "        \"NeedUpDateFields\": [],\n" +
+            "        \"NeedReturnFields\": [],\n" +
+            "        \"IsDeleteEntry\": \"true\",\n" +
+            "        \"SubSystemId\": \"\",\n" +
+            "        \"IsVerifyBaseDataField\": \"False\",\n" +
+            "        \"IsEntryBatchFill\": \"true\",\n" +
+            "        \"ValidateFlag\": \"true\",\n" +
+            "        \"NumberSearch\": \"true\",\n" +
+            "        \"IsAutoAdjustField\": \"False\",\n" +
+            "        \"InterationFlags\": \"\",\n" +
+            "        \"IgnoreInterationFlag\": \"\",\n" +
+            "        \"IsControlPrecision\": \"False\",\n" +
+            "        \"Model\": {\n" +
+            "    \"FBillTypeID\": {\n" +
+            "      \"FNUMBER\": \"XSDD01_SYS\"\n" +
+            "    },\n" +
+            "    \"FDate\": \"2022-04-27 00:00:00\",\n" +
+            "    \"FSaleOrgId\": {\n" +
+            "      \"FNumber\": \"100\"\n" +
+            "    },\n" +
+            "    \"FCustId\": {\n" +
+            "      \"FNumber\": \"SCMKH100001\"\n" +
+            "    },\n" +
+            "    \"FReceiveId\": {\n" +
+            "      \"FNumber\": \"SCMKH100001\"\n" +
+            "    },\n" +
+            "    \"FSaleDeptId\": {\n" +
+            "      \"FNumber\": \"SCMBM000001\"\n" +
+            "    },\n" +
+            "    \"FSalerId\": {\n" +
+            "      \"FNumber\": \"SCMYG000001_SCMGW000001_1\"\n" +
+            "    },\n" +
+            "    \"FSettleId\": {\n" +
+            "      \"FNumber\": \"SCMKH100001\"\n" +
+            "    },\n" +
+            "    \"FChargeId\": {\n" +
+            "      \"FNumber\": \"SCMKH100001\"\n" +
+            "    },\n" +
+            "    \"FSaleOrderFinance\": {\n" +
+            "      \"FSettleCurrId\": {\n" +
+            "        \"FNumber\": \"PRE001\"\n" +
+            "      },\n" +
+            "      \"FIsPriceExcludeTax\": 'true',\n" +
+            "      \"FIsIncludedTax\": 'true',\n" +
+            "      \"FExchangeTypeId\": {\n" +
+            "        \"FNumber\": \"HLTX01_SYS\"\n" +
+            "      }\n" +
+            "    },\n" +
+            "    \"FSaleOrderEntry\": [\n" +
+            "      {\n" +
+            "        \"FRowType\": \"Standard\",\n" +
+            "        \"FMaterialId\": {\n" +
+            "          \"FNumber\": \"SCMWL100002\"\n" +
+            "        },\n" +
+            "        \"FUnitID\": {\n" +
+            "          \"FNumber\": \"Pcs\"\n" +
+            "        },\n" +
+            "        \"FQty\": 10,\n" +
+            "        \"FPriceUnitId\": {\n" +
+            "          \"FNumber\": \"Pcs\"\n" +
+            "        },\n" +
+            "        \"FPrice\": 8.849558,\n" +
+            "        \"FTaxPrice\": 10,\n" +
+            "        \"FEntryTaxRate\": 13,\n" +
+            "        \"FDeliveryDate\": \"2022-04-27 15:15:54\",\n" +
+            "        \"FStockOrgId\": {\n" +
+            "          \"FNumber\": \"100\"\n" +
+            "        },\n" +
+            "        \"FSettleOrgIds\": {\n" +
+            "          \"FNumber\": \"100\"\n" +
+            "        },\n" +
+            "        \"FSupplyOrgId\": {\n" +
+            "          \"FNumber\": \"100\"\n" +
+            "        },\n" +
+            "        \"FOwnerTypeId\": \"BD_OwnerOrg\",\n" +
+            "        \"FOwnerId\": {\n" +
+            "          \"FNumber\": \"100\"\n" +
+            "        },\n" +
+            "        \"FReserveType\": \"1\",\n" +
+            "        \"FPriceBaseQty\": 10,\n" +
+            "        \"FStockUnitID\": {\n" +
+            "          \"FNumber\": \"Pcs\"\n" +
+            "        },\n" +
+            "        \"FStockQty\": 10,\n" +
+            "        \"FStockBaseQty\": 10,\n" +
+            "        \"FOUTLMTUNIT\": \"SAL\",\n" +
+            "        \"FOutLmtUnitID\": {\n" +
+            "          \"FNumber\": \"Pcs\"\n" +
+            "        },\n" +
+            "        \"FAllAmountExceptDisCount\": 100,\n" +
+            "        \"FOrderEntryPlan\": [\n" +
+            "          {\n" +
+            "            \"FPlanDate\": \"2022-04-27 15:15:54\",\n" +
+            "            \"FPlanQty\": 10\n" +
+            "          }\n" +
+            "        ]\n" +
+            "      }\n" +
+            "    ],\n" +
+            "    \"FSaleOrderPlan\": [\n" +
+            "      {\n" +
+            "        \"FRecAdvanceRate\": 100,\n" +
+            "        \"FRecAdvanceAmount\": 100\n" +
+            "      }\n" +
+            "    ],\n" +
+            "    \"FBillNo\":"+"\""+FNumber+"\""+",\n" +
+            "  }\n" +
+            "    }";
+
+
+    /* 本接口用于实现销售订单 (SAL_SaleOrder)的保存功能 */
+    @Test
+    public void atestSaveSaleOrder() throws Exception {
+        String result = api.save("SAL_SaleOrder", json);
+        Gson gson = new Gson();
+        RepoRet sRet = gson.fromJson(result, RepoRet.class);
+        if (sRet.isSuccessfully()) {
+            saleid = sRet.getResult().getId();
+            System.out.printf("销售订单保存接口%s%n", gson.toJson(sRet.getResult()));
+        } else {
+            fail("销售订单保存接口: " + gson.toJson(sRet.getResult()));
+        }
+    }
+
+
+    /*本接口用于实现销售订单 (SAL_SaleOrder)的提交功能*/
+    @Test
+    public void btestSubmitSaleOrder() throws Exception {
+        JsonObject jsonData = new JsonObject();
+        jsonData.addProperty("Numbers", FNumber);
+        String result = api.submit("SAL_SaleOrder", jsonData.toString());
+        Gson gson = new Gson();
+        RepoRet repoRet = gson.fromJson(result, RepoRet.class);
+        if (repoRet.getResult().getResponseStatus().isIsSuccess()) {
+            System.out.printf("销售订单提交接口: %s%n", gson.toJson(repoRet.getResult()));
+        } else {
+            fail("销售订单提交接口: " + gson.toJson(repoRet.getResult()));
+        }
+
+    }
+
+    /*本接口用于实现销售订单 (SAL_SaleOrder)的审核功能*/
+    @Test
+    public void ctestauditSaleOrder() throws Exception {
+        JsonObject jsonData = new JsonObject();
+        jsonData.addProperty("Numbers", FNumber);
+        String result = api.audit("SAL_SaleOrder", jsonData.toString());
+        Gson gson = new Gson();
+        RepoRet repoRet = gson.fromJson(result, RepoRet.class);
+        if (repoRet.getResult().getResponseStatus().isIsSuccess()) {
+            System.out.printf("销售订单审核接口: %s%n", gson.toJson(repoRet.getResult()));
+        } else {
+            fail("销售订单审核接口: " + gson.toJson(repoRet.getResult()));
+        }
+    }
+
+    //    //自定义api测试
+    @Test
+    public void utestApi() {
+        try {
+            K3CloudApi api = new K3CloudApi();
+            Boolean testResult=api.CheckAuthInfo().getResponseStatus().isIsSuccess();
+            if(testResult) {
+                String requestUrl = "Kingdee.K3.SCM.WebApi.ServicesStub.SaveXSaleOrderWebApi.SaveXSaleOrder";
+                Object[] paramInfo = new Object[]{"{\"SaleOrderBillNo\": "+"\""+FNumber+"\""+",\"SaleOrderBillId\":"+saleid+",}"};
+                String result = String.valueOf(api.execute(requestUrl, paramInfo));
+                JsonElement jsondata = new JsonParser().parse(result);
+                boolean issucess = jsondata.getAsJsonObject().get("IsSuccess").getAsBoolean();
+                if(issucess){
+                    System.out.println("销售订单新变更单:" + result);
+                }
+                else {
+                    fail("销售订单新变更单:" + result);
+                }
+            }
+        } catch (Exception e) {
+
+            fail(e.getMessage());
+        }
+    }
+}

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно