|
@@ -50,6 +50,7 @@ import org.springblade.modules.platform.mapper.UserScoresMapper;
|
|
|
import org.springblade.modules.platform.service.IUserTicketService;
|
|
|
import org.springblade.modules.shopping.entity.*;
|
|
|
import org.springblade.modules.shopping.mapper.*;
|
|
|
+import org.springblade.modules.shopping.wrapper.ConsignWrapper;
|
|
|
import org.springblade.modules.system.entity.User;
|
|
|
import org.springblade.modules.system.entity.UserApp;
|
|
|
import org.springblade.modules.system.mapper.UserMapper;
|
|
@@ -236,9 +237,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public String consignOrderInsert(OrderConsignRandomRequest request, UserApp userApp, String tenantId) {
|
|
|
/************************************用户寄售单处理-开始**************************************/
|
|
|
- //优先获取用户寄售单 todo
|
|
|
- Consign consign = consignMapper.randomConsign(request.getConsignConfigId(),request.getUserId());
|
|
|
- Boolean flag = true;
|
|
|
+ //优先获取用户寄售单
|
|
|
+ Consign consign = consignMapper.randomConsign(request.getConsignConfigId(), request.getUserId());
|
|
|
+ boolean flag = true;
|
|
|
//循环获取用户订单,判断当前订单是否已经抢到了,如果抢到了那么就换一单
|
|
|
while (flag){
|
|
|
//判断用户寄售单是否为空
|
|
@@ -259,28 +260,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
/************************************用户寄售单处理-结束**************************************/
|
|
|
/************************************平台单单处理-开始**************************************/
|
|
|
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("亲,好物已抢完欢迎再来!");
|
|
|
- }
|
|
|
+ consign = consignMapper.platformConsign(request.getConsignConfigId(), request.getConsignId());
|
|
|
+ //数据量判断
|
|
|
+ if (Objects.isNull(consign)){
|
|
|
+ throw new ServiceException("亲,好物已抢完欢迎再来!");
|
|
|
}
|
|
|
}
|
|
|
/************************************平台单单处理-结束**************************************/
|
|
|
-
|
|
|
//扣除用户绿色积分 添加明细
|
|
|
//寄售金额 * 3% = 绿色积分的
|
|
|
Double score = NumberUtil.mul(consign.getConsignPrice(), Double.valueOf(0.03));
|
|
@@ -291,12 +277,36 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
}
|
|
|
//查询商品信息
|
|
|
Goods goods = goodsMapper.selectById(consign.getGoodsId());
|
|
|
- if (goods == null){
|
|
|
+ if (Objects.isNull(goods)){
|
|
|
throw new ServiceException("商品不存在!");
|
|
|
}
|
|
|
User user = userMapper.selectById(request.getUserId());
|
|
|
- //生成订单号
|
|
|
String outTradeNo = CommonUtil.genTimeID();
|
|
|
+ boolean flg = createOrder(userApp, user,request,consign,tenantId,goods,score,ratioTicket,outTradeNo);
|
|
|
+ if (flg){
|
|
|
+ return outTradeNo;
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 1、创建订单
|
|
|
+ * 2、创建订单详情
|
|
|
+ * 3、创建寄售订单
|
|
|
+ * 4、修改用户积分
|
|
|
+ * 5、添加积分明细
|
|
|
+ * @return boolean
|
|
|
+ */
|
|
|
+ private boolean createOrder(UserApp userApp,
|
|
|
+ User user,
|
|
|
+ OrderConsignRandomRequest request,
|
|
|
+ Consign consign,
|
|
|
+ String tenantId,
|
|
|
+ Goods goods,
|
|
|
+ Double score,
|
|
|
+ Double ratioTicket,
|
|
|
+ String outTradeNo){
|
|
|
+ //创建订单号
|
|
|
Order order = new Order();
|
|
|
order.setTenantId(tenantId);
|
|
|
if(user != null){
|
|
@@ -305,7 +315,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
order.setOutTradeNo(outTradeNo);
|
|
|
order.setUserId(request.getUserId());
|
|
|
order.setOrderType(3);//寄售订单
|
|
|
- order.setPayFlag(1); //待付款
|
|
|
+ order.setPayFlag(4); //寄售订单 变为已完成
|
|
|
order.setPayFee(consign.getConsignPrice());
|
|
|
order.setTotalFee(consign.getConsignPrice());
|
|
|
order.setUserAddress(request.getUserAddress());
|
|
@@ -328,33 +338,39 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
if (!flg){
|
|
|
throw new ServiceException("操作失败!");
|
|
|
}
|
|
|
- //添加寄售订单数据
|
|
|
+ //创建寄售订单数据
|
|
|
OrderConsign orderConsign = new OrderConsign();
|
|
|
orderConsign.setTotalNum(1);//默认寄售数量为1
|
|
|
- //判断来源为寄售
|
|
|
+ /**
|
|
|
+ * 抢到用户单
|
|
|
+ * 1、更新用户单状态
|
|
|
+ * 2、创建新的用户单
|
|
|
+ */
|
|
|
+ Consign updateConsign = new Consign();
|
|
|
if(consign.getConsignFor() == 2){
|
|
|
- //更新寄售状态
|
|
|
- Consign updateConsign = new Consign();
|
|
|
updateConsign.setId(consign.getId());
|
|
|
- updateConsign.setConsignState(2); //
|
|
|
+ updateConsign.setConsignState(2); //待付款
|
|
|
updateConsign.setConsignType(request.getConsignType());//修改寄售类型(寄售方式)
|
|
|
updateConsign.setNowStock(0); //当前库存为0
|
|
|
- int c = consignMapper.updateById(updateConsign);
|
|
|
- if (c != 1){
|
|
|
- throw new ServiceException("操作失败!");
|
|
|
- }
|
|
|
}else if(consign.getConsignFor() == 1){
|
|
|
- //来源为后台
|
|
|
- //todo 数量为1是减少库存数客户到达一定的数修改寄售状态为已寄售
|
|
|
- //寄售状态为还是寄售中
|
|
|
- Consign updateConsign = new Consign();
|
|
|
+ /**
|
|
|
+ * 抢到平台单
|
|
|
+ * 1、变为待确认状态
|
|
|
+ * 2、剩余数量为大于1时 寄售状态为还是寄售中 等于1是为已完成
|
|
|
+ * 3、传新的用户单
|
|
|
+ */
|
|
|
updateConsign.setId(consign.getId());
|
|
|
updateConsign.setConsignType(request.getConsignType());
|
|
|
- updateConsign.setNowStock(consign.getNowStock() - 1);
|
|
|
- int c = consignMapper.updateById(updateConsign);
|
|
|
- if (c != 1){
|
|
|
- throw new ServiceException("操作失败!");
|
|
|
+ if (consign.getNowStock() == 1){
|
|
|
+ updateConsign.setNowStock(0);
|
|
|
+ }else{
|
|
|
+ updateConsign.setNowStock(consign.getNowStock() - 1);
|
|
|
}
|
|
|
+ orderConsign.setIsConfirm(5);
|
|
|
+ }
|
|
|
+ int c = consignMapper.updateById(updateConsign);
|
|
|
+ if (c != 1){
|
|
|
+ throw new ServiceException("亲!请重新抢单");
|
|
|
}
|
|
|
orderConsign.setConsignId(consign.getId()); //寄售ID
|
|
|
orderConsign.setOutTradeNo(outTradeNo);
|
|
@@ -376,6 +392,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
if(j != 1){
|
|
|
throw new ServiceException("抢单失败!");
|
|
|
}
|
|
|
+ //更新用户绿色积分并添加明细
|
|
|
if(user != null){
|
|
|
Double ticket = NumberUtil.sub(userApp.getTicket() - score).doubleValue();
|
|
|
//用户减去绿色积分(酒票)
|
|
@@ -419,9 +436,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
userAppUpdate.setId(userApp.getId());
|
|
|
userAppUpdate.setCreditScore(userApp.getCreditScore() + consignScore);
|
|
|
userAppUpdate.updateById();
|
|
|
- return outTradeNo;
|
|
|
}
|
|
|
- return "";
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -532,14 +548,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean payConsignSuccess(String outTradeNo) {
|
|
|
- Order queryOrder = baseMapper.selectOne(Wrappers.<Order>lambdaQuery().eq(Order::getOutTradeNo, outTradeNo));
|
|
|
- log.info("订单数据:" + queryOrder);
|
|
|
- if (queryOrder == null){
|
|
|
- logger.error("订单异常", "无法获取订单数据!订单号:" + outTradeNo);
|
|
|
- return false;
|
|
|
- }
|
|
|
- log.info("订单数据金额:" + queryOrder.getPayFee());
|
|
|
+ public boolean payConsignSuccess(Order queryOrder) {
|
|
|
+ String outTradeNo = queryOrder.getOutTradeNo();
|
|
|
+ //寄售订单
|
|
|
if(queryOrder.getOrderType() == 3){
|
|
|
//选择寄售方式为寄售则生成新的寄售
|
|
|
OrderConsign query = orderConsignMapper.selectOne(Wrappers.<OrderConsign>lambdaQuery().eq(OrderConsign::getOutTradeNo, outTradeNo));
|
|
@@ -547,22 +558,16 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
logger.error("订单异常", "无订单数据!订单号:" + outTradeNo);
|
|
|
return false;
|
|
|
}
|
|
|
+ //查询所抢的寄售订单
|
|
|
Consign queryConsign = consignMapper.selectById(query.getConsignId());
|
|
|
- if(queryConsign == null){ //后台的数据为0或者寄售的
|
|
|
+ if(Objects.isNull(queryConsign)){ //后台的数据为0或者寄售的
|
|
|
logger.error("订单异常", "寄售无数据!订单号:" + outTradeNo);
|
|
|
return false;
|
|
|
}
|
|
|
- //获取批次配置时间
|
|
|
+ //新建寄售单
|
|
|
ConsignConfig consignConfig = consignConfigMapper.selectById(queryConsign.getConsignConfigId());
|
|
|
- //当前时间 + 寄售天数
|
|
|
- Date date = cn.hutool.core.date.DateUtil.offsetDay(DateUtil.now(), 1);
|
|
|
- String ymd = DateUtil.format(date, DateUtil.PATTERN_DATE);
|
|
|
- String st = DateUtil.format(consignConfig.getStartTime(), DateUtil.PATTERN_TIME);
|
|
|
- String et = DateUtil.format(consignConfig.getEndTime(), DateUtil.PATTERN_TIME);
|
|
|
- String startTime = ymd + " " + st;
|
|
|
- String endTime = ymd + " " + et;
|
|
|
- Date startDate = DateUtil.parse(startTime, DateUtil.PATTERN_DATETIME);
|
|
|
- Date endDate = DateUtil.parse(endTime, DateUtil.PATTERN_DATETIME);
|
|
|
+ Date startDate = cn.hutool.core.date.DateUtil.offsetDay(consignConfig.getStartTime(), 1);
|
|
|
+ Date endDate = cn.hutool.core.date.DateUtil.offsetDay(consignConfig.getEndTime(), 1);
|
|
|
Consign consign = new Consign();
|
|
|
consign.setOrderId(queryOrder.getId()); //保存来源的订单ID
|
|
|
consign.setConsignFor(2);//寄售订单
|
|
@@ -578,40 +583,26 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
consign.setGoodsId(query.getGoodsId());
|
|
|
consign.setGoodsName(query.getGoodsName());
|
|
|
consign.setTitle(query.getGoodsName());
|
|
|
- Double ratio = 0d;
|
|
|
- if(query.getConsignDays() == 2){
|
|
|
- ratio = Double.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_CONDIGN_RATIO_T2));
|
|
|
- }else if(query.getConsignDays() == 3){
|
|
|
- ratio = Double.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_CONDIGN_RATIO_T3));
|
|
|
- }else {
|
|
|
- ratio = Double.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_CONDIGN_RATIO_T1));
|
|
|
- }
|
|
|
-
|
|
|
- Double ratioPrice = NumberUtil.mul(query.getConsignPrice(), ratio);
|
|
|
- Double obtainPrice = NumberUtil.add(query.getConsignPrice(), ratioPrice);
|
|
|
- log.info("寄售订单数据金额 ratioPrice:" + ratioPrice);
|
|
|
- log.info("寄售订单数据金额 obtainPrice:" + obtainPrice);
|
|
|
+ Double consignPrice = ConsignWrapper.build().consignPrice(query.getConsignPrice(), query.getConsignDays());
|
|
|
consign.setObtainPrice(query.getConsignPrice()); //取得价为抢购别人的价格
|
|
|
- consign.setConsignPrice(obtainPrice);//抢购价
|
|
|
+ consign.setConsignPrice(consignPrice);//抢购价
|
|
|
consign.setStartTime(startDate);
|
|
|
consign.setEndTime(endDate);
|
|
|
consign.setSaleDays(0);
|
|
|
- log.info("寄售订单数据金额 consign:" + consign);
|
|
|
int j = consignMapper.insert(consign);
|
|
|
if(j != 1){
|
|
|
logger.error("订单异常", "订单变为寄售失败!订单号:" + outTradeNo);
|
|
|
- throw new ServiceException("订单变为寄售失败");
|
|
|
+ throw new ServiceException("亲!请重新抢单");
|
|
|
}
|
|
|
//更新寄售状态为已售出
|
|
|
if(queryConsign.getNowStock() == 0){
|
|
|
Consign updateConsign = new Consign();
|
|
|
updateConsign.setId(query.getConsignId());
|
|
|
updateConsign.setConsignState(3);//已售出
|
|
|
- updateConsign.setPremiumPrice(obtainPrice);//溢售价 抢购人的取得价
|
|
|
int k = consignMapper.updateById(updateConsign);
|
|
|
if(k != 1){
|
|
|
logger.error("订单异常", "更新寄售状态!订单号:" + outTradeNo);
|
|
|
- throw new ServiceException("更新寄售状态失败");
|
|
|
+ throw new ServiceException("亲!请重新抢单");
|
|
|
}
|
|
|
}
|
|
|
}
|