فهرست منبع

分账加锁bugfix

zhijiezhao 3 سال پیش
والد
کامیت
ee3edc00ee

+ 3 - 0
src/main/java/com/caimei/modules/order/dao/NewOrderDao.java

@@ -9,6 +9,7 @@ import com.thinkgem.jeesite.common.persistence.CrudDao;
 import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Set;
 
@@ -213,4 +214,6 @@ public interface NewOrderDao extends CrudDao<NewOrder> {
     OrderVo getOrderByOrderId(Integer orderId);
 
     void insertSplitAccount(SplitAccountPo splitAccount);
+
+    Date findSplitTime();
 }

+ 6 - 0
src/main/java/com/caimei/modules/order/service/SplitAccountService.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.caimei.modules.order.dao.NewOrderDao;
 import com.caimei.modules.order.entity.*;
 import com.caimei.modules.order.utils.PayUtil;
+import com.caimei.redis.RedisService;
 import com.caimei.utils.MathUtil;
 import com.thinkgem.jeesite.common.persistence.Page;
 import org.apache.commons.lang3.StringUtils;
@@ -25,6 +26,10 @@ public class SplitAccountService {
      * 日志对象
      */
     protected Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Resource
+    private RedisService redisService;
+
     //正式
 //    public static final String callUrl = "https://core.caimei365.com/order/pay/delay/split/callback";
     //测试
@@ -133,6 +138,7 @@ public class SplitAccountService {
                             splitAccount.setPayStatus(1);
                             // 保存分账详情
                             newOrderDao.insertSplitAccount(splitAccount);
+                            redisService.remove("XSFZMDS");
                         }
                         logger.info("【手动分账】>>>>>>>>>>此订单分账结束");
                     }

+ 20 - 3
src/main/java/com/caimei/modules/order/web/SplitAccountController.java

@@ -5,9 +5,11 @@ import com.caimei.modules.order.dao.NewShopOrderDao;
 import com.caimei.modules.order.entity.NewShopOrder;
 import com.caimei.modules.order.entity.OrderReceiptRelationPo;
 import com.caimei.modules.order.service.SplitAccountService;
+import com.caimei.redis.RedisService;
 import com.thinkgem.jeesite.common.config.Global;
 import com.thinkgem.jeesite.common.persistence.Page;
 import com.thinkgem.jeesite.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -31,10 +33,23 @@ public class SplitAccountController extends BaseController {
     @Resource
     private NewOrderDao newOrderDao;
 
+    @Resource
+    private RedisService redisService;
+
     @RequestMapping("split")
-    public String SplitAccount(RedirectAttributes redirectAttributes){
+    public String SplitAccount(RedirectAttributes redirectAttributes) {
+        Integer xsfzmds = (Integer) redisService.get("XSFZMDS");
+        //验锁
+        if (null != xsfzmds && xsfzmds > 0) {
+            addMessage(redirectAttributes, "请勿短时间内重复分账,等待支付公司返回分账结果!");
+            return "redirect:" + Global.getAdminPath() + "/shopOrder/splitList/?repage";
+        }
         //设置分账间隔,2-3分钟,禁止重复分账
-//        newOrderDao.findSplitTime();
+        Date splitTime = newOrderDao.findSplitTime();
+        if (null != splitTime) {
+            addMessage(redirectAttributes, "请勿短时间内重复分账,等待支付公司返回分账结果!");
+            return "redirect:" + Global.getAdminPath() + "/shopOrder/splitList/?repage";
+        }
         //查询是否有账单可分账,没有return
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(new Date());
@@ -51,9 +66,11 @@ public class SplitAccountController extends BaseController {
             orderRelations.addAll(onlineRelations);
         }
         if (null != orderRelations && orderRelations.size() > 0) {
+            //设锁
+            redisService.set("XSFZMDS", 1, 120L);
             splitAccountService.SplitAccount();
             addMessage(redirectAttributes, "分账成功!");
-        }else{
+        } else {
             addMessage(redirectAttributes, "暂无收款金额可进行分账!");
         }
         return "redirect:" + Global.getAdminPath() + "/shopOrder/splitList/?repage";

+ 5 - 0
src/main/resources/mappings/modules/order/OrderMapper.xml

@@ -1150,6 +1150,11 @@
 		FROM cm_order
 		WHERE orderID = #{orderId}
 	</select>
+	<select id="findSplitTime" resultType="java.util.Date">
+		SELECT splitTime FROM cm_split_account
+		WHERE splitTime IS NOT NULL
+		  AND splitTime > DATE_ADD(NOW(),INTERVAL -2 MINUTE)
+	</select>
 
 	<insert id="insertSplitAccount">
 		INSERT INTO cm_split_account (orderId, productId, orderProductId, shopId, couponRecordId,vipRecordId, authVipRecordId, type, subUserNo, splitAccount,