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.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.zy.asrs.entity.DocType;
|
import com.zy.asrs.entity.Order;
|
import com.zy.asrs.entity.OrderDetl;
|
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 com.zy.erp.kingdee.enums.KingDeeUtilType;
|
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.util.*;
|
|
/**
|
* Created by Monkey D. Luffy on 2023.10.21
|
*/
|
@Slf4j
|
@Service
|
public class SaveOrderSyncHandler extends AbstractHandler<String> {
|
@Value("${erp.address.URL}")
|
//端口
|
private String URL;
|
|
@Value("${erp.address.outaddressSave}")
|
//保存地址
|
private String outaddressSave;
|
|
@Autowired
|
private OrderService orderService;
|
@Autowired
|
private ApiLogService apiLogService;
|
@Autowired
|
private DocTypeService docTypeService;
|
@Autowired
|
private OrderDetlService orderDetlService;
|
@Autowired
|
private LoginAuthenticationHandler loginAuthenticationHandler;
|
|
@Transactional
|
public ReturnT<String> start(Order order) {
|
List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId());
|
if (Cools.isEmpty(orderDetls) || orderDetls.size()==0){
|
return SUCCESS;
|
}
|
//登录金蝶r
|
ReturnT<String> start = loginAuthenticationHandler.start();
|
DocType docType = docTypeService.selectById(order.getDocType());
|
if (null == docType) {
|
return SUCCESS;
|
}
|
KingDeeUtilType kingDeeUtilType = KingDeeUtilType.get(docType.getDocName());
|
// if (kingDeeUtilType.entryId!=2){
|
// return SUCCESS;
|
// }
|
Date now = new Date();
|
//条件拼接
|
JSONObject jsonObjectFBillTypeID = new JSONObject();
|
JSONObject jsonObjectFPickerId = new JSONObject();
|
if (kingDeeUtilType.pakIn==1){
|
jsonObjectFBillTypeID.put("FNUMBER","TLD01_SYS");
|
}else {
|
jsonObjectFBillTypeID.put("FNUMBER","TLD01_SYS");
|
jsonObjectFPickerId.put("FStaffNumber","X0103_GLGW074_1");
|
}
|
|
JSONObject jsonObjectFStockOrgId = new JSONObject();
|
jsonObjectFStockOrgId.put("FNUMBER","100");
|
|
JSONObject jsonObjectFOwnerIdHead = new JSONObject();
|
jsonObjectFOwnerIdHead.put("FNUMBER","100");
|
|
JSONObject jsonObjectFDEPTID = new JSONObject();
|
jsonObjectFDEPTID.put("FNUMBER","CX");
|
|
List<JSONObject> jsonObjects = new ArrayList<>();
|
|
for (OrderDetl orderDetl:orderDetls){
|
JSONObject jsonObjectFMATERIALID = new JSONObject();
|
jsonObjectFMATERIALID.put("FNUMBER",orderDetl.getMatnr());
|
|
JSONObject jsonObjectFSTOCKID = new JSONObject();
|
jsonObjectFSTOCKID.put("FNUMBER","CK001");
|
|
JSONObject jsonObjectFLOT = new JSONObject();
|
jsonObjectFLOT.put("FNUMBER",orderDetl.getBatch());
|
|
// 使用LinkedHashMap来保持插入顺序
|
Map<String, Object> orderedMap = new LinkedHashMap<>();
|
|
// 按照期望的顺序添加键值对
|
orderedMap.put("FMATERIALID", jsonObjectFMATERIALID);
|
orderedMap.put("FSTOCKID", jsonObjectFSTOCKID);
|
orderedMap.put("FLOT", jsonObjectFLOT);
|
if(orderDetl.getQty().equals(0.0)){
|
orderedMap.put("FQty", orderDetl.getQty());
|
}else{
|
orderedMap.put("FQty", orderDetl.getQty()-orderDetl.getPrice()); // 将"FQty"放到最后
|
}
|
|
JSONObject jsonObjectEnd = new JSONObject(orderedMap);
|
|
jsonObjects.add(jsonObjectEnd);
|
}
|
|
JSONObject jsonObject = new JSONObject();
|
jsonObject.put("FBillTypeID",jsonObjectFBillTypeID);
|
if (kingDeeUtilType.pakIn==0){
|
jsonObject.put("FPickerId",jsonObjectFPickerId);
|
}
|
jsonObject.put("FDate",DateUtils.convert(now, DateUtils.yyyyMMdd_F));
|
jsonObject.put("FStockOrgId",jsonObjectFStockOrgId);
|
jsonObject.put("FOwnerTypeIdHead","BD_OwnerOrg");
|
jsonObject.put("FOwnerIdHead",jsonObjectFOwnerIdHead);
|
jsonObject.put("FDEPTID",jsonObjectFDEPTID);
|
jsonObject.put("FEntity",jsonObjects);
|
|
JSONObject jsonObjectModel = new JSONObject();
|
jsonObjectModel.put("Model",jsonObject);
|
|
JSONObject jsonObject1 = new JSONObject();
|
jsonObject1.put("data", jsonObjectModel);
|
jsonObject1.put("FormId",kingDeeUtilType.formId);
|
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(outaddressSave)
|
.setJson(add)
|
.setHttps(true)
|
.build()
|
.doPost();
|
JSONObject data = JSON.parseObject(response);
|
Object IsSuccess = findValueByKey(JSON.parseObject(response), "IsSuccess");
|
String bool1=IsSuccess.toString();
|
boolean bool = false;
|
//保存完成原订单1转2 2.保存完成
|
if(bool1.equals("true")){
|
ObjectMapper objectMapper = new ObjectMapper();
|
JsonNode rootNode = objectMapper.readTree(response);
|
bool = rootNode.get("Result").get("ResponseStatus").get("IsSuccess").asBoolean();
|
log.info("保存bool:"+bool);
|
//提交完成原订单1转2 2.上报完成
|
if(bool){
|
success = true;
|
order.setMemo("2");
|
order.setUpdateTime(new Date());
|
orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo()));
|
|
for(OrderDetl orderDetl:orderDetls){
|
orderDetl.setPrice(orderDetl.getQty());
|
orderDetl.setUpdateTime(new Date());
|
if(Cools.isEmpty(orderDetl.getBatch())){
|
orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>()
|
.eq("order_no",order.getOrderNo())
|
.eq("matnr",orderDetl.getMatnr()));
|
}else{
|
orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>()
|
.eq("order_no",order.getOrderNo())
|
.eq("matnr",orderDetl.getMatnr())
|
.eq("batch",orderDetl.getBatch()));
|
}
|
|
}
|
|
}
|
}
|
|
// if (!bool1.equals("true") || !bool){
|
// order.setSettle(7L);
|
// order.setUpdateTime(new Date());
|
// 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+ outaddressSave,
|
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;
|
}
|
}
|