|
@@ -898,12 +898,14 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
public boolean syncXYTOrderShip(Integer[] salesOrderIds) {
|
|
|
boolean flag = true;
|
|
|
Integer successNum = 0,errorNum = 0;
|
|
|
- StringBuffer allSb = new StringBuffer();
|
|
|
- StringBuffer errorSb = new StringBuffer();
|
|
|
+ StringBuilder allSb = new StringBuilder();
|
|
|
+ StringBuilder errorSb = new StringBuilder();
|
|
|
for (int m = 0; m < salesOrderIds.length; m++) {
|
|
|
+ // 获取订单信息
|
|
|
Integer salesOrderId = salesOrderIds[m];
|
|
|
SalesOrder salesOrder = salesOrderService.getSalesOrderByIdConcise(salesOrderId);
|
|
|
- if(!generateKeyUtil.isXytBatchId(salesOrder.getSalesBatchId())){ //不是小亚通第三方的订单,直接通过,不走该程序
|
|
|
+ if(!generateKeyUtil.isXytBatchId(salesOrder.getSalesBatchId())){
|
|
|
+ //不是小亚通第三方的订单,直接通过,不走该程序
|
|
|
logger.info("不是小亚通订单,退出!");
|
|
|
continue;
|
|
|
}
|
|
@@ -916,89 +918,93 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
logger.info("小亚通发货失败,订单未发货!");
|
|
|
continue;
|
|
|
}
|
|
|
-
|
|
|
+ // 获取物流公司
|
|
|
LogisticsInfo logisticsInfo = logisticsInfoService.getLogisticsNameByRSTCode(salesOrder.getSalesPostFirm());
|
|
|
-
|
|
|
+ // 查询订单项信息
|
|
|
List<SalesOrderItem> salesOrderItemList = salesOrderService.getOrderItemListBySalesId(salesOrderId);
|
|
|
-
|
|
|
if(salesOrderItemList==null || salesOrderItemList.size()<1){
|
|
|
logger.info("小亚通发货失败,未查询到订单信息!");
|
|
|
- errorSb.append("发货失败交易号:" + salesOrder.getSalesDealCode() + ",失败原因:未查询到订单信息;");
|
|
|
+ errorSb.append("发货失败交易号:").append(salesOrder.getSalesDealCode()).append(",失败原因:未查询到订单信息;");
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- HashSet<Long> itemIdSet = new HashSet();
|
|
|
+ // 将订单项的ID 添加到 Set集合(不可重复无序)
|
|
|
+ Set<Long> itemIdSet = new HashSet<>(salesOrderItemList.size());
|
|
|
try{
|
|
|
for (SalesOrderItem salesOrderItem:salesOrderItemList) {
|
|
|
Long otherItemId = Long.valueOf(salesOrderItem.getItemOtherId());
|
|
|
itemIdSet.add(otherItemId);
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
- e.printStackTrace();
|
|
|
- logger.info("小亚通发货失败,订单项没有商城订单项Id!");
|
|
|
- errorSb.append("发货失败交易号:" + salesOrder.getSalesDealCode() + ",失败原因:订单项没有商城订单项Id;");
|
|
|
- continue;
|
|
|
+ logger.error("", e);
|
|
|
+ throw new RuntimeException(salesOrder.getSalesDealCode() + "发货失败,失败原因:RST系统订单项中未包含第三方系统的订单项ID");
|
|
|
}
|
|
|
|
|
|
+ // 将Set集合中的数据转换为Long类型的数组
|
|
|
Long[] itemIds = new Long[itemIdSet.size()];
|
|
|
- //通过加强for循环遍历HashSet
|
|
|
int i = 0;
|
|
|
for(Long item : itemIdSet) {
|
|
|
itemIds[i] = item;
|
|
|
i++;
|
|
|
}
|
|
|
-
|
|
|
allSb.append(salesOrder.getSalesDealCode());
|
|
|
|
|
|
- //删除因为拆单增加的订单后缀
|
|
|
+ // 获取第三方平台的订单号(删除因为拆单增加的订单后缀)
|
|
|
String orderId = salesOrder.getSalesDealCode();
|
|
|
- if(orderId.indexOf("-")>-1){
|
|
|
+ if(orderId.contains("-")){
|
|
|
orderId = orderId.substring(0,orderId.indexOf("-"));
|
|
|
}
|
|
|
Long otherOrderId = Long.valueOf(orderId);
|
|
|
|
|
|
Map[] maps = new Map[1];
|
|
|
- Map<String,Object> deliveryInfosMap = new HashMap<>();
|
|
|
- deliveryInfosMap.put("itemIds",itemIds);//订单项ID,如果为null 表示整个订单只有1 个包裹,否则只是部分订单项
|
|
|
- deliveryInfosMap.put("companyCode",logisticsInfo.getLogisticsXytCode());//物流公司编码
|
|
|
+ Map<String,Object> deliveryInfosMap = new HashMap<>(5);
|
|
|
+ // 订单项ID,如果为null 表示整个订单只有1 个包裹,否则只是部分订单项
|
|
|
+ deliveryInfosMap.put("itemIds",itemIds);
|
|
|
+ // 物流公司编码
|
|
|
+ deliveryInfosMap.put("companyCode",logisticsInfo.getLogisticsXytCode());
|
|
|
|
|
|
- if(logisticsInfo.getLogisticsXytCode().equals("CYS0000010")){
|
|
|
+ if("CYS0000010".equals(logisticsInfo.getLogisticsXytCode())){
|
|
|
//狗东专有处理操作
|
|
|
String postNum = salesOrder.getSalesPostNum();
|
|
|
- if(postNum.indexOf("-")>-1){
|
|
|
+ if(postNum.contains("-")){
|
|
|
postNum = postNum.substring(0,postNum.indexOf("-"));
|
|
|
}
|
|
|
- deliveryInfosMap.put("deliveryNo",postNum);//物流单号
|
|
|
+ //物流单号
|
|
|
+ deliveryInfosMap.put("deliveryNo",postNum);
|
|
|
}else{
|
|
|
- deliveryInfosMap.put("deliveryNo",salesOrder.getSalesPostNum());//物流单号
|
|
|
+ //物流单号
|
|
|
+ deliveryInfosMap.put("deliveryNo",salesOrder.getSalesPostNum());
|
|
|
}
|
|
|
- deliveryInfosMap.put("deliveryTime",sdf.format(salesOrder.getSalesSendTime()));//发货时间
|
|
|
+ //发货时间
|
|
|
+ deliveryInfosMap.put("deliveryTime",sdf.format(salesOrder.getSalesSendTime()));
|
|
|
maps[0]=deliveryInfosMap;
|
|
|
- Map<String,Object> map = new HashMap<>();
|
|
|
- map.put("orderId",otherOrderId);//原始订单号
|
|
|
- map.put("deliveryInfos",maps);//原始订单号
|
|
|
+ Map<String,Object> map = new HashMap<>(2);
|
|
|
+ //原始订单号
|
|
|
+ map.put("orderId",otherOrderId);
|
|
|
+ //原始订单号
|
|
|
+ map.put("deliveryInfos",maps);
|
|
|
|
|
|
String shipResultJson = this.syncXYT("delivery",map);
|
|
|
try{
|
|
|
- JSONObject jsonObj = new JSONObject(shipResultJson);//转化为json格式
|
|
|
+ //转化为json格式
|
|
|
+ JSONObject jsonObj = new JSONObject(shipResultJson);
|
|
|
String resultMsg = jsonObj.getString("result_msg");
|
|
|
- if(resultMsg.equals("success")) {
|
|
|
+ if("success".equals(resultMsg)) {
|
|
|
//修改同步物流状态
|
|
|
SalesOrder shipSalesOrder = new SalesOrder();
|
|
|
- shipSalesOrder.setSalesIsShip(1); //同步物流状态到第三方平台 1:是
|
|
|
+ //同步物流状态到第三方平台 1:是
|
|
|
+ shipSalesOrder.setSalesIsShip(1);
|
|
|
shipSalesOrder.setSalesId(salesOrderId);
|
|
|
salesOrderService.update(shipSalesOrder);
|
|
|
successNum++;
|
|
|
}else{
|
|
|
flag = false;
|
|
|
- errorSb.append("发货失败交易号:" + salesOrder.getSalesDealCode() + ",失败原因:"+shipResultJson+";");
|
|
|
+ errorSb.append("发货失败交易号:").append(salesOrder.getSalesDealCode()).append(",失败原因:").append(shipResultJson).append(";");
|
|
|
errorNum++;
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
- flag = false;
|
|
|
- errorSb.append("发货失败交易号:" + salesOrder.getSalesDealCode() + ",失败原因:"+shipResultJson+";");
|
|
|
- errorNum++;
|
|
|
- e.printStackTrace();
|
|
|
+ logger.error("", e);
|
|
|
+ throw new RuntimeException(salesOrder.getSalesDealCode() + "发货失败,失败原因:" + shipResultJson);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1009,15 +1015,19 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
orderSyncLog.setSyncPlatId(orderSyncPlatform.getSyncPlatId());
|
|
|
orderSyncLog.setSyncLogType(2);
|
|
|
orderSyncLog.setSyncLogMode(3);
|
|
|
- orderSyncLog.setSyncLogRecentNum(successNum+errorNum); //同步总数量
|
|
|
- orderSyncLog.setSyncLogErrorNum(errorNum); //同步失败数量
|
|
|
- orderSyncLog.setSyncLogMsg("发货订单交易号:"+ allSb.toString()); //备注
|
|
|
- if(!errorSb.toString().equals("")){
|
|
|
+ //同步总数量
|
|
|
+ orderSyncLog.setSyncLogRecentNum(successNum+errorNum);
|
|
|
+ //同步失败数量
|
|
|
+ orderSyncLog.setSyncLogErrorNum(errorNum);
|
|
|
+ //备注
|
|
|
+ orderSyncLog.setSyncLogMsg("发货订单交易号:"+ allSb.toString());
|
|
|
+ if(!"".equals(errorSb.toString())){
|
|
|
String newErrorMsg = errorSb.toString();
|
|
|
if(newErrorMsg.length() > 5000){
|
|
|
newErrorMsg = newErrorMsg.substring(0,4999);
|
|
|
}
|
|
|
- orderSyncLog.setSyncLogErrorMsg(newErrorMsg); //失败信息
|
|
|
+ //失败信息
|
|
|
+ orderSyncLog.setSyncLogErrorMsg(newErrorMsg);
|
|
|
}
|
|
|
orderSyncLogMapper.save(orderSyncLog);
|
|
|
}
|