|
@@ -103,6 +103,7 @@ import com.sqx.modules.shop.service.ShopTypeService;
|
|
|
import com.sqx.modules.sys.entity.SysUserEntity;
|
|
import com.sqx.modules.sys.entity.SysUserEntity;
|
|
|
import com.sqx.modules.sys.service.SysUserService;
|
|
import com.sqx.modules.sys.service.SysUserService;
|
|
|
import com.sqx.modules.utils.SenInfoCheckUtil;
|
|
import com.sqx.modules.utils.SenInfoCheckUtil;
|
|
|
|
|
+import com.sqx.modules.utils.VipExpirationUtil;
|
|
|
import com.sqx.modules.utils.excel.EasyExcelUtil;
|
|
import com.sqx.modules.utils.excel.EasyExcelUtil;
|
|
|
import com.sqx.modules.utils.excel.ExcelData;
|
|
import com.sqx.modules.utils.excel.ExcelData;
|
|
|
import com.sqx.modules.utils.fieYun.FeiYunUtils;
|
|
import com.sqx.modules.utils.fieYun.FeiYunUtils;
|
|
@@ -134,6 +135,7 @@ import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@Service
|
|
@Service
|
|
|
@Slf4j
|
|
@Slf4j
|
|
@@ -150,8 +152,6 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private UserService userService;
|
|
private UserService userService;
|
|
|
@Autowired
|
|
@Autowired
|
|
|
- private AppOrderService orderService;
|
|
|
|
|
- @Autowired
|
|
|
|
|
private PayDetailsService payDetailsService;
|
|
private PayDetailsService payDetailsService;
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private OrderGoodsDao orderGoodsDao;
|
|
private OrderGoodsDao orderGoodsDao;
|
|
@@ -499,9 +499,6 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
// 给支付的时候商品描述用
|
|
// 给支付的时候商品描述用
|
|
|
parentOrder.setShopName(goodsShop.getShopName());
|
|
parentOrder.setShopName(goodsShop.getShopName());
|
|
|
|
|
|
|
|
- // // 设置订单类型
|
|
|
|
|
- // parentOrder.setOrderType(payOrderDTO.getOrderType());
|
|
|
|
|
-
|
|
|
|
|
// 校验订单类型
|
|
// 校验订单类型
|
|
|
checkOrderType(parentOrder, payOrderDTO, goodsShop);
|
|
checkOrderType(parentOrder, payOrderDTO, goodsShop);
|
|
|
|
|
|
|
@@ -514,6 +511,9 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
// 校验地址、配送费信息
|
|
// 校验地址、配送费信息
|
|
|
checkAddress(parentOrder, payOrderDTO.getAddressId(), goodsShop);
|
|
checkAddress(parentOrder, payOrderDTO.getAddressId(), goodsShop);
|
|
|
|
|
|
|
|
|
|
+ // 校验是否参与vip优惠
|
|
|
|
|
+ checkVipPromotion(parentOrder, goodsShop, userId);
|
|
|
|
|
+
|
|
|
// 检查活动优惠信息
|
|
// 检查活动优惠信息
|
|
|
checkActivity(payOrderDTO.getActivityId(), parentOrder);
|
|
checkActivity(payOrderDTO.getActivityId(), parentOrder);
|
|
|
|
|
|
|
@@ -562,8 +562,10 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
} else {
|
|
} else {
|
|
|
order.setOrderTypeExtra(2);
|
|
order.setOrderTypeExtra(2);
|
|
|
}
|
|
}
|
|
|
- } else {
|
|
|
|
|
- order.setOrderTypeExtra(1);
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ // 其他 到店订单
|
|
|
|
|
+ else {
|
|
|
|
|
+ order.setOrderTypeExtra(payOrderDTO.getPackType());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 骑手配送订单
|
|
// 骑手配送订单
|
|
@@ -601,6 +603,11 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
* @param parentOrder 订单信息
|
|
* @param parentOrder 订单信息
|
|
|
*/
|
|
*/
|
|
|
private void checkActivity(Long activityId, TbOrder parentOrder) {
|
|
private void checkActivity(Long activityId, TbOrder parentOrder) {
|
|
|
|
|
+ // 参加了会员优惠,则不参与活动优惠
|
|
|
|
|
+ if (StrUtil.equals(parentOrder.getVipPromotion(), Constant.YES)) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
OrderSuitActivityVO orderBestActivity = null;
|
|
OrderSuitActivityVO orderBestActivity = null;
|
|
|
|
|
|
|
|
// 获取当前订单适用的活动列表
|
|
// 获取当前订单适用的活动列表
|
|
@@ -651,7 +658,7 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
//减库存
|
|
//减库存
|
|
|
goodsShopRelevancy1.setInventory(goodsShopRelevancy.getInventory() - goodsNum);
|
|
goodsShopRelevancy1.setInventory(goodsShopRelevancy.getInventory() - goodsNum);
|
|
|
goodsShopRelevancyDao.updateById(goodsShopRelevancy1);
|
|
goodsShopRelevancyDao.updateById(goodsShopRelevancy1);
|
|
|
- goodsShopDao.updateShopSales(1, goodsNum, goodsShopRelevancy.getShopId());
|
|
|
|
|
|
|
+ // goodsShopDao.updateShopSales(1, goodsNum, goodsShopRelevancy.getShopId());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1220,7 +1227,12 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
OrderGoods orderGoods = orderGoodsList.get(a);
|
|
OrderGoods orderGoods = orderGoodsList.get(a);
|
|
|
BigDecimal goodsNum = new BigDecimal(orderGoods.getGoodsNum());
|
|
BigDecimal goodsNum = new BigDecimal(orderGoods.getGoodsNum());
|
|
|
BigDecimal goodsPrice = orderGoods.getGoodsPrice();
|
|
BigDecimal goodsPrice = orderGoods.getGoodsPrice();
|
|
|
- BigDecimal goodsPacks = orderGoods.getGoodsPack();
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // orderTypeExtra不为0时需要计算打包费,为0时不计算打包费
|
|
|
|
|
+ BigDecimal goodsPacks = BigDecimal.valueOf(0);
|
|
|
|
|
+ if (parentOrder.getOrderTypeExtra() != 0) {
|
|
|
|
|
+ goodsPacks = orderGoods.getGoodsPack();
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
// 当前子订单总打包费
|
|
// 当前子订单总打包费
|
|
|
BigDecimal sumGoodsPack = goodsNum.multiply(goodsPacks);
|
|
BigDecimal sumGoodsPack = goodsNum.multiply(goodsPacks);
|
|
@@ -2007,7 +2019,7 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
goodsShopRelevancy1.setSales(goodsShopRelevancy.getSales() - goodsNum);//加销量
|
|
goodsShopRelevancy1.setSales(goodsShopRelevancy.getSales() - goodsNum);//加销量
|
|
|
goodsShopRelevancy1.setInventory(goodsShopRelevancy.getInventory() + goodsNum);//减库存
|
|
goodsShopRelevancy1.setInventory(goodsShopRelevancy.getInventory() + goodsNum);//减库存
|
|
|
goodsShopRelevancyDao.updateById(goodsShopRelevancy1);
|
|
goodsShopRelevancyDao.updateById(goodsShopRelevancy1);
|
|
|
- goodsShopDao.updateShopSales(2, goodsNum, goodsShopRelevancy.getShopId());
|
|
|
|
|
|
|
+ // goodsShopDao.updateShopSales(2, goodsNum, goodsShopRelevancy.getShopId());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return Result.success("取消订单成功!");
|
|
return Result.success("取消订单成功!");
|
|
@@ -2228,14 +2240,16 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
contentBuffer.append("平台服务费:").append(pingRate.setScale(2, BigDecimal.ROUND_DOWN)).append(",");
|
|
contentBuffer.append("平台服务费:").append(pingRate.setScale(2, BigDecimal.ROUND_DOWN)).append(",");
|
|
|
contentBuffer.append("短信服务费:").append(smsSendMoney.setScale(2, BigDecimal.ROUND_DOWN)).append(",");
|
|
contentBuffer.append("短信服务费:").append(smsSendMoney.setScale(2, BigDecimal.ROUND_DOWN)).append(",");
|
|
|
if (ObjectUtils.isNotEmpty(tbOrder.getOrderTypeExtra())&&tbOrder.getOrderTypeExtra()==2) {
|
|
if (ObjectUtils.isNotEmpty(tbOrder.getOrderTypeExtra())&&tbOrder.getOrderTypeExtra()==2) {
|
|
|
- // 配送费大于等于1.5就不需要骑手额外配送费
|
|
|
|
|
-// if (tbOrder.getErrandMoney().doubleValue()<1.5) {
|
|
|
|
|
- contentBuffer.append("骑手额外配送费:").append(rider.setScale(2, BigDecimal.ROUND_DOWN)).append(",");
|
|
|
|
|
-// }
|
|
|
|
|
|
|
+ contentBuffer.append("骑手额外配送费:").append(rider.setScale(2, BigDecimal.ROUND_DOWN)).append(",");
|
|
|
}
|
|
}
|
|
|
- contentBuffer.append("到账金额:").append(shopMoney.setScale(2, BigDecimal.ROUND_DOWN));
|
|
|
|
|
|
|
|
|
|
|
|
+ // 会员优惠
|
|
|
|
|
+ if (StrUtil.equals(tbOrder.getVipPromotion(), Constant.YES)) {
|
|
|
|
|
+ CommonInfo commonInfo = commonInfoService.findOne(444);
|
|
|
|
|
+ contentBuffer.append("会员优惠金额:").append(commonInfo.getValue()).append("元,");
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ contentBuffer.append("到账金额:").append(shopMoney.setScale(2, BigDecimal.ROUND_DOWN));
|
|
|
|
|
|
|
|
|
|
|
|
|
if (shopIds == 0) {
|
|
if (shopIds == 0) {
|
|
@@ -2519,7 +2533,7 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
goodsShopRelevancy1.setSales(goodsShopRelevancy.getSales() - goodsNum);//加销量
|
|
goodsShopRelevancy1.setSales(goodsShopRelevancy.getSales() - goodsNum);//加销量
|
|
|
goodsShopRelevancy1.setInventory(goodsShopRelevancy.getInventory() + goodsNum);//减库存
|
|
goodsShopRelevancy1.setInventory(goodsShopRelevancy.getInventory() + goodsNum);//减库存
|
|
|
goodsShopRelevancyDao.updateById(goodsShopRelevancy1);
|
|
goodsShopRelevancyDao.updateById(goodsShopRelevancy1);
|
|
|
- goodsShopDao.updateShopSales(2, goodsNum, goodsShopRelevancy.getShopId());
|
|
|
|
|
|
|
+ // goodsShopDao.updateShopSales(2, goodsNum, goodsShopRelevancy.getShopId());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 取消跑腿订单
|
|
// 取消跑腿订单
|
|
@@ -2677,7 +2691,7 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
goodsShopRelevancy1.setSales(goodsShopRelevancy.getSales() - goodsNum);//加销量
|
|
goodsShopRelevancy1.setSales(goodsShopRelevancy.getSales() - goodsNum);//加销量
|
|
|
goodsShopRelevancy1.setInventory(goodsShopRelevancy.getInventory() + goodsNum);//减库存
|
|
goodsShopRelevancy1.setInventory(goodsShopRelevancy.getInventory() + goodsNum);//减库存
|
|
|
goodsShopRelevancyDao.updateById(goodsShopRelevancy1);
|
|
goodsShopRelevancyDao.updateById(goodsShopRelevancy1);
|
|
|
- goodsShopDao.updateShopSales(2, goodsNum, goodsShopRelevancy.getShopId());
|
|
|
|
|
|
|
+ // goodsShopDao.updateShopSales(2, goodsNum, goodsShopRelevancy.getShopId());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 打印退款小票
|
|
// 打印退款小票
|
|
@@ -2817,7 +2831,7 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
tbOrder.setStatus(5);
|
|
tbOrder.setStatus(5);
|
|
|
} else if ("SUCCESS".equals(trade_state)) {
|
|
} else if ("SUCCESS".equals(trade_state)) {
|
|
|
tbOrder.setPayType(1);
|
|
tbOrder.setPayType(1);
|
|
|
- orderService.updateOrderAfterPaySuccess(tbOrder);
|
|
|
|
|
|
|
+ updateOrderAfterPaySuccess(tbOrder);
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
RhtQrcodePayApi qrcodePay = new RhtQrcodePayApi(wechatMchConfig.getMchId(), wechatMchConfig.getMchKey(), RHT_PAY_BASE_URL);
|
|
RhtQrcodePayApi qrcodePay = new RhtQrcodePayApi(wechatMchConfig.getMchId(), wechatMchConfig.getMchKey(), RHT_PAY_BASE_URL);
|
|
@@ -2841,7 +2855,7 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
log.error("超时任务处理订单【{}】支付成功,但未获取到支付订单!支付通知信息:{}", orderNumber, response2);
|
|
log.error("超时任务处理订单【{}】支付成功,但未获取到支付订单!支付通知信息:{}", orderNumber, response2);
|
|
|
}
|
|
}
|
|
|
tbOrder.setPayType(1);
|
|
tbOrder.setPayType(1);
|
|
|
- orderService.updateOrderAfterPaySuccess(tbOrder);
|
|
|
|
|
|
|
+ updateOrderAfterPaySuccess(tbOrder);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
@@ -2972,6 +2986,34 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
EasyExcelUtil.exportExcel(records, GoodsSkuSalesCountVO.class, "sku销售记录", "sheet1");
|
|
EasyExcelUtil.exportExcel(records, GoodsSkuSalesCountVO.class, "sku销售记录", "sheet1");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public int getCurDayVipPromotionByUserCount(Long userId) {
|
|
|
|
|
+ // 查询用户当天会员优惠单数量
|
|
|
|
|
+ QueryWrapper<TbOrder> wrapper = new QueryWrapper<>();
|
|
|
|
|
+ wrapper.eq("user_id", userId)
|
|
|
|
|
+ .eq("vip_promotion", Constant.YES)
|
|
|
|
|
+ .eq("is_pay", Constant.YES)
|
|
|
|
|
+ // 8商家拒绝接单 5订单已取消 不纳入统计
|
|
|
|
|
+ .notIn("status", "5", "8")
|
|
|
|
|
+ .ge("pay_time", LocalDateTime.now().toLocalDate().atStartOfDay())
|
|
|
|
|
+ .le("pay_time", LocalDateTime.now().toLocalDate().atTime(23, 59, 59));
|
|
|
|
|
+ return count(wrapper);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Map<Long, Integer> countFinishByShopIdWithLast30Days() {
|
|
|
|
|
+ // 统计近近30天每个店铺的已完成订单数量
|
|
|
|
|
+ List<Map<String, Object>> shopSalesList = baseMapper.countFinishByShopIdWithLast30Days();
|
|
|
|
|
+ // 转换为ShopId -> OrderCount的Map返回
|
|
|
|
|
+ return shopSalesList.stream()
|
|
|
|
|
+ .filter(map -> map.containsKey("shop_id") && map.containsKey("order_count"))
|
|
|
|
|
+ .filter(map -> map.get("shop_id") != null && map.get("order_count") != null)
|
|
|
|
|
+ .collect(Collectors.toMap(
|
|
|
|
|
+ map -> Long.valueOf(map.get("shop_id").toString()),
|
|
|
|
|
+ map -> Integer.valueOf(map.get("order_count").toString())
|
|
|
|
|
+ ));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 更新订单状态和支付顺序
|
|
* 更新订单状态和支付顺序
|
|
|
*
|
|
*
|
|
@@ -2990,4 +3032,53 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
lock.unlock();
|
|
lock.unlock();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 校验是否参与vip优惠
|
|
|
|
|
+ * @param order 订单信息
|
|
|
|
|
+ * @param goodsShop 店铺信息
|
|
|
|
|
+ * @param userId 用户id
|
|
|
|
|
+ */
|
|
|
|
|
+ private void checkVipPromotion(TbOrder order, GoodsShop goodsShop, Long userId) {
|
|
|
|
|
+ // 检查店铺是否支持会员优惠
|
|
|
|
|
+ if (!StrUtil.equals(goodsShop.getVipPromotion(), Constant.YES)) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 判断订单是否达到会员立减最低金额(元)
|
|
|
|
|
+ CommonInfo vipPromotionMinAmount = commonInfoService.findOne(446);
|
|
|
|
|
+ if (order.getPayMoney().compareTo(new BigDecimal(vipPromotionMinAmount.getValue())) < 0) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 检查用户是否为会员,且会员是否过期
|
|
|
|
|
+ UserEntity user = userService.getById(userId);
|
|
|
|
|
+ if(ObjectUtil.isNotNull(user.getIsVip()) && user.getIsVip() == 1 && VipExpirationUtil.isVipValid(user.getVipExpirationTime())) {
|
|
|
|
|
+ // 查询用户当天会员优惠单数量
|
|
|
|
|
+ int count = getCurDayVipPromotionByUserCount(userId);
|
|
|
|
|
+
|
|
|
|
|
+ // 会员每天限制优惠单数(单)
|
|
|
|
|
+ CommonInfo vipPromotionCount = commonInfoService.findOne(445);
|
|
|
|
|
+ if (count >= Integer.parseInt(vipPromotionCount.getValue())) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 会员每单立减金额(元)
|
|
|
|
|
+ CommonInfo vipPromotionAmount = commonInfoService.findOne(444);
|
|
|
|
|
+ BigDecimal payMoney = order.getPayMoney().subtract(new BigDecimal(vipPromotionAmount.getValue()));
|
|
|
|
|
+
|
|
|
|
|
+ //如果使用红包后,订单价格小于0,则改为0.01元
|
|
|
|
|
+ if (payMoney.doubleValue() <= 0) {
|
|
|
|
|
+ payMoney = new BigDecimal("0.01");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 设置订单支付金额
|
|
|
|
|
+ order.setPayMoney(payMoney);
|
|
|
|
|
+
|
|
|
|
|
+ // 订单设置为vip优惠订单
|
|
|
|
|
+ order.setVipPromotion(Constant.YES);
|
|
|
|
|
+
|
|
|
|
|
+ log.info("preOrder==>[{}],订单参与会员优惠,优惠后金额为:{}元", order.getOrderId(), payMoney);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|