Explorar o código

添加京东订单同步功能,同步发货的订单

wangxiaoming %!s(int64=5) %!d(string=hai) anos
pai
achega
c70c810475

+ 6 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/order/OrderSyncLogService.java

@@ -50,6 +50,12 @@ public interface OrderSyncLogService {
     Integer syncXYTOrder(Integer type,String status,Date creatTime);
 
     /**
+     * 小亚通 - 拉取订单-京东独有,拉取京东仓已发货订单
+     * @return Integer
+     */
+    Integer syncXYTOrderByJD(Integer type);
+
+    /**
      * 小亚通 - 同步订单状态
      * @param salesId  小亚通订单id
      * @return Integer

+ 157 - 4
watero-rst-service/src/main/java/com/iamberry/rst/service/order/OrderSyncLogServiceImpl.java

@@ -104,6 +104,8 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
 
     //配置小亚通拉取订单时间参数设置id
     private static final Integer CONFIG_ID = 9;
+    //配置小亚通定时拉取京东仓发货的订单
+    private static final Integer PULL_JD_ID = 10;
     SimpleDateFormat SYS_CONFIG_SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
 
@@ -238,7 +240,9 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
             }
             String errorMsg = (String) map.get("errorMsg");//失败订单号
             stringBuffer.append(errorMsg);
-            if(amountNum < pageSize){
+
+            Integer pullAmount = (Integer) map.get("pullAmount");
+            if(pullAmount < pageSize){
                 pullFlag = false;
             }
             pageNumber++;
@@ -317,6 +321,150 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         return amountSuccessAllNum;
     }
 
+  /**
+     * 拉取京东订单(所有订单)
+     *   1:定时任务 2:手动同步
+     * @return
+     */
+    @Override
+    @Transactional
+    public synchronized Integer syncXYTOrderByJD(Integer type) {
+        Calendar calendar = Calendar.getInstance();
+        if(type == 1){
+            SysConfig sysConfig = sysConfigMapper.getSysConfigAllLock(PULL_JD_ID);
+            Date date = new Date();
+            try {
+                date = SYS_CONFIG_SDF.parse(sysConfig.getConfigRemarks());
+                Calendar newDate = Calendar.getInstance();
+                if(calendar.get(Calendar.DATE) == newDate.get(Calendar.DATE)){
+                    logger.info("该定时任务已经运行!");
+                    return 0;
+                }
+
+                calendar.setTime(date);
+                calendar.set(Calendar.HOUR_OF_DAY,0);
+                calendar.set(Calendar.MINUTE,0);
+                calendar.set(Calendar.SECOND,0);
+            } catch (ParseException e) {
+                e.printStackTrace();
+                logger.info("获取配置文件失败!");
+                return 0;
+            }
+        }else{
+            calendar.add(Calendar.DATE,-1);
+            calendar.set(Calendar.HOUR_OF_DAY,0);
+            calendar.set(Calendar.MINUTE,0);
+            calendar.set(Calendar.SECOND,0);
+        }
+
+        OrderSyncPlatform orderSyncPlatform =  getXYTPlatform();
+        if(orderSyncPlatform.getSyncPlatStatus() != 1){
+            logger.info("小亚通接口已关闭!");
+            return 0;
+        }
+
+        Map<String,Object> paramsMap = new HashMap<>();
+        List<Map<String,Object>> conditionTypeList = new ArrayList<>();
+        Map<String,Object> beginCreateTimeMap = new HashMap<>();
+        beginCreateTimeMap.put("condType","beginCreateTime");
+        String[] condValueCreatImes = new String[1];
+        condValueCreatImes[0] = sdf.format(calendar.getTime());
+        beginCreateTimeMap.put("condValue", condValueCreatImes);//生成开始时间
+        conditionTypeList.add(beginCreateTimeMap);
+
+        //结束时间
+//        Date endCreateTime = new Date();
+//        Map<String,Object> endCreateTimeMap = new HashMap<>();
+//        endCreateTimeMap.put("condType","endCreateTime");     //receiverName 收件人姓名 //receiverMobile收件人手机号码 //outOrderId原始订单号 //orderId系统订单号
+//        String[] condValueEndCreateTimes = new String[1];
+//        condValueEndCreateTimes[0] = sdf.format(endCreateTime);
+//        endCreateTimeMap.put("condValue",condValueEndCreateTimes);//生成结束时间
+//        conditionTypeList.add(endCreateTimeMap);
+
+        //订单状态  只获取发货的订单
+//        Map<String,Object> statusTimeMap = new HashMap<>();
+//        statusTimeMap.put("condType","orderStatus");     //receiverName 收件人姓名 //receiverMobile收件人手机号码 //outOrderId原始订单号 //orderId系统订单号
+//        String[] condValueStatuss = new String[1];
+//        condValueStatuss[0] = "60"; //只查询待发货
+//        statusTimeMap.put("condValue",condValueStatuss);
+//        conditionTypeList.add(statusTimeMap);
+
+        Map<String,Object> shopMap = new HashMap<>();
+        shopMap.put("condType","shopId");
+        String[] shopIds = new String[1];
+        shopIds[0] = "100206182446";
+        shopMap.put("condValue",shopIds);
+        conditionTypeList.add(shopMap);
+
+        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("IOrderService.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;
+            }
+            String errorMsg = (String) map.get("errorMsg");//失败订单号
+            stringBuffer.append(errorMsg);
+
+            Integer pullAmount = (Integer) map.get("pullAmount");
+            if(pullAmount < pageSize){
+                pullFlag = false;
+            }
+            pageNumber++;
+        }
+
+        OrderSyncLog orderSyncLog = new OrderSyncLog();
+        orderSyncLog.setSyncPlatId(orderSyncPlatform.getSyncPlatId());
+        orderSyncLog.setSyncLogType(1);
+        orderSyncLog.setSyncLogMode(type);
+        orderSyncLog.setSyncLogRecentNum(amountAllNum); //同步总数量
+        orderSyncLog.setSyncLogErrorNum(amountAllNum - amountSuccessAllNum); //同步失败数量
+        if(batchId != ""){
+            batchId = "批次编号:"+batchId;
+        }
+        orderSyncLog.setSyncLogMsg("京东批量拉取,"+batchId);   //备注
+        if(!stringBuffer.toString().equals("")){
+            String newErrorMsg = stringBuffer.toString();
+            if(newErrorMsg.length() > 5000){
+                newErrorMsg = newErrorMsg.substring(0,4999);
+            }
+            orderSyncLog.setSyncLogErrorMsg(newErrorMsg);  //失败信息
+        }
+        orderSyncLogMapper.save(orderSyncLog);
+
+        //修改配置文件
+        if(type == 1){
+            Calendar newConfigDate = Calendar.getInstance();
+            newConfigDate.set(Calendar.MINUTE,0);
+            newConfigDate.set(Calendar.SECOND,0);
+            SysConfig newSysConfig = new SysConfig();
+            newSysConfig.setConfigId(PULL_JD_ID);
+            newSysConfig.setConfigParameter("2");
+            newSysConfig.setConfigRemarks(SYS_CONFIG_SDF.format(newConfigDate.getTime()));
+            sysConfigMapper.updateSysConfig(newSysConfig);
+        }
+        return amountSuccessAllNum;
+    }
+
     @Override
     public Integer syncXYTOrderPostNum(Integer salesId){
         SalesOrder salesOrder = salesOrderService.getSalesOrderByIdConcise(salesId);
@@ -974,8 +1122,9 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         Map<String,Object> returnMap = new HashMap<>();
 
         Integer status = 0;  //状态 0.拉取订单失败   1.拉取订单成功
-        Integer amountNum = 0;  //本次拉取的订单数量
+        Integer amountNum = 0;  //本次拉取的订单数量(实际需要添加的)
         Integer amountSuccessNum = 0;  //保存成功数量
+        Integer pullAmount = 0; //拉取的总数量
         String msg = "";  //备注
         StringBuffer errorMsg = new StringBuffer(); //未防止部分拉取失败,所以加入失败原因
         JSONObject jsonObj = new JSONObject(json);//转化为json格式
@@ -985,7 +1134,9 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
             msg = "拉取订单成功";
 
             JSONObject dataObj = jsonObj.getJSONObject("data");    //数据
+
             JSONArray beanListArray = dataObj.getJSONArray("beanList");
+            pullAmount = beanListArray.length();
             amountNum = beanListArray.length();
             if(beanListArray.length() > 0){
                 for(int i=0;i<beanListArray.length();i++){
@@ -1010,7 +1161,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                         salesOrder.setSalesIsSend(0);//是否通知配货0:否1:是
                         salesOrder.setSalesDeliver(1);  //出库状态1:未出库2:已出库
                         salesOrder.setSalesShippingStatus(0);////发货状态0(未发货)1(已发货,即已扫描出库)3(备货中)4(收货)11(已通知配货,后加)
-                        salesOrder.setSalesStatus(1);  //确认状态  0(未确认)1(确认)2(挂起)3(作废) 4:京东自发 -- 在订单项判断中,可能会变成京东仓库自发状态
+                        salesOrder.setSalesStatus(0);  //确认状态  0(未确认)1(确认)2(挂起)3(作废) 4:京东自发 -- 在订单项判断中,可能会变成京东仓库自发状态
 
                         //小亚通订单编号
                         otherOrderId = infoObj.getLong("orderId");
@@ -1024,6 +1175,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                         switch (orderStatus){
                             case 20:
                                 break;
+                            case 70:   //70 已签收和已发货一样,
                             case 60:
                                 salesOrder.setSalesIsSend(1);//是否通知配货0:否1:是
                                 salesOrder.setSalesDeliver(2);  //出库状态1:未出库2:已出库
@@ -1616,7 +1768,8 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
 
         returnMap.put("batchId",batchId);   //批次id
         returnMap.put("status",status);  //拉取订单成功
-        returnMap.put("amountNum",amountNum);  //拉取订单成功
+        returnMap.put("pullAmount",pullAmount);  //拉取订单总数量
+        returnMap.put("amountNum",amountNum);  //拉取实际有用的订单数量
         returnMap.put("amountSuccessNum",amountSuccessNum);  //保存成功数量
         returnMap.put("msg",msg);  //拉取订单成功
         returnMap.put("errorMsg",errorMsg.toString());  //失败订单号

+ 28 - 20
watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/MQTask.java

@@ -599,30 +599,28 @@ public class MQTask implements InitializingBean {
 		    return;
         }
         for (SalesOrder salesOrder:salesOrderList) {
-		// 查询订单对应的物流公司
-		LogisticsInfo log = new LogisticsInfo();
-		log.setLogisticsRstCode(salesOrder.getSalesPostFirm());
-		List<LogisticsInfo> listlog = logisticsInfoService.getLogisticsInfoList(log);
-		if(listlog.size() > 0){
-			if(listlog.get(0).getLogisticsIsSynchronous() == 1){
-				// 调用第三方接口查询物流信息
-				Date date = kuaidi100.selectCourierSignCaseTime(listlog.get(0),salesOrder.getSalesPostNum());
-				if(date == null){
-					continue;
-				}
-				// 编辑订单的揽件时间
-				SalesOrder so = new SalesOrder();
-				so.setSalesId(salesOrder.getSalesId());
-				so.setOrderCaseDate(date);
-				if(salesOrderService.update(so) <= 0){
-					logger.info("修改揽件时间异常,订单号:"+salesOrder.getSalesOrderId());
+			// 查询订单对应的物流公司
+			LogisticsInfo log = new LogisticsInfo();
+			log.setLogisticsRstCode(salesOrder.getSalesPostFirm());
+			List<LogisticsInfo> listlog = logisticsInfoService.getLogisticsInfoList(log);
+			if(listlog.size() > 0){
+				if(listlog.get(0).getLogisticsIsSynchronous() == 1){
+					// 调用第三方接口查询物流信息
+					Date date = kuaidi100.selectCourierSignCaseTime(listlog.get(0),salesOrder.getSalesPostNum());
+					if(date == null){
+						continue;
+					}
+					// 编辑订单的揽件时间
+					SalesOrder so = new SalesOrder();
+					so.setSalesId(salesOrder.getSalesId());
+					so.setOrderCaseDate(date);
+					if(salesOrderService.update(so) <= 0){
+						logger.info("修改揽件时间异常,订单号:"+salesOrder.getSalesOrderId());
+					}
 				}
 			}
 		}
-
 	}
-}
-
 
 	/**
 	 * 定时拉取小亚通订单
@@ -651,4 +649,14 @@ public class MQTask implements InitializingBean {
 		logger.info("-----定时拉取拉取京东自发订单的发货状态-结束----");
 	}
 
+	/**
+	 * 同步拉取京东自发订单的发货单号
+	 */
+	@Scheduled(cron = "0 50 3 * * ?")//每天晚上3.50触发
+	public void syncXytOrderByJd(){
+		logger.info("-----定时拉取拉取京东仓已发货订单-开始----");
+		Integer flag = orderSyncLogService.syncXYTOrderByJD(1);
+		logger.info("-----定时拉取拉取京东仓已发货订单-结束----");
+	}
+
 }

+ 9 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminOrderPlatformController.java

@@ -91,6 +91,15 @@ public class AdminOrderPlatformController {
     }
 
     @ResponseBody
+    @RequestMapping("/pull_jd")
+    public ResponseJson pullJd(HttpServletRequest request){
+        Integer flag = orderSyncLogService.syncXYTOrderByJD(2);
+        ResponseJson rj = new ResponseJson();
+        rj.setResultMsg("已同步"+flag+"个订单");
+        return  rj;
+    }
+
+    @ResponseBody
     @RequestMapping("/pullOrder")
     public ResponseJson pullOrder(HttpServletRequest request,String orderId){
         Integer num = orderSyncLogService.syncXYTOrderOne(2,orderId);

+ 19 - 1
watero-rst-web/src/main/webapp/common/js/salesOrder/salesOrder.js

@@ -1,6 +1,8 @@
 
 var allCustomerId = "";
 
+var isApportion = 1;    //1(未使用分摊金额,数值变动会自动计算商品总价) 2(使用了分摊金额)
+
 
 //删除节点-保存对应删除的节点信息 -- 只有修改页面使用
 var deleteArray = new Array();
@@ -30,7 +32,12 @@ function add_customer() {
     layer_show("客诉列表",url_path + "/admin/customer/to_add_customer_list","1000","500");
 }
 
+
+
 $(function(){
+
+
+
     $("#salesOrderStatus").change(function(){
         var status = $(this).val();
         if(status == 1){    //正常订单
@@ -529,7 +536,16 @@ function calculatePrice(){
         colorDiscount = Number($(this).find(".color_discount").val());
         colorPrice = Number($(this).find(".color_price").val());
         itemNum = $(this).find(".item-num").val();
-        item_total = Number($(this).find(".item_total").val());//小结
+
+        item_total = 0;
+        if(isApportion == 1){
+            item_total = accMul(itemNum,colorDiscount);
+            $(this).find(".item_total").val(item_total)
+            $(this).find(".item_totalTd").text(item_total)
+        }else{
+            item_total = Number($(this).find(".item_total").val());//小结
+        }
+
         if(!isEmpty(itemNum)){
             return;
         }
@@ -552,6 +568,8 @@ function calculatePrice(){
  * 分摊实付金额
  */
 function sharePrice(){
+    isApportion = 2;
+
     /*总价,折扣价,优惠金额*/
     var colorDiscountAll = 0,colorPriceAll = 0,remainingAmount = 0;
     var salesPayMoneyTest = $("#salesPayMoneyTest").val();