|
@@ -11,13 +11,16 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
+import com.sqx.common.constant.RedisKey;
|
|
|
import com.sqx.common.exception.SqxException;
|
|
import com.sqx.common.exception.SqxException;
|
|
|
import com.sqx.common.sms.SmsSendResult;
|
|
import com.sqx.common.sms.SmsSendResult;
|
|
|
import com.sqx.common.utils.Constant;
|
|
import com.sqx.common.utils.Constant;
|
|
|
import com.sqx.common.utils.DateUtils;
|
|
import com.sqx.common.utils.DateUtils;
|
|
|
import com.sqx.common.utils.DistanceUtil;
|
|
import com.sqx.common.utils.DistanceUtil;
|
|
|
|
|
+import com.sqx.common.utils.MyGlobalThreadPool;
|
|
|
import com.sqx.common.utils.PageUtils;
|
|
import com.sqx.common.utils.PageUtils;
|
|
|
import com.sqx.common.utils.Result;
|
|
import com.sqx.common.utils.Result;
|
|
|
|
|
+import com.sqx.modules.activity.entity.ActivityPartRecord;
|
|
|
import com.sqx.modules.activity.service.ActivityPartRecordService;
|
|
import com.sqx.modules.activity.service.ActivityPartRecordService;
|
|
|
import com.sqx.modules.activity.service.ActivityService;
|
|
import com.sqx.modules.activity.service.ActivityService;
|
|
|
import com.sqx.modules.activity.vo.OrderSuitActivityVO;
|
|
import com.sqx.modules.activity.vo.OrderSuitActivityVO;
|
|
@@ -77,13 +80,18 @@ import com.sqx.modules.utils.fieYun.FeiYunUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.apache.shiro.SecurityUtils;
|
|
import org.apache.shiro.SecurityUtils;
|
|
|
|
|
+import org.redisson.api.RLock;
|
|
|
|
|
+import org.redisson.api.RedissonClient;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
import org.springframework.context.annotation.Lazy;
|
|
|
-import org.springframework.scheduling.annotation.Scheduled;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
+import org.springframework.transaction.PlatformTransactionManager;
|
|
|
|
|
+import org.springframework.transaction.TransactionStatus;
|
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
+import org.springframework.transaction.support.DefaultTransactionDefinition;
|
|
|
|
|
|
|
|
|
|
+import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
import java.text.ParseException;
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
@@ -96,7 +104,6 @@ import java.util.Calendar;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
-import java.util.concurrent.locks.ReentrantReadWriteLock;
|
|
|
|
|
|
|
|
|
|
@Service
|
|
@Service
|
|
|
@Slf4j
|
|
@Slf4j
|
|
@@ -160,21 +167,106 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
private TbIndentSmsSendLogService smsSendLogService;
|
|
private TbIndentSmsSendLogService smsSendLogService;
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private TbIndentSmsTemplateService smsTemplateService;
|
|
private TbIndentSmsTemplateService smsTemplateService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private PlatformTransactionManager transactionManager;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private RedissonClient redissonClient;
|
|
|
|
|
|
|
|
- private ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true);
|
|
|
|
|
|
|
+ private static final DateTimeFormatter DTF = DateTimeFormatter.ofPattern(DateUtils.TIME_PATTERN1);
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public Result insertOrder(Long userId, Long shopId, Long goodsId, Integer num, Long skuId, String skuMessage, Integer orderType) {
|
|
|
|
|
- reentrantReadWriteLock.writeLock().lock();
|
|
|
|
|
|
|
+ public void insertOrder(Long userId, Long shopId, Long goodsId, Integer num, Long skuId, String skuMessage, Integer orderType) {
|
|
|
|
|
+ // 判断当前时间是否在店铺营业范围内
|
|
|
|
|
+ if (!isShopBusinessTime(shopId)) {
|
|
|
|
|
+ throw new SqxException("店铺已打烊!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //先判断该商品的库存是否足够
|
|
|
|
|
+ GoodsShopRelevancy goodsShopRelevancy = goodsShopRelevancyDao.selectOne(new QueryWrapper<GoodsShopRelevancy>().eq("shop_id", shopId).eq("goods_id", goodsId));
|
|
|
|
|
+ if (goodsShopRelevancy.getInventory() < num) {
|
|
|
|
|
+ throw new SqxException("该商品库存不足!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ RLock lock = redissonClient.getLock(String.format(RedisKey.INSERT_ORDER_LOCK, userId, shopId));
|
|
|
|
|
+ lock.lock();
|
|
|
try {
|
|
try {
|
|
|
- return addOrder(userId, shopId, goodsId, num, skuId, skuMessage, orderType);
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- log.error("下单异常:" + e.getMessage(), e);
|
|
|
|
|
|
|
+ TbOrder order = appOrderDao.selectOne(new QueryWrapper<TbOrder>().eq("user_id", userId).eq("shop_id", shopId).eq("status", 1));
|
|
|
|
|
+ Goods goods = goodsDao.selectById(goodsId);
|
|
|
|
|
+ String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
|
|
|
|
|
+
|
|
|
|
|
+ // 开启编程式事务
|
|
|
|
|
+ TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
|
|
|
|
|
+ if (order == null) {
|
|
|
|
|
+ UserEntity userEntity = userDao.selectById(userId);
|
|
|
|
|
+ TbOrder tbOrder = new TbOrder();
|
|
|
|
|
+ tbOrder.setUserId(userId);
|
|
|
|
|
+ tbOrder.setUserName(userEntity.getUserName());
|
|
|
|
|
+ tbOrder.setPhone(userEntity.getPhone());
|
|
|
|
|
+ tbOrder.setOrderNumber(getGeneralOrder());
|
|
|
|
|
+ tbOrder.setIsPay(0);
|
|
|
|
|
+ tbOrder.setDeleteFlag(0);
|
|
|
|
|
+ tbOrder.setStatus(1);
|
|
|
|
|
+ tbOrder.setShopId(shopId);
|
|
|
|
|
+ //创建订单,订单发起人就是该登录用户
|
|
|
|
|
+ tbOrder.setParentUserId(userId);
|
|
|
|
|
+ tbOrder.setCreateTime(format);
|
|
|
|
|
+ tbOrder.setAddGoodsTime(format);
|
|
|
|
|
+ appOrderDao.insertOrder(tbOrder);
|
|
|
|
|
+
|
|
|
|
|
+ TbOrder tbOrder1 = new TbOrder();
|
|
|
|
|
+ tbOrder1.setOrderId(tbOrder.getOrderId());
|
|
|
|
|
+ tbOrder1.setParentId(tbOrder.getOrderId());
|
|
|
|
|
+ appOrderDao.updateById(tbOrder1);
|
|
|
|
|
+ //添加订单-商品表
|
|
|
|
|
+ Long orderId = tbOrder.getOrderId();
|
|
|
|
|
+ OrderGoods orderGoods = new OrderGoods();
|
|
|
|
|
+ orderGoods.setOrderId(orderId);
|
|
|
|
|
+ orderGoods.setGoodsName(goods.getGoodsName());
|
|
|
|
|
+ orderGoods.setSkuId(skuId);
|
|
|
|
|
+ GoodsSku goodsSku = goodsSkuDao.selectById(skuId);
|
|
|
|
|
+ orderGoods.setGoodsPrice(goodsSku.getSkuPrice());
|
|
|
|
|
+ orderGoods.setSkuMessage(skuMessage);
|
|
|
|
|
+ orderGoods.setGoodsNum(num);
|
|
|
|
|
+ orderGoods.setGoodsPack(goods.getPackMoney());
|
|
|
|
|
+ orderGoods.setGoodsPicture(goods.getGoodsCover());
|
|
|
|
|
+ orderGoods.setGoodsId(goods.getGoodsId());
|
|
|
|
|
+ orderGoods.setUserId(userId);
|
|
|
|
|
+ orderGoodsDao.insert(orderGoods);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ //添加订单-商品表
|
|
|
|
|
+ Long orderId = order.getOrderId();
|
|
|
|
|
+ OrderGoods orderGoods = orderGoodsDao.selectOne(new QueryWrapper<OrderGoods>().eq("order_id", orderId).eq("goods_id", goods.getGoodsId()).eq("sku_id", skuId).eq("user_id", userId));
|
|
|
|
|
+ if (orderGoods != null) {
|
|
|
|
|
+ orderGoods.setGoodsNum(orderGoods.getGoodsNum() + 1);
|
|
|
|
|
+ orderGoodsDao.updateById(orderGoods);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ orderGoods = new OrderGoods();
|
|
|
|
|
+ orderGoods.setOrderId(orderId);
|
|
|
|
|
+ orderGoods.setGoodsName(goods.getGoodsName());
|
|
|
|
|
+ orderGoods.setSkuId(skuId);
|
|
|
|
|
+ GoodsSku goodsSku = goodsSkuDao.selectById(skuId);
|
|
|
|
|
+ orderGoods.setGoodsPrice(goodsSku.getSkuPrice());
|
|
|
|
|
+ orderGoods.setSkuMessage(skuMessage);
|
|
|
|
|
+ orderGoods.setGoodsNum(num);
|
|
|
|
|
+ orderGoods.setGoodsPack(goods.getPackMoney());
|
|
|
|
|
+ orderGoods.setGoodsPicture(goods.getGoodsCover());
|
|
|
|
|
+ orderGoods.setGoodsId(goods.getGoodsId());
|
|
|
|
|
+ orderGoods.setUserId(userId);
|
|
|
|
|
+ orderGoodsDao.insert(orderGoods);
|
|
|
|
|
+ }
|
|
|
|
|
+ //修改订单表最后一次添加商品的时间
|
|
|
|
|
+ TbOrder tbOrder1 = new TbOrder();
|
|
|
|
|
+ tbOrder1.setOrderId(orderId);
|
|
|
|
|
+ tbOrder1.setAddGoodsTime(format);
|
|
|
|
|
+ appOrderDao.updateById(tbOrder1);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 在锁中提交事务
|
|
|
|
|
+ transactionManager.commit(status);
|
|
|
} finally {
|
|
} finally {
|
|
|
- reentrantReadWriteLock.writeLock().unlock();
|
|
|
|
|
|
|
+ lock.unlock();
|
|
|
}
|
|
}
|
|
|
- return Result.error("系统繁忙,请稍后再试!");
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -200,91 +292,6 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
return now.isAfter(LocalTime.parse(businessHours)) && now.isBefore(LocalTime.parse(lockHours));
|
|
return now.isAfter(LocalTime.parse(businessHours)) && now.isBefore(LocalTime.parse(lockHours));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- @Transactional
|
|
|
|
|
- public Result addOrder(Long userId, Long shopId, Long goodsId, Integer num, Long skuId, String skuMessage, Integer orderType) {
|
|
|
|
|
- // 判断当前时间是否在店铺营业范围内
|
|
|
|
|
- if (!isShopBusinessTime(shopId)) {
|
|
|
|
|
- return Result.error("店铺已打烊!");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- //先判断该商品的库存是否足够
|
|
|
|
|
- GoodsShopRelevancy goodsShopRelevancy = goodsShopRelevancyDao.selectOne(new QueryWrapper<GoodsShopRelevancy>().eq("shop_id", shopId).eq("goods_id", goodsId));
|
|
|
|
|
- if (goodsShopRelevancy.getInventory() < num) {
|
|
|
|
|
- return Result.error("该商品库存不足!");
|
|
|
|
|
- }
|
|
|
|
|
- TbOrder order = new TbOrder();
|
|
|
|
|
- order = appOrderDao.selectOne(new QueryWrapper<TbOrder>()
|
|
|
|
|
- .eq("user_id", userId).eq("shop_id", shopId).eq("status", 1));
|
|
|
|
|
- Goods goods = goodsDao.selectById(goodsId);
|
|
|
|
|
- UserEntity userEntity = userDao.selectById(userId);
|
|
|
|
|
- TbOrder tbOrder = new TbOrder();
|
|
|
|
|
- String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
|
|
|
|
|
- if (order == null) {
|
|
|
|
|
- tbOrder.setUserId(userId);
|
|
|
|
|
- tbOrder.setUserName(userEntity.getUserName());
|
|
|
|
|
- tbOrder.setPhone(userEntity.getPhone());
|
|
|
|
|
- tbOrder.setOrderNumber(getGeneralOrder());
|
|
|
|
|
- tbOrder.setIsPay(0);
|
|
|
|
|
- tbOrder.setDeleteFlag(0);
|
|
|
|
|
- tbOrder.setStatus(1);
|
|
|
|
|
- tbOrder.setShopId(shopId);
|
|
|
|
|
- //创建订单,订单发起人就是该登录用户
|
|
|
|
|
- tbOrder.setParentUserId(userId);
|
|
|
|
|
- tbOrder.setCreateTime(format);
|
|
|
|
|
- tbOrder.setAddGoodsTime(format);
|
|
|
|
|
- appOrderDao.insertOrder(tbOrder);
|
|
|
|
|
-
|
|
|
|
|
- TbOrder tbOrder1 = new TbOrder();
|
|
|
|
|
- tbOrder1.setOrderId(tbOrder.getOrderId());
|
|
|
|
|
- tbOrder1.setParentId(tbOrder.getOrderId());
|
|
|
|
|
- appOrderDao.updateById(tbOrder1);
|
|
|
|
|
- //添加订单-商品表
|
|
|
|
|
- Long orderId = tbOrder.getOrderId();
|
|
|
|
|
- OrderGoods orderGoods = new OrderGoods();
|
|
|
|
|
- orderGoods.setOrderId(orderId);
|
|
|
|
|
- orderGoods.setGoodsName(goods.getGoodsName());
|
|
|
|
|
- orderGoods.setSkuId(skuId);
|
|
|
|
|
- GoodsSku goodsSku = goodsSkuDao.selectById(skuId);
|
|
|
|
|
- orderGoods.setGoodsPrice(goodsSku.getSkuPrice());
|
|
|
|
|
- orderGoods.setSkuMessage(skuMessage);
|
|
|
|
|
- orderGoods.setGoodsNum(num);
|
|
|
|
|
- orderGoods.setGoodsPack(goods.getPackMoney());
|
|
|
|
|
- orderGoods.setGoodsPicture(goods.getGoodsCover());
|
|
|
|
|
- orderGoods.setGoodsId(goods.getGoodsId());
|
|
|
|
|
- orderGoods.setUserId(userId);
|
|
|
|
|
- orderGoodsDao.insert(orderGoods);
|
|
|
|
|
- } else {
|
|
|
|
|
- //添加订单-商品表
|
|
|
|
|
- Long orderId = order.getOrderId();
|
|
|
|
|
- OrderGoods orderGoods = orderGoodsDao.selectOne(new QueryWrapper<OrderGoods>().eq("order_id", orderId).eq("goods_id", goods.getGoodsId()).eq("sku_id", skuId).eq("user_id", userId));
|
|
|
|
|
- if (orderGoods != null) {
|
|
|
|
|
- orderGoods.setGoodsNum(orderGoods.getGoodsNum() + 1);
|
|
|
|
|
- orderGoodsDao.updateById(orderGoods);
|
|
|
|
|
- } else {
|
|
|
|
|
- orderGoods = new OrderGoods();
|
|
|
|
|
- orderGoods.setOrderId(orderId);
|
|
|
|
|
- orderGoods.setGoodsName(goods.getGoodsName());
|
|
|
|
|
- orderGoods.setSkuId(skuId);
|
|
|
|
|
- GoodsSku goodsSku = goodsSkuDao.selectById(skuId);
|
|
|
|
|
- orderGoods.setGoodsPrice(goodsSku.getSkuPrice());
|
|
|
|
|
- orderGoods.setSkuMessage(skuMessage);
|
|
|
|
|
- orderGoods.setGoodsNum(num);
|
|
|
|
|
- orderGoods.setGoodsPack(goods.getPackMoney());
|
|
|
|
|
- orderGoods.setGoodsPicture(goods.getGoodsCover());
|
|
|
|
|
- orderGoods.setGoodsId(goods.getGoodsId());
|
|
|
|
|
- orderGoods.setUserId(userId);
|
|
|
|
|
- orderGoodsDao.insert(orderGoods);
|
|
|
|
|
- }
|
|
|
|
|
- //修改订单表最后一次添加商品的时间
|
|
|
|
|
- TbOrder tbOrder1 = new TbOrder();
|
|
|
|
|
- tbOrder1.setOrderId(orderId);
|
|
|
|
|
- tbOrder1.setAddGoodsTime(format);
|
|
|
|
|
- appOrderDao.updateById(tbOrder1);
|
|
|
|
|
- }
|
|
|
|
|
- return Result.success();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public Result shareTheBill(Long userId, Long shopId) {
|
|
public Result shareTheBill(Long userId, Long shopId) {
|
|
|
// 判断当前时间是否在店铺营业范围内
|
|
// 判断当前时间是否在店铺营业范围内
|
|
@@ -368,8 +375,6 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
pages = new Page<>();
|
|
pages = new Page<>();
|
|
|
}
|
|
}
|
|
|
return evaluateDao.getEvaluateList(pages, evaluate);
|
|
return evaluateDao.getEvaluateList(pages, evaluate);
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -392,6 +397,10 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
throw new SqxException("无效的订单id");
|
|
throw new SqxException("无效的订单id");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if (parentOrder.getIsPay() == 1) {
|
|
|
|
|
+ throw new SqxException("当前订单已支付,请勿重复支付!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 获取店铺信息
|
|
// 获取店铺信息
|
|
|
// 注意:调用shopMessageService获取店铺信息,这个service对店铺的抽成比例有特殊处理(历史代码就是如此/(ㄒoㄒ)/~~)
|
|
// 注意:调用shopMessageService获取店铺信息,这个service对店铺的抽成比例有特殊处理(历史代码就是如此/(ㄒoㄒ)/~~)
|
|
|
GoodsShop goodsShop = shopMessageService.selectShopId(parentOrder.getShopId());
|
|
GoodsShop goodsShop = shopMessageService.selectShopId(parentOrder.getShopId());
|
|
@@ -423,8 +432,6 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
return parentOrder;
|
|
return parentOrder;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private static final DateTimeFormatter DTF = DateTimeFormatter.ofPattern(DateUtils.TIME_PATTERN1);
|
|
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
* 校验订单类型
|
|
* 校验订单类型
|
|
|
*/
|
|
*/
|
|
@@ -550,14 +557,22 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
order.setPayTime(currentTimeStr);
|
|
order.setPayTime(currentTimeStr);
|
|
|
|
|
|
|
|
// 店铺信息
|
|
// 店铺信息
|
|
|
- GoodsShop goodsShop = goodsShopDao.selectById(order.getShopId());
|
|
|
|
|
|
|
+ GoodsShop goodsShop = shopMessageService.getShopInfoById(order.getShopId());
|
|
|
|
|
+
|
|
|
// 小程序推送设置
|
|
// 小程序推送设置
|
|
|
CommonInfo mpPushConfig = commonInfoService.findOne(269);
|
|
CommonInfo mpPushConfig = commonInfoService.findOne(269);
|
|
|
|
|
+
|
|
|
// 用户信息
|
|
// 用户信息
|
|
|
UserEntity userEntity = userDao.selectById(order.getUserId());
|
|
UserEntity userEntity = userDao.selectById(order.getUserId());
|
|
|
|
|
|
|
|
// 添加消息记录并且进行推送
|
|
// 添加消息记录并且进行推送
|
|
|
- addOrderMessageAndPush(order, goodsShop, mpPushConfig, userEntity);
|
|
|
|
|
|
|
+ MyGlobalThreadPool.execute(() -> {
|
|
|
|
|
+ try {
|
|
|
|
|
+ addOrderMessageAndPush(order, goodsShop, mpPushConfig, userEntity);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("订单:{},订单支付成功通知发送失败,失败原因:{}", e);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
// 是否自动接单
|
|
// 是否自动接单
|
|
|
boolean autoAccept = goodsShop.getAutoAcceptOrder() != null && goodsShop.getAutoAcceptOrder() == 0;
|
|
boolean autoAccept = goodsShop.getAutoAcceptOrder() != null && goodsShop.getAutoAcceptOrder() == 0;
|
|
@@ -574,6 +589,9 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
order.setStatus(7);
|
|
order.setStatus(7);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 计算订单顺序号
|
|
|
|
|
+ order.setOrderSequence(String.format("%04d", selectCurrentOrderSequenceByShopId(order, order.getShopId())));
|
|
|
|
|
+
|
|
|
// 更新订单状态
|
|
// 更新订单状态
|
|
|
updateById(order);
|
|
updateById(order);
|
|
|
|
|
|
|
@@ -592,25 +610,34 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
tbIndentService.insertIndent(order);
|
|
tbIndentService.insertIndent(order);
|
|
|
|
|
|
|
|
// 发送商家接单通知
|
|
// 发送商家接单通知
|
|
|
- sendOrderAcceptMessage(order, goodsShop, mpPushConfig, userEntity);
|
|
|
|
|
|
|
+ MyGlobalThreadPool.execute(() -> {
|
|
|
|
|
+ try {
|
|
|
|
|
+ sendOrderAcceptMessage(order, goodsShop, mpPushConfig, userEntity);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("订单:{},商家接单通知发送失败,失败原因:{}", e);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 订单已接单或者当前订单为预约订单时打印小票
|
|
// 订单已接单或者当前订单为预约订单时打印小票
|
|
|
if (order.getStatus() == 6 || reservationFlag) {
|
|
if (order.getStatus() == 6 || reservationFlag) {
|
|
|
// 打印小票
|
|
// 打印小票
|
|
|
if (StringUtils.isNotEmpty(goodsShop.getSnCode())) {
|
|
if (StringUtils.isNotEmpty(goodsShop.getSnCode())) {
|
|
|
- // 查询当天店铺所有已支付的订单号,按支付时间排序
|
|
|
|
|
- int sequence = selectCurrentOrderSequenceByShopId(order, goodsShop.getShopId());
|
|
|
|
|
- order.setCountOrder(sequence);
|
|
|
|
|
-
|
|
|
|
|
- // 设置订单商品
|
|
|
|
|
- List<OrderGoods> orderGoodsList = orderGoodsDao.selectList(new QueryWrapper<OrderGoods>().eq("order_id", order.getOrderId()));
|
|
|
|
|
- order.setOrderGoodsList(orderGoodsList);
|
|
|
|
|
-
|
|
|
|
|
- // 设置店铺名称
|
|
|
|
|
- order.setShopName(goodsShop.getShopName());
|
|
|
|
|
-
|
|
|
|
|
- FeiYunUtils.print(goodsShop.getSnCode(), null, order);
|
|
|
|
|
|
|
+ MyGlobalThreadPool.execute(() -> {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 设置订单商品
|
|
|
|
|
+ List<OrderGoods> orderGoodsList = orderGoodsDao.selectList(new QueryWrapper<OrderGoods>().eq("order_id", order.getOrderId()));
|
|
|
|
|
+ order.setOrderGoodsList(orderGoodsList);
|
|
|
|
|
+
|
|
|
|
|
+ // 设置店铺名称
|
|
|
|
|
+ order.setShopName(goodsShop.getShopName());
|
|
|
|
|
+
|
|
|
|
|
+ FeiYunUtils.print(goodsShop.getSnCode(), null, order);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("订单:{},小票打印失败,失败原因:{}", e);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -800,7 +827,9 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
userMsgList.add(goodsShop.getShopName());
|
|
userMsgList.add(goodsShop.getShopName());
|
|
|
userMsgList.add(currentDateStr);
|
|
userMsgList.add(currentDateStr);
|
|
|
SenInfoCheckUtil.sendMsg(userEntity.getOpenId(), mpPushConfig.getValue(), userMsgList,1);
|
|
SenInfoCheckUtil.sendMsg(userEntity.getOpenId(), mpPushConfig.getValue(), userMsgList,1);
|
|
|
- userService.pushToSingle("下单成功", "亲爱的用户您好,您已下单成功,请等待商家接单!", userEntity.getClientid());
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 无个推
|
|
|
|
|
+ // userService.pushToSingle("下单成功", "亲爱的用户您好,您已下单成功,请等待商家接单!", userEntity.getClientid());
|
|
|
|
|
|
|
|
// 商户端消息推送
|
|
// 商户端消息推送
|
|
|
List<String> shopMsgShopList=new ArrayList<>();
|
|
List<String> shopMsgShopList=new ArrayList<>();
|
|
@@ -1234,10 +1263,11 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public Result selectAllOrderAdmin(Integer page, Integer limit, Integer status, String phone, Long shopId, String userName,
|
|
public Result selectAllOrderAdmin(Integer page, Integer limit, Integer status, String phone, Long shopId, String userName,
|
|
|
- String orderNumber, Integer orderType, String shopName, String riderPhone,String startTime,String endTime) {
|
|
|
|
|
|
|
+ String orderNumber, Integer orderType, String shopName, String riderPhone, String indentStatus,
|
|
|
|
|
+ String reservationFlag, String startTime, String endTime, String payStartTime, String payEndTime) {
|
|
|
Page<TbOrder> pages = new Page<>(page, limit);
|
|
Page<TbOrder> pages = new Page<>(page, limit);
|
|
|
IPage<TbOrder> tbOrderIPage = appOrderDao.selectAllOrderAdmin(pages, status, phone, shopId, userName, orderNumber,
|
|
IPage<TbOrder> tbOrderIPage = appOrderDao.selectAllOrderAdmin(pages, status, phone, shopId, userName, orderNumber,
|
|
|
- orderType, shopName, riderPhone,startTime,endTime);
|
|
|
|
|
|
|
+ orderType, shopName, riderPhone, indentStatus, reservationFlag, startTime,endTime, payStartTime, payEndTime);
|
|
|
for (int i = 0; i < tbOrderIPage.getRecords().size(); i++) {
|
|
for (int i = 0; i < tbOrderIPage.getRecords().size(); i++) {
|
|
|
List<OrderGoods> orderGoodsList = orderGoodsDao.selectList(new QueryWrapper<OrderGoods>()
|
|
List<OrderGoods> orderGoodsList = orderGoodsDao.selectList(new QueryWrapper<OrderGoods>()
|
|
|
.eq("order_id", tbOrderIPage.getRecords().get(i).getOrderId()));
|
|
.eq("order_id", tbOrderIPage.getRecords().get(i).getOrderId()));
|
|
@@ -1264,7 +1294,10 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
titles.add("编号");titles.add("下单用户");titles.add("用户头像");titles.add("手机号");
|
|
titles.add("编号");titles.add("下单用户");titles.add("用户头像");titles.add("手机号");
|
|
|
titles.add("商铺信息"); titles.add("订单类型");titles.add("配送信息");titles.add("骑手昵称");
|
|
titles.add("商铺信息"); titles.add("订单类型");titles.add("配送信息");titles.add("骑手昵称");
|
|
|
titles.add("骑手电话"); titles.add("订单号");titles.add("内容");titles.add("商品总价(元)");
|
|
titles.add("骑手电话"); titles.add("订单号");titles.add("内容");titles.add("商品总价(元)");
|
|
|
- titles.add("优惠金额(元)"); titles.add("打包费(元/个 具体按照数量计算)");titles.add("跑腿费(元)");titles.add("支付金额(元)");
|
|
|
|
|
|
|
+ titles.add("优惠金额(元)");
|
|
|
|
|
+ titles.add("参与活动名称");
|
|
|
|
|
+ titles.add("活动优惠金额(元)");
|
|
|
|
|
+ titles.add("打包费(元/个 具体按照数量计算)");titles.add("跑腿费(元)");titles.add("支付金额(元)");
|
|
|
titles.add("跑腿费说明"); titles.add("订单备注");titles.add("支付时间");titles.add("支付方式");
|
|
titles.add("跑腿费说明"); titles.add("订单备注");titles.add("支付时间");titles.add("支付方式");
|
|
|
titles.add("取餐号"); titles.add("状态");titles.add("是否转单");
|
|
titles.add("取餐号"); titles.add("状态");titles.add("是否转单");
|
|
|
|
|
|
|
@@ -1314,6 +1347,8 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
row.add(stringBuffer.toString());
|
|
row.add(stringBuffer.toString());
|
|
|
row.add(sumGoodsPrice);
|
|
row.add(sumGoodsPrice);
|
|
|
row.add(order.getCouponMoney());
|
|
row.add(order.getCouponMoney());
|
|
|
|
|
+ row.add(order.getActivityTitle());
|
|
|
|
|
+ row.add(order.getActivityDiscountAmount());
|
|
|
row.add(order.getPackMoney());
|
|
row.add(order.getPackMoney());
|
|
|
row.add(order.getErrandMoney());
|
|
row.add(order.getErrandMoney());
|
|
|
row.add(order.getPayMoney());
|
|
row.add(order.getPayMoney());
|
|
@@ -1448,10 +1483,7 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
@Transactional
|
|
@Transactional
|
|
|
@Override
|
|
@Override
|
|
|
public Result updateGoodsNum(Long orderGoodsId, Integer type, Integer num, Long shopId) {
|
|
public Result updateGoodsNum(Long orderGoodsId, Integer type, Integer num, Long shopId) {
|
|
|
- /*reentrantReadWriteLock.writeLock().lock();
|
|
|
|
|
- try{*/
|
|
|
|
|
- //type = 1增加商品数 = 2 减少商品数
|
|
|
|
|
-
|
|
|
|
|
|
|
+ // type = 1增加商品数 = 2 减少商品数
|
|
|
OrderGoods orderGoods = orderGoodsDao.selectById(orderGoodsId);
|
|
OrderGoods orderGoods = orderGoodsDao.selectById(orderGoodsId);
|
|
|
if(orderGoods==null){
|
|
if(orderGoods==null){
|
|
|
return Result.error("系统繁忙,请稍后再试!");
|
|
return Result.error("系统繁忙,请稍后再试!");
|
|
@@ -1478,12 +1510,6 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
orderGoodsDao.updateById(orderGoods2);
|
|
orderGoodsDao.updateById(orderGoods2);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- /*}catch (Exception e){
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- log.error("减少购物车商品出错:"+e.getMessage(),e);
|
|
|
|
|
- }finally {
|
|
|
|
|
- reentrantReadWriteLock.writeLock().unlock();
|
|
|
|
|
- }*/
|
|
|
|
|
return Result.success();
|
|
return Result.success();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1520,10 +1546,6 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
// 查询店铺信息
|
|
// 查询店铺信息
|
|
|
GoodsShop goodsShop = goodsShopDao.selectById(shopId);
|
|
GoodsShop goodsShop = goodsShopDao.selectById(shopId);
|
|
|
|
|
|
|
|
- // 查询当天店铺所有已支付的订单号,按支付时间排序
|
|
|
|
|
- int sequence = selectCurrentOrderSequenceByShopId(tbOrder, shopId);
|
|
|
|
|
- tbOrder.setCountOrder(sequence);
|
|
|
|
|
-
|
|
|
|
|
if (StringUtils.isNotEmpty(goodsShop.getSnCode())) {
|
|
if (StringUtils.isNotEmpty(goodsShop.getSnCode())) {
|
|
|
FeiYunUtils.print(goodsShop.getSnCode(), null, tbOrder);
|
|
FeiYunUtils.print(goodsShop.getSnCode(), null, tbOrder);
|
|
|
} else {
|
|
} else {
|
|
@@ -1532,26 +1554,6 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
return Result.success();
|
|
return Result.success();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * 获取当前店铺当前订单在已支付订单中的序号
|
|
|
|
|
- * @param order 订单信息
|
|
|
|
|
- * @param shopId 店铺id
|
|
|
|
|
- * @return
|
|
|
|
|
- */
|
|
|
|
|
- private int selectCurrentOrderSequenceByShopId(TbOrder order, Long shopId) {
|
|
|
|
|
- if (Integer.valueOf(Constant.YES).equals(order.getIsPay())) {
|
|
|
|
|
- List<Long> orderIds = appOrderDao.selectCurrentOrderSequenceByShopId(shopId, order.getPayTime());
|
|
|
|
|
-
|
|
|
|
|
- int index = orderIds.indexOf(order.getOrderId());
|
|
|
|
|
-
|
|
|
|
|
- if (index != -1) {
|
|
|
|
|
- return index + 1;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return -1;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
@Transactional
|
|
@Transactional
|
|
|
public Result updateOrders(TbOrder order) {
|
|
public Result updateOrders(TbOrder order) {
|
|
|
String format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
|
|
String format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
|
|
@@ -1561,6 +1563,10 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
return Result.success();
|
|
return Result.success();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if (tbOrder.getStatus() != 7) {
|
|
|
|
|
+ throw new SqxException("订单状态异常,请刷新页面后重试!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
String reservationFlag = tbOrder.getReservationFlag();
|
|
String reservationFlag = tbOrder.getReservationFlag();
|
|
|
if (StrUtil.equals(reservationFlag, Constant.YES)) {
|
|
if (StrUtil.equals(reservationFlag, Constant.YES)) {
|
|
|
Date now = new Date();
|
|
Date now = new Date();
|
|
@@ -1613,8 +1619,6 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
// 如果是预约订单,则不再打印小票(订单支付的时候已经打印过了)
|
|
// 如果是预约订单,则不再打印小票(订单支付的时候已经打印过了)
|
|
|
if (!StrUtil.equals(tbOrder.getReservationFlag(), Constant.YES)) {
|
|
if (!StrUtil.equals(tbOrder.getReservationFlag(), Constant.YES)) {
|
|
|
if (StringUtils.isNotEmpty(goodsShop.getSnCode())) {
|
|
if (StringUtils.isNotEmpty(goodsShop.getSnCode())) {
|
|
|
- int sequence = selectCurrentOrderSequenceByShopId(tbOrder, shopId);
|
|
|
|
|
- tbOrder.setCountOrder(sequence);
|
|
|
|
|
FeiYunUtils.print(goodsShop.getSnCode(), null, tbOrder);
|
|
FeiYunUtils.print(goodsShop.getSnCode(), null, tbOrder);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -1785,28 +1789,24 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public Result updateOrder(TbOrder order) {
|
|
public Result updateOrder(TbOrder order) {
|
|
|
- reentrantReadWriteLock.writeLock().lock();
|
|
|
|
|
|
|
+ RLock lock = redissonClient.getLock(String.format(RedisKey.UPDATE_ORDER_LOCK, order.getOrderId()));
|
|
|
|
|
+ lock.lock();
|
|
|
try {
|
|
try {
|
|
|
return updateOrders(order);
|
|
return updateOrders(order);
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- throw e;
|
|
|
|
|
} finally {
|
|
} finally {
|
|
|
- reentrantReadWriteLock.writeLock().unlock();
|
|
|
|
|
|
|
+ lock.unlock();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public Result accomplishOrder(Long orderId) {
|
|
public Result accomplishOrder(Long orderId) {
|
|
|
- reentrantReadWriteLock.writeLock().lock();
|
|
|
|
|
|
|
+ RLock lock = redissonClient.getLock(String.format(RedisKey.FINISH_ORDER_LOCK, orderId));
|
|
|
|
|
+ lock.lock();
|
|
|
try {
|
|
try {
|
|
|
return accomplishOrders(orderId,1);
|
|
return accomplishOrders(orderId,1);
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- log.error("完成订单异常:" + e.getMessage(), e);
|
|
|
|
|
} finally {
|
|
} finally {
|
|
|
- reentrantReadWriteLock.writeLock().unlock();
|
|
|
|
|
|
|
+ lock.unlock();
|
|
|
}
|
|
}
|
|
|
- return Result.error("系统繁忙,请稍后再试!");
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -1908,6 +1908,14 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
if (shopIds != -1 && shopIds != 0) {
|
|
if (shopIds != -1 && shopIds != 0) {
|
|
|
shopMoney = shopMoney.subtract(couponMoney);
|
|
shopMoney = shopMoney.subtract(couponMoney);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 判断订单是否参与活动,如果参与活动,则优惠金额由商家承担
|
|
|
|
|
+ ActivityPartRecord activityPartRecord = activityPartRecordService.getByOrderId(tbOrder.getOrderId());
|
|
|
|
|
+ BigDecimal activityDiscountAmount = BigDecimal.ZERO;
|
|
|
|
|
+ if (ObjectUtil.isNotNull(activityPartRecord)) {
|
|
|
|
|
+ activityDiscountAmount = activityPartRecord.getDiscountAmount();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if(tbOrder.getAutoSendOrder()!=null && tbOrder.getAutoSendOrder()==1){
|
|
if(tbOrder.getAutoSendOrder()!=null && tbOrder.getAutoSendOrder()==1){
|
|
|
//如果达到商家满减 则商家不加上配送费
|
|
//如果达到商家满减 则商家不加上配送费
|
|
|
if(!"本单已达到商家满减金额,跑腿费由商家承担".equals(tbOrder.getErrandMoneyIsShop())){
|
|
if(!"本单已达到商家满减金额,跑腿费由商家承担".equals(tbOrder.getErrandMoneyIsShop())){
|
|
@@ -1928,36 +1936,37 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
userMoneyDetails1.setShopId(goodsShop.getShopId());
|
|
userMoneyDetails1.setShopId(goodsShop.getShopId());
|
|
|
userMoneyDetails1.setTitle("商户订单收入,订单号:" + tbOrder.getOrderNumber());
|
|
userMoneyDetails1.setTitle("商户订单收入,订单号:" + tbOrder.getOrderNumber());
|
|
|
// userMoneyDetails1.setContent("商户本单收入金额:" + shopMoney + "元");
|
|
// userMoneyDetails1.setContent("商户本单收入金额:" + shopMoney + "元");
|
|
|
|
|
+
|
|
|
|
|
+ StringBuffer contentBuffer = new StringBuffer();
|
|
|
|
|
+ // 订单金额
|
|
|
|
|
+ BigDecimal orderAmount = tbOrder.getPayMoney().add(couponMoney).add(activityDiscountAmount);
|
|
|
|
|
+
|
|
|
|
|
+ contentBuffer.append("订单金额:").append(orderAmount.setScale(2, BigDecimal.ROUND_DOWN));
|
|
|
|
|
+ if (!couponMoney.equals(BigDecimal.ZERO)) {
|
|
|
|
|
+ contentBuffer.append(",优惠券金额:").append(couponMoney.setScale(2, BigDecimal.ROUND_DOWN));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!activityDiscountAmount.equals(BigDecimal.ZERO)) {
|
|
|
|
|
+ contentBuffer.append(",活动优惠金额:").append(activityDiscountAmount.setScale(2, BigDecimal.ROUND_DOWN));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ contentBuffer.append(",用户实付金额:").append(tbOrder.getPayMoney()).append(",其中");
|
|
|
|
|
+
|
|
|
if (tbOrder.getOrderType() != 1) {
|
|
if (tbOrder.getOrderType() != 1) {
|
|
|
- //订单金额: 优惠券金额: 用户实付金额: 跑腿费: 平台服务费: 到账金额:(本单为平台优惠券,平台补贴)
|
|
|
|
|
- //订单金额: 商家优惠券: 用户实付金额: 跑腿费: 平台服务费: 到账金额:(本单为商家优惠券,商家补贴)
|
|
|
|
|
- if (shopIds == -1) {
|
|
|
|
|
- //未使用优惠券
|
|
|
|
|
- userMoneyDetails1.setContent("订单金额:" + tbOrder.getPayMoney() + ",用户实付金额:" + tbOrder.getPayMoney() + ",其中跑腿费:" + errandMoney + "(" + tbOrder.getErrandMoneyIsShop() + "),平台服务费:" + pingRate + ",短信服务费:" + smsSendMoney + ",到账金额:" + shopMoney);
|
|
|
|
|
- } else if (shopIds == 0) {
|
|
|
|
|
- //使用平台优惠券
|
|
|
|
|
- sumMoney = tbOrder.getPayMoney().add(couponMoney);
|
|
|
|
|
- userMoneyDetails1.setContent("订单金额:" + sumMoney + ",优惠券金额:" + couponMoney + ",用户实付金额:" + tbOrder.getPayMoney() + ",其中跑腿费:" + errandMoney + "(" + tbOrder.getErrandMoneyIsShop() + "),平台服务费:" + pingRate + ",短信服务费:" + smsSendMoney + ",到账金额:" + shopMoney + "(本单为平台优惠券,平台补贴)");
|
|
|
|
|
- } else {
|
|
|
|
|
- //使用商家优惠券
|
|
|
|
|
- sumMoney = tbOrder.getPayMoney().add(couponMoney);
|
|
|
|
|
- userMoneyDetails1.setContent("订单金额:" + sumMoney + ",优惠券金额:" + couponMoney + ",用户实付金额:" + tbOrder.getPayMoney() + ",其中跑腿费:" + errandMoney + "(" + tbOrder.getErrandMoneyIsShop() + "),平台服务费:" + pingRate + ",短信服务费:" + smsSendMoney + ",到账金额:" + shopMoney + "(本单为商家优惠券,商家补贴)");
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- if (shopIds == -1) {
|
|
|
|
|
- //未使用优惠券
|
|
|
|
|
- userMoneyDetails1.setContent("订单金额:" + tbOrder.getPayMoney() + ",用户实付金额:" + tbOrder.getPayMoney() + ",其中跑腿费:" + errandMoney + "(" + tbOrder.getErrandMoneyIsShop() + "),平台服务费:" + pingRate + ",短信服务费:" + smsSendMoney + ",到账金额:" + shopMoney);
|
|
|
|
|
- } else if (shopIds == 0) {
|
|
|
|
|
- //使用平台优惠券
|
|
|
|
|
- sumMoney = tbOrder.getPayMoney().add(couponMoney);
|
|
|
|
|
- userMoneyDetails1.setContent("订单金额:" + sumMoney + ",优惠券金额:" + couponMoney + ",用户实付金额:" + tbOrder.getPayMoney() + ",平台服务费:" + pingRate + ",短信服务费:" + smsSendMoney + ",到账金额:" + shopMoney + "(本单为平台优惠券,平台补贴)");
|
|
|
|
|
- } else {
|
|
|
|
|
- //使用商家优惠券
|
|
|
|
|
- sumMoney = tbOrder.getPayMoney().add(couponMoney);
|
|
|
|
|
- userMoneyDetails1.setContent("订单金额:" + sumMoney + ",优惠券金额:" + couponMoney + ",用户实付金额:" + tbOrder.getPayMoney() + ",平台服务费:" + pingRate + ",短信服务费:" + smsSendMoney + ",到账金额:" + shopMoney + "(本单为商家优惠券,商家补贴)");
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ contentBuffer.append("跑腿费:").append(errandMoney.setScale(2, BigDecimal.ROUND_DOWN)).append("(").append(tbOrder.getErrandMoneyIsShop()).append(")").append(",");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ contentBuffer.append("平台服务费:").append(pingRate.setScale(2, BigDecimal.ROUND_DOWN)).append(",");
|
|
|
|
|
+ contentBuffer.append("短信服务费:").append(smsSendMoney.setScale(2, BigDecimal.ROUND_DOWN)).append(",");
|
|
|
|
|
+ contentBuffer.append("到账金额:").append(shopMoney.setScale(2, BigDecimal.ROUND_DOWN));
|
|
|
|
|
+
|
|
|
|
|
+ if (shopIds == 0) {
|
|
|
|
|
+ contentBuffer.append("(本单为平台优惠券,平台补贴)");
|
|
|
|
|
+ } else if (shopIds != -1) {
|
|
|
|
|
+ contentBuffer.append("(本单为商家优惠券,商家补贴)");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ userMoneyDetails1.setContent(contentBuffer.toString());
|
|
|
|
|
+
|
|
|
userMoneyDetails1.setType(1);
|
|
userMoneyDetails1.setType(1);
|
|
|
userMoneyDetails1.setClassify(3);
|
|
userMoneyDetails1.setClassify(3);
|
|
|
userMoneyDetails1.setMoney(shopMoney);
|
|
userMoneyDetails1.setMoney(shopMoney);
|
|
@@ -2003,52 +2012,52 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
return Result.success();
|
|
return Result.success();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- @Scheduled(cron = "0 */10 * * * ?")
|
|
|
|
|
- public void orderEnd() {
|
|
|
|
|
- CommonInfo one = commonInfoService.findOne(268);
|
|
|
|
|
- DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
- List<TbOrder> orderList = appOrderDao.selectList(new QueryWrapper<TbOrder>().eq("status", 3));
|
|
|
|
|
- for (TbOrder tbOrder : orderList) {
|
|
|
|
|
- LocalDateTime updateTime = LocalDateTime.parse(tbOrder.getUpdateTime(), df);
|
|
|
|
|
- //计算当前订单什么时候超时完成
|
|
|
|
|
- LocalDateTime overDateTime = updateTime.plusHours(Integer.parseInt(one.getValue()));
|
|
|
|
|
- if (LocalDateTime.now().isAfter(overDateTime)) {
|
|
|
|
|
- log.info("操作完成订单6:"+tbOrder.getOrderId());
|
|
|
|
|
- accomplishOrders(tbOrder.getOrderId(),2);
|
|
|
|
|
- //管理端完成订单,则消息通知用户
|
|
|
|
|
- //添加消息记录
|
|
|
|
|
- MessageInfo messageInfo = new MessageInfo();
|
|
|
|
|
- messageInfo.setState(String.valueOf(5));
|
|
|
|
|
- messageInfo.setTitle("订单完成");
|
|
|
|
|
- messageInfo.setContent("您的订单已完成,欢迎下次光临");
|
|
|
|
|
- messageInfo.setCreateAt(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
|
|
|
|
- messageInfo.setUserId(tbOrder.getUserId().toString());
|
|
|
|
|
- messageInfoDao.insert(messageInfo);
|
|
|
|
|
- //设置小程序消息推送
|
|
|
|
|
- CommonInfo one1 = commonInfoService.findOne(269);
|
|
|
|
|
- List<String> msgList = new ArrayList<>();
|
|
|
|
|
- Long shopId = tbOrder.getShopId();
|
|
|
|
|
- GoodsShop goodsShop = goodsShopDao.selectById(shopId);
|
|
|
|
|
- String orderNum1 = tbOrder.getOrderNumber();
|
|
|
|
|
- msgList.add("订单完成");
|
|
|
|
|
- msgList.add(orderNum1);
|
|
|
|
|
- if (goodsShop != null && goodsShop.getShopName() != null) {
|
|
|
|
|
- String shopName = goodsShop.getShopName();
|
|
|
|
|
- msgList.add(shopName);
|
|
|
|
|
- } else {
|
|
|
|
|
- msgList.add("");
|
|
|
|
|
- }
|
|
|
|
|
- msgList.add(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
|
|
|
|
- UserEntity userEntity = userDao.selectById(tbOrder.getUserId());
|
|
|
|
|
- if (userEntity != null && userEntity.getOpenId() != null) {
|
|
|
|
|
- SenInfoCheckUtil.sendMsg(userEntity.getOpenId(), one1.getValue(), msgList, 1);
|
|
|
|
|
- userService.pushToSingle("订单完成", "亲爱的用户您好,您的订单已完成,欢迎下次光临!", userEntity.getClientid());
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // @Scheduled(cron = "0 */10 * * * ?")
|
|
|
|
|
+ // public void orderEnd() {
|
|
|
|
|
+ // CommonInfo one = commonInfoService.findOne(268);
|
|
|
|
|
+ // DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
+ // List<TbOrder> orderList = appOrderDao.selectList(new QueryWrapper<TbOrder>().eq("status", 3));
|
|
|
|
|
+ // for (TbOrder tbOrder : orderList) {
|
|
|
|
|
+ // LocalDateTime updateTime = LocalDateTime.parse(tbOrder.getUpdateTime(), df);
|
|
|
|
|
+ // //计算当前订单什么时候超时完成
|
|
|
|
|
+ // LocalDateTime overDateTime = updateTime.plusHours(Integer.parseInt(one.getValue()));
|
|
|
|
|
+ // if (LocalDateTime.now().isAfter(overDateTime)) {
|
|
|
|
|
+ // log.info("操作完成订单6:"+tbOrder.getOrderId());
|
|
|
|
|
+ // accomplishOrders(tbOrder.getOrderId(),2);
|
|
|
|
|
+ // //管理端完成订单,则消息通知用户
|
|
|
|
|
+ // //添加消息记录
|
|
|
|
|
+ // MessageInfo messageInfo = new MessageInfo();
|
|
|
|
|
+ // messageInfo.setState(String.valueOf(5));
|
|
|
|
|
+ // messageInfo.setTitle("订单完成");
|
|
|
|
|
+ // messageInfo.setContent("您的订单已完成,欢迎下次光临");
|
|
|
|
|
+ // messageInfo.setCreateAt(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
|
|
|
|
+ // messageInfo.setUserId(tbOrder.getUserId().toString());
|
|
|
|
|
+ // messageInfoDao.insert(messageInfo);
|
|
|
|
|
+ // //设置小程序消息推送
|
|
|
|
|
+ // CommonInfo one1 = commonInfoService.findOne(269);
|
|
|
|
|
+ // List<String> msgList = new ArrayList<>();
|
|
|
|
|
+ // Long shopId = tbOrder.getShopId();
|
|
|
|
|
+ // GoodsShop goodsShop = goodsShopDao.selectById(shopId);
|
|
|
|
|
+ // String orderNum1 = tbOrder.getOrderNumber();
|
|
|
|
|
+ // msgList.add("订单完成");
|
|
|
|
|
+ // msgList.add(orderNum1);
|
|
|
|
|
+ // if (goodsShop != null && goodsShop.getShopName() != null) {
|
|
|
|
|
+ // String shopName = goodsShop.getShopName();
|
|
|
|
|
+ // msgList.add(shopName);
|
|
|
|
|
+ // } else {
|
|
|
|
|
+ // msgList.add("");
|
|
|
|
|
+ // }
|
|
|
|
|
+ // msgList.add(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
|
|
|
|
+ // UserEntity userEntity = userDao.selectById(tbOrder.getUserId());
|
|
|
|
|
+ // if (userEntity != null && userEntity.getOpenId() != null) {
|
|
|
|
|
+ // SenInfoCheckUtil.sendMsg(userEntity.getOpenId(), one1.getValue(), msgList, 1);
|
|
|
|
|
+ // userService.pushToSingle("订单完成", "亲爱的用户您好,您的订单已完成,欢迎下次光临!", userEntity.getClientid());
|
|
|
|
|
+ // }
|
|
|
|
|
+ //
|
|
|
|
|
+ // }
|
|
|
|
|
+ //
|
|
|
|
|
+ // }
|
|
|
|
|
+ // }
|
|
|
|
|
|
|
|
@Transactional
|
|
@Transactional
|
|
|
@Override
|
|
@Override
|
|
@@ -2090,15 +2099,13 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public Result userCancelOrder(Long orderId){
|
|
public Result userCancelOrder(Long orderId){
|
|
|
- reentrantReadWriteLock.writeLock().lock();
|
|
|
|
|
|
|
+ RLock lock = redissonClient.getLock(String.format(RedisKey.CANCEL_ORDER_LOCK, orderId));
|
|
|
|
|
+ lock.lock();
|
|
|
try {
|
|
try {
|
|
|
return userCancelOrders(orderId);
|
|
return userCancelOrders(orderId);
|
|
|
- }catch (Exception e){
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- }finally {
|
|
|
|
|
- reentrantReadWriteLock.writeLock().unlock();
|
|
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ lock.unlock();
|
|
|
}
|
|
}
|
|
|
- return Result.error("系统繁忙,请稍后再试!");
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -2252,18 +2259,15 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public Result adminCancelOrder(Long orderId){
|
|
public Result adminCancelOrder(Long orderId){
|
|
|
- reentrantReadWriteLock.writeLock().lock();
|
|
|
|
|
|
|
+ RLock lock = redissonClient.getLock(String.format(RedisKey.CANCEL_ORDER_LOCK, orderId));
|
|
|
|
|
+ lock.lock();
|
|
|
try {
|
|
try {
|
|
|
return adminCancelOrders(orderId);
|
|
return adminCancelOrders(orderId);
|
|
|
- }catch (Exception e){
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- }finally {
|
|
|
|
|
- reentrantReadWriteLock.writeLock().unlock();
|
|
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ lock.unlock();
|
|
|
}
|
|
}
|
|
|
- return Result.error("系统繁忙,请稍后再试!");
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
@Transactional
|
|
@Transactional
|
|
|
public Result adminCancelOrders(Long orderId) {
|
|
public Result adminCancelOrders(Long orderId) {
|
|
|
String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
|
|
String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
|
|
@@ -2395,23 +2399,16 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
tbOrderList.getRecords().get(i).setOrderGoodsList(list);
|
|
tbOrderList.getRecords().get(i).setOrderGoodsList(list);
|
|
|
}
|
|
}
|
|
|
if (shopId != null && userId != null) {
|
|
if (shopId != null && userId != null) {
|
|
|
- reentrantReadWriteLock.writeLock().lock();
|
|
|
|
|
- try {
|
|
|
|
|
- UserBrowse userBrowse = userBrowseDao.selectOne(new QueryWrapper<UserBrowse>().eq("user_id", userId).eq("by_browse_id", shopId));
|
|
|
|
|
- String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
|
|
|
|
|
- if (userBrowse != null) {
|
|
|
|
|
- userBrowse.setUpdateTime(format);
|
|
|
|
|
- } else {
|
|
|
|
|
- userBrowse = new UserBrowse();
|
|
|
|
|
- userBrowse.setUserId(userId);
|
|
|
|
|
- userBrowse.setByBrowseId(shopId);
|
|
|
|
|
- userBrowse.setUpdateTime(format);
|
|
|
|
|
- userBrowseDao.insert(userBrowse);
|
|
|
|
|
- }
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- } finally {
|
|
|
|
|
- reentrantReadWriteLock.writeLock().unlock();
|
|
|
|
|
|
|
+ UserBrowse userBrowse = userBrowseDao.selectOne(new QueryWrapper<UserBrowse>().eq("user_id", userId).eq("by_browse_id", shopId));
|
|
|
|
|
+ String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
|
|
|
|
|
+ if (userBrowse != null) {
|
|
|
|
|
+ userBrowse.setUpdateTime(format);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ userBrowse = new UserBrowse();
|
|
|
|
|
+ userBrowse.setUserId(userId);
|
|
|
|
|
+ userBrowse.setByBrowseId(shopId);
|
|
|
|
|
+ userBrowse.setUpdateTime(format);
|
|
|
|
|
+ userBrowseDao.insert(userBrowse);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
PageUtils pageUtils = new PageUtils(tbOrderList);
|
|
PageUtils pageUtils = new PageUtils(tbOrderList);
|
|
@@ -2429,26 +2426,40 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
- @Scheduled(cron = "0 */1 * * * ?")
|
|
|
|
|
- public void makeOrders(){
|
|
|
|
|
- //自动制作完成订单
|
|
|
|
|
- String value = commonInfoService.findOne(418).getValue();
|
|
|
|
|
- if("是".equals(value)){
|
|
|
|
|
- String minute = commonInfoService.findOne(419).getValue();
|
|
|
|
|
- LocalDateTime minusMinutes = LocalDateTime.now().minusMinutes(Long.valueOf(minute));
|
|
|
|
|
- List<TbOrder> tbOrders = baseMapper.selectMakeOrdersList(minusMinutes);
|
|
|
|
|
- for (TbOrder order:tbOrders){
|
|
|
|
|
- try{
|
|
|
|
|
- order.setStatus(3);
|
|
|
|
|
- updateOrder(order);
|
|
|
|
|
- }catch (Exception e){
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- log.error("自动完成异常:"+e.getMessage(),e);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // @Scheduled(cron = "0 */1 * * * ?")
|
|
|
|
|
+ // public void makeOrders(){
|
|
|
|
|
+ // //自动制作完成订单
|
|
|
|
|
+ // String value = commonInfoService.findOne(418).getValue();
|
|
|
|
|
+ // if("是".equals(value)){
|
|
|
|
|
+ // String minute = commonInfoService.findOne(419).getValue();
|
|
|
|
|
+ // LocalDateTime minusMinutes = LocalDateTime.now().minusMinutes(Long.valueOf(minute));
|
|
|
|
|
+ // List<TbOrder> tbOrders = baseMapper.selectMakeOrdersList(minusMinutes);
|
|
|
|
|
+ // for (TbOrder order:tbOrders){
|
|
|
|
|
+ // try{
|
|
|
|
|
+ // order.setStatus(3);
|
|
|
|
|
+ // updateOrder(order);
|
|
|
|
|
+ // }catch (Exception e){
|
|
|
|
|
+ // e.printStackTrace();
|
|
|
|
|
+ // log.error("自动完成异常:"+e.getMessage(),e);
|
|
|
|
|
+ // }
|
|
|
|
|
+ // }
|
|
|
|
|
+ // }
|
|
|
|
|
+ // }
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public List<TbOrder> getProdIngOrders(LocalDateTime minusMinutes) {
|
|
|
|
|
+ return baseMapper.selectMakeOrdersList(minusMinutes);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取当前店铺当前订单在已支付订单中的序号
|
|
|
|
|
+ * @param order 订单信息
|
|
|
|
|
+ * @param shopId 店铺id
|
|
|
|
|
+ * @return 支付顺序
|
|
|
|
|
+ */
|
|
|
|
|
+ private int selectCurrentOrderSequenceByShopId(TbOrder order, Long shopId) {
|
|
|
|
|
+ int count = appOrderDao.countCurDayPayByShopId(shopId, order.getPayTime());
|
|
|
|
|
|
|
|
|
|
+ return count + 1;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|