From 9905847295d326134d50fe7f005522cdfafe2763 Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期五, 07 十一月 2025 16:52:27 +0800
Subject: [PATCH] #erp商品档案同步
---
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java | 270 ++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 182 insertions(+), 88 deletions(-)
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
index 0bc7bd1..2392f5d 100644
--- a/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
+++ b/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -10,9 +10,11 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.ErpSecretServiceImpl;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
-import com.zy.erp.kingdee.entity.param.InFormIdParam;
+import com.zy.asrs.utils.OrderInAndOutUtil;
+import com.zy.erp.kingdee.entity.param.MatLoadParam;
import com.zy.erp.kingdee.enums.KingDeeUtilType;
import com.zy.common.utils.HttpHandler;
import com.zy.erp.kingdee.utils.KingDeeUtil;
@@ -22,9 +24,12 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.math.BigDecimal;
import java.text.SimpleDateFormat;
+import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
+import java.util.List;
@Service
@Slf4j
@@ -61,44 +66,50 @@
@Autowired
private SnowflakeIdWorker snowflakeIdWorker;
+ @Autowired
+ private LocOwnerService locOwnerService;
+ @Autowired
+ private ErpSecretServiceImpl erpSecretService;
+ @Value("${erp.login.accountId}")
+ private String accountId;
+ @Value("${erp.login.xAcfwIdentity}")
+ private String xAcfwIdentity;
@Transactional
public synchronized ReturnT<String> start() {
- SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- //鐧诲綍閲戣澏
- ReturnT<String> start = loginAuthenticationHandler.start();
+ SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd");
+ //璇诲彇token
+ ErpSecret erpSecret = erpSecretService.selectOne(new EntityWrapper<ErpSecret>().eq("account_id", accountId));
+
+
for(KingDeeUtilType kingDeeUtilType : KingDeeUtilType.values()) {
- InFormIdParam inFormIdParam = new InFormIdParam();
+ MatLoadParam matLoadParam = new MatLoadParam();
DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", kingDeeUtilType.desc));
- if (Cools.isEmpty(docType)){
+ if (Cools.isEmpty(docType) && !kingDeeUtilType.formId.equals("BD_MATERIAL")){
docType = docTypeService.selectOrAdd(kingDeeUtilType.desc, kingDeeUtilType.pakIn.equals(1));
}
- inFormIdParam.setFormId(kingDeeUtilType.formId);
- inFormIdParam.setLimit(100);
- inFormIdParam.setStartRow("0");
String FDocumentStatus=null;
-
//鏉′欢鍜岄渶瑕佽幏寰楃殑缁撴灉鎷兼帴
JSONObject jsonObject = new JSONObject();
- jsonObject.put("FormId", inFormIdParam.getFormId());
- jsonObject.put("Limit", inFormIdParam.getLimit());
- jsonObject.put("StartRow", inFormIdParam.getStartRow());
//鐗╂枡妗f鏌ヨ
- if(inFormIdParam.getFormId().equals("BD_MATERIAL")){
+ if(kingDeeUtilType.formId.equals("BD_MATERIAL")){
Tag tag = tagService.selectByName("鍏ㄩ儴", 1);
- //鐗╂枡鐘舵�� FUseOrgId .FNumber
- FDocumentStatus="C";
- jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(tag.getUpdateTime())+"' and FDocumentStatus='"+FDocumentStatus+"' and FUseOrgId .FNumber='201'");
- jsonObject.put("FieldKeys", "FName,FNumber,FCreateDate,FSpecification,FDocumentStatus");
- // FName : 鐗╂枡鍚嶇О 锛�
- // FNumber 锛氱墿鏂欑紪鍙凤紱
- // FCreateDate 锛氱墿鏂欏垱寤烘椂闂达紱
- // FSpecification 锛氱墿鏂欒鏍硷紱
- // FDocumentStatus 锛氱墿鏂欑姸鎬�
+ jsonObject.put("id", null);//id
+ jsonObject.put("number", null);//缂栫爜
+ jsonObject.put("createorg_number", null);//鍒涘缓缁勭粐
+ jsonObject.put("start_createtime", "2025-01-01 00:00:00");//鍒涘缓璧峰
+ jsonObject.put("end_createtime", sdf1.format(new Date()));//鍒涘缓鎴
+ jsonObject.put("start_modifytime", "2025-01-01 00:00:00");//鏇存柊璧峰
+ jsonObject.put("end_modifytime", sdf1.format(new Date()));//鏇存柊鎴
+ jsonObject.put("start_approvedate", "2025-01-01");//瀹℃牳璧峰
+ jsonObject.put("end_approvedate", sdf2.format(new Date()));//瀹℃牳鎴
+ jsonObject.put("status", Arrays.asList("B", "C"));//鏁版嵁鐘舵�� [A:鏆傚瓨, B:宸叉彁浜�, C:宸插鏍竇
+
}else{
//鑾峰彇鏈�鏂版椂闂�
//鍗曟嵁鐘舵��
FDocumentStatus="B";
- jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(docType.getCreateTime())+"' and FStockId.Fname='绔嬪簱'"+" and FDocumentStatus='"+FDocumentStatus+"'");
+ jsonObject.put("FilterString", "FCreateDate>'"+sdf1.format(docType.getCreateTime())+"'"+" and FStockId.Fname='绔嬪簱'"+" and FDocumentStatus='"+FDocumentStatus+"'");
jsonObject.put("FieldKeys", "FBillNo,FCreateDate,FMaterialId.FNumber,FMaterialId.FName,FMaterialId.FSpecification,"+kingDeeUtilType.anfme+",FDocumentStatus");
// FBillNo :鍗曟嵁缂栧彿锛�
// FCreateDate 锛氬崟鎹垱寤烘椂闂达紱
@@ -111,14 +122,18 @@
}
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("data", jsonObject);
+ jsonObject1.put("pageSize", 10);
+ jsonObject1.put("pageNo", 1);
String add = jsonObject1.toJSONString();
+
//涓婃姤
String response = "";
boolean success = false;
try {
//鑾峰彇Cookie鍊�
HashMap<String, Object> headers = new HashMap<>();
- headers.put("Cookie", start.getContent());
+ headers.put("accesstoken", erpSecret.getAccessToken());
+ headers.put("x-acgw-identity", xAcfwIdentity); // 鑷畾涔夎姹傚ご
response = new HttpHandler.Builder()
.setHeaders(headers)
.setUri(URL)
@@ -126,50 +141,112 @@
.setJson(add)
.build()
.doPost();
- JSONArray data = JSON.parseArray(response);
+ JSONObject jsonResponse = JSON.parseObject(response);
+ if(jsonResponse.getString("errorCode").equals("401")){
+ log.error("妫�绱㈠け璐ラ敊璇俊鎭細{}", jsonResponse.getString("message"));
+ loginAuthenticationHandler.start();
+ continue;
+ }
+ JSONArray data = jsonResponse.getJSONObject("data").getJSONArray("rows");
if(data.size()<=0) continue;
- if (data.getJSONArray(0).get(0).toString().length()>=20) continue;
- if (kingDeeUtilType.formId.equals("BD_MATERIAL")) {//鐗╂枡妗f
+ //鍟嗗搧妗f鍚屾
+ if (kingDeeUtilType.formId.equals("BD_MATERIAL")) {
Tag tag = tagService.selectByName("鍏ㄩ儴", 1);
- for (int j = 0; j < data.size(); j++) {
- JSONArray jsonArray = data.getJSONArray(j);
- //瀵圭編鍥芥椂闂磋繘琛岃浆鎹�
- Date date = KingDeeUtil.KingDeeDate(jsonArray.get(2).toString());
- //鐢熸垚鍟嗗搧妗f
- //鍟嗗搧缂栧彿
- Mat mat = matService.selectByMatnr(jsonArray.get(1).toString());
- if (mat == null) {
- mat = new Mat();
- mat.setMatnr(jsonArray.get(1).toString());
- mat.setMaktx(jsonArray.get(0).toString());
- mat.setSpecs(jsonArray.get(3).toString());//瑙勬牸
- mat.setTagId(tag.getId());
- mat.setCreateTime(date);//鍟嗗搧鍒涘缓鏃堕棿
- mat.setUpdateTime(new Date());
- mat.setStatus(1);
- //鏈�鏂版姄鍙栧晢鍝佹椂闂�
- if (!matService.insert(mat)) {
-// throw new CoolException("鏈嶅姟鍣ㄥ唴閮ㄩ敊璇紝璇疯仈绯荤鐞嗗憳");
- callApiLogSaveMat(mat,kingDeeUtilType, "鍚屾鏂扮墿鏂欏嚭閿欙紒锛侊紒"+mat, false);
- log.info("鍚屾鏂扮墿鏂欏嚭閿欙紒锛侊紒鍙傛暟锛歔{}]銆乕{}]",mat,jsonArray);
+
+ // 澶勭悊鍒嗛〉锛氭牴鎹繑鍥炵殑totalCount鍜宲ageSize璁$畻椤垫暟
+ int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
+ int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
+ int totalPages = (int) Math.ceil((double) totalCount / pageSize);
+
+ for (int page = 1; page <= totalPages; page++) {
+ jsonObject1.put("pageNo", page);
+ add = jsonObject1.toJSONString();
+ // 閲嶆柊鍙戣捣璇锋眰浠ヨ幏鍙栬椤电殑鏁版嵁
+ response = new HttpHandler.Builder()
+ .setHeaders(headers)
+ .setUri(URL)
+ .setPath(inaddress)
+ .setJson(add)
+ .build()
+ .doPost();
+
+ jsonResponse = JSON.parseObject(response);
+ data = jsonResponse.getJSONObject("data").getJSONArray("rows");
+ for (int j = 0; j < data.size(); j++) {
+ JSONObject jsonObjectNew = data.getJSONObject(j);
+ Date modifyTime = sdf1.parse(jsonObjectNew.get("modifytime").toString());
+ String matnr = jsonObjectNew.get("number").toString();
+ String name = jsonObjectNew.get("name").toString();
+ String createtime = jsonObjectNew.get("createtime").toString();
+ Double grossweight = jsonObjectNew.get("grossweight") != null ? new BigDecimal(jsonObjectNew.get("grossweight").toString()).doubleValue() : 0.0;
+ Double height = jsonObjectNew.get("height") != null ? new BigDecimal(jsonObjectNew.get("height").toString()).doubleValue() : 0.0;
+ Double width = jsonObjectNew.get("width") != null ? new BigDecimal(jsonObjectNew.get("width").toString()).doubleValue() : 0.0;
+ Double length = jsonObjectNew.get("length") != null ? new BigDecimal(jsonObjectNew.get("length").toString()).doubleValue() : 0.0;
+
+ // 鐢熸垚鍟嗗搧妗f
+ Mat mat = matService.selectByMatnr(matnr);
+ if (mat == null) {
+ mat = new Mat();
+ mat.setMatnr(matnr);
+ mat.setMaktx(name);
+ mat.setTagId(tag.getId());
+ mat.setWeight(grossweight);
+ mat.setManLength(length);
+ mat.setHeight(height);
+ mat.setWidth(width);
+ mat.setCreateTime(sdf1.parse(createtime));
+ mat.setUpdateTime(modifyTime);
+ mat.setStatus(1);
+ if (!matService.insert(mat)) {
+ callApiLogSaveMat(mat, kingDeeUtilType, "鍚屾鏂扮墿鏂欏嚭閿欙紒" + mat, false);
+ log.info("鍚屾鏂扮墿鏂欏嚭閿欙紒鍙傛暟锛歔{}]銆乕{}]", mat, jsonObjectNew);
+ } else {
+ callApiLogSaveMat(mat, kingDeeUtilType, "鍚屾鏂扮墿鏂欐垚鍔燂紒", true);
+ }
} else {
- callApiLogSaveMat(mat,kingDeeUtilType, "鍚屾鏂扮墿鏂欙紒", true);
-// log.info("鍚屾鏂扮墿鏂橻鍟嗗搧缂栧彿锛歿}]", mat.getMatnr());
+ boolean isUpdated = false;
+ if (mat.getUpdateTime().compareTo(modifyTime) != 0) {
+ // 鏇存柊瀛楁
+ if (!mat.getMaktx().equals(name)) mat.setMaktx(name);
+ if (mat.getWeight().compareTo(grossweight) != 0) mat.setWeight(grossweight);
+ if (mat.getManLength().compareTo(length) != 0) mat.setManLength(length);
+ if (mat.getHeight().compareTo(height) != 0) mat.setHeight(height);
+ if (mat.getWidth().compareTo(width) != 0) mat.setWidth(width);
+ if (mat.getCreateTime().compareTo(sdf1.parse(createtime)) != 0)
+ mat.setCreateTime(sdf1.parse(createtime));
+ mat.setUpdateTime(modifyTime);
+ isUpdated = true;
+ }
+ // 鎵ц鏇存柊鎿嶄綔
+ if (isUpdated) {
+ mat.setUpdateTime(new Date());
+ if (!matService.updateById(mat)) {
+ callApiLogSaveMat(mat, kingDeeUtilType, "鏇存柊鐗╂枡鍑洪敊锛�" + mat, false);
+ log.info("鏇存柊鐗╂枡[鍟嗗搧缂栧彿锛歿}], 鏇存柊澶辫触锛�", mat.getMatnr());
+ } else {
+ callApiLogSaveMat(mat, kingDeeUtilType, "鏇存柊鐗╂枡鎴愬姛锛�", true);
+ log.info("鏇存柊鐗╂枡[鍟嗗搧缂栧彿锛歿}]", mat.getMatnr());
+ }
+ }
}
- }else {
- callApiLogSaveMat(mat,kingDeeUtilType, "鍟嗗搧缂栧彿閲嶅:"+mat.getMatnr(), false);
- log.info("鍚屾鏂扮墿鏂橻鍟嗗搧缂栧彿锛歿}],鍟嗗搧缂栧彿閲嶅锛侊紒锛�", mat.getMatnr());
}
- tag.setUpdateTime(date);
}
- tagService.updateById(tag);
+ }else if(kingDeeUtilType.formId.equals("BD_RRGANIZATION")){
+
} else {
for (int j = 0; j < data.size(); j++) {
JSONArray jsonArray = data.getJSONArray(j);
//鏈�鏂版姄鍙栨椂闂�
- Date jsonDate = KingDeeUtil.KingDeeDate(jsonArray.get(2).toString());
+ Date jsonDate = KingDeeUtil.KingDeeDate(jsonArray.get(1).toString());
docType.setCreateTime(jsonDate);
- Order order = orderService.selectByNo(jsonArray.get(0).toString());
+ Order order = OrderInAndOutUtil.selectByNo(kingDeeUtilType.pakIn == 1, jsonArray.get(0).toString());
+// Order order = orderService.selectByNo(jsonArray.get(0).toString());
+ LocOwner locOwner = null;
+ if (!Cools.isEmpty(1)) {
+ locOwner = locOwnerService.selectById(1);
+ } else {
+ locOwner = locOwnerService.selectById(1);
+ }
if (Cools.isEmpty(order)) {
Date now = new Date();
// 鍗曟嵁涓绘。
@@ -179,12 +256,12 @@
DateUtils.convert(now), // 鍗曟嵁鏃ユ湡
docType.getDocId(), // 鍗曟嵁绫诲瀷
null, // 椤圭洰缂栧彿
- null, //
+ "1", //椤圭洰鍚嶇О 瀹㈡埛PO鍙�
null, // 璋冩嫧椤圭洰缂栧彿
null, // 鍒濆绁ㄦ嵁鍙�
null, // 绁ㄦ嵁鍙�
- null, // 瀹㈡埛缂栧彿
- null, // 瀹㈡埛
+ locOwner.getOwnerUuid(), // 瀹㈡埛缂栧彿
+ locOwner.getOwner(), // 瀹㈡埛
null, // 鑱旂郴鏂瑰紡
null, // 鎿嶄綔浜哄憳
null, // 鍚堣閲戦
@@ -209,22 +286,38 @@
now, // 淇敼鏃堕棿
null // 澶囨敞
);
+ OrderInAndOutUtil.insertOrder(kingDeeUtilType.pakIn == 1, order);
- if (!orderService.insert(order)) {
- callApiLogSaveOrder(order,kingDeeUtilType, "鐢熸垚鍗曟嵁涓绘。澶辫触锛岃鑱旂郴绠$悊鍛�"+order, false);
- continue;
-// throw new CoolException("鐢熸垚鍗曟嵁涓绘。澶辫触锛岃鑱旂郴绠$悊鍛�");
- }
+// if (!orderService.insert(order)) {
+// if (!jsonDate.equals(docType.getCreateTime())){
+// callApiLogSaveOrder(order,kingDeeUtilType, "鐢熸垚鍗曟嵁涓绘。澶辫触锛岃鑱旂郴绠$悊鍛�"+order, false);
+// }
+// continue;
+//// throw new CoolException("鐢熸垚鍗曟嵁涓绘。澶辫触锛岃鑱旂郴绠$悊鍛�");
+// }
}
//鐗╂枡缂栫爜
Mat mat = matService.selectByMatnr(jsonArray.get(2).toString());
if (Cools.isEmpty(mat)) {
- callApiLogSaveOrder(order,kingDeeUtilType, "缂栧彿鍟嗗搧妫�绱㈠け璐ワ紝璇峰厛娣诲姞鍟嗗搧"+jsonArray.get(2).toString(), false);
+ if (!jsonDate.equals(docType.getCreateTime())){
+ callApiLogSaveOrder(order,kingDeeUtilType, "缂栧彿鍟嗗搧妫�绱㈠け璐ワ紝璇峰厛娣诲姞鍟嗗搧"+jsonArray.get(2).toString(), false);
+ }
continue;
-// 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)) {
+// 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;
+// }
+ Order order1 = OrderInAndOutUtil.selectByNo(kingDeeUtilType.pakIn == 1, jsonArray.get(0).toString());
+ List<OrderDetl> orderDetls = OrderInAndOutUtil.selectByOrderId(kingDeeUtilType.pakIn == 1, order1.getId());
+ boolean sign = false;
+ for (OrderDetl orderDetl : orderDetls){
+ if (orderDetl.getMatnr().equals( jsonArray.get(2).toString())){
+ sign = true;
+ break;
+ }
+ }
+ if (sign){
continue;
}
OrderDetl orderDetl = new OrderDetl();
@@ -239,10 +332,11 @@
orderDetl.setUpdateTime(new Date());
orderDetl.setStatus(1);
orderDetl.setQty(0.0D);
- if (!orderDetlService.insert(orderDetl)) {
- callApiLogSaveOrder(order,kingDeeUtilType, "鐢熸垚鍗曟嵁鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�!璁㈠崟鍙凤細"+order.getOrderNo(), false);
-// throw new CoolException("鐢熸垚鍗曟嵁鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�");
- }
+// if (!orderDetlService.insert(orderDetl)) {
+// callApiLogSaveOrder(order,kingDeeUtilType, "鐢熸垚鍗曟嵁鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�!璁㈠崟鍙凤細"+order.getOrderNo(), false);
+//// throw new CoolException("鐢熸垚鍗曟嵁鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�");
+// }
+ OrderInAndOutUtil.insertOrderDetl(kingDeeUtilType.pakIn == 1,order,orderDetl);
}
docTypeService.updateById(docType);
}
@@ -251,20 +345,20 @@
// 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);
- }
+// try {
+// // 淇濆瓨鎺ュ彛鏃ュ織
+// apiLogService.save(
+// "杞鏁版嵁",
+// URL + inaddress,
+// null,
+// "127.0.0.1",
+// add,
+// response,
+// success
+// );
+// } catch (Exception e) {
+// log.error("", e);
+// }
}
}
return SUCCESS;
--
Gitblit v1.9.1