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.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.service.ApiLogService; import com.zy.asrs.service.DocTypeService; 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.util.Date; import java.util.HashMap; import java.util.Set; /** * Created by vincent on 2023/10/21 */ @Slf4j @Service public class ReviewOrderSyncHandler extends AbstractHandler { @Value("${erp.address.URL}") //端口 private String URL; @Value("${erp.address.outaddressAudit}") //审核地址 private String outaddressAudit; @Autowired private OrderService orderService; @Autowired private ApiLogService apiLogService; @Autowired private DocTypeService docTypeService; @Autowired private LoginAuthenticationHandler loginAuthenticationHandler; @Transactional public ReturnT start(Order order) { //登录金蝶r ReturnT start = loginAuthenticationHandler.start(); DocType docType = docTypeService.selectById(order.getDocType()); if (null == docType) { return SUCCESS; } KingDeeUtilType kingDeeUtilType = KingDeeUtilType.get(docType.getDocName()); //条件拼接 JSONObject dataJsonObject = new JSONObject(); dataJsonObject.put("Numbers",order.getOrderNo()); JSONObject jsonObject = new JSONObject(); jsonObject.put("data", dataJsonObject); jsonObject.put("FormId",kingDeeUtilType.formId); 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(outaddressAudit) .setJson(add) .build() .doPost(); JSONObject data = JSON.parseObject(response); Object IsSuccess = findValueByKey(JSON.parseObject(response), "IsSuccess"); String bool1=IsSuccess.toString(); //审核完成原订单4转6 6.上报完成 if(bool1.equals("true")){ ObjectMapper objectMapper = new ObjectMapper(); JsonNode rootNode = objectMapper.readTree(response); boolean bool = rootNode.get("Result").get("ResponseStatus").get("IsSuccess").asBoolean(); log.info("审核bool:"+bool); //审核完成原订单4转6 6.上报完成 if(bool){ success = true; order.setSettle(6L); 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( "审核", URL+ outaddressAudit, 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; } }