1、关闭原有定时结算、手动结算业务,因新业务已完成流程结算功能

2、优化秒杀订单查询活动名称、核销码业务
3、优化订单状态查询业务
This commit is contained in:
2026-05-20 11:29:24 +08:00
parent 032c936f42
commit 5b876d29eb
9 changed files with 74 additions and 12 deletions

View File

@@ -116,7 +116,7 @@ public class DealerCommissionUnfreeze10584Task {
private final AtomicBoolean running = new AtomicBoolean(false);
@Scheduled(cron = "${dealer.commission.unfreeze10584.cron:0/50 * * * * ?}")
// @Scheduled(cron = "${dealer.commission.unfreeze10584.cron:0/50 * * * * ?}")
@IgnoreTenant("定时任务无登录态,需忽略租户隔离;内部使用 tenantId=10584 精确过滤")
public void run() {
if (!running.compareAndSet(false, true)) {

View File

@@ -183,7 +183,7 @@ public class ShopDealerOrderController extends BaseController {
@PreAuthorize("hasAuthority('shop:shopDealerOrder:update')")
@OperationLog
@Operation(summary = "手动触发单条订单佣金解冻")
@PostMapping("/unfreeze")
// @PostMapping("/unfreeze")
public ApiResult<String> manualUnfreeze(@RequestBody Map<String, Object> body) {
String orderNo = (String) body.get("orderNo");
if (orderNo == null || orderNo.isBlank()) {

View File

@@ -26,7 +26,7 @@ public class UserOrderStats implements Serializable {
@Schema(description = "待核销statusFilter=2")
private Long waitVerify;
@Schema(description = "待收货statusFilter=3")
@Schema(description = "待收货/使用statusFilter=3")
private Long waitReceive;
@Schema(description = "待评价statusFilter=4")

View File

@@ -313,6 +313,10 @@ public class ShopOrder implements Serializable {
@Schema(description = "秒杀活动ID")
private Integer activityId;
@Schema(description = "秒杀活动ID")
@TableField(exist = false)
private String activityName;
@Schema(description = "水票订单标识 0-否 1-是")
private Integer waterTicketFlag;

View File

@@ -54,6 +54,14 @@ public class ShopOrderGoods implements Serializable {
@Schema(description = "商品名称")
private String goodsName;
@Schema(description = "商品名称")
@TableField(exist = false)
private String activeNam;
@Schema(description = "核销码")
@TableField(exist = false)
private String verifyCode;
@Schema(description = "商品规格")
private String spec;

View File

@@ -248,8 +248,8 @@
AND a.pay_status = 1 AND a.order_status = 0 and order_type = 2
</if>
<if test="param.statusFilter == 3">
<!-- 3待收货已发货但订单状态不是已完成 -->
AND a.pay_status = 1 AND a.delivery_status = 20 AND a.order_status = 0
<!-- 3待收货/使用:已发货但订单状态不是已完成 -->
AND a.pay_status = 1 AND a.order_status = 0 AND (a.delivery_status = 20 or (a.order_type = 2 and a.delivery_status = 10))
</if>
<if test="param.statusFilter == 4">
<!-- 4待评价订单已完成但可能需要评价 -->
@@ -300,7 +300,7 @@
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 0 AND a.order_status = 0 THEN 1 ELSE 0 END), 0) AS waitPay,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 0 AND a.order_type in(1, 3, 4) AND a.delivery_status = 10 THEN 1 ELSE 0 END), 0) AS waitDeliver,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 0 AND a.order_type = 2 THEN 1 ELSE 0 END), 0) AS waitVerify,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 0 AND a.delivery_status = 20 THEN 1 ELSE 0 END), 0) AS waitReceive,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 0 AND (a.delivery_status = 20 or (a.order_type = 2 and a.delivery_status = 10)) THEN 1 ELSE 0 END), 0) AS waitReceive,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 1 AND a.evaluate_status = 0 THEN 1 ELSE 0 END), 0) AS waitComment,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 1 THEN 1 ELSE 0 END), 0) AS completed,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status in(4, 5, 6, 7) THEN 1 ELSE 0 END), 0) AS refund,

View File

@@ -2,12 +2,17 @@ package com.gxwebsoft.shop.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gxwebsoft.shop.entity.ShopFlashSaleActivity;
import com.gxwebsoft.shop.entity.ShopOrder;
import com.gxwebsoft.shop.mapper.ShopFlashSaleActivityMapper;
import com.gxwebsoft.shop.mapper.ShopOrderGoodsMapper;
import com.gxwebsoft.shop.mapper.ShopOrderMapper;
import com.gxwebsoft.shop.service.ShopOrderGoodsService;
import com.gxwebsoft.shop.entity.ShopOrderGoods;
import com.gxwebsoft.shop.param.ShopOrderGoodsParam;
import com.gxwebsoft.common.core.web.PageParam;
import com.gxwebsoft.common.core.web.PageResult;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;
@@ -21,8 +26,13 @@ import java.util.List;
*/
@Slf4j
@Service
@AllArgsConstructor
public class ShopOrderGoodsServiceImpl extends ServiceImpl<ShopOrderGoodsMapper, ShopOrderGoods> implements ShopOrderGoodsService {
private ShopOrderMapper shopOrderMapper;
private ShopFlashSaleActivityMapper shopFlashSaleActivityMapper;
@Override
public PageResult<ShopOrderGoods> pageRel(ShopOrderGoodsParam param) {
PageParam<ShopOrderGoods, ShopOrderGoodsParam> page = new PageParam<>(param);
@@ -34,6 +44,28 @@ public class ShopOrderGoodsServiceImpl extends ServiceImpl<ShopOrderGoodsMapper,
@Override
public List<ShopOrderGoods> listRel(ShopOrderGoodsParam param) {
List<ShopOrderGoods> list = baseMapper.selectListRel(param);
//根据订单ID查询活动并回显对应名称、订单核销码
Integer orderId = param.getOrderId();
if(orderId != null){
ShopOrder order = shopOrderMapper.selectById(orderId);
if(order != null){
ShopFlashSaleActivity saleActivity = null;
if(order.getActivityId() != null){
saleActivity = shopFlashSaleActivityMapper.selectById(order.getActivityId());
}
ShopFlashSaleActivity finalSaleActivity = saleActivity;
list.forEach(shopOrderGoods -> {
shopOrderGoods.setVerifyCode(order.getVerifyCode());
if(finalSaleActivity != null){
if(shopOrderGoods.getGoodsId().equals(finalSaleActivity.getGoodsId())){
shopOrderGoods.setActiveNam(finalSaleActivity.getName());
}
}
});
}
}
// 排序
PageParam<ShopOrderGoods, ShopOrderGoodsParam> page = new PageParam<>();
page.setDefaultOrder("sort_number asc, create_time desc");

View File

@@ -25,6 +25,7 @@ import com.gxwebsoft.payment.constants.WechatPayType;
import com.gxwebsoft.shop.dto.ShopDealerUserReduceDto;
import com.gxwebsoft.shop.dto.VerifyShopOrderDto;
import com.gxwebsoft.shop.entity.*;
import com.gxwebsoft.shop.mapper.ShopFlashSaleActivityMapper;
import com.gxwebsoft.shop.mapper.ShopGoodsMapper;
import com.gxwebsoft.shop.mapper.ShopOrderMapper;
import com.gxwebsoft.shop.mapper.ShopUserAddressMapper;
@@ -41,10 +42,10 @@ import com.wechat.pay.java.service.payments.model.Transaction;
import com.wechat.pay.java.service.payments.nativepay.NativePayService;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -109,6 +110,8 @@ public class ShopOrderServiceImpl extends ServiceImpl<ShopOrderMapper, ShopOrder
private ShopDealerUserService shopDealerUserService;
@Resource
private UserMapper userMapper;
@Resource
private ShopFlashSaleActivityMapper shopFlashSaleActivityMapper;
private static final long USER_ORDER_STATS_CACHE_SECONDS = 60L;
private static final long WECHAT_PREPAY_SNAPSHOT_TTL_MINUTES = 30L;
@@ -298,10 +301,18 @@ public class ShopOrderServiceImpl extends ServiceImpl<ShopOrderMapper, ShopOrder
List<ShopOrder> list = baseMapper.selectPageRel(page, param);
// 整理订单数据
if (!CollectionUtils.isEmpty(list)) {
if (CollectionUtils.isNotEmpty(list)) {
final Set<Integer> orderIds = list.stream().map(ShopOrder::getOrderId).collect(Collectors.toSet());
final List<ShopOrderGoods> goodsList = shopOrderGoodsService.list(new LambdaQueryWrapper<ShopOrderGoods>().in(ShopOrderGoods::getOrderId, orderIds));
final Map<Integer, List<ShopOrderGoods>> collect = goodsList.stream().collect(Collectors.groupingBy(ShopOrderGoods::getOrderId));
List<ShopFlashSaleActivity> activityList = new ArrayList<>();
List<Integer> activeIdList = list.stream().filter(shopOrder -> shopOrder.getActivityId() != null).map(ShopOrder::getActivityId).distinct().collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(activeIdList)){
activityList = shopFlashSaleActivityMapper.selectBatchIds(activeIdList);
}
List<ShopFlashSaleActivity> finalActivityList = activityList;
list.forEach(d -> {
d.setOrderGoods(collect.get(d.getOrderId()));
@@ -320,6 +331,14 @@ public class ShopOrderServiceImpl extends ServiceImpl<ShopOrderMapper, ShopOrder
}
d.setShopOrderDelivery(shopOrderDelivery);
}
//回显活动名称
if(d.getActivityId() != null){
ShopFlashSaleActivity saleActivity = finalActivityList.stream().filter(activity -> d.getActivityId().equals(activity.getId())).findFirst().orElse(null);
if(saleActivity != null){
d.setActivityName(saleActivity.getName());
}
}
});
}
return new PageResult<>(list, page.getTotal());
@@ -444,7 +463,7 @@ public class ShopOrderServiceImpl extends ServiceImpl<ShopOrderMapper, ShopOrder
//7.只有推广结算才会记佣且判断是否在设定有效期内核销订单【是:计算订单核销佣金 否:不计算核销佣金】
if(verifyType == 2 && shopOrder.getVerifyExpTime().isAfter(LocalDateTime.now())){
List<ShopOrderGoods> orderGoodsList = shopOrderGoodsService.getListByOrderId(shopOrder.getOrderId());
if(!CollectionUtils.isEmpty(orderGoodsList)){
if(CollectionUtils.isNotEmpty(orderGoodsList)){
List<Integer> goodsIdList = orderGoodsList.stream().map(ShopOrderGoods::getGoodsId).distinct().collect(Collectors.toList());
List<ShopGoods> shopGoods = shopGoodsMapper.selectBatchIds(goodsIdList);

View File

@@ -15,9 +15,8 @@ spring:
redis:
database: 0
host: 47.107.249.41
port: 16379
password: redis_t74P8C
host: localhost
port: 6379
# 日志配置
logging: