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 { @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 start(Order order) { List orderDetls = orderDetlService.selectByOrderId(order.getId()); if (Cools.isEmpty(orderDetls) || orderDetls.size()==0){ return SUCCESS; } //登录金蝶r ReturnT 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 jsonObject=new JSONObject(); jsonObject.put("FormId",kingDeeUtilType.correspondingFormId); JSONObject model=new JSONObject(); model.put("fid",order.getPostFeeType()); JSONArray fEntitys = new JSONArray(); for (OrderDetl orderDetl : orderDetls) { JSONObject fEntity = new JSONObject(); fEntity.put("FEntryID",orderDetl.getBeBatch()); //完成数量-已上报数量 if(orderDetl.getQty().equals(0.0)){ fEntity.put(kingDeeUtilType.anfme, orderDetl.getQty()); }else{ fEntity.put(kingDeeUtilType.anfme, orderDetl.getQty()-orderDetl.getPrice()); // 将"FQty"放到最后 } fEntitys.add(fEntity); } model.put("FEntity",fEntitys); JSONObject data= new JSONObject(); data.put("Model",model); jsonObject.put("data",data); String add = jsonObject.toJSONString(); //上报 String response = ""; boolean success = false; try { //获取Cookie值 HashMap 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; //保存完成原订单2转3 3.保存完成 if(bool1.equals("true")){ ObjectMapper objectMapper = new ObjectMapper(); JsonNode rootNode = objectMapper.readTree(response); bool = rootNode.get("Result").get("ResponseStatus").get("IsSuccess").asBoolean(); //提交完成原订单2转3 3.上报完成 if(bool){ success = true; order.setMemo("3"); order.setUpdateTime(new Date()); orderService.update(order,new EntityWrapper().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() .eq("order_no",order.getOrderNo()) .eq("matnr",orderDetl.getMatnr())); }else{ orderDetlService.update(orderDetl,new EntityWrapper() .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().eq("order_no",order.getOrderNo())); // } } catch (Exception e) { log.error("fail", e); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } finally { try { // 保存接口日志 apiLogService.save( "3.保存", 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 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; } }