Explorar el Código

处理订单完善

yq hace 3 años
padre
commit
3668ee643d

+ 8 - 0
src/main/java/com/usky/dxtop/common/utils/DateUtils.java

@@ -152,4 +152,12 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         // long sec = diff % nd % nh % nm / ns;
         return day + "天" + hour + "小时" + min + "分钟";
     }
+
+    public static long getDatePoorMin(Date endDate, Date nowDate){
+        long nd = 1000 * 24 * 60 * 60;
+        long nh = 1000 * 60 * 60;
+        long nm = 1000 * 60;
+        long diff = endDate.getTime() - nowDate.getTime();
+        return diff % nd % nh / nm;
+    }
 }

+ 2 - 1
src/main/java/com/usky/dxtop/service/OrderService.java

@@ -70,8 +70,9 @@ public interface OrderService extends IService<Order> {
      * 处理订单
      * @param order
      * @param result
+     * @param param
      */
-    void checkOrder(Order order,String result);
+    void checkOrder(Order order,String result,String param);
 
     /**
      * 处理支付成功的订单

+ 3 - 1
src/main/java/com/usky/dxtop/service/emun/OrderStatus.java

@@ -14,7 +14,9 @@ public enum OrderStatus {
 
     PAYMENT_ERROR_DEBIT(3,"卡充值失败"),
 
-    SUCCESS(4,"支付成功");
+    SUCCESS(4,"支付成功"),
+
+    CANCEL_PAY(5,"取消支付");
 
     private Integer code;
 

+ 22 - 8
src/main/java/com/usky/dxtop/service/impl/OrderServiceImpl.java

@@ -11,6 +11,7 @@ import com.usky.dxtop.common.core.domain.AjaxResult;
 import com.usky.dxtop.common.core.page.CommonPage;
 import com.usky.dxtop.common.exception.CustomException;
 import com.usky.dxtop.common.utils.Arith;
+import com.usky.dxtop.common.utils.DateUtils;
 import com.usky.dxtop.common.utils.QRCodeUtil;
 import com.usky.dxtop.common.utils.StringUtils;
 import com.usky.dxtop.common.utils.http.HttpUtils;
@@ -35,6 +36,7 @@ import org.springframework.util.FastByteArrayOutputStream;
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
+import java.util.Date;
 import java.util.TreeMap;
 
 /**
@@ -154,7 +156,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             }
             encode = Base64.encode(os.toByteArray());
         }catch (Exception e){
-            throw new CustomException("生成二维码失败");
+            throw new CustomException("生成二维码失败"+e.getMessage());
         }
         return encode;
     }
@@ -171,10 +173,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         String format = String.format("%s&sign=%s", TopApi.joinParam(param),
                 TopApi.signData(param));
         String result = HttpUtils.sendGet(TopApi.DEAL_SELECT_URL, format);
-        callApiLogService.add(orderNumber,FIND_ORDER_INFO,TopApi.DEAL_SELECT_URL,JSONObject.toJSONString(param),result);
         Order order = one(orderNumber);
         //处理订单
-        checkOrder(order, result);
+        checkOrder(order, result,JSONObject.toJSONString(param));
         //再此获取订单的最新状态
         order = one(orderNumber);
         return OrderStatus.parse(order.getOrderFlag()).getName();
@@ -221,7 +222,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
      * @param order
      */
     @Override
-    public void checkOrder(Order order,String result){
+    public void checkOrder(Order order,String result,String param){
         JSONObject obj= JSON.parseObject(result);
         if ("0000".equals(obj.get("status"))){
             //交易成功
@@ -234,10 +235,22 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 payError(order);
             }
         }else {
-            if (!"交易订单不存在".equals(obj.get("errorMessage"))){
+            if ("交易订单不存在".equals(obj.get("errorMessage"))){
+                long datePoorMin = DateUtils.getDatePoorMin(DateUtils.getNowDate(), order.getCreateTime());
+                if (datePoorMin > 30){
+                    cancelPay(order);
+                }
+            }else {
                 payError(order);
             }
         }
+        CallApiLog callApiLog = callApiLogService.one(order.getOrderNumber(), FIND_ORDER_INFO);
+        if (null == callApiLog){
+            callApiLogService.add(order.getOrderNumber(),FIND_ORDER_INFO,TopApi.DEAL_SELECT_URL,param,result);
+        }else {
+            callApiLog.setApiResultData(result);
+            callApiLogService.updateById(callApiLog);
+        }
     }
 
     /**
@@ -277,10 +290,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     }
 
     /**
-     * 交易订单不存在
+     * 取消支付
      * @param order
      */
-    public void dealNo(Order order){
-
+    public void cancelPay(Order order){
+        order.setOrderFlag(OrderStatus.CANCEL_PAY.getCode());
+        this.updateById(order);
     }
 }

+ 10 - 22
src/main/java/com/usky/dxtop/service/job/OrderJob.java

@@ -28,28 +28,16 @@ public class OrderJob {
 
     @Scheduled(cron = "0 */1 * * * ?")
     public void execute(){
-        boolean isNext = true;
-        int index = 1;
-        while(isNext){
-            IPage<Order> page = new Page<>(index,20);
-            LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery();
-            queryWrapper.eq(Order::getOrderFlag, OrderStatus.NO_PAYMENT.getCode())
-                    .or()
-                    .eq(Order::getOrderFlag, OrderStatus.AWAIT_PAY.getCode());
-            page = orderService.page(page, queryWrapper);
-            List<Order> list = page.getRecords();
-            log.info("---orderJob---本次处理记录:"+ list.size());
-            if (CollectionUtils.isNotEmpty(list)){
-                for (Order order:page.getRecords()) {
-                    try {
-                        orderService.callTopFindOrderInfoApi(order.getOrderNumber());
-                    }catch (Exception e){
-                        log.error("---orderJob---异常"+e.getMessage());
-                    }
-                }
-                index++;
-            }else {
-                isNext = false;
+        LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(Order::getOrderFlag, OrderStatus.NO_PAYMENT.getCode())
+                .or()
+                .eq(Order::getOrderFlag, OrderStatus.AWAIT_PAY.getCode());
+        List<Order> list = orderService.list(queryWrapper);
+        for (Order order:list) {
+            try {
+                orderService.callTopFindOrderInfoApi(order.getOrderNumber());
+            }catch (Exception e){
+                log.error("---orderJob---异常"+e.getMessage());
             }
         }
         log.info("---orderJob---处理完成");