From 17ec30270228291b3509e02d49571e084452e82c Mon Sep 17 00:00:00 2001
From: LSH
Date: 星期五, 20 十月 2023 10:13:00 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/entity/kingdee/InFormIdParam.java | 38 ++
src/main/java/com/zy/asrs/task/kingdee/LoginAuthenticationScheduler.java | 25 +
src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java | 57 ++++
src/main/java/com/zy/asrs/task/kingdee/handler/LoginAuthenticationHandler.java | 134 +++++++++
src/main/java/com/zy/asrs/entity/kingdee/LoginParam.java | 19 +
src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java | 27 +
src/main/resources/application.yml | 25 +
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java | 316 ++++++++++++++++++++++
src/main/java/com/zy/asrs/task/kingdee/handler/ReviewOrderSyncHandler.java | 194 +++++++++++++
9 files changed, 834 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/zy/asrs/entity/kingdee/InFormIdParam.java b/src/main/java/com/zy/asrs/entity/kingdee/InFormIdParam.java
new file mode 100644
index 0000000..c548dbf
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/kingdee/InFormIdParam.java
@@ -0,0 +1,38 @@
+package com.zy.asrs.entity.kingdee;
+
+import lombok.Data;
+
+@Data
+public class InFormIdParam {
+
+ //鏌ユ壘琛ㄥ崟鍞竴鏍囪瘑
+ private String FormId;
+
+ //鏈�澶氬厑璁告煡璇㈢殑鏁伴噺锛�0鎴栬�呬笉瑕佹灞炴�ф爣璇嗕笉闄愬埗
+ private String TopRowCount;
+
+ private Integer Limit;
+
+ private String StartRow;
+
+ //杩囨护鏉′欢锛坋g:\"FNumber>'0301010120001' and FCreateDate>'2023-07-05' \"锛�
+ //1銆丩eft锛氬乏鎷彿
+ //3銆丆ompare锛氭瘮杈冭繍绠楃锛屽銆�澶т簬">"銆佸皬浜�"<"銆佺瓑浜�"="銆佸寘鍚�"like"銆佸乏鍖呭惈"llike"銆佸彸鍖呭惈"rlike"
+ //4銆乂alue锛氭瘮杈冨��
+ //5銆丷ight锛氬彸鎷彿
+ //6銆丩ogic锛氶�昏緫杩愮畻绗︼紝濡� "and"銆�"or"
+ private Integer Filterstring;
+
+ //鎺掑簭鏉′欢
+ private Integer OrderString;
+
+ //寰呮煡璇㈣〃鍗曠殑瀛楁鍒楋紙鏈熸湜杩斿洖鍊硷級
+ private Integer FieldKeys;
+
+
+
+
+
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/kingdee/LoginParam.java b/src/main/java/com/zy/asrs/entity/kingdee/LoginParam.java
new file mode 100644
index 0000000..05820d2
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/kingdee/LoginParam.java
@@ -0,0 +1,19 @@
+package com.zy.asrs.entity.kingdee;
+
+import lombok.Data;
+
+@Data
+public class LoginParam {
+ //璐﹀彿ID
+ private String acctID;
+
+ //璐﹀彿
+ private String username;
+
+ //瀵嗙爜
+ private String password;
+
+ //
+ private Integer lcid;
+
+}
diff --git a/src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java b/src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java
new file mode 100644
index 0000000..2955277
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java
@@ -0,0 +1,27 @@
+package com.zy.asrs.task.kingdee;
+
+import com.zy.asrs.task.kingdee.handler.InboundOrderHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class InboundOrderScheduler {
+
+ @Autowired
+ private InboundOrderHandler inboundOrderHandler;
+ @Value("${erp.switch.InboundOrderSwitch}")
+ private boolean InboundOrderSwitch;
+
+ @Scheduled(cron = "0/3 * * * * ? ")
+ void login(){
+ if(!InboundOrderSwitch){
+ return;
+ }
+ inboundOrderHandler.start();
+ }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/kingdee/LoginAuthenticationScheduler.java b/src/main/java/com/zy/asrs/task/kingdee/LoginAuthenticationScheduler.java
new file mode 100644
index 0000000..8b7be90
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/kingdee/LoginAuthenticationScheduler.java
@@ -0,0 +1,25 @@
+package com.zy.asrs.task.kingdee;
+
+import com.zy.asrs.task.kingdee.handler.LoginAuthenticationHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class LoginAuthenticationScheduler {
+
+ @Autowired
+ private LoginAuthenticationHandler loginAuthenticationHandler;
+ @Value("${erp.switch.LoginAuthenticationSwitch}")
+ private boolean LoginAuthenticationSwitch;
+
+ //@Scheduled(cron = "0/3 * * * * ? ")
+ void login(){
+ if(!LoginAuthenticationSwitch){
+ return;
+ }
+ loginAuthenticationHandler.start();
+ }
+}
diff --git a/src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java b/src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java
new file mode 100644
index 0000000..5daef26
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java
@@ -0,0 +1,57 @@
+package com.zy.asrs.task.kingdee;
+
+import com.zy.asrs.entity.Order;
+import com.zy.asrs.service.ApiLogService;
+import com.zy.asrs.service.OrderService;
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.kingdee.handler.ReviewOrderSyncHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Created by vincent on 2020/7/7
+ */
+@Slf4j
+@Component
+public class ReviewOrderSyncScheduler {
+
+ @Autowired
+ private ReviewOrderSyncHandler reviewOrderSyncHandler;
+ @Autowired
+ private OrderService orderService;
+ @Autowired
+ private ApiLogService apiLogService;
+ @Value("${erp.switch.ReviewOrderSwitch}")
+ private boolean ReviewOrderSwitch;
+// @Scheduled(cron = "0 0 1 * * ? ")
+ public void clearApiLog(){
+ try {
+ apiLogService.clearWeekBefore();
+ } catch (Exception e) {
+ log.error("绗笁鏂规帴鍙f棩蹇楄嚜鍔ㄦ竻闄ゅけ璐ワ紙鑼冨洿锛氫竴鍛ㄤ箣鍓�", e);
+ }
+ }
+
+ @Scheduled(cron = "0 * * * * ?")
+ @Async("orderThreadPool")
+ public void completeAndReport(){
+ if(!ReviewOrderSwitch){
+ return;
+ }
+ List<Order> orders = orderService.selectComplete();
+ for (Order order : orders) {
+ ReturnT<String> result = reviewOrderSyncHandler.start(order);
+ if (!result.isSuccess()) {
+ log.error("鍗曟嵁[orderNo={}]涓婃姤erp澶辫触", order.getOrderNo());
+ }
+ }
+
+ }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java b/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
new file mode 100644
index 0000000..da0cc5c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -0,0 +1,316 @@
+package com.zy.asrs.task.kingdee.handler;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.SnowflakeIdWorker;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.kingdee.*;
+import com.zy.asrs.service.*;
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.common.utils.HttpHandler;
+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 org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+import java.util.HashMap;
+
+@Service
+@Slf4j
+public class InboundOrderHandler extends AbstractHandler<String> {
+ @Value("${erp.address.URL}")
+ //绔彛
+ private String URL;
+
+ @Value("${erp.address.inaddress}")
+ //鍗曟嵁锛屽晢鍝佹。妗堝湴鍧�
+ private String inaddress;
+
+ @Autowired
+ private ApiLogService apiLogService;
+
+ @Autowired
+ private LoginAuthenticationHandler loginAuthenticationHandler;
+
+ @Autowired
+ private MatService matService;
+
+ @Autowired
+ private TagService tagService;
+
+ @Autowired
+ private DocTypeService docTypeService;
+
+ @Autowired
+ private OrderService orderService;
+
+ @Autowired
+ private OrderDetlService orderDetlService;
+
+ @Autowired
+ private SnowflakeIdWorker snowflakeIdWorker;
+
+ @Transactional
+ public synchronized ReturnT<String> start() {
+ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ //鐧诲綍閲戣澏
+ ReturnT<String> start = loginAuthenticationHandler.start();
+ for(int i=0;i<14;i++) {
+ InFormIdParam inFormIdParam = new InFormIdParam();
+ //瀵瑰簲璁㈠崟绫诲瀷ID
+ int docName=0;
+ //鏁伴噺瀛楁
+ String anfme =null;
+ switch (i){
+ //鐗╂枡妗f
+ case 0 : inFormIdParam.setFormId("BD_MATERIAL"); break;
+ //閲囪喘鍏ュ簱
+ case 1 : inFormIdParam.setFormId("STK_InStock");docName=13;anfme ="FRealQty"; break;
+ //閲囪喘閫�鏂�
+ case 2 : inFormIdParam.setFormId("PUR_MRB");docName=21;anfme ="FRMREALQTY"; break;
+ //鐢熶骇棰嗘枡
+ case 3 : inFormIdParam.setFormId("PRD_PickMtrl");docName=22;anfme ="FActualQty"; break;
+ //鐢熶骇閫�鏂�
+ case 4 : inFormIdParam.setFormId("PRD_ReturnMtrl");docName=24;anfme ="FQty"; break;
+ //鐢熶骇琛ユ枡
+ case 5 : inFormIdParam.setFormId("PRD_FeedMtrl");docName=25;anfme ="FActualQty"; break;
+ //鐩存帴璋冩嫧鍗�
+ case 6 : inFormIdParam.setFormId("STK_TransferDirect");docName=26;anfme ="FQty"; break;
+ //鐩樼泩鍗�
+ case 7 : inFormIdParam.setFormId("STK_StockCountGain");docName=28;anfme ="FGainQty"; break;
+ //鐩樹簭鍗�
+ case 8 : inFormIdParam.setFormId("STK_StockCountLoss");docName=29;anfme ="FLossQty"; break;
+ //鍏朵粬鍑哄簱
+ case 9 : inFormIdParam.setFormId("STK_MisDelivery");docName=30;anfme ="FQty"; break;
+ //绠�鍗曠敓浜ч鏂�
+ case 10 : inFormIdParam.setFormId("SP_PickMtrl");docName=31;anfme ="FActualQty"; break;
+ //绠�鍗曠敓浜ч��鏂�
+ case 11 : inFormIdParam.setFormId("SP_ReturnMtrl");docName=32;anfme ="FQty"; break;
+ //閿�鍞嚭搴�
+ case 12 : inFormIdParam.setFormId("SAL_OUTSTOCK");docName=14;anfme ="FRealQty"; break;
+ //閿�鍞��璐�
+ case 13 : inFormIdParam.setFormId("SAL_RETURNSTOCK");docName=33;anfme ="FRealQty"; break;
+ }
+ inFormIdParam.setLimit(100);
+ inFormIdParam.setStartRow("0");
+ Date time=new Date();
+ String FDocumentStatus=null;
+
+ //鏉′欢鍜岄渶瑕佽幏寰楃殑缁撴灉鎷兼帴
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("FormId", inFormIdParam.getFormId());
+ jsonObject.put("Limit", inFormIdParam.getLimit());
+ jsonObject.put("StartRow", inFormIdParam.getStartRow());
+ //鐗╂枡妗f鏌ヨ
+ if(i==0){
+ Tag tag = tagService.selectById(20);
+ //鏈�鏂版椂闂�
+ time=tag.getCreateTime();
+ //鐗╂枡鐘舵�� FUseOrgId .FNumber
+ FDocumentStatus="C";
+ jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(time)+"' and FDocumentStatus='"+FDocumentStatus+"' and FUseOrgId .FNumber='201'");
+ jsonObject.put("FieldKeys", "FName,FNumber,FCreateDate,FSpecification,FDocumentStatus");
+ // FName : 鐗╂枡鍚嶇О 锛�
+ // FNumber 锛氱墿鏂欑紪鍙凤紱
+ // FCreateDate 锛氱墿鏂欏垱寤烘椂闂达紱
+ // FSpecification 锛氱墿鏂欒鏍硷紱
+ // FDocumentStatus 锛氱墿鏂欑姸鎬�
+ }else{
+ //鑾峰彇鏈�鏂版椂闂�
+ DocType docType= docTypeService.selectById(docName);
+ //鍗曟嵁鐘舵��
+ FDocumentStatus="B";
+ jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(docType.getCreateTime())+"' and FStockId.Fname='绔嬪簱'"+" and FDocumentStatus='"+FDocumentStatus+"'");
+ jsonObject.put("FieldKeys", "FBillNo,FCreateDate,FMaterialId.FNumber,FMaterialId.FName,FMaterialId.FSpecification,"+anfme+",FDocumentStatus");
+ // FBillNo :鍗曟嵁缂栧彿锛�
+ // FCreateDate 锛氬崟鎹垱寤烘椂闂达紱
+ // FMaterialId.FNumber : 鐗╂枡缂栫爜锛�
+ // FMaterialName 锛氱墿鏂欏悕绉帮紱
+ // FMaterialId.FSpecification锛氱墿鏂欒鏍�
+ // anfme : 鐗╂枡鏁伴噺
+ // FDocumentStatus 锛氬崟鎹姸鎬侊紱
+
+ }
+ JSONObject jsonObject1 = new JSONObject();
+ jsonObject1.put("data", jsonObject);
+ String add = jsonObject1.toJSONString();
+ //涓婃姤
+ String response = "";
+ boolean success = false;
+ try {
+ //鑾峰彇Cookie鍊�
+ HashMap<String, Object> headers = new HashMap<>();
+ headers.put("Cookie", start.getContent());
+ response = new HttpHandler.Builder()
+ .setHeaders(headers)
+ .setUri(URL)
+ .setPath(inaddress)
+ .setJson(add)
+ .build()
+ .doPost();
+ JSONArray data = JSON.parseArray(response);
+ if(data.size()>0) {
+ if (data.getJSONArray(0).get(0).toString().length()<20) {
+ if (i == 0) {
+ for (int j = 0; j < data.size(); j++) {
+ JSONArray jsonArray = data.getJSONArray(j);
+ //鐢熸垚鍟嗗搧妗f
+ //鍟嗗搧缂栧彿
+ Mat mat = matService.selectByMatnr(jsonArray.get(1).toString());
+ if (mat == null) {
+ mat = new Mat();
+ Tag tag = new Tag();
+ mat.setMatnr(jsonArray.get(1).toString());
+ mat.setMaktx(jsonArray.get(0).toString());
+ mat.setSpecs(jsonArray.get(3).toString());//瑙勬牸
+ mat.setTagId(20L);
+ //瀵圭編鍥芥椂闂磋繘琛岃浆鎹�
+ DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
+ DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
+ LocalDateTime dateTime = LocalDateTime.parse(jsonArray.get(2).toString(), formatter);
+ String format = dateFormat.format(dateTime);
+ Date date = sdf.parse(format);
+ mat.setCreateTime(date);//鍟嗗搧鍒涘缓鏃堕棿
+ mat.setUpdateTime(new Date());
+ mat.setStatus(1);
+ //鏈�鏂版姄鍙栧晢鍝佹椂闂�
+ tag.setCreateTime(date);
+ tagService.update(tag, new EntityWrapper<Tag>().eq("id", 20));
+ if (!matService.insert(mat)) {
+ throw new CoolException("鏈嶅姟鍣ㄥ唴閮ㄩ敊璇紝璇疯仈绯荤鐞嗗憳");
+ } else {
+ log.info("鍚屾鏂扮墿鏂橻鍟嗗搧缂栧彿锛歿}]", mat.getMatnr());
+ }
+ }
+ }
+ } else {
+ for (int j = 0; j < data.size(); j++) {
+ JSONArray jsonArray = data.getJSONArray(j);
+ Order order = orderService.selectByNo(jsonArray.get(0).toString());
+ if (Cools.isEmpty(order)) {
+ DocType docType = docTypeService.selectById(docName);
+ Date now = new Date();
+ // 鍗曟嵁涓绘。
+ order = new Order(
+ String.valueOf(snowflakeIdWorker.nextId()), // 缂栧彿[闈炵┖]
+ jsonArray.get(0).toString(), // 璁㈠崟缂栧彿
+ DateUtils.convert(now), // 鍗曟嵁鏃ユ湡
+ docType.getDocId(), // 鍗曟嵁绫诲瀷
+ null, // 椤圭洰缂栧彿
+ null, //
+ null, // 璋冩嫧椤圭洰缂栧彿
+ null, // 鍒濆绁ㄦ嵁鍙�
+ null, // 绁ㄦ嵁鍙�
+ null, // 瀹㈡埛缂栧彿
+ null, // 瀹㈡埛
+ null, // 鑱旂郴鏂瑰紡
+ null, // 鎿嶄綔浜哄憳
+ null, // 鍚堣閲戦
+ null, // 浼樻儬鐜�
+ null, // 浼樻儬閲戦
+ null, // 閿�鍞垨閲囪喘璐圭敤鍚堣
+ null, // 瀹炰粯閲戦
+ null, // 浠樻绫诲瀷
+ null, // 涓氬姟鍛�
+ null, // 缁撶畻澶╂暟
+ null, // 閭垂鏀粯绫诲瀷
+ null, // 閭垂
+ null, // 浠樻鏃堕棿
+ null, // 鍙戣揣鏃堕棿
+ null, // 鐗╂祦鍚嶇О
+ null, // 鐗╂祦鍗曞彿
+ 1L, // 璁㈠崟鐘舵��
+ 1, // 鐘舵��
+ 9527L, // 娣诲姞浜哄憳
+ now, // 娣诲姞鏃堕棿
+ 9527L, // 淇敼浜哄憳
+ now, // 淇敼鏃堕棿
+ null // 澶囨敞
+ );
+ //瀵圭編鍥芥椂闂磋繘琛岃浆鎹�
+ DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
+ DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
+ LocalDateTime dateTime = LocalDateTime.parse(jsonArray.get(1).toString(), formatter);
+ String format = dateFormat.format(dateTime);
+ Date date = sdf.parse(format);
+ //鏈�鏂版姄鍙栨椂闂�
+ docType.setCreateTime(date);
+ docTypeService.update(docType, new EntityWrapper<DocType>().eq("doc_id", docName));
+ if (!orderService.insert(order)) {
+ throw new CoolException("鐢熸垚鍗曟嵁涓绘。澶辫触锛岃鑱旂郴绠$悊鍛�");
+ }
+ }
+ //鐗╂枡缂栫爜
+ Mat mat = matService.selectByMatnr(jsonArray.get(2).toString());
+ if (Cools.isEmpty(mat)) {
+ throw new CoolException(jsonArray.get(2).toString() + "缂栧彿鍟嗗搧妫�绱㈠け璐ワ紝璇峰厛娣诲姞鍟嗗搧");
+ }
+ OrderDetl orderDetl1 = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", jsonArray.get(0).toString()).eq("matnr", jsonArray.get(2).toString()));
+ if (!Cools.isEmpty(orderDetl1)) {
+ continue;
+ }
+ DocType docType = docTypeService.selectById(docName);
+ OrderDetl orderDetl = new OrderDetl();
+ orderDetl.sync(mat);
+ orderDetl.setBatch(null);
+ orderDetl.setAnfme(Double.parseDouble(jsonArray.get(5).toString()));
+ orderDetl.setOrderId(order.getId());
+ orderDetl.setOrderNo(order.getOrderNo());
+ orderDetl.setCreateBy(9527L);
+ orderDetl.setCreateTime(new Date());
+ orderDetl.setUpdateBy(9527L);
+ orderDetl.setUpdateTime(new Date());
+ orderDetl.setStatus(1);
+ orderDetl.setQty(0.0D);
+ DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
+ DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
+ LocalDateTime dateTime = LocalDateTime.parse(jsonArray.get(1).toString(), formatter);
+ String format = dateFormat.format(dateTime);
+ Date date = sdf.parse(format);
+ //鏈�鏂版姄鍙栨椂闂�
+ docType.setCreateTime(date);
+ if (!orderDetlService.insert(orderDetl)) {
+ throw new CoolException("鐢熸垚鍗曟嵁鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�");
+ }
+ }
+ }
+ }else {
+ }
+ }else {
+ }
+ } catch (Exception e) {
+ log.error("fail", e);
+// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+ return FAIL.setMsg(e.getMessage());
+ } finally {
+ try {
+ // 淇濆瓨鎺ュ彛鏃ュ織
+ apiLogService.save(
+ "杞鏁版嵁",
+ URL + inaddress,
+ null,
+ "127.0.0.1",
+ add,
+ response,
+ success
+ );
+ } catch (Exception e) {
+ log.error("", e);
+ }
+ }
+ }
+ return SUCCESS;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/asrs/task/kingdee/handler/LoginAuthenticationHandler.java b/src/main/java/com/zy/asrs/task/kingdee/handler/LoginAuthenticationHandler.java
new file mode 100644
index 0000000..ab9982b
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/kingdee/handler/LoginAuthenticationHandler.java
@@ -0,0 +1,134 @@
+package com.zy.asrs.task.kingdee.handler;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.core.common.Cools;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.kingdee.*;
+import com.zy.asrs.service.ApiLogService;
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.common.utils.HttpHandler;
+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 org.springframework.transaction.annotation.Transactional;
+
+import java.util.Set;
+
+@Service
+@Slf4j
+@Transactional
+public class LoginAuthenticationHandler extends AbstractHandler<String> {
+
+ @Value("${erp.address.URL}")
+ //绔彛
+ private String URL;
+
+ @Value("${erp.address.loginaddress}")
+ //鐧诲綍鍦板潃
+ private String loginaddress;
+
+ @Value("${erp.login.acctID}")
+ //璐﹀彿ID
+ private String acctID;
+
+ @Value("${erp.login.username}")
+ //璐﹀彿
+ private String username;
+
+ @Value("${erp.login.password}")
+ //瀵嗙爜
+ private String password;
+
+ @Value("${erp.login.lcid}")
+ //
+ private Integer lcid;
+
+ @Autowired
+ private ApiLogService apiLogService;
+
+ /**
+ * 45鍒嗛挓鐧诲綍涓�娆¢噾铦剁郴缁�
+ * @return
+ */
+ @Transactional
+ public synchronized ReturnT<String> start() {
+
+ LoginParam loginParam =new LoginParam();
+ loginParam.setAcctID(acctID);
+ loginParam.setUsername(username);
+ loginParam.setPassword(password);
+ loginParam.setLcid(lcid);
+ //涓婃姤
+ String response = "";
+ String cookie = "";
+ boolean success = false;
+ try {
+ response = new HttpHandler.Builder()
+ .setUri(URL)
+ .setPath(loginaddress)
+ .setJson(JSON.toJSONString(loginParam))
+ .build()
+ .doPost();
+ JSONObject jsonObject = JSON.parseObject(response);
+ Object sessionId = findValueByKey(JSON.parseObject(response), "SessionId");
+ cookie="ASP.NET_SessionId="+sessionId+";"+"kdservice-sessionid="+jsonObject.getString("KDSVCSessionId");
+ if (Cools.isEmpty(jsonObject.getString("Message"))) {
+ success = true;
+ } else {
+ log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", URL+loginaddress, JSON.toJSONString(loginParam), response);
+ throw new CoolException("鐧诲綍閲戣澏澶辫触");
+ }
+ } catch (Exception e) {
+ log.error("fail", e);
+// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+ return FAIL.setMsg(e.getMessage());
+ } finally {
+ try {
+ // 淇濆瓨鎺ュ彛鏃ュ織
+ apiLogService.save(
+ "鐧诲綍閲戣澏",
+ URL + loginaddress,
+ null,
+ "127.0.0.1",
+ JSON.toJSONString(loginParam),
+ response,
+ success
+ );
+ } catch (Exception e) { log.error("", e); }
+ }
+ return SUCCESS.setContent(cookie);
+ }
+
+
+ public static Object findValueByKey(JSONObject json, String key) {
+ Set<String> keySet = json.keySet();
+ for (String k : keySet) {
+ Object v = json.get(k);
+ if (k.equals(key)) {
+ return v;
+ } else if (v instanceof JSONArray) {
+ int size = ((JSONArray) v).size();
+ for (int i = 0; i <= size - 1; i++) {
+ Object result = findValueByKey((JSONObject) ((JSONArray) v).get(i), key);
+ if (result != null){
+ return result;
+ }
+ }
+ } else if (v instanceof JSONObject){
+ Object result = findValueByKey((JSONObject) v, key);
+ if (result != null){
+ return result;
+ }
+ }
+ }
+ return null;
+ }
+
+}
+
+
+
diff --git a/src/main/java/com/zy/asrs/task/kingdee/handler/ReviewOrderSyncHandler.java b/src/main/java/com/zy/asrs/task/kingdee/handler/ReviewOrderSyncHandler.java
new file mode 100644
index 0000000..653cc6f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/kingdee/handler/ReviewOrderSyncHandler.java
@@ -0,0 +1,194 @@
+package com.zy.asrs.task.kingdee.handler;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.DocType;
+import com.zy.asrs.entity.Order;
+import com.zy.asrs.entity.kingdee.*;
+import com.zy.asrs.service.ApiLogService;
+import com.zy.asrs.service.DocTypeService;
+import com.zy.asrs.service.OrderDetlService;
+import com.zy.asrs.service.OrderService;
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.common.utils.HttpHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.Set;
+
+/**
+ * Created by vincent on 2020/7/7
+ */
+@Slf4j
+@Service
+public class ReviewOrderSyncHandler extends AbstractHandler<String> {
+ @Value("${erp.address.URL}")
+ //绔彛
+ private String URL;
+
+ @Value("${erp.address.outaddress}")
+ //瀹℃牳鍦板潃
+ private String outaddress;
+
+ @Autowired
+ private JdbcTemplate jdbcTemplate;
+ @Autowired
+ private OrderService orderService;
+ @Autowired
+ private OrderDetlService orderDetlService;
+ @Autowired
+ private ApiLogService apiLogService;
+ @Autowired
+ private DocTypeService docTypeService;
+ @Autowired
+ private LoginAuthenticationHandler loginAuthenticationHandler;
+
+ @Transactional
+ public ReturnT<String> start(Order order) {
+ //鐧诲綍閲戣澏r
+ ReturnT<String> start = loginAuthenticationHandler.start();
+ DocType docType = docTypeService.selectById(order.getDocType());
+ if (null == docType) {
+ return SUCCESS;
+ }
+ InFormIdParam inFormIdParam = new InFormIdParam();
+ int docId = Long.valueOf(docType.getDocId()).intValue();
+ switch (docId) {
+ //閲囪喘鍏ュ簱
+ case 13:
+ inFormIdParam.setFormId("STK_InStock");
+ break;
+ //閲囪喘閫�鏂�
+ case 21:
+ inFormIdParam.setFormId("PUR_MRB");
+ break;
+ //鐢熶骇棰嗘枡
+ case 22:
+ inFormIdParam.setFormId("PRD_PickMtrl");
+ break;
+ //鐢熶骇閫�鏂�
+ case 24:
+ inFormIdParam.setFormId("PRD_ReturnMtrl");
+ break;
+ //鐢熶骇琛ユ枡
+ case 25:
+ inFormIdParam.setFormId("PRD_FeedMtrl");
+ break;
+ //鐩存帴璋冩嫧鍗�
+ case 26:
+ inFormIdParam.setFormId("STK_TransferDirect");
+ break;
+ //鐩樼泩鍗�
+ case 28:
+ inFormIdParam.setFormId("STK_StockCountGain");
+ break;
+ //鐩樹簭鍗�
+ case 29:
+ inFormIdParam.setFormId("STK_StockCountLoss");
+ break;
+ //鍏朵粬鍑哄簱
+ case 30:
+ inFormIdParam.setFormId("STK_MisDelivery");
+ break;
+ //绠�鍗曠敓浜ч鏂�
+ case 31:
+ inFormIdParam.setFormId("SP_PickMtrl");
+ break;
+ //绠�鍗曠敓浜ч��鏂�
+ case 32:
+ inFormIdParam.setFormId("SP_ReturnMtrl");
+ break;
+ //閿�鍞嚭搴�
+ case 14:
+ inFormIdParam.setFormId("SAL_OUTSTOCK");
+ break;
+ //閿�鍞��璐�
+ case 33:
+ inFormIdParam.setFormId("SAL_RETURNSTOCK");
+ break;
+ }
+
+ //鏉′欢鎷兼帴
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("Numbers",order.getOrderNo());
+ JSONObject jsonObject1 = new JSONObject();
+ jsonObject1.put("data", jsonObject);
+ jsonObject1.put("FormId",inFormIdParam.getFormId());
+ String add = jsonObject1.toJSONString();
+ //涓婃姤
+ String response = "";
+ boolean success = false;
+ try {
+ //鑾峰彇Cookie鍊�
+ HashMap<String, Object> headers = new HashMap<>();
+ headers.put("Cookie", start.getContent());
+ response = new HttpHandler.Builder()
+ .setHeaders(headers)
+ .setUri(URL)
+ .setPath(outaddress)
+ .setJson(add)
+ .build()
+ .doPost();
+ JSONObject data = JSON.parseObject(response);
+ Object IsSuccess = findValueByKey(JSON.parseObject(response), "IsSuccess");
+ String bool=IsSuccess.toString();
+ //涓婃姤瀹屾垚璁㈠崟4杞�6
+ if(bool.equals("true")){
+ success = true;
+ order.setSettle(6L);
+ orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo()));
+ }
+ } catch (Exception e) {
+ log.error("fail", e);
+// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+ return FAIL.setMsg(e.getMessage());
+ } finally {
+ try {
+ // 淇濆瓨鎺ュ彛鏃ュ織
+ apiLogService.save(
+ "瀹℃牳",
+ URL+ outaddress,
+ null,
+ "127.0.0.1",
+ add,
+ response,
+ success
+ );
+ } catch (Exception e) {
+ log.error("", e);
+ }
+ }
+ return SUCCESS;
+ }
+ public static Object findValueByKey(JSONObject json, String key) {
+ Set<String> keySet = json.keySet();
+ for (String k : keySet) {
+ Object v = json.get(k);
+ if (k.equals(key)) {
+ return v;
+ } else if (v instanceof JSONArray) {
+ int size = ((JSONArray) v).size();
+ for (int i = 0; i <= size - 1; i++) {
+ Object result = findValueByKey((JSONObject) ((JSONArray) v).get(i), key);
+ if (result != null){
+ return result;
+ }
+ }
+ } else if (v instanceof JSONObject){
+ Object result = findValueByKey((JSONObject) v, key);
+ if (result != null){
+ return result;
+ }
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index fe6591b..3495dd8 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -60,4 +60,27 @@
doubleLocsRight : 4,8,12,16
comb:
- limit: 5000
\ No newline at end of file
+ limit: 5000
+
+#erp瀵规帴
+erp:
+ # 寮�鍏�
+ switch:
+ InboundOrderSwitch: true
+ LoginAuthenticationSwitch: true
+ ReviewOrderSwitch: true
+ # 鍦板潃
+ address:
+ URL: http://ht01.wlgear.com:16001
+ #鐧诲綍鍦板潃
+ loginaddress: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc
+ #鍗曟嵁锛屽晢鍝佹。妗堝湴鍧�
+ inaddress: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc
+ #缁撴灉涓婃姤锛堝鏍革級鍗曞湴鍧�
+ outaddress: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc
+ # 鐧诲綍璐﹀彿绠$悊
+ login :
+ acctID: "64c7666b20caf2"
+ username: "cs"
+ password: "123456"
+ lcid: 2052
\ No newline at end of file
--
Gitblit v1.9.1