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.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.util.Date; import java.util.HashMap; import java.util.List; import java.util.Set; /** * Created by vincent on 2023/10/21 */ @Slf4j @Service public class PushDowmOrderSyncHandler extends AbstractHandler { @Value("${erp.address.URL}") //端口 private String URL; @Value("${erp.address.pushDowmAudit}") //审核地址 private String pushDowmAudit; @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; @Autowired private ApiLogService apiLogService; @Autowired private DocTypeService docTypeService; @Autowired private LoginAuthenticationHandler loginAuthenticationHandler; @Transactional public ReturnT start(Order order) { String orderNo = order.getOrderNo(); String[] split = orderNo.split("-"); String orderNoS = split[0]; //登录金蝶r log.info("登录金蝶"); ReturnT start = loginAuthenticationHandler.start(); log.info("登录金蝶:start:"+start); DocType docType = docTypeService.selectById(order.getDocType()); if (null == docType) { return SUCCESS; } KingDeeUtilType kingDeeUtilType = KingDeeUtilType.get(docType.getDocName()); if (kingDeeUtilType.entryId>1){ Order order1 = orderService.selectById(order.getId()); order1.setUpdateTime(new Date()); orderService.updateById(order1); return SUCCESS; } //条件拼接 log.info("条件拼接"); String entryIds = null; if (kingDeeUtilType.entryId==1){ List orderDetls = orderDetlService.selectByOrderId(order.getId()); for (OrderDetl orderDetl:orderDetls){ if (Cools.isEmpty(entryIds)){ entryIds = orderDetl.getBeBatch().toString(); }else { entryIds = entryIds+"," +orderDetl.getBeBatch(); } } orderNoS = ""; } if (Cools.isEmpty(entryIds)){ entryIds = ""; } JSONObject dataJsonObject = new JSONObject(); dataJsonObject.put("Numbers",orderNoS); dataJsonObject.put("EntryIds",entryIds); dataJsonObject.put("RuleId",kingDeeUtilType.ruleId); dataJsonObject.put("TargetFormId",kingDeeUtilType.correspondingFormId); JSONObject jsonObject = new JSONObject(); jsonObject.put("FormId",kingDeeUtilType.formId); jsonObject.put("data", dataJsonObject); String add = jsonObject.toJSONString(); log.info("条件拼接:"+jsonObject); //下推 log.info("下推"); 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(pushDowmAudit) .setJson(add) .setHttps(true) .build() .doPost(); // JSONObject data = JSON.parseObject(response); log.info("下推response:"+response); Object IsSuccess = findValueByKey(JSON.parseObject(response), "IsSuccess"); String bool1=IsSuccess.toString(); 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())); } } else { success = false; order.setSettle(7L); order.setUpdateTime(new Date()); orderService.update(order,new EntityWrapper().eq("order_no",order.getOrderNo())); } } catch (Exception e) { log.info("下推error:"+response); log.error("fail", e); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } finally { try { // 保存接口日志 apiLogService.save( "下推", URL+ pushDowmAudit, 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; } }