简德馨 2 лет назад
Родитель
Сommit
d78a13da47

+ 50 - 3
src/main/java/org/springblade/modules/finance/service/impl/OrderServiceImpl.java

@@ -17,6 +17,7 @@
 package org.springblade.modules.finance.service.impl;
 
 import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -27,6 +28,7 @@ import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.log.logger.BladeLogger;
+import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.modules.api.request.OrderCommonSaveRequest;
 import org.springblade.modules.api.request.OrderConsignRandomRequest;
@@ -55,6 +57,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -103,6 +106,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	@Autowired
 	private BladeLogger logger;
 
+	@Resource
+	private BladeRedis bladeRedis;
+
 	@Override
 	public IPage<OrderVO> selectOrderPage(IPage<OrderVO> page, OrderVO order) {
 		return page.setRecords(baseMapper.selectOrderPage(page, order));
@@ -229,11 +235,52 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public String consignOrderInsert(OrderConsignRandomRequest request, UserApp userApp, String tenantId) {
-		//获取寄售商品数据
+		/************************************用户寄售单处理-开始**************************************/
+		//优先获取用户寄售单 todo
 		Consign consign = consignMapper.randomConsign(request.getConsignConfigId(),request.getUserId());
-		if (consign == null){
-			throw new ServiceException("亲,好物已抢完欢迎再来!");
+		Boolean flag = true;
+		//循环获取用户订单,判断当前订单是否已经抢到了,如果抢到了那么就换一单
+		while (flag){
+			//判断用户寄售单是否为空
+			if(ObjectUtil.isNotNull(consign)){
+				//通过寄售id获取redis是否为空
+				Object o = bladeRedis.get(String.valueOf(consign.getId()));
+				if(ObjectUtil.isNull(o)){//判断redis中是否有其他人在使用
+					//将当前订单号放入redis中,防止其他用户抢到同一单号
+					bladeRedis.setEx(String.valueOf(consign.getId()), Integer.parseInt("1"), 30L);
+					flag = false;//跳出循环,使用当前单号来进行订单创建
+				}else{//如果存在则重新获取订单进行创建
+					consign = consignMapper.randomConsign(request.getConsignConfigId(),request.getUserId());
+				}
+			}else{//如果用户寄售单为空那么跳出当前循环重新获取平台单
+				flag = false;
+			}
+		}
+		/************************************用户寄售单处理-结束**************************************/
+		/************************************平台单单处理-开始**************************************/
+		if(ObjectUtil.isNull(consign)){//当没有获取到用户寄售单时进入品台单获取流程
+			//获取平台单
+			flag = true;
+			while (flag){
+				//判断用户寄售单是否为空
+				if(ObjectUtil.isNotNull(consign)){
+					//通过寄售id获取redis是否为空
+					Object o = bladeRedis.get(String.valueOf(consign.getId()));
+					if(ObjectUtil.isNull(o)){//判断redis中是否有其他人在使用
+						//将当前订单号放入redis中,防止其他用户抢到同一单号
+						bladeRedis.setEx(String.valueOf(consign.getId()), Integer.parseInt("1"), 30L);
+						flag = false;//跳出循环,使用当前单号来进行订单创建
+					}else{//如果存在则重新获取订单进行创建
+						//获取平淡订单 todo
+						consign = consignMapper.randomConsign(request.getConsignConfigId(),request.getUserId());
+					}
+				}else{//如果用户寄售单为空那么跳出当前循环重新获取平台单
+					throw new ServiceException("亲,好物已抢完欢迎再来!");
+				}
+			}
 		}
+		/************************************平台单单处理-结束**************************************/
+
 		//扣除用户绿色积分 添加明细
 		//寄售金额 * 3% =  绿色积分的
 		Double score = NumberUtil.mul(consign.getConsignPrice(), Double.valueOf(0.03));