|
@@ -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));
|