组装数据发往RPA


/**
 * Asn 发送RPA
 */
@Named("IService.AsnSendDataToRPAService")
public class AsnSendDataToRPAService extends AsnBaseExecSubProcess {

    private static final ILogger LOG = JalorLoggerFactory.getLogger(AsnSendDataToRPAService.class);
    /**
     * 箱单协同服务接口.
     */
    @Inject
    protected IBusinessPlsService plsService;

    /**
     * The Http client util.
     */
    @Inject
    private IHttpClientUtil httpClientUtil;

    @Inject
    private IUrlConfigService urlConfigService;

    private final String GET_SHIPINFO_FROM_HTM = "GET_SHIPINFO_FROM_HTM";

    private static final String CONTENT_TYPE = "Content-Type";

    @Override
    public BaseChannelVO execProccess(BaseChannelVO vo)
        throws RuntimeException, ApplicationException, B2BChannelException {
        // 接取上游数据
        String messageBody = vo.getMessageBody();
        InternalAsnXmlVO asn = XmlUtil.unmarshal(messageBody, InternalAsnXmlVO.class);
        AsnHeadXmlVO b2bAsnHead = asn.getB2bAsnHead();
        String shipmentNo = b2bAsnHead.getXmlShipmentNo();

        List xmlB2bExtend = b2bAsnHead.getXmlB2bExtend();
        String customerPoNo = "";
        for (ExtendXmlVO extendVO : xmlB2bExtend) {
            String extendName = extendVO.getXmlExtendName();
            if (extendName.equals("customerPoNo")) {
                customerPoNo = extendVO.getXmlExtendValue();
            }
        }

        // 查找 UMP_B2B_PLS_DT 的入库数据
        List detailVOList = new ArrayList<>();
        try{
            detailVOList = plsService.findPlsLineDetailByShipmentNo(shipmentNo);
        }catch(Exception e){
            logStep(vo,"查找detailVOList数据异常");
        }
        
        // 调用HTM接口
        String serviceUrl = urlConfigService.getUrlByKey(GET_SHIPINFO_FROM_HTM);
        String url = serviceUrl + "/" + shipmentNo;
        Map header = new HashMap<>();
        header.put(CONTENT_TYPE, "application/json");
        header.put("Charset", "UTF-8");
        RemoteRequestVO requestVO = httpClientUtil.get(url, header, null, true, false);
        String responseResult = requestVO.getResponseResult();
        if (responseResult == null) {
            logStep(vo, "responseResult == null");
            return vo;
        }

        JSONObject jsonObject1 = getJsonObject(vo, shipmentNo, customerPoNo, detailVOList, responseResult);

        // 通过UMP发送数据到RPA
        String string = jsonObject1.toJSONString();
        String beanName = getParameter(vo, "beanName", "AsnSendDataToRPAService");
        ResultVO rt = jmsOperationService.sendUmpJms(beanName, shipmentNo, "T_B2B_DT_3B2_RPA", string);
        if (rt.getStatusCode() != "1") {
            logStep(vo, "通过UMP发送数据到RPA失败" + rt.getStatusCode());
        }
        // 打印日志
        logStep(vo, "response", rt.getStatusMsg());
        return vo;
    }

    private JSONObject getJsonObject(BaseChannelVO vo, String shipmentNo, String customerPoNo,
        List detailVOList, String responseResult) {
        JSONObject jsonObject1 = new JSONObject();
        jsonObject1 = getJsonObject(vo, responseResult, jsonObject1);
        // 组装上游数据
        jsonObject1.put("shipmentNo", shipmentNo);
        jsonObject1.put("customerPoNo", customerPoNo);

        // 组装数据库数据
        JSONArray array = new JSONArray();
        for (int i = 0; i < detailVOList.size(); i++) {
            JSONObject jsonObject2 = new JSONObject();
            String itemCode = detailVOList.get(i).getItemCode();
            String quantity = detailVOList.get(i).getQuantity();
            String engDescription = detailVOList.get(i).getEngDescription();
            String barcode = detailVOList.get(i).getBarcode();
            jsonObject2.put("itemCode", itemCode);
            jsonObject2.put("quantity", quantity);
            jsonObject2.put("engDescription", engDescription);
            jsonObject2.put("barcode", barcode);
            array.add(jsonObject2);
        }
        jsonObject1.put("lineInformation", array);
        return jsonObject1;
    }

    private JSONObject getJsonObject(BaseChannelVO vo, String responseResult, JSONObject jsonObject1) {
        // 取HTM接口内数据
        JSONObject json1 = JSONObject.parseObject(responseResult);
        JSONArray jsonArray = json1.getJSONArray("resultBody");
        if (jsonArray.size() == 0) {
            LOG.error("responseBody is empty");
        } else {
            Object object = jsonArray.get(0);
            JSONObject json2 = JSONObject.parseObject(String.valueOf(object));
    
            JSONObject releaseRemark = (JSONObject) json2.get("releaseRemark");
            JSONObject releaseHeader = (JSONObject) json2.get("releaseHeader");
            JSONObject releaseRefnum = (JSONObject) json2.get("releaseRefnum");
    
            Object detailDeliveryAddressObject = releaseRemark.get("detailDeliveryAddress");
            Object totalItemPackageCountObject = releaseHeader.get("totalItemPackageCount");
            Object totalGrossWeightObject = releaseHeader.get("totalGrossWeight");
            Object submitTenderDateObject = releaseHeader.get("submitTenderDate");
            Object estimatedArrivalDateObject = releaseRefnum.get("estimatedArrivalDate");
            Object sourceLocationObject = releaseHeader.get("sourceLocation");
    
            String detailDeliveryAddress = String.valueOf(detailDeliveryAddressObject);
            String totalItemPackageCount = String.valueOf(totalItemPackageCountObject);
            String totalGrossWeight = String.valueOf(totalGrossWeightObject);
            String submitTenderDate = String.valueOf(submitTenderDateObject);
            String estimatedArrivalDate = String.valueOf(estimatedArrivalDateObject);
            String sourceLocation = String.valueOf(sourceLocationObject);
    
            // 组装接口数据
            jsonObject1.put("detailDeliveryAddress", detailDeliveryAddress);
            jsonObject1.put("totalItemPackageCount", totalItemPackageCount);
            jsonObject1.put("totalGrossWeight", totalGrossWeight);
            jsonObject1.put("submitTenderDate", submitTenderDate);
            jsonObject1.put("estimatedArrivalDate", estimatedArrivalDate);
            jsonObject1.put("sourceLocation", sourceLocation);
        }
        return jsonObject1;
    }
}