3
0
Fork 0

## 撤单处理推荐人等级;

This commit is contained in:
cabbage 2025-07-12 15:16:30 +08:00
parent f4ef2a9326
commit 8b9f461c20
9 changed files with 150 additions and 88 deletions

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.detail.CuMemberGrade;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.system.config.BdTradeWhiteConfig;
import com.hzs.member.base.dto.MemberCountDTO;
import com.hzs.member.base.param.*;
@ -625,4 +626,21 @@ public interface CuMemberMapper extends BaseMapper<CuMember> {
*/
CuMember getShopkeeperMember(@Param("pkMember") Long pkMember);
/**
* 查询高级店主
*
* @param pkMember
* @return
*/
CuMember getGradeSvipMember(@Param("pkMember") Long pkMember);
/**
* 查询会员直推大于博羚店主的注册升级订单查询会员直推大于博羚店主的注册升级订单
*
* @param pkMember
* @param orderCode
* @return
*/
SaOrder listRecommendVipOrder(@Param("pkMember") Long pkMember, @Param("orderCode") String orderCode);
}

View File

@ -6,6 +6,7 @@ import com.hzs.common.domain.member.achieve.ext.CuMemberRetailSExt;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.detail.CuMemberGrade;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.system.config.BdTradeWhiteConfig;
import com.hzs.member.base.param.UpdatePlaceParentPetitionParam;
import com.hzs.member.base.dto.ShowWaresDTO;
@ -894,4 +895,21 @@ public interface ICuMemberService extends IService<CuMember> {
*/
CuMember getShopkeeperMember(Long pkMember);
/**
* 查询高级店主
*
* @param pkMember
* @return
*/
CuMember getGradeSvipMember(Long pkMember);
/**
* 查询会员直推大于博羚店主的注册升级订单查询会员直推大于博羚店主的注册升级订单
*
* @param pkMember
* @param orderCode
* @return
*/
SaOrder listRecommendVipOrder(Long pkMember, String orderCode);
}

View File

