DdTest.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. package com.malk.jinlun;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.auth0.jwt.JWT;
  4. import com.auth0.jwt.algorithms.Algorithm;
  5. import com.google.gson.Gson;
  6. import com.kingdee.bos.webapi.entity.IdentifyInfo;
  7. import com.kingdee.bos.webapi.entity.RepoResult;
  8. import com.kingdee.bos.webapi.entity.RepoRet;
  9. import com.kingdee.bos.webapi.sdk.K3CloudApi;
  10. import com.kingdee.bos.webapi.sdk.WebApiClient;
  11. import com.malk.jinlun.config.KDWebApiConf;
  12. import com.malk.jinlun.entity.*;
  13. import com.malk.jinlun.service.CpClient;
  14. import com.malk.jinlun.service.JinlunService;
  15. import com.malk.jinlun.service.JinlunTaskService;
  16. import com.malk.server.common.McR;
  17. import com.malk.utils.UtilHttp;
  18. import com.malk.utils.UtilMap;
  19. import com.malk.utils.UtilToken;
  20. import lombok.extern.slf4j.Slf4j;
  21. import org.apache.commons.lang3.StringUtils;
  22. import org.junit.Test;
  23. import org.junit.runner.RunWith;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.boot.test.context.SpringBootTest;
  26. import org.springframework.test.context.junit4.SpringRunner;
  27. import java.nio.charset.StandardCharsets;
  28. import java.nio.file.Files;
  29. import java.nio.file.Paths;
  30. import java.security.MessageDigest;
  31. import java.util.*;
  32. @Slf4j
  33. @SpringBootTest
  34. @RunWith(SpringRunner.class)
  35. public class DdTest {
  36. @Autowired
  37. private KDWebApiConf kdWebApiConf;
  38. @Autowired
  39. private CpClient cpClient;
  40. @Autowired
  41. private JinlunService jinlunService;
  42. @Autowired
  43. private JinlunTaskService jinlunTaskService;
  44. @Test
  45. public void test2() {
  46. jinlunTaskService.syncMaterial();
  47. }
  48. @Test
  49. public void test4() {
  50. jinlunTaskService.syncSaleOut();
  51. }
  52. @Test
  53. public void test5() {
  54. jinlunTaskService.syncReceipt();
  55. }
  56. @Test
  57. public void test6() {
  58. jinlunTaskService.syncReceivable();
  59. }
  60. @Test
  61. public void test7() {
  62. jinlunTaskService.syncSaleReturn();
  63. }
  64. @Test
  65. public void test8() {
  66. try {
  67. String filePath = "C:\\Users\\EDY\\Pictures\\4.png"; // 替换为你的文件路径
  68. // 1. 读取文件为字节数组
  69. byte[] fileBytes = Files.readAllBytes(Paths.get(filePath));
  70. // 2. 转换为Base64字符串
  71. String base64String = Base64.getEncoder().encodeToString(fileBytes);
  72. System.out.println("Base64编码结果:");
  73. System.out.println(base64String);
  74. K3CloudApi client = new K3CloudApi(initIden());
  75. Map map = new HashMap();
  76. map.put("FileName", "4.png");//文件名
  77. map.put("FormId", "SAL_SaleOrder");//表单id
  78. map.put("IsLast", true);//是否最后一次上传
  79. map.put("InterId", "104784");//单据内码
  80. // map.put("Entrykey", "");//单据体标识
  81. // map.put("EntryinterId", "-1");//分录内码
  82. map.put("BillNO", "S301-251118005");//单据编号
  83. // map.put("AliasFileName", "test");
  84. // map.put("FileId", "");
  85. map.put("SendByte", base64String);//文件字节数组转base64后的字符串
  86. String resultJson = client.attachmentUpload(JSONObject.toJSONString(map));
  87. Map parse = (Map) JSONObject.parse(resultJson);
  88. Map map1 = UtilMap.getMap(parse, "Result");
  89. String fileId = UtilMap.getString(map1, "FileId");
  90. System.out.println(fileId);
  91. } catch (Exception e) {
  92. throw new RuntimeException(e);
  93. }
  94. }
  95. @Test
  96. public void test9() {
  97. //查询云枢客户单据详情
  98. String objectId = "264ae110db184912a63af53738cd4a0f";
  99. Map saleOrder = cpClient.getCpBo("XSDD", objectId, null);
  100. Map saleOrderData = cpClient.getCpBoResultData(saleOrder);
  101. //请求参数,要求为json字符串
  102. Save save = new Save();
  103. SaleOrderModel saleOrderModel = new SaleOrderModel();
  104. //基本信息
  105. FNumber FBillTypeID = new FNumber(UtilMap.getString(saleOrderData, "Dropdown1758339062589_key"));//单据类型
  106. String FDate = "2025-11-18 00:00:00";//日期
  107. FNumber FCustId = new FNumber(UtilMap.getString(saleOrderData, "ShortText1760426148831"));//客户
  108. String F_NLD_DDTYPE = UtilMap.getString(saleOrderData, "Dropdown1758340059699_key");//订单类型
  109. FNumber FSalerId = new FNumber(UtilMap.getString(saleOrderData, "ShortText1760421121913"));//销售员
  110. FSTAFFNUMBER F_Sl_gendanyuan = new FSTAFFNUMBER(UtilMap.getString(saleOrderData, "Text1760421147555"));//跟单员
  111. String FBusinessType = UtilMap.getString(saleOrderData,"Dropdown1758339265813_key");//业务类型
  112. String F_WGR_Combo_re5 = UtilMap.getString(saleOrderData,"Dropdown1758340112723_key");//订单要求
  113. FNumber FHEADLOCID = new FNumber(UtilMap.getString(saleOrderData, "ShortText1760507577966"));//交货地点
  114. String FNote = UtilMap.getString(saleOrderData,"LongText1758339516625");//备注
  115. String F_Sl_customerbillno = UtilMap.getString(saleOrderData,"ShortText1758340044946");//客户订单号
  116. saleOrderModel.setFBillTypeID(FBillTypeID);
  117. saleOrderModel.setFDate(FDate);
  118. saleOrderModel.setFCustId(FCustId);
  119. saleOrderModel.setF_NLD_DDTYPE(F_NLD_DDTYPE);
  120. saleOrderModel.setFSalerId(FSalerId);
  121. saleOrderModel.setF_Sl_gendanyuan(F_Sl_gendanyuan);
  122. saleOrderModel.setFBusinessType(FBusinessType);
  123. saleOrderModel.setF_WGR_Combo_re5(F_WGR_Combo_re5);
  124. saleOrderModel.setFHEADLOCID(FHEADLOCID);
  125. saleOrderModel.setFNote(FNote);
  126. saleOrderModel.setF_Sl_customerbillno(F_Sl_customerbillno);
  127. //财务信息
  128. SaleOrderFinance saleOrderFinance = new SaleOrderFinance();
  129. FNumber FSettleCurrId = new FNumber(UtilMap.getString(saleOrderData, "Dropdown1758339227503_key"));//结算币别
  130. FNumber FRecConditionId = new FNumber(UtilMap.getString(saleOrderData, "Dropdown1758339314401_key"));//收款条件
  131. FNumber FSettleModeId = new FNumber(UtilMap.getString(saleOrderData, "Dropdown1758340854092_key"));//结算方式
  132. boolean FIsIncludedTax = UtilMap.getBoolean(saleOrderData,"Logic1758340099868");//是否含税
  133. boolean FIsPriceExcludeTax = UtilMap.getBoolean(saleOrderData,"Logic1758340955492");//价外税
  134. saleOrderFinance.setFSettleCurrId(FSettleCurrId);
  135. saleOrderFinance.setFRecConditionId(FRecConditionId);
  136. saleOrderFinance.setFSettleModeId(FSettleModeId);
  137. saleOrderFinance.setFIsIncludedTax(FIsIncludedTax);
  138. saleOrderFinance.setFIsPriceExcludeTax(FIsPriceExcludeTax);
  139. saleOrderModel.setFSaleOrderFinance(saleOrderFinance);
  140. //明细信息
  141. List<Map> saleDetailList = UtilMap.getList(saleOrderData, "Sheet1758341252878");
  142. List<SaleOrderEntry> saleOrderEntryList = new ArrayList<>();
  143. String[] fileIds = {"276d028be0d5478695673cc985f058f2","70ae9854204f4365a8ac3baa48a5b9bd"};
  144. int i=0;
  145. for (Map saleDetail : saleDetailList) {
  146. FNumber FMaterialId = new FNumber(UtilMap.getString(saleDetail, "ShortText1758341332222"));//物料编码
  147. FNumber FUnitID = new FNumber("Kg");//销售单位
  148. Double FQty = 1.0;//销售数量
  149. FNumber FPriceUnitId = new FNumber("Kg");//计价单位
  150. Double FPriceUnitQty = 1.0;//计价数量
  151. String F_Sl_XSTYPE = UtilMap.getString(saleDetail, "Dropdown1758341293022_key");//产品类别
  152. Double FTaxPrice = 1.0;//含税单价
  153. boolean FIsFree = UtilMap.getBoolean(saleDetail,"Logic1758341430353");//是否赠品
  154. Double FEntryTaxRate = UtilMap.getDouble(saleDetail, "Number1758349078527");//税率
  155. // String FDeliveryDate = UtilMap.getString(saleDetail,"Date1758341499356");//客户交期
  156. // String FEntryNote = UtilMap.getString(saleDetail,"Date1758341499356");//备注
  157. Double F_VMKV_MPPRICE = 1.0;//报价价格
  158. // String F_VMKV_SCCQ1 = UtilMap.getString(saleDetail,"Dropdown1760425152219_key");//生产厂区
  159. // String F_VMKV_JSYQ = UtilMap.getString(saleDetail,"ShortText1762135907570");//技术要求
  160. // String F_NLD_BR = UtilMap.getString(saleDetail,"ShortText1762135907570");//剩磁(Br)
  161. // String F_NLD_Hcj = UtilMap.getString(saleDetail,"ShortText1762135907570");//内禀矫顽力(Hcj)
  162. // String F_NLD_Hcb = UtilMap.getString(saleDetail,"ShortText1762135907570");//磁感矫顽力(Hcb)
  163. // String F_NLD_BH = UtilMap.getString(saleDetail,"ShortText1762135907570");//最大磁能积(BH)max
  164. // String F_NLD_Hk = UtilMap.getString(saleDetail,"ShortText1762135907570");//方形度Hk/Hcj
  165. // String F_VMKV_GXYQ = UtilMap.getString(saleDetail,"ShortText1762135907570");//公差要求
  166. //
  167. // boolean FDeliveryControl = UtilMap.getBoolean(saleDetail,"Logic1763091193161");//控制发货数量
  168. // Double FDeliveryMaxQty = UtilMap.getDouble(saleDetail, "Number1763091294543");//发货上限
  169. // Double FDeliveryMinQty = UtilMap.getDouble(saleDetail, "Number1763091312359");//发货下限
  170. //todo 订单图纸附件上传
  171. String file = fileIds[i];
  172. i++;
  173. SaleOrderEntry saleOrderEntry = new SaleOrderEntry();
  174. saleOrderEntry.setFMaterialId(FMaterialId);
  175. saleOrderEntry.setFUnitID(FUnitID);
  176. saleOrderEntry.setFPriceUnitId(FPriceUnitId);
  177. saleOrderEntry.setFPriceUnitQty(FPriceUnitQty);
  178. saleOrderEntry.setF_Sl_XSTYPE(F_Sl_XSTYPE);
  179. saleOrderEntry.setFQty(FQty);
  180. saleOrderEntry.setFTaxPrice(FTaxPrice);
  181. saleOrderEntry.setFIsFree(FIsFree);
  182. saleOrderEntry.setFEntryTaxRate(FEntryTaxRate);
  183. // saleOrderEntry.setFDeliveryDate(FDeliveryDate);
  184. // saleOrderEntry.setFEntryNote(FEntryNote);
  185. saleOrderEntry.setF_VMKV_MPPRICE(F_VMKV_MPPRICE);
  186. // saleOrderEntry.setF_VMKV_SCCQ1(F_VMKV_SCCQ1);
  187. // saleOrderEntry.setF_VMKV_JSYQ(F_VMKV_JSYQ);
  188. // saleOrderEntry.setF_NLD_BR(F_NLD_BR);
  189. // saleOrderEntry.setF_NLD_Hcj(F_NLD_Hcj);
  190. // saleOrderEntry.setF_NLD_Hcb(F_NLD_Hcb);
  191. // saleOrderEntry.setF_NLD_BH(F_NLD_BH);
  192. // saleOrderEntry.setF_NLD_Hk(F_NLD_Hk);
  193. // saleOrderEntry.setF_VMKV_GXYQ(F_VMKV_GXYQ);
  194. // saleOrderEntry.setFDeliveryControl(FDeliveryControl);
  195. // saleOrderEntry.setFDeliveryMaxQty(FDeliveryMaxQty);
  196. // saleOrderEntry.setFDeliveryMinQty(FDeliveryMinQty);
  197. saleOrderEntry.setF_Sl_Attachment(file);
  198. saleOrderEntryList.add(saleOrderEntry);
  199. }
  200. saleOrderModel.setFSaleOrderEntry(saleOrderEntryList);
  201. save.setModel(saleOrderModel);
  202. Gson gson2 = new Gson();
  203. String jsonData = gson2.toJson(save);
  204. log.info(jsonData);
  205. K3CloudApi client = new K3CloudApi(initIden());
  206. //业务对象标识
  207. String formId = "SAL_SaleOrder";
  208. //调用接口
  209. String resultJson = "";
  210. try {
  211. resultJson = client.save(formId,jsonData);
  212. }catch (Exception e){
  213. throw new RuntimeException(e);
  214. }
  215. //用于记录结果
  216. Gson gson = new Gson();
  217. //对返回结果进行解析和校验
  218. RepoRet repoRet = gson.fromJson(resultJson, RepoRet.class);
  219. }
  220. @Test
  221. public void test10(){
  222. try {
  223. String acctID = "66816d8a115ffc";
  224. String username = "Administrator";
  225. String appId = "295561_7e1I0bHHVqGaSZxJ7Z4pVxxs7L5bxMMI";
  226. String appSec = "0f51467e39764b548ec3d75159dfbd2b";
  227. String timestamp = System.currentTimeMillis()/1000 + "";
  228. String[] arr = {acctID,username,appId,appSec,timestamp};
  229. Arrays.sort(arr, (a, b) -> a.compareTo(b));
  230. System.out.println("排序结果:");
  231. for (String s : arr) {
  232. System.out.println(s);
  233. }
  234. String str = String.join("", arr);
  235. // 1. 创建 MessageDigest 实例,指定 SHA-256 算法
  236. MessageDigest digest = MessageDigest.getInstance("SHA-256");
  237. // 2. 输入字符串转换为字节数组,并计算哈希值
  238. byte[] hashBytes = digest.digest(str.getBytes(StandardCharsets.UTF_8));
  239. // 3. 将字节数组转换为十六进制字符串
  240. StringBuilder hexString = new StringBuilder();
  241. for (byte b : hashBytes) {
  242. String hex = Integer.toHexString(0xff & b);
  243. if (hex.length() == 1) {
  244. hexString.append('0'); // 补零
  245. }
  246. hexString.append(hex);
  247. }
  248. // 4. 输出结果
  249. System.out.println("SHA-256 哈希值: " + hexString.toString());
  250. }catch (Exception e){
  251. throw new RuntimeException(e);
  252. }
  253. }
  254. @Test
  255. public void test11(){
  256. // String input = "RElSRV82NjdmODEyMmJkYzM0NDUyYWMyYjM3Mjg5NTAzYjhhMjEucG5n";
  257. String input = "RElSRV9iNWViMTdlZTA1NTI0OTU1YmM3MjM3YWEyMzU5OTY5MDIucG5n";
  258. String s = new String(Base64.getUrlDecoder().decode(input), StandardCharsets.UTF_8);
  259. System.out.println(s);
  260. }
  261. @Test
  262. public void test12() {
  263. jinlunTaskService.syncXingneng();
  264. }
  265. @Test
  266. public void test13() {
  267. McR customerDzmx = jinlunService.getCustomerDzmx("2025-06-01", "2025-12-30", "ASTAR CO., LTD.");
  268. System.out.println(customerDzmx);
  269. }
  270. @Test
  271. public void test14() {
  272. McR customerWqqk = jinlunService.getCustomerWqqk("2025-06-01", "ASTAR CO., LTD.");
  273. System.out.println(customerWqqk);
  274. }
  275. private IdentifyInfo initIden(){
  276. //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。
  277. //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。
  278. //读取配置,初始化SDK
  279. IdentifyInfo iden = new IdentifyInfo();
  280. iden.setUserName(kdWebApiConf.getXKDApiUserName());
  281. iden.setAppId(kdWebApiConf.getXKDApiAppID());
  282. iden.setdCID(kdWebApiConf.getXKDApiAcctID());
  283. iden.setAppSecret(kdWebApiConf.getXKDApiAppSec());
  284. iden.setServerUrl(kdWebApiConf.getXKDApiServerUrl());
  285. return iden;
  286. }
  287. @Test
  288. public void test3() {
  289. testGetAccessToken();
  290. testGetAccessToken();
  291. }
  292. @Test
  293. public void testGetAccessToken(){
  294. String accessToken = UtilToken.get("invalid-token-cloudpivot");
  295. if (StringUtils.isNotBlank(accessToken)) {
  296. log.info(accessToken);
  297. } else {
  298. Map<String,Object> params = new HashMap();
  299. params.put("grant_type","client_credentials");
  300. params.put("client_id","xclient");
  301. params.put("client_secret","0a417ecce58c31b32364ce19ca8fcd15");
  302. String s = UtilHttp.doPost("http://192.168.0.12/api/oauth/token", null, params, new HashMap());
  303. Map result = (Map) JSONObject.parse(s);
  304. accessToken = "bearer" + UtilMap.getString(result, "access_token");
  305. long expiresIn = UtilMap.getLong(result, "expires_in") * 1000;
  306. UtilToken.put("invalid-token-cloudpivot", accessToken, expiresIn);
  307. log.info(accessToken);
  308. }
  309. }
  310. }