/**
* 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;
}
}