@ -2,8 +2,8 @@ package com.hzs.member.base.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hzs.common.core.constant.*;
import com.hzs.common.core.constant.msg.MemberMsgConstants;
import com.hzs.common.core.domain.R;
@ -97,13 +97,13 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
private ICuMemberRegisterService iCuMemberRegisterService;
@Autowired
private ICuMemberRetailRegionService iCuMemberRetailRegionService;
@Autowired
private ICuMemberLevelService iCuMemberLevelService;
private ICuMemberAccountService cuMemberAccountService;
private ICuMemberTradeService cuMemberTradeService;
private ICuMemberLevelService cuMemberLevelService;
private ICuMemberAwardsService cuMemberAwardsService;
private ICuMemberChangeLogService cuMemberChangeLogService;
@ -134,11 +134,6 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
this.cuMemberAwardsService = cuMemberAwardsService;
}
@Autowired
public void setCuMemberLevelService(ICuMemberLevelService cuMemberLevelService) {
this.cuMemberLevelService = cuMemberLevelService;
}
@Autowired
public void setCuMemberTradeService(ICuMemberTradeService cuMemberTradeService) {
this.cuMemberTradeService = cuMemberTradeService;
@ -219,7 +214,7 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
.build();
cuMemberLevel.setPkCountry(cuMember.getPkSettleCountry());
cuMemberLevel.setPkCreator(cuMember.getPkId());
return cuMemberLevelService.save(cuMemberLevel);
return iCuMemberLevelService.save(cuMemberLevel);
}
/**
@ -863,7 +858,7 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
Long pkMember = memberList.get(i);
SaOrderExt saOrder = saOrderMap.get(pkMember);
// 删除等级
cuMemberLevelService.deleteCuMemberLevelRecord(saOrder.getPkId(), pkApprove, currentDateTime);
iCuMemberLevelService.deleteCuMemberLevelRecord(saOrder.getPkId(), pkApprove, currentDateTime);
// 回退奖衔,根据订单从 cu_member_awards查询
cuMemberAwardsService.deleteCuMemberAwards(saOrder.getPkId(), pkApprove, currentDateTime);
iCuMemberService.deleteCuMemberByPkMember(pkMember, pkApprove, currentDateTime);
@ -897,7 +892,7 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
if (EOrderType.RETAIL_UPGRADE.getValue() == saOrder.getOrderType()) {
// 升级订单
// 回退等级
cuMemberLevelService.deleteCuMemberLevelRecord(saOrder.getPkId(), pkApprove, currentDateTime);
iCuMemberLevelService.deleteCuMemberLevelRecord(saOrder.getPkId(), pkApprove, currentDateTime);
} else if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrder.getOrderType()) {
// 复购订单
// 会员等级发生变化新等级需要处理
@ -906,26 +901,6 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
// 更新会员等级
cuMember.setPkSettleGrade(newGrade.getPkId());
}
// 处理升级记录添加删除
List<CuMemberLevel> deleteLevelList = saOrder.getDeleteLevelList();
if (CollectionUtil.isNotEmpty(deleteLevelList)) {
cuMemberLevelService.update(Wrappers.<CuMemberLevel>lambdaUpdate()
.set(CuMemberLevel::getDelFlag, EDelFlag.DELETE.getValue())
.set(CuMemberLevel::getModifiedTime, new Date())
.set(CuMemberLevel::getPkModified, pkApprove)
.in(CuMemberLevel::getPkId, deleteLevelList.stream().map(CuMemberLevel::getPkId).collect(Collectors.toList()))
);
}
List<CuMemberLevel> createLevelList = saOrder.getCreateLevelList();
if (CollectionUtil.isNotEmpty(createLevelList)) {
// 校验插入的升级时间要小于V4V5的升级时间
CuMemberLevel tmpLevel = cuMemberLevelService.getLevelByGradeValue(saOrder.getPkMember(), EGrade.VIP.getValue(), saOrder.getPayTime(), saOrder.getPkCountry());
if (null != tmpLevel) {
createLevelList = createLevelList.stream().filter(tmp -> tmp.getUpgradeTime().compareTo(tmpLevel.getUpgradeTime()) < 0).collect(Collectors.toList());
}
cuMemberLevelService.insertBatch(createLevelList);
}
}
// 更新会员标记如果是则更新会员信息
@ -936,6 +911,8 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
}
}
this.handleParentLevel(saOrder, currentDateTime);
// 部分撤单 todo 发货后邮费不退未发货退邮费
if (saOrder.getBackOrderAmount() != null && ComputeUtil.compareValue(saOrder.getBackOrderAmount())) {
cancelPartOrderBackAmount(pkApprove, saOrder);
@ -1633,7 +1610,7 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
.build();
cuMemberLevel.setPkCountry(cuMember.getPkSettleCountry());
cuMemberLevel.setPkCreator(cuMember.getPkId());
cuMemberLevelService.save(cuMemberLevel);
iCuMemberLevelService.save(cuMemberLevel);
LambdaUpdateWrapper<CuMember> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(CuMember::getPkSettleGrade, upgradeDTO.getPkId());
@ -1645,4 +1622,54 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
}
}
/**
* 处理推荐人等级
*
* @param saOrder
* @param currentDateTime
*/
private void handleParentLevel(SaOrderExt saOrder, Date currentDateTime) {
// 注册升级订单需要判断是否有推荐人升级的
if (EOrderType.RETAIL_REGISTER.getValue() == saOrder.getOrderType()
|| EOrderType.RETAIL_UPGRADE.getValue() == saOrder.getOrderType()) {
// 查询订单是否带有自动升级记录
LambdaQueryWrapper<CuMemberLevel> memberLevelQuery = new LambdaQueryWrapper<>();
memberLevelQuery.eq(CuMemberLevel::getPkOrder, saOrder.getPkId());
memberLevelQuery.eq(CuMemberLevel::getUpType, EUpgradeType.AUTO_UPGRADE.getValue());
CuMemberLevel parentLevel = iCuMemberLevelService.getOne(memberLevelQuery);
if (null != parentLevel) {
// 查询推荐人信息必须是高级店主
CuMember parentMember = iCuMemberService.getGradeSvipMember(parentLevel.getPkMember());
if (null != parentMember) {
// 推荐是高级店主查询直推博羚店主以上订单
SaOrder parentOrder = iCuMemberService.listRecommendVipOrder(parentMember.getPkId(), saOrder.getOrderCode());
if (null != parentOrder) {
// 存在其它博羚店主订单重新处理升级记录
CuMemberLevel parentNewLevel = BeanUtil.copyProperties(parentLevel, CuMemberLevel.class);
parentNewLevel.setPkId(null);
parentNewLevel.setPkOrder(parentOrder.getPkId());
parentNewLevel.setUpgradeTime(parentOrder.getPayTime());
parentNewLevel.setModifiedTime(parentOrder.getPayTime());
parentNewLevel.setPkModified(parentOrder.getPkMember());
iCuMemberLevelService.save(parentNewLevel);
} else {
// 不存在其它博羚店主订单会员需要降级处理
LambdaUpdateWrapper<CuMember> parentMemberUpdate = new LambdaUpdateWrapper<>();
parentMemberUpdate.eq(CuMember::getPkId, parentMember.getPkId());
parentMemberUpdate.set(CuMember::getPkSettleGrade, parentLevel.getOldLevel());
parentMemberUpdate.set(CuMember::getModifiedTime, currentDateTime);
iCuMemberService.update(parentMemberUpdate);
}
// 删除原来升级记录
LambdaUpdateWrapper<CuMemberLevel> updateMemberLevel = new LambdaUpdateWrapper<>();
updateMemberLevel.eq(CuMemberLevel::getPkId, parentLevel.getPkId());
updateMemberLevel.set(CuMemberLevel::getDelFlag, EDelFlag.DELETE.getValue());
updateMemberLevel.set(CuMemberLevel::getModifiedTime, currentDateTime);
iCuMemberLevelService.update(updateMemberLevel);
}
}
}
}
}

View File

@ -26,6 +26,7 @@ import com.hzs.common.domain.member.detail.CuMemberGrade;
import com.hzs.common.domain.member.detail.CuMemberServiceLog;
import com.hzs.common.domain.member.empty.CuMemberEmptyCode;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.sale.wares.BdWaresAuthority;
import com.hzs.common.domain.system.config.BdAwards;
import com.hzs.common.domain.system.config.BdTradeWhiteConfig;
@ -3161,4 +3162,14 @@ public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> i
return baseMapper.getShopkeeperMember(pkMember);
}
@Override
public CuMember getGradeSvipMember(Long pkMember) {
return baseMapper.getGradeSvipMember(pkMember);
}
@Override
public SaOrder listRecommendVipOrder(Long pkMember, String orderCode) {
return baseMapper.listRecommendVipOrder(pkMember, orderCode);
}
}

View File

@ -13,7 +13,7 @@ import java.util.List;
public interface ICuMemberLevelService extends IService<CuMemberLevel> {
/**
* 删除会员等级升级记录
* 删除会员等级升级记录订单购买升级的
*
* @param pkOrder 订单
* @param pkApprove 审核人

View File

@ -2,6 +2,7 @@ package com.hzs.member.detail.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.common.core.enums.EUpgradeType;
import com.hzs.common.core.enums.EYesNo;
import com.hzs.common.domain.member.detail.CuMemberGrade;
import com.hzs.common.domain.member.detail.CuMemberLevel;
@ -25,6 +26,8 @@ public class CuMemberLevelServiceImpl extends ServiceImpl<CuMemberLevelMapper, C
updateWrapper.set(CuMemberLevel::getPkModified, pkApprove);
updateWrapper.set(CuMemberLevel::getModifiedTime, currentDateTime);
updateWrapper.eq(CuMemberLevel::getPkOrder, pkOrder);
// 购买升级
updateWrapper.eq(CuMemberLevel::getUpType, EUpgradeType.BUY_UPGRADE.getValue());
update(updateWrapper);
}

View File

@ -2449,4 +2449,42 @@
and bg.grade_value = 60
</select>
<!-- 查询高级店主 -->
<select id="getGradeSvipMember" resultType="com.hzs.common.domain.member.base.CuMember">
select cm.*
from cu_member cm
left join bd_grade bg
on bg.pk_id = cm.pk_settle_grade
where cm.del_flag = 0
and cm.category = 0
and cm.pk_id = #{pkMember}
and bg.grade_value = 70
</select>
<!-- 查询会员直推大于博羚店主的注册、升级订单 -->
<select id="listRecommendVipOrder" resultType="com.hzs.common.domain.sale.order.SaOrder">
select so.*
from (select so.*, rownum
from cu_member cm
left join sa_order so
on so.pk_member = cm.pk_id
left join cu_member_level cml
on cml.pk_member = so.pk_member
and cml.pk_order = so.pk_id
and cml.up_type = 4
left join bd_grade bg
on bg.pk_id = cml.new_level
where cm.del_flag = 0
and cm.category = 0
and cm.pk_parent = #{pkMember}
and so.del_flag = 0
and so.order_status = 1
and so.order_type in (41, 42)
<if test="orderCode != null and orderCode != ''">
and so.order_code != #{orderCode}
</if>
and bg.grade_value >= 60) so
where rownum = 1
</select>
</mapper>

View File

@ -2030,7 +2030,7 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
* @return
*/
private GradeDTO calculateRetailCancelGrade(CuMember cuMember, SaOrder saOrder) {
// 查询会员升级记录表最终数据
// 查询会员最新升级记录
CuMemberLevel cuMemberLevel = iCuMemberDetailServiceApi.getLastUpgrade(cuMember.getPkId(), saOrder.getPkId()).getData();
if (null != cuMemberLevel) {
return gradeServiceApi.getGrade(cuMemberLevel.getNewLevel()).getData();
@ -2065,10 +2065,9 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
cuMember.setConsumeMoney(BigDecimal.ZERO);
cuMember.setConsumeAchieve(cuMemberRegister.getConsumeAchieve());
// 查询会员升级记录表最终数据
// 查询会员最新升级记录
CuMemberLevel cuMemberLevel = iCuMemberDetailServiceApi.getLastUpgrade(cuMember.getPkId(), saOrderExt.getPkId()).getData();
if (null != cuMemberLevel) {
// 存在手动升级
cuMember.setPkSettleGrade(cuMemberLevel.getNewLevel());
}
} else {
@ -2085,48 +2084,6 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
cuMember.setIsActivate(EYesNo.NO.getIntValue());
}
saOrderExt.setUpdateFlag(EYesNo.YES.getIntValue());
} else if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) {
// 复购订单存在盒数商品撤单需要处理降级操作
if (saOrderExt.getBoxNum() > 0) {
// TODO 目前只有注册升级才能激活复购不进行处理
// Date firstDate = baseMapper.getFirstPayTime(cuMember.getPkId());
// if (null == firstDate) {
// // 盒数商品订单最早的时间为空则会员未激活
// cuMember.setPayTime(null);
// cuMember.setPayStatus(EPayStatus.UNPAID.getValue());
// cuMember.setIsActivate(EYesNo.NO.getIntValue());
// saOrderExt.setUpdateFlag(EYesNo.YES.getIntValue());
// }
// TODO 恢复升级专区复购专区不需要处理等级问题
// // 如果复购订单后面还有升级订单不需要处理等级问题 复购订单后面没有升级订单走新逻辑校验
// if (this.count(Wrappers.<SaOrder>lambdaQuery()
// .eq(SaOrder::getPkMember, saOrderExt.getPkMember())
// .eq(SaOrder::getOrderType, EOrderType.RETAIL_UPGRADE.getValue())
// .ge(SaOrder::getPayTime, saOrderExt.getPayTime())
// .eq(SaOrder::getOrderStatus, EPayStatus.PAID.getValue())
// ) == 0) {
// // 带有盒数商品的订单需要校验等级
// List<BdGrade> gradeList = iGradeServiceApi.getRetailGradeList().getData();
// // 当前会员等级
// BdGrade memberGrade = this.getGrade(cuMember.getPkSettleGrade(), gradeList);
//
// // 需要添加的升级记录列表
// List<CuMemberLevel> createLevelList = new ArrayList<>();
// // 需要删除的升级记录列表
// List<CuMemberLevel> deleteLevelList = new ArrayList<>();
// // 新等级计算
// BdGrade newGrade = this.handleNewGrade(cuMember, memberGrade, gradeList, saOrderExt, createLevelList, deleteLevelList);
//
// if (memberGrade.getGradeValue() < EGrade.VIP.getValue() && newGrade.getGradeValue() < memberGrade.getGradeValue()) {
// // 当前会员等级不是V4或者V5 并且 新等级小于当前等级需要进行处理
// saOrderExt.setNewGrade(newGrade);
// saOrderExt.setUpdateFlag(EYesNo.YES.getIntValue());
// }
// saOrderExt.setCreateLevelList(createLevelList);
// saOrderExt.setDeleteLevelList(deleteLevelList);
// }
}
} else if (EOrderType.RETAIL_PICK.getValue() == saOrderExt.getOrderType()) {
// 新提货订单
if (!iAcRetailPickService.cancelRetailPickOrder(saOrderExt.getPkId(), pkApprove)) {

View File

@ -3,7 +3,6 @@ package com.hzs.common.domain.sale.ext;
import com.hzs.common.core.annotation.Transaction;
import com.hzs.common.core.constant.EnumsPrefixConstants;
import com.hzs.common.domain.member.account.CuMemberTrade;
import com.hzs.common.domain.member.detail.CuMemberLevel;
import com.hzs.common.domain.sale.order.*;
import com.hzs.common.domain.system.config.BdGrade;
import lombok.Data;
@ -166,15 +165,6 @@ public class SaOrderExt extends SaOrder {
*/
private BdGrade newGrade;
/**
* 需要添加的升级记录列表
*/
private List<CuMemberLevel> createLevelList;
/**
* 需要删除的升级记录列表
*/
private List<CuMemberLevel> deleteLevelList;
/**
* 选择区域省