|
@@ -1,10 +1,13 @@
|
|
|
package com.iamberry.rst.service.order;
|
|
|
|
|
|
+import com.google.common.annotations.VisibleForTesting;
|
|
|
import com.iamberry.app.tool.util.MD5;
|
|
|
import com.iamberry.rst.core.cm.SalesOrder;
|
|
|
import com.iamberry.rst.core.cm.SalesOrderItem;
|
|
|
import com.iamberry.rst.core.order.*;
|
|
|
+import com.iamberry.rst.core.tools.LogisticsInfo;
|
|
|
import com.iamberry.rst.faces.cm.SalesOrderService;
|
|
|
+import com.iamberry.rst.faces.order.LogisticsInfoService;
|
|
|
import com.iamberry.rst.faces.order.OrderBatchService;
|
|
|
import com.iamberry.rst.faces.order.OrderSyncLogService;
|
|
|
import com.iamberry.rst.service.order.mapper.OrderSyncLogMapper;
|
|
@@ -43,6 +46,8 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
@Autowired
|
|
|
private ProductColorMapper productColorMapper;
|
|
|
@Autowired
|
|
|
+ private LogisticsInfoService logisticsInfoService;
|
|
|
+ @Autowired
|
|
|
private SalesOrderService salesOrderService;
|
|
|
@Autowired
|
|
|
private OrderSyncPlatformMapper orderSyncPlatformMapper;
|
|
@@ -60,6 +65,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
return XYT_PLATFORM;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* 获取集合
|
|
|
* @param orderSyncLog
|
|
@@ -96,29 +102,75 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public Integer syncXYTOrder(Integer type,Date creatTime) {
|
|
|
+ public synchronized Integer syncXYTOrder(Integer type,Date creatTime) {
|
|
|
OrderSyncPlatform orderSyncPlatform = getXYTPlatform();
|
|
|
- Map<String,Object> map = new HashMap<>();
|
|
|
+ Map<String,Object> paramsMap = new HashMap<>();
|
|
|
+ List<Map<String,Object>> conditionTypeList = new ArrayList<>();
|
|
|
+ Map<String,Object> beginCreateTimeMap = new HashMap<>();
|
|
|
+ beginCreateTimeMap.put("condType","beginCreateTime");
|
|
|
if(creatTime == null){
|
|
|
-// OrderSyncLog orderSyncLog = orderSyncLogMapper.getSyncLogLast(orderSyncPlatform.getSyncPlatId());
|
|
|
-// if(orderSyncLog == null){
|
|
|
-// logger.info("XYT拉取订单-调用接口失败-缺少开始时间");
|
|
|
-// return 0;
|
|
|
-// }
|
|
|
- map.put("beginCreateTime", sdf.format(orderSyncPlatform.getSyncOrderLastTime()));//生成开始时间
|
|
|
+ beginCreateTimeMap.put("condValue", sdf.format(orderSyncPlatform.getSyncOrderLastTime()));//生成开始时间
|
|
|
}else{
|
|
|
- map.put("beginCreateTime", sdf.format(creatTime));//生成开始时间
|
|
|
+ beginCreateTimeMap.put("condValue", sdf.format(creatTime));//生成开始时间
|
|
|
+ }
|
|
|
+ conditionTypeList.add(beginCreateTimeMap);
|
|
|
+
|
|
|
+ Date endCreateTime = new Date();
|
|
|
+ Map<String,Object> endCreateTimeMap = new HashMap<>();
|
|
|
+ endCreateTimeMap.put("condType","endCreateTime"); //receiverName 收件人姓名 //receiverMobile收件人手机号码 //outOrderId原始订单号 //orderId系统订单号
|
|
|
+ endCreateTimeMap.put("condValue",sdf.format(endCreateTime));//生成结束时间
|
|
|
+ conditionTypeList.add(endCreateTimeMap);
|
|
|
+
|
|
|
+ StringBuffer stringBuffer = new StringBuffer();
|
|
|
+ Integer amountAllNum = 0; //同步总数量
|
|
|
+ Integer amountSuccessAllNum = 0; //同步成功总数量
|
|
|
+ String batchId = ""; //批次id
|
|
|
+
|
|
|
+ //判断是否还有订单,继续拉取
|
|
|
+ boolean pullFlag = true;
|
|
|
+ Integer pageNumber = 1,pageSize=20; //控制分页
|
|
|
+ while (pullFlag){
|
|
|
+ Map<String,Object> condMap = new HashMap<>();
|
|
|
+ condMap.put("pageNumber",pageNumber);
|
|
|
+ condMap.put("pageSize",pageSize);
|
|
|
+ condMap.put("conditionType",conditionTypeList);
|
|
|
+ paramsMap.put("cond",condMap);
|
|
|
+ String json = this.syncXYT("IOrderServce.query",paramsMap);
|
|
|
+
|
|
|
+ //添加订单
|
|
|
+ Map<String,Object> map = this.saveOrder(1,json,batchId);
|
|
|
+ Integer status = (Integer) map.get("status");
|
|
|
+ batchId = (String) map.get("batchId"); //批次ID
|
|
|
+ Integer amountNum = (Integer) map.get("amountNum"); //拉取订单数量
|
|
|
+ Integer amountSuccessNum = (Integer) map.get("amountSuccessNum");//保存成功数量
|
|
|
+ if(status == 1){ //0.拉取订单失败 1.拉取订单成功
|
|
|
+ amountAllNum+=amountNum;
|
|
|
+ amountSuccessAllNum+=amountSuccessNum;
|
|
|
+ }else{
|
|
|
+ String errorMsg = (String) map.get("errorMsg");//失败订单号
|
|
|
+ stringBuffer.append(errorMsg);
|
|
|
+ }
|
|
|
+ if(amountNum < 20){
|
|
|
+ pullFlag = false;
|
|
|
+ }
|
|
|
}
|
|
|
- map.put("endCreateTime",sdf.format(new Date()));//生成结束时间
|
|
|
-// map.put("receiverName","");//收件人姓名
|
|
|
-// map.put("receiverMobile","");//收件人手机号码
|
|
|
-// map.put("outOrderId","");//原始订单号
|
|
|
-// map.put("orderId","");//系统订单号
|
|
|
- String json = this.syncXYT("IOrderServce.query",map);
|
|
|
-
|
|
|
- //添加订单
|
|
|
- this.saveOrder(1,json);
|
|
|
|
|
|
+ OrderSyncLog orderSyncLog = new OrderSyncLog();
|
|
|
+ orderSyncLog.setSyncPlatId(orderSyncPlatform.getSyncPlatId());
|
|
|
+ orderSyncLog.setSyncLogType(1);
|
|
|
+ orderSyncLog.setSyncLogMode(type);
|
|
|
+ orderSyncLog.setSyncLogRecentNum(amountAllNum); //同步总数量
|
|
|
+ orderSyncLog.setSyncLogErrorNum(amountAllNum - amountSuccessAllNum); //同步失败数量
|
|
|
+ orderSyncLog.setSyncLogMsg(""); //备注
|
|
|
+ orderSyncLog.setSyncLogErrorMsg("同步失败订单号:"+stringBuffer.toString()); //失败信息
|
|
|
+ orderSyncLogMapper.save(orderSyncLog);
|
|
|
+
|
|
|
+ orderSyncPlatform.setSyncOrderLastTime(endCreateTime);
|
|
|
+
|
|
|
+ OrderSyncPlatform newOrderSyncPlatform = new OrderSyncPlatform();
|
|
|
+ newOrderSyncPlatform.setSyncOrderLastTime(endCreateTime);
|
|
|
+ newOrderSyncPlatform.setSyncPlatId(orderSyncPlatform.getSyncPlatId());
|
|
|
+ orderSyncPlatformMapper.update(newOrderSyncPlatform);
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
@@ -130,104 +182,372 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
*/
|
|
|
@Override
|
|
|
public Integer syncXYTOrderOne(Integer type, String orderId) {
|
|
|
- String json = syncOrderOnce(orderId);
|
|
|
- this.saveOrder(2,json);
|
|
|
+ OrderSyncPlatform orderSyncPlatform = getXYTPlatform();
|
|
|
+ Map<String,Object> paramsMap = new HashMap<>();
|
|
|
+ List<Map<String,Object>> conditionTypeList = new ArrayList<>();
|
|
|
+
|
|
|
+ //receiverName 收件人姓名 //receiverMobile收件人手机号码 //outOrderId原始订单号 //orderId系统订单号
|
|
|
+ Date endCreateTime = new Date();
|
|
|
+ Map<String,Object> orderIdMap = new HashMap<>();
|
|
|
+ orderIdMap.put("condType","orderId");
|
|
|
+ orderIdMap.put("condValue",sdf.format(endCreateTime));
|
|
|
+ conditionTypeList.add(orderIdMap);
|
|
|
+
|
|
|
+ StringBuffer stringBuffer = new StringBuffer();
|
|
|
+ Integer amountAllNum = 0; //同步总数量
|
|
|
+ Integer amountSuccessAllNum = 0; //同步成功总数量
|
|
|
+ String batchId = ""; //批次id
|
|
|
+
|
|
|
+ Map<String,Object> condMap = new HashMap<>();
|
|
|
+ condMap.put("pageNumber",1);
|
|
|
+ condMap.put("pageSize",20);
|
|
|
+ condMap.put("conditionType",conditionTypeList);
|
|
|
+ paramsMap.put("cond",condMap);
|
|
|
+ String json = this.syncXYT("IOrderServce.query",paramsMap);
|
|
|
+
|
|
|
+ //添加订单
|
|
|
+ Map<String,Object> map = this.saveOrder(1,json,batchId);
|
|
|
+ Integer status = (Integer) map.get("status");
|
|
|
+ batchId = (String) map.get("batchId"); //批次ID
|
|
|
+ Integer amountNum = (Integer) map.get("amountNum"); //拉取订单数量
|
|
|
+ Integer amountSuccessNum = (Integer) map.get("amountSuccessNum");//保存成功数量
|
|
|
+ String errorMsg = (String) map.get("errorMsg");//失败订单号
|
|
|
+ if(status == 1){ //0.拉取订单失败 1.拉取订单成功
|
|
|
+ amountAllNum+=amountNum;
|
|
|
+ amountSuccessAllNum+=amountSuccessNum;
|
|
|
+ }else{
|
|
|
+ stringBuffer.append(errorMsg);
|
|
|
+ }
|
|
|
+
|
|
|
+ OrderSyncLog orderSyncLog = new OrderSyncLog();
|
|
|
+ orderSyncLog.setSyncPlatId(orderSyncPlatform.getSyncPlatId());
|
|
|
+ orderSyncLog.setSyncLogType(1);
|
|
|
+ orderSyncLog.setSyncPlatId(type);
|
|
|
+ orderSyncLog.setSyncLogRecentNum(amountAllNum); //同步总数量
|
|
|
+ orderSyncLog.setSyncLogErrorNum(amountAllNum - amountSuccessAllNum); //同步失败数量
|
|
|
+ orderSyncLog.setSyncLogMsg(""); //备注
|
|
|
+ orderSyncLog.setSyncLogErrorMsg("同步失败订单号:"+stringBuffer.toString()); //失败信息
|
|
|
+ orderSyncLogMapper.save(orderSyncLog);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 检测发货
|
|
|
- * @param orderId
|
|
|
+ * @param salesOrderId
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public boolean syncXYTOrderShipInspec(String orderId) {
|
|
|
- String json = syncOrderOnce(orderId);
|
|
|
- JSONObject jsonObj = new JSONObject(json);//转化为json格式
|
|
|
+ public boolean syncXYTOrderShipInspec(Integer salesOrderId) {
|
|
|
+ SalesOrder salesOrder = salesOrderService.getSalesOrderByIdConcise(salesOrderId);
|
|
|
+ if(!generateKeyUtil.isXytBatchId(salesOrder.getSalesBatchId())){ //不是小亚通第三方的订单,直接通过,不走该程序
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ List<SalesOrderItem> salesOrderItemList = salesOrderService.getOrderItemListBySalesId(salesOrderId);
|
|
|
+
|
|
|
+ //删除因为拆单增加的订单后缀
|
|
|
+ String orderId = salesOrder.getSalesDealCode();
|
|
|
+ if(orderId.indexOf("-")>-1){
|
|
|
+ orderId = orderId.substring(orderId.lastIndexOf("-"),orderId.length());
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ map.put("orderId",orderId);//原始订单号
|
|
|
+ map.put("itemIds","");//订单项ID,如果为null 表示整个订单只有1 个包裹,否则只是部分订单项
|
|
|
+ map.put("companyCode","");//物流公司编码
|
|
|
+ map.put("deliveryNo","");//物流单号
|
|
|
+ map.put("deliveryTime","");//发货时间
|
|
|
+ String shipResultJson = this.syncXYT("IOrderServce.query",map);
|
|
|
+ JSONObject jsonObj = new JSONObject(shipResultJson);//转化为json格式
|
|
|
String resultMsg = jsonObj.getString("result_msg");
|
|
|
if(resultMsg.equals("success")){
|
|
|
- //
|
|
|
- return true;
|
|
|
+ JSONObject dataObj = jsonObj.getJSONObject("data"); //数据
|
|
|
+ JSONArray beanListArray = dataObj.getJSONArray("beanList");
|
|
|
+ if(beanListArray.length() > 0){ //数量大于0,就需要产品批次
|
|
|
+ JSONObject job = beanListArray.getJSONObject(0);
|
|
|
+ JSONObject infoObj = job.getJSONObject("info"); //订单基本信息
|
|
|
+ //订单状态::0 待支付;10 待成团;20 待发货;30 预售中;40 待审批;50 仓库代发货;60 已发货;70 已签收;80 已拒收;999 已作废
|
|
|
+ Integer orderStatus = infoObj.getInt("orderStatus");
|
|
|
+ //售后状态:0 没有售后 1 退款中 2 退款关闭 3 退款成功 4 退货中 5 退货关闭 6 退货成功 7 其它售后中 8 部分退货成功
|
|
|
+ Integer warrantyStatus = infoObj.getInt("warrantyStatus");
|
|
|
+ if(20 == orderStatus){ //20 待发货
|
|
|
+ //售后状态分情况
|
|
|
+ if(warrantyStatus == 0){ //0 没有售后
|
|
|
+ return true;
|
|
|
+ }else{
|
|
|
+ //部分退货情况,应该考虑
|
|
|
+ JSONArray itemsArray = job.getJSONArray("items"); //订单项基本信息
|
|
|
+ //循环检测所有订单项是否能够发货
|
|
|
+ boolean allStatus = true;
|
|
|
+ for (SalesOrderItem salesOrderItem : salesOrderItemList) {
|
|
|
+ Long otherId = Long.valueOf(salesOrderItem.getItemOtherId()); //外部订单id
|
|
|
+ boolean sonStatus = true;
|
|
|
+ for(int j=0;j<itemsArray.length();j++) {
|
|
|
+ JSONObject item = itemsArray.getJSONObject(j);
|
|
|
+ Long orderItemId = item.getLong("orderItemId"); //订单项id
|
|
|
+ if(Objects.equals(orderItemId, otherId)){
|
|
|
+ //订单项状态: 0 待支付 10 待成团 20 待发货 30 预售中 40 待审批 50 仓库代发货 60 已发货 70 已签收 80 已拒收 999 已作废
|
|
|
+ Integer itemStatus = item.getInt("itemStatus");
|
|
|
+ if (itemStatus != 20) {
|
|
|
+ sonStatus = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!sonStatus){
|
|
|
+ allStatus = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return allStatus;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(999 == orderStatus){
|
|
|
+ //如果该订单已作废,那么本系统将跟随作废
|
|
|
+ SalesOrder so = new SalesOrder();
|
|
|
+ so.setSalesId(salesOrderId);
|
|
|
+ so.setSalesStatus(3);
|
|
|
+ Integer res = salesOrderService.updateSalesOrder(so);
|
|
|
+ if(res > 0){
|
|
|
+ //添加操作跟踪信息
|
|
|
+ OrderTracking orderTracking = new OrderTracking();
|
|
|
+ orderTracking.setAdminId(1);
|
|
|
+ orderTracking.setSalesDealCode(salesOrder.getSalesDealCode());
|
|
|
+ orderTracking.setTrackingDesc("作废订单(发货验证-该订单已在第三方平台作废)");
|
|
|
+ salesOrderService.addTracking(orderTracking);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ logger.info("小亚通调用检测该订单无法发货,该订单状态异常-订单状态:"+getStatusMsg(orderStatus));
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
}else{
|
|
|
- logger.info("小亚通调用检测发货接口失败-拉取订单详情-失败原因:"+json);
|
|
|
+ logger.info("小亚通调用发货接口失败-失败原因:"+shipResultJson);
|
|
|
return false;
|
|
|
}
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 发货接口-小亚通
|
|
|
- * @param orderId
|
|
|
+ * @param salesOrderId
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public boolean syncXYTOrderShip(String orderId) {
|
|
|
- //查询订单
|
|
|
+ public boolean syncXYTOrderShip(Integer salesOrderId) {
|
|
|
+ SalesOrder salesOrder = salesOrderService.getSalesOrderByIdConcise(salesOrderId);
|
|
|
+ if(!generateKeyUtil.isXytBatchId(salesOrder.getSalesBatchId())){ //不是小亚通第三方的订单,直接通过,不走该程序
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if(salesOrder.getSalesShippingStatus() != 1){
|
|
|
+ //1(已发货,即已扫描出库)
|
|
|
+ logger.info("小亚通发货失败,订单未发货!");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(salesOrder.getSalesPostNum() == null || "".equals(salesOrder.getSalesPostNum())){
|
|
|
+ logger.info("小亚通发货失败,订单未发货!");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ LogisticsInfo logisticsInfo = logisticsInfoService.getLogisticsNameByRSTCode(salesOrder.getSalesPostFirm());
|
|
|
+ List<SalesOrderItem> salesOrderItemList = salesOrderService.getOrderItemListBySalesId(salesOrderId);
|
|
|
+
|
|
|
+ if(salesOrderItemList==null || salesOrderItemList.size()<1){
|
|
|
+ logger.info("小亚通发货失败,未查询到订单信息!");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ HashSet<Long> itemIdSet = new HashSet();
|
|
|
+ for (SalesOrderItem salesOrderItem:salesOrderItemList) {
|
|
|
+ Long otherItemId = Long.valueOf(salesOrderItem.getItemOtherId());
|
|
|
+ itemIdSet.add(otherItemId);
|
|
|
+ }
|
|
|
+
|
|
|
+ Long[] itemIds = new Long[itemIdSet.size()];
|
|
|
+ //通过加强for循环遍历HashSet
|
|
|
+ int i = 0;
|
|
|
+ for(Long item : itemIds) {
|
|
|
+ itemIds[i] = item;
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+
|
|
|
+ //删除因为拆单增加的订单后缀
|
|
|
+ String orderId = salesOrder.getSalesDealCode();
|
|
|
+ if(orderId.indexOf("-")>-1){
|
|
|
+ orderId = orderId.substring(orderId.lastIndexOf("-"),orderId.length());
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String,Object> deliveryInfosMap = new HashMap<>();
|
|
|
+ deliveryInfosMap.put("itemIds",itemIds);//订单项ID,如果为null 表示整个订单只有1 个包裹,否则只是部分订单项
|
|
|
+ deliveryInfosMap.put("companyCode",logisticsInfo.getLogisticsXytCode());//物流公司编码
|
|
|
+ deliveryInfosMap.put("deliveryNo",salesOrder.getSalesPostNum());//物流单号
|
|
|
+ deliveryInfosMap.put("deliveryTime",sdf.format(salesOrder.getSalesSendTime()));//发货时间
|
|
|
|
|
|
Map<String,Object> map = new HashMap<>();
|
|
|
map.put("orderId",orderId);//原始订单号
|
|
|
- map.put("itemIds","");//订单项ID,如果为null 表示整个订单只有1 个包裹,否则只是部分订单项
|
|
|
- map.put("companyCode","");//物流公司编码
|
|
|
- map.put("deliveryNo","");//物流单号
|
|
|
- map.put("deliveryTime","");//发货时间
|
|
|
- String shipResultJson = this.syncXYT("IOrderServce.query",map);
|
|
|
+ map.put("deliveryInfos",deliveryInfosMap);//原始订单号
|
|
|
+
|
|
|
+ String shipResultJson = this.syncXYT("delivery",map);
|
|
|
JSONObject jsonObj = new JSONObject(shipResultJson);//转化为json格式
|
|
|
String resultMsg = jsonObj.getString("result_msg");
|
|
|
- if(resultMsg.equals("success")){
|
|
|
- //
|
|
|
+ if(resultMsg.equals("success")) {
|
|
|
+ //发货成功
|
|
|
return true;
|
|
|
- }else{
|
|
|
- logger.info("小亚通调用发货接口失败-失败原因:"+shipResultJson);
|
|
|
- return false;
|
|
|
}
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * //订单状态::0 待支付;10 待成团;20 待发货;30 预售中;40 待审批;50 仓库代发货;60 已发货;70 已签收;80 已拒收;999 已作废
|
|
|
+ * @param orderStatus
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private String getStatusMsg(Integer orderStatus){
|
|
|
+ String statusMsg = null;
|
|
|
+ switch (orderStatus){
|
|
|
+ case 0:
|
|
|
+ statusMsg = "待支付";
|
|
|
+ break;
|
|
|
+ case 10:
|
|
|
+ statusMsg = "待成团";
|
|
|
+ break;
|
|
|
+ case 20:
|
|
|
+ statusMsg = "待发货";
|
|
|
+ break;
|
|
|
+ case 30:
|
|
|
+ statusMsg = "预售中";
|
|
|
+ break;
|
|
|
+ case 40:
|
|
|
+ statusMsg = "待审批";
|
|
|
+ break;
|
|
|
+ case 50:
|
|
|
+ statusMsg = "仓库代发货";
|
|
|
+ break;
|
|
|
+ case 60:
|
|
|
+ statusMsg = "已发货";
|
|
|
+ break;
|
|
|
+ case 70:
|
|
|
+ statusMsg = "已签收";
|
|
|
+ break;
|
|
|
+ case 80:
|
|
|
+ statusMsg = "已拒收";
|
|
|
+ break;
|
|
|
+ case 999:
|
|
|
+ statusMsg = "已作废";
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ statusMsg = "订单状态异常";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return statusMsg;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 售后状态:0 没有售后 1 退款中 2 退款关闭 3 退款成功 4 退货中 5 退货关闭 6 退货成功 7 其它售后中 8 部分退货成功
|
|
|
+ * @param warrantyStatus
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private String getWarrantyStatusMsg(Integer warrantyStatus){
|
|
|
+ String statusMsg = null;
|
|
|
+ switch (warrantyStatus){
|
|
|
+ case 0:
|
|
|
+ statusMsg = "待支付";
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ statusMsg = "退款中";
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ statusMsg = "退款关闭";
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ statusMsg = "退款成功";
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ statusMsg = "退货中";
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ statusMsg = "退货关闭";
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ statusMsg = "退货成功";
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ statusMsg = "其它售后中";
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ statusMsg = "部分退货成功";
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ statusMsg = "售后状态异常";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return statusMsg;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 1:定时任务 2:手动同步
|
|
|
+ * return map.status 0.拉取订单失败 1.拉取订单成功
|
|
|
+ * map.msg 信息
|
|
|
+ * map.batchId 批次ID
|
|
|
+ * map.amountNum 拉取订单数量
|
|
|
+ * map.amountSuccessNum 保存成功数量
|
|
|
+ * map.errorMsg 失败订单号
|
|
|
* @return
|
|
|
*/
|
|
|
- private boolean saveOrder(Integer type,String json){
|
|
|
+ private Map<String,Object> saveOrder(Integer type,String json,String batchId){
|
|
|
+ //返回保存订单结果
|
|
|
+ Map<String,Object> returnMap = new HashMap<>();
|
|
|
+
|
|
|
OrderSyncPlatform orderSyncPlatform = getXYTPlatform();
|
|
|
- String batchId = ""; //批次编号
|
|
|
+
|
|
|
+ Integer amountNum = 0; //本次拉取的订单数量
|
|
|
+ Integer amountSuccessNum = 0; //保存成功数量
|
|
|
+ StringBuffer errorMsg = new StringBuffer(); //未防止部分拉取失败,所以加入失败原因
|
|
|
// JSONObject jsonObj = new JSONObject(json);//转化为json格式
|
|
|
JSONObject jsonObj = new JSONObject(Alljson);//转化为json格式
|
|
|
String resultMsg = jsonObj.getString("result_msg");
|
|
|
if(resultMsg.equals("success")){
|
|
|
|
|
|
- // 用户新建批次,系统自动新建
|
|
|
- if("".equals(batchId)){
|
|
|
- batchId = generateKeyUtil.getSalesBatchIdSX();
|
|
|
- OrderBatch ob = new OrderBatch();
|
|
|
- ob.setBatchId(batchId);
|
|
|
- ob.setBatchStatus(1);
|
|
|
- if(orderBatchService.save(ob) < 1){
|
|
|
- throw new RuntimeException("XYT拉取订单-创建订单批次失败");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
JSONObject dataObj = jsonObj.getJSONObject("data"); //数据
|
|
|
JSONArray beanListArray = dataObj.getJSONArray("beanList");
|
|
|
+ amountNum = beanListArray.length();
|
|
|
+ if(beanListArray.length() > 0){ //数量大于0,就需要产品批次
|
|
|
+ // 用户新建批次,系统自动新建
|
|
|
+ if("".equals(batchId)){
|
|
|
+ batchId = generateKeyUtil.getSalesBatchIdSX();
|
|
|
+ OrderBatch ob = new OrderBatch();
|
|
|
+ ob.setBatchId(batchId);
|
|
|
+ ob.setBatchStatus(1);
|
|
|
+ if(orderBatchService.save(ob) < 1){
|
|
|
+ throw new RuntimeException("XYT拉取订单-创建订单批次失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ returnMap.put("status",0); //拉取订单失败
|
|
|
+ returnMap.put("msg","未拉取到任何订单"); //拉取订单失败原因
|
|
|
+ return returnMap;
|
|
|
+ }
|
|
|
for(int i=0;i<beanListArray.length();i++){
|
|
|
JSONObject job = beanListArray.getJSONObject(i);
|
|
|
+ Long otherOrderId = null;
|
|
|
try{
|
|
|
JSONObject consigneeObj = job.getJSONObject("consignee"); //用户信息
|
|
|
JSONObject infoObj = job.getJSONObject("info"); //订单基本信息
|
|
|
JSONArray itemsArray = job.getJSONArray("items"); //订单项基本信息
|
|
|
JSONObject memoObj = job.getJSONObject("memo"); //备注信息
|
|
|
|
|
|
- //订单项状态:0 待支付;10 待成团;20 待发货;30 预售中;40 待审批;50 仓库代发货;60 已发货;70 已签收;80 已拒收;999 已作废
|
|
|
- Integer itemStatus = infoObj.getInt("itemStatus");
|
|
|
- if(itemStatus != 20){ //20 待发货
|
|
|
+ //订单状态::0 待支付;10 待成团;20 待发货;30 预售中;40 待审批;50 仓库代发货;60 已发货;70 已签收;80 已拒收;999 已作废
|
|
|
+ Integer orderStatus = infoObj.getInt("orderStatus");
|
|
|
+ if(20 != orderStatus){ //20 待发货
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
SalesOrder salesOrder = new SalesOrder();
|
|
|
- salesOrder.setSalesOrderId(infoObj.getString("orderId")); //小亚通订单编号
|
|
|
- salesOrder.setSalesDealCode(infoObj.getString("orderId")); //小亚通订单编号
|
|
|
+ Long orderId = infoObj.getLong("orderId");
|
|
|
+ otherOrderId = orderId;
|
|
|
+ salesOrder.setSalesOrderId(String.valueOf(orderId)); //小亚通订单编号
|
|
|
+ salesOrder.setSalesDealCode(String.valueOf(orderId)); //小亚通订单编号
|
|
|
|
|
|
//收货人信息
|
|
|
salesOrder.setSalesAddressPostcode(consigneeObj.getString("receiverZip"));//收件人邮政编码
|
|
|
salesOrder.setSalesAddressName(consigneeObj.getString("receiverName"));//收件人姓名
|
|
|
- salesOrder.setSalesAddressTel(consigneeObj.getString("receiverMobile"));//收件人电话
|
|
|
+ salesOrder.setSalesAddressTel(consigneeObj.getString("receiverMobile"));//收件人手机号码
|
|
|
//salesOrder.setSalesAddressDesc(consigneeObj.getString(""));//地址详情
|
|
|
String receiverState = consigneeObj.getString("receiverState");//省
|
|
|
String receiverCity = consigneeObj.getString("receiverCity");//市
|
|
@@ -235,6 +555,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
String receiverAddress = consigneeObj.getString("receiverAddress");//地址
|
|
|
salesOrder.setSalesAddressInfo(receiverState+" "+receiverCity+" "+receiverDistrict+" "+receiverAddress);//详细地址
|
|
|
|
|
|
+ salesOrder.setSalesOpenId(consigneeObj.getString("receiverMobile"));
|
|
|
//平台
|
|
|
String platformId = infoObj.getString("platformId"); //SELF- 自身 TMALL- 天猫 KDT- 有赞 LJSW-生活作风
|
|
|
switch (platformId){
|
|
@@ -258,7 +579,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
}
|
|
|
|
|
|
//支付金额
|
|
|
- Double totalFee = infoObj.getDouble("totalFee");
|
|
|
+ Long totalFee = infoObj.getLong("totalFee");
|
|
|
totalFee = totalFee*100;
|
|
|
Integer amount = totalFee.intValue();
|
|
|
salesOrder.setSalesLastMoney(amount);//本次支付金额
|
|
@@ -266,7 +587,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
salesOrder.setSalesAmount(amount);//订单总金额
|
|
|
|
|
|
//优惠金额
|
|
|
- Double discountFee = infoObj.getDouble("discountFee");
|
|
|
+ Long discountFee = infoObj.getLong("discountFee");
|
|
|
discountFee = discountFee*100;
|
|
|
Integer discountFeeInt = discountFee.intValue();
|
|
|
salesOrder.setSalesDiscountMoney(discountFeeInt);//优惠金额
|
|
@@ -284,7 +605,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
salesOrder.setSalesAdminRemark(sellerMemo);//后台的备注--卖家备注
|
|
|
|
|
|
//邮费
|
|
|
- Double postFee = memoObj.getDouble("postFee"); //邮费
|
|
|
+ Long postFee = infoObj.getLong("postFee"); //邮费
|
|
|
postFee = postFee*100;
|
|
|
Integer postFeeInt = postFee.intValue();
|
|
|
salesOrder.setSalesPostageCost(postFeeInt);//邮费成本
|
|
@@ -303,6 +624,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
salesOrder.setSalesPledgeMoney(0);//押金金额
|
|
|
salesOrder.setSalesRemainDeposit(0);
|
|
|
salesOrder.setSalesWaitMoney(0);//待付金额
|
|
|
+ salesOrder.setSalesSendType(2);//送货方式 1:线下送货,2:物流发货
|
|
|
|
|
|
//状态信息
|
|
|
salesOrder.setSalesIsSend(0);//是否通知配货0:否1:是
|
|
@@ -314,17 +636,32 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
salesOrder.setSalesAdminId(1); //录入人id
|
|
|
|
|
|
List<SalesOrderItem> salesOrderItemList = new ArrayList<SalesOrderItem>();
|
|
|
+ Integer itemNum = 0; //判断该订单的订单项是否完整
|
|
|
for(int j=0;j<itemsArray.length();j++){
|
|
|
JSONObject item = itemsArray.getJSONObject(j);
|
|
|
+ //订单项状态: 0 待支付 10 待成团 20 待发货 30 预售中 40 待审批 50 仓库代发货 60 已发货 70 已签收 80 已拒收 999 已作废
|
|
|
+ Integer itemStatus = item.getInt("itemStatus"); //
|
|
|
+ if(itemStatus != 20){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ itemNum++;
|
|
|
|
|
|
SalesOrderItem salesOrderItem = new SalesOrderItem();
|
|
|
|
|
|
- String extSkuId = memoObj.getString("extSkuId"); //sku - 69码
|
|
|
+ String extSkuId = item.getString("extSkuId"); //sku - 69码
|
|
|
|
|
|
ProductColor productColor = productColorMapper.getProductColorByBar(extSkuId);
|
|
|
+ if(productColor == null){
|
|
|
+ logger.info("订单编号:"+orderId+"-订单项中的SKU未匹配到本地,SKU编号:"+extSkuId+"; ");
|
|
|
+ errorMsg.append(orderId+"-订单项中的SKU未匹配到本地,SKU编号:"+extSkuId+";");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ Long orderItemId = item.getLong("orderItemId"); //小亚通订单项编号
|
|
|
+ salesOrderItem.setItemOtherId(String.valueOf(orderItemId));
|
|
|
|
|
|
- Integer num = memoObj.getInt("num"); //数量
|
|
|
- Double itemDiscountFee = memoObj.getDouble("discountFee"); //折扣费
|
|
|
+ Integer num = item.getInt("num"); //数量
|
|
|
+ Long itemDiscountFee = item.getLong("discountFee"); //折扣费
|
|
|
itemDiscountFee = itemDiscountFee*100;
|
|
|
Integer itemDiscountFeeInt = itemDiscountFee.intValue();
|
|
|
Integer itemTotal = itemDiscountFeeInt*num;
|
|
@@ -349,6 +686,10 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
salesOrderItem.setItemIsSource(1);//产品来源 1:产品颜色表,2:配件表
|
|
|
salesOrderItemList.add(salesOrderItem);
|
|
|
}
|
|
|
+ if(salesOrderItemList.size() != itemNum){
|
|
|
+ errorMsg.append(otherOrderId+"添加订单,订单项出现错误;");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
salesOrder.setSalesOrderItemList(salesOrderItemList);
|
|
|
String[] detectIds = {};
|
|
|
salesOrderService.addRstOrderinfo(salesOrder,new ArrayList<SalesOrder>(),detectIds);
|
|
@@ -359,7 +700,9 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
orderTracking.setSalesDealCode(salesOrder.getSalesDealCode());
|
|
|
orderTracking.setTrackingDesc("创建订单(小亚通拉取订单)");
|
|
|
salesOrderService.addTracking(orderTracking);
|
|
|
+ amountSuccessNum++;
|
|
|
}catch (Exception e){
|
|
|
+ errorMsg.append(otherOrderId+"添加订单失败;");
|
|
|
e.printStackTrace();
|
|
|
logger.info("XYT拉取订单-添加订单错误-错误信息:"+e.getMessage());
|
|
|
}
|
|
@@ -376,7 +719,14 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
orderSyncLogMapper.save(osl);
|
|
|
logger.info("XYT拉取订单-调用小亚通业务错误-错误信息:"+json);
|
|
|
}
|
|
|
- return true;
|
|
|
+
|
|
|
+ returnMap.put("batchId",batchId); //批次id
|
|
|
+ returnMap.put("status",1); //拉取订单成功
|
|
|
+ returnMap.put("amountNum",amountNum); //拉取订单成功
|
|
|
+ returnMap.put("amountSuccessNum",amountSuccessNum); //保存成功数量
|
|
|
+ returnMap.put("msg","拉取订单成功"); //拉取订单成功
|
|
|
+ returnMap.put("errorMsg",errorMsg); //失败订单号
|
|
|
+ return returnMap;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -394,66 +744,25 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
/**
|
|
|
* 分开组装小亚通api接口
|
|
|
* @param type
|
|
|
- * @param map
|
|
|
+ * @param paramsMap
|
|
|
* @return
|
|
|
*/
|
|
|
- private String syncXYT(String type, Map<String,Object> map) {
|
|
|
- Map<String,Object> paramsMap = new HashMap<>();
|
|
|
- String methodName = "";
|
|
|
+ private String syncXYT(String type, Map<String,Object> paramsMap) {
|
|
|
switch (type){
|
|
|
- case "allOrder":{ //订单查询
|
|
|
- List<Map<String,Object>> conditionTypeList = new ArrayList<>();
|
|
|
- for(String key:map.keySet()){//keySet获取map集合key的集合 然后在遍历key即可
|
|
|
- Map<String,Object> conditionTypeMap = new HashMap<>();
|
|
|
- conditionTypeMap.put(key,map.get(key).toString());
|
|
|
- conditionTypeList.add(conditionTypeMap);
|
|
|
- }
|
|
|
-
|
|
|
- Map<String,Object> condMap = new HashMap<>();
|
|
|
- condMap.put("pageNumber",1);
|
|
|
- condMap.put("pageSize",20);
|
|
|
- condMap.put("conditionType",conditionTypeList);
|
|
|
-
|
|
|
- paramsMap.put("cond","");
|
|
|
- paramsMap.put("fullMode",false); //fullMode Boolean 是 是否查询全部信息
|
|
|
- paramsMap.put("includeArchive",false); //includeArchive Boolean 是 是否查询三个月前历史订单
|
|
|
- methodName = "IOrderServce.query";
|
|
|
- break;
|
|
|
- }
|
|
|
- case "oneOrder":{ //单个查询
|
|
|
- List<Map<String,Object>> conditionTypeList = new ArrayList<>();
|
|
|
- for(String key:map.keySet()){//keySet获取map集合key的集合 然后在遍历key即可
|
|
|
- Map<String,Object> conditionTypeMap = new HashMap<>();
|
|
|
- conditionTypeMap.put(key,map.get(key).toString());
|
|
|
- conditionTypeList.add(conditionTypeMap);
|
|
|
- }
|
|
|
-
|
|
|
- Map<String,Object> condMap = new HashMap<>();
|
|
|
- condMap.put("pageNumber",1);
|
|
|
- condMap.put("pageSize",20);
|
|
|
- condMap.put("conditionType",conditionTypeList);
|
|
|
-
|
|
|
-
|
|
|
- paramsMap.put("cond","");
|
|
|
+ case "IOrderServce.query":{ //订单查询
|
|
|
paramsMap.put("fullMode",false); //fullMode Boolean 是 是否查询全部信息
|
|
|
paramsMap.put("includeArchive",false); //includeArchive Boolean 是 是否查询三个月前历史订单
|
|
|
- methodName = "IOrderServce.query";
|
|
|
break;
|
|
|
}
|
|
|
case "delivery":{ //订单发货
|
|
|
-
|
|
|
- methodName = "delivery";
|
|
|
break;
|
|
|
}
|
|
|
-// case "IConvertService.submitOrder":{ //提交订单
|
|
|
-// break;
|
|
|
-// }
|
|
|
default:{
|
|
|
return "";
|
|
|
}
|
|
|
}
|
|
|
OrderSyncPlatform orderSyncPlatform = getXYTPlatform();
|
|
|
- JSONObject jsonObject = this.syncXYTFormat(methodName,paramsMap,orderSyncPlatform);
|
|
|
+ JSONObject jsonObject = this.syncXYTFormat(type,paramsMap,orderSyncPlatform);
|
|
|
String rspJson = doPost(jsonObject,orderSyncPlatform.getSyncPlatApi());
|
|
|
return rspJson;
|
|
|
}
|
|
@@ -541,7 +850,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
" \"createTime\": \"2017-10-31 10:10:31\",\n" +
|
|
|
" \"doneTime\": \"2017-10-31 10:11:04\",\n" +
|
|
|
" \"orderId\": 100004540881,\n" +
|
|
|
- " \"receiverAddress\": \"A\",\n" +
|
|
|
+ " \"receiverAddress\": \"民治大道328号\",\n" +
|
|
|
" \"receiverCity\": \"市辖区\",\n" +
|
|
|
" \"receiverDistrict\": \"和平区\",\n" +
|
|
|
" \"receiverMobile\": \"15757160000\",\n" +
|
|
@@ -573,7 +882,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
" \"paidPoints\": 0,\n" +
|
|
|
" \"payTime\": \"2017-10-31 10:10:41\",\n" +
|
|
|
" \"payType\": \"N/A\",\n" +
|
|
|
- " \"platformId\": \"IMEIHAO\",\n" +
|
|
|
+ " \"platformId\": \"TMALL\",\n" +
|
|
|
" \"postFee\": 0,\n" +
|
|
|
" \"revokeStatus\": 0,\n" +
|
|
|
" \"shippingType\": \"express\",\n" +
|
|
@@ -598,7 +907,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
" \"extItemId\": \"15094158317087400\",\n" +
|
|
|
" \"extNumIid\": \"107617669\",\n" +
|
|
|
" \"extOrderId\": \"150941583170874\",\n" +
|
|
|
- " \"extSkuId\": \"MDMJ20170515ZNJKC\",\n" +
|
|
|
+ " \"extSkuId\": \"6970465730443\",\n" +
|
|
|
" \"extSkuTitle\": \"博冠丨 Just Fit V2 云智能健康秤\",\n" +
|
|
|
" \"imageUrl\": \"https://cdn.imeihao.shop/mall-imeihao/product/main-1507617610718spQCphtyyi_750_750.jpg\",\n" +
|
|
|
" \"isSplit\": 0,\n" +
|
|
@@ -644,10 +953,13 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
|
|
|
" \n" +
|
|
|
" ],\n" +
|
|
|
" \"memo\": {\n" +
|
|
|
- " \"buyerMessage\": \"\",\n" +
|
|
|
+ " \"orderMemo\": \"备注\",\n" +
|
|
|
+ " \"buyerMessage\": \"买方信息\",\n" +
|
|
|
" \"createOp\": 100000000001,\n" +
|
|
|
" \"createTime\": \"2017-10-31 10:10:31\",\n" +
|
|
|
" \"doneTime\": \"2017-10-31 10:11:04\",\n" +
|
|
|
+ " \"buyerMemo\": \"买家备注\",\n" +
|
|
|
+ " \"sellerMemo\": \"卖家备注\",\n" +
|
|
|
" \"memoId\": 100004220937,\n" +
|
|
|
" \"orderId\": 100004540881,\n" +
|
|
|
" \"tenantId\": 100000000001\n" +
|