## 报单赠送活动处理优化;

This commit is contained in:
cabbage 2025-10-29 15:45:12 +08:00
parent e44338285e
commit b2850b930a
1 changed files with 24 additions and 16 deletions

View File

@ -4,13 +4,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hzs.activity.base.service.IAcBaseConfigService; import com.hzs.activity.base.service.IAcBaseConfigService;
import com.hzs.activity.declaration.service.IAcDeclarationGiftConfigService; import com.hzs.activity.declaration.service.IAcDeclarationGiftConfigService;
import com.hzs.activity.declaration.service.IAcDeclarationGiftRecordService; import com.hzs.activity.declaration.service.IAcDeclarationGiftRecordService;
import com.hzs.common.core.enums.*;
import com.hzs.common.domain.activity.declaration.AcDeclarationGiftConfig; import com.hzs.common.domain.activity.declaration.AcDeclarationGiftConfig;
import com.hzs.common.domain.activity.declaration.AcDeclarationGiftRecord; import com.hzs.common.domain.activity.declaration.AcDeclarationGiftRecord;
import com.hzs.activity.tourism.IAcTourismServiceApi; import com.hzs.activity.tourism.IAcTourismServiceApi;
import com.hzs.activity.tourism.service.IAcTourismDataService; import com.hzs.activity.tourism.service.IAcTourismDataService;
import com.hzs.common.core.constant.CountryConstants; import com.hzs.common.core.constant.CountryConstants;
import com.hzs.common.core.domain.R; import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.EOrderType;
import com.hzs.common.domain.activity.base.AcBaseConfig; import com.hzs.common.domain.activity.base.AcBaseConfig;
import com.hzs.common.domain.member.base.CuMember; import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.sale.order.SaOrder; import com.hzs.common.domain.sale.order.SaOrder;
@ -110,33 +110,38 @@ public class AcTourismServiceProvider implements IAcTourismServiceApi {
Date targetDate = java.sql.Date.valueOf(LocalDate.now().minusDays(7)); Date targetDate = java.sql.Date.valueOf(LocalDate.now().minusDays(7));
log.info("处理日期: {}", targetDate); log.info("处理日期: {}", targetDate);
// 获取所有7天前有效的报单赠送活动
List<AcBaseConfig> acBaseConfigList = iAcBaseConfigService.list(new LambdaQueryWrapper<AcBaseConfig>()
.le(AcBaseConfig::getActStartDate, targetDate)
.ge(AcBaseConfig::getActEndDate, targetDate)
.eq(AcBaseConfig::getActType, EActType.DECLARATION_GIFT.getValue())
.eq(AcBaseConfig::getDelFlag, EDelFlag.UN_DELETE.getValue()));
if (acBaseConfigList.isEmpty()) {
log.info("{}天前无有效报单赠送活动,处理结束", daysAgo);
return R.ok();
}
// 查询订单 // 查询订单
List<SaOrder> orderList = iSaOrderService.list(new LambdaQueryWrapper<SaOrder>() List<SaOrder> orderList = iSaOrderService.list(new LambdaQueryWrapper<SaOrder>()
.nested(w -> w.in(SaOrder::getOrderType, EOrderType.REGISTER_ORDER.getValue(), EOrderType.UPGRADE_ORDER.getValue()) .nested(w -> w.in(SaOrder::getOrderType, EOrderType.REGISTER_ORDER.getValue(), EOrderType.UPGRADE_ORDER.getValue())
.or() .or()
.nested(x -> x.eq(SaOrder::getOrderType, EOrderType.REPURCHASE_ORDER.getValue()) .nested(x -> x.eq(SaOrder::getOrderType, EOrderType.REPURCHASE_ORDER.getValue())
.eq(SaOrder::getOrderTypeExtend, 1))) .eq(SaOrder::getOrderTypeExtend, EOrderTypeExtend.REG_REP.getValue())))
.apply("TRUNC(PAY_TIME) BETWEEN TRUNC(SYSDATE - {0}) AND TRUNC(SYSDATE - 7)", daysAgo) .apply("TRUNC(PAY_TIME) BETWEEN TRUNC(SYSDATE - {0}) AND TRUNC(SYSDATE - 7)", daysAgo)
.eq(SaOrder::getOrderStatus, 1) .eq(SaOrder::getOrderStatus, EOrderStatus.PAY.getValue())
.eq(SaOrder::getDelFlag, 0) .eq(SaOrder::getDelFlag, EDelFlag.UN_DELETE.getValue())
); );
log.info("{}天无有效订单,处理结束", daysAgo); if (orderList.isEmpty()) {
// 获取所有7天前有效的报单赠送活动 log.info("{}天无有效订单,处理结束", daysAgo);
List<AcBaseConfig> acBaseConfigList = iAcBaseConfigService.list(new LambdaQueryWrapper<AcBaseConfig>()
.le(AcBaseConfig::getActStartDate, targetDate)
.ge(AcBaseConfig::getActEndDate, targetDate)
.eq(AcBaseConfig::getActType, 32)
.eq(AcBaseConfig::getDelFlag, 0));
if (acBaseConfigList.isEmpty()) {
log.info("{}天前无有效报单赠送活动,处理结束", daysAgo);
return R.ok(); return R.ok();
} }
// 报单赠送活动主键集合 // 报单赠送活动主键集合
List<Long> declarationBaseIds = acBaseConfigList.stream().map(AcBaseConfig::getPkId).collect(Collectors.toList()); List<Long> declarationBaseIds = acBaseConfigList.stream().map(AcBaseConfig::getPkId).collect(Collectors.toList());
// 查询所有报单赠送活动数据 // 查询所有报单赠送活动数据
List<AcDeclarationGiftConfig> declarationGiftConfigs = iAcDeclarationGiftConfigService.list(new LambdaQueryWrapper<AcDeclarationGiftConfig>() List<AcDeclarationGiftConfig> declarationGiftConfigs = iAcDeclarationGiftConfigService.list(new LambdaQueryWrapper<AcDeclarationGiftConfig>()
.in(AcDeclarationGiftConfig::getPkBaseId, declarationBaseIds) .in(AcDeclarationGiftConfig::getPkBaseId, declarationBaseIds)
.eq(AcDeclarationGiftConfig::getDelFlag, 0)); .eq(AcDeclarationGiftConfig::getDelFlag, EDelFlag.UN_DELETE.getValue()));
Map<String, AcDeclarationGiftConfig> configMap = declarationGiftConfigs.stream() Map<String, AcDeclarationGiftConfig> configMap = declarationGiftConfigs.stream()
.collect(Collectors.toMap( .collect(Collectors.toMap(
cfg -> cfg.getRegisterAuthority() + "_" + cfg.getSpecifyLevel(), cfg -> cfg.getRegisterAuthority() + "_" + cfg.getSpecifyLevel(),
@ -145,14 +150,16 @@ public class AcTourismServiceProvider implements IAcTourismServiceApi {
)); ));
orderList.forEach(order -> { orderList.forEach(order -> {
// TODO 一天可能会有几百单最好改成批量查询
// 查看是否有重复订单 // 查看是否有重复订单
int count = iAcDeclarationGiftRecordService.count(new LambdaQueryWrapper<AcDeclarationGiftRecord>() int count = iAcDeclarationGiftRecordService.count(new LambdaQueryWrapper<AcDeclarationGiftRecord>()
.eq(AcDeclarationGiftRecord::getOrderCode, order.getOrderCode()) .eq(AcDeclarationGiftRecord::getOrderCode, order.getOrderCode())
.eq(AcDeclarationGiftRecord::getDelFlag, 0)); .eq(AcDeclarationGiftRecord::getDelFlag, EDelFlag.UN_DELETE.getValue()));
if (count > 0) { if (count > 0) {
log.warn("当前订单已同步至报单明细{}", order.getOrderCode()); log.warn("当前订单已同步至报单明细{}", order.getOrderCode());
return; return;
} }
// TODO 下面两个查询会员报单会员可能都是同一个人最好提前查询或者做个map存下来防止多次查询数据库
// 查询新会员信息 // 查询新会员信息
R<CuMember> newMemberResult = iMemberServiceApi.getMember(order.getPkMember()); R<CuMember> newMemberResult = iMemberServiceApi.getMember(order.getPkMember());
CuMember newMember = newMemberResult.getData(); CuMember newMember = newMemberResult.getData();
@ -174,6 +181,7 @@ public class AcTourismServiceProvider implements IAcTourismServiceApi {
return; return;
} }
// TODO 入库改成批量
AcDeclarationGiftRecord record = AcDeclarationGiftRecord.builder() AcDeclarationGiftRecord record = AcDeclarationGiftRecord.builder()
.pkRuleId(matchedConfig.getPkId()) .pkRuleId(matchedConfig.getPkId())
.pkBaseId(matchedConfig.getPkBaseId()) .pkBaseId(matchedConfig.getPkBaseId())
@ -181,7 +189,7 @@ public class AcTourismServiceProvider implements IAcTourismServiceApi {
.syncStatus(0) .syncStatus(0)
.build(); .build();
record.setCreationTime(new Date()); record.setCreationTime(new Date());
record.setDelFlag(0); record.setDelFlag(EDelFlag.UN_DELETE.getValue());
record.setPkCreator(oldMember.getPkId()); record.setPkCreator(oldMember.getPkId());
record.setPkCountry(pkCountry); record.setPkCountry(pkCountry);
// 插入数据库 // 插入数据库