3
0
Fork 0

## 注册、升级订单添加区域选择处理;

This commit is contained in:
cabbage 2025-07-11 16:36:13 +08:00
parent d3ea099ef3
commit 526ffe6c49
24 changed files with 266 additions and 162 deletions

View File

@ -26,12 +26,12 @@ import com.hzs.common.domain.member.detail.CuMemberChangeLog;
import com.hzs.common.domain.member.detail.CuMemberLevel; import com.hzs.common.domain.member.detail.CuMemberLevel;
import com.hzs.common.domain.member.ext.CuMemberAccountExt; import com.hzs.common.domain.member.ext.CuMemberAccountExt;
import com.hzs.common.domain.member.ext.CuMemberExt; import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.retail.member.CuMemberRetailRegion;
import com.hzs.common.domain.sale.ext.SaOrderExt; import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.order.SaOrder; import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.system.config.BdAccount; import com.hzs.common.domain.system.config.BdAccount;
import com.hzs.common.domain.system.config.BdAwards; import com.hzs.common.domain.system.config.BdAwards;
import com.hzs.common.domain.system.config.BdGrade; import com.hzs.common.domain.system.config.BdGrade;
import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.common.util.TransactionUtils; import com.hzs.common.util.TransactionUtils;
import com.hzs.member.account.dto.BusinessCommissionDTO; import com.hzs.member.account.dto.BusinessCommissionDTO;
import com.hzs.member.account.service.ICuMemberAccountService; import com.hzs.member.account.service.ICuMemberAccountService;
@ -45,6 +45,7 @@ import com.hzs.member.detail.service.ICuMemberAwardsService;
import com.hzs.member.detail.service.ICuMemberChangeLogService; import com.hzs.member.detail.service.ICuMemberChangeLogService;
import com.hzs.member.detail.service.ICuMemberLevelService; import com.hzs.member.detail.service.ICuMemberLevelService;
import com.hzs.member.pub.tool.MemberToolsHandler; import com.hzs.member.pub.tool.MemberToolsHandler;
import com.hzs.retail.member.service.ICuMemberRetailRegionService;
import com.hzs.sale.order.ISaOrderServiceApi; import com.hzs.sale.order.ISaOrderServiceApi;
import com.hzs.system.base.ICurrencyServiceApi; import com.hzs.system.base.ICurrencyServiceApi;
import com.hzs.system.base.dto.CurrencyDTO; import com.hzs.system.base.dto.CurrencyDTO;
@ -92,8 +93,10 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
private RedisService redisService; private RedisService redisService;
@Autowired @Autowired
private ICuMemberService iCuMemberService; private ICuMemberService iCuMemberService;
@Autowired
private ICuMemberRegisterService cuMemberRegisterService; private ICuMemberRegisterService iCuMemberRegisterService;
@Autowired
private ICuMemberRetailRegionService iCuMemberRetailRegionService;
private ICuMemberAccountService cuMemberAccountService; private ICuMemberAccountService cuMemberAccountService;
@ -146,10 +149,6 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
this.cuMemberAccountService = cuMemberAccountService; this.cuMemberAccountService = cuMemberAccountService;
} }
@Autowired
public void setCuMemberRegisterService(ICuMemberRegisterService cuMemberRegisterService) {
this.cuMemberRegisterService = cuMemberRegisterService;
}
@Autowired @Autowired
public void setCuMemberChangeLogService(ICuMemberChangeLogService cuMemberChangeLogService) { public void setCuMemberChangeLogService(ICuMemberChangeLogService cuMemberChangeLogService) {
@ -290,7 +289,7 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
// 用户注册信息 // 用户注册信息
CuMemberRegister cuMemberRegister = BeanUtil.copyProperties(cuMember, CuMemberRegister.class); CuMemberRegister cuMemberRegister = BeanUtil.copyProperties(cuMember, CuMemberRegister.class);
cuMemberRegister.setPkMember(cuMember.getPkId()); cuMemberRegister.setPkMember(cuMember.getPkId());
cuMemberRegisterService.save(cuMemberRegister); iCuMemberRegisterService.save(cuMemberRegister);
} }
/** /**
@ -319,7 +318,7 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
// 用户注册信息 // 用户注册信息
CuMemberRegister cuMemberRegister = BeanUtil.copyProperties(cuMember, CuMemberRegister.class); CuMemberRegister cuMemberRegister = BeanUtil.copyProperties(cuMember, CuMemberRegister.class);
cuMemberRegister.setPkMember(cuMember.getPkId()); cuMemberRegister.setPkMember(cuMember.getPkId());
cuMemberRegisterService.save(cuMemberRegister); iCuMemberRegisterService.save(cuMemberRegister);
} }
@Override @Override
@ -611,7 +610,7 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
cuMemberRegister.setPkMember(member.getPkId()); cuMemberRegister.setPkMember(member.getPkId());
cuMemberRegister.setPkCountry(saOrder.getPkCountry()); cuMemberRegister.setPkCountry(saOrder.getPkCountry());
cuMemberRegister.setPkModified(saOrder.getPkCreator()); cuMemberRegister.setPkModified(saOrder.getPkCreator());
cuMemberRegisterService.updateCuMemberRegister(cuMemberRegister); iCuMemberRegisterService.updateCuMemberRegister(cuMemberRegister);
} }
cancelOrderBackAccount(pkApprove, saOrder, payMemberAccount); cancelOrderBackAccount(pkApprove, saOrder, payMemberAccount);
@ -643,7 +642,7 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
updateWrapperRegister.set(CuMemberRegister::getModifiedTime, DateUtils.currentDateTime()); updateWrapperRegister.set(CuMemberRegister::getModifiedTime, DateUtils.currentDateTime());
updateWrapperRegister.set(CuMemberRegister::getPkModified, saOrder.getPkModified()); updateWrapperRegister.set(CuMemberRegister::getPkModified, saOrder.getPkModified());
updateWrapperRegister.eq(CuMemberRegister::getPkMember, member.getPkId()); updateWrapperRegister.eq(CuMemberRegister::getPkMember, member.getPkId());
cuMemberRegisterService.update(updateWrapperRegister); iCuMemberRegisterService.update(updateWrapperRegister);
} }
cancelOrderBackAccount(pkApprove, saOrder, payMemberAccount); cancelOrderBackAccount(pkApprove, saOrder, payMemberAccount);
@ -874,7 +873,7 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
cuMemberRegister.setPkMember(pkMember); cuMemberRegister.setPkMember(pkMember);
cuMemberRegister.setPkCountry(saOrder.getPkCountry()); cuMemberRegister.setPkCountry(saOrder.getPkCountry());
cuMemberRegister.setPkModified(saOrder.getPkCreator()); cuMemberRegister.setPkModified(saOrder.getPkCreator());
cuMemberRegisterService.updateCuMemberRegister(cuMemberRegister); iCuMemberRegisterService.updateCuMemberRegister(cuMemberRegister);
CuMemberAccount payMemberAccount = cuMemberAccountMap.get(saOrder.getPkCreator()); CuMemberAccount payMemberAccount = cuMemberAccountMap.get(saOrder.getPkCreator());
cancelOrderBackAccount(pkApprove, saOrder, payMemberAccount); cancelOrderBackAccount(pkApprove, saOrder, payMemberAccount);
} }
@ -1496,12 +1495,29 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
// 保存会员注册信息 // 保存会员注册信息
CuMemberRegister cuMemberRegister = BeanUtil.copyProperties(cuMember, CuMemberRegister.class); CuMemberRegister cuMemberRegister = BeanUtil.copyProperties(cuMember, CuMemberRegister.class);
cuMemberRegister.setPkMember(cuMember.getPkId()); cuMemberRegister.setPkMember(cuMember.getPkId());
cuMemberRegisterService.save(cuMemberRegister); iCuMemberRegisterService.save(cuMemberRegister);
// 会员等级
GradeDTO gradeDTO = iGradeServiceApi.getGrade(cuMember.getPkSettleGrade()).getData();
// 保存会员等级变动 // 保存会员等级变动
saveLevelUpgrade(cuMember, EUpgradeType.BUY_UPGRADE.getValue(), saOrder, 0); saveLevelUpgrade(cuMember, EUpgradeType.BUY_UPGRADE.getValue(), saOrder, 0);
if (EGrade.VIP.getValue() == gradeDTO.getGradeValue()
|| EGrade.BRANCH_COMPANY.getValue() == gradeDTO.getGradeValue()) {
// 店主分公司级别判断处理区域
if (null != saOrder.getRegionProvince()
&& null != saOrder.getRegionCity()) {
iCuMemberRetailRegionService.mergeMemberRetailRegion(CuMemberRetailRegion.builder()
.pkMember(cuMember.getPkId())
.province(saOrder.getRegionProvince())
.city(saOrder.getRegionCity())
.county(saOrder.getRegionCounty())
.build());
}
}
// 判断处理推荐人等级 // 判断处理推荐人等级
handleParentUpgrade(cuMember, saOrder); handleParentUpgrade(cuMember, saOrder, gradeDTO);
this.handleRetailMemberAccount(saOrder, cuMemberAccountExt); this.handleRetailMemberAccount(saOrder, cuMemberAccountExt);
} }
@ -1512,12 +1528,29 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
// 更新会员信息 // 更新会员信息
updateCuMember(cuMember); updateCuMember(cuMember);
// 会员等级
GradeDTO gradeDTO = iGradeServiceApi.getGrade(cuMember.getPkSettleGrade()).getData();
if (!cuMember.getPkSettleGrade().equals(saOrder.getPkGradeOld())) { if (!cuMember.getPkSettleGrade().equals(saOrder.getPkGradeOld())) {
// 保存会员等级变动如果旧等级和新等级相同则不记录 // 保存会员等级变动如果旧等级和新等级相同则不记录
saveLevelUpgrade(cuMember, EUpgradeType.BUY_UPGRADE.getValue(), saOrder, saOrder.getPkGradeOld()); saveLevelUpgrade(cuMember, EUpgradeType.BUY_UPGRADE.getValue(), saOrder, saOrder.getPkGradeOld());
if (EGrade.VIP.getValue() == gradeDTO.getGradeValue()
|| EGrade.BRANCH_COMPANY.getValue() == gradeDTO.getGradeValue()) {
// 店主分公司级别判断处理区域
if (null != saOrder.getRegionProvince()
&& null != saOrder.getRegionCity()) {
iCuMemberRetailRegionService.mergeMemberRetailRegion(CuMemberRetailRegion.builder()
.pkMember(cuMember.getPkId())
.province(saOrder.getRegionProvince())
.city(saOrder.getRegionCity())
.county(saOrder.getRegionCounty())
.build());
}
}
} }
// 判断处理推荐人等级 // 判断处理推荐人等级
handleParentUpgrade(cuMember, saOrder); handleParentUpgrade(cuMember, saOrder, gradeDTO);
this.handleRetailMemberAccount(saOrder, cuMemberAccountExt); this.handleRetailMemberAccount(saOrder, cuMemberAccountExt);
} }
@ -1580,8 +1613,10 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
* *
* @param cuMember * @param cuMember
*/ */
private void handleParentUpgrade(CuMember cuMember, SaOrderExt saOrder) { private void handleParentUpgrade(CuMember cuMember, SaOrderExt saOrder, GradeDTO gradeDTO) {
GradeDTO gradeDTO = iGradeServiceApi.getGrade(cuMember.getPkSettleGrade()).getData(); if (null == gradeDTO) {
gradeDTO = iGradeServiceApi.getGrade(cuMember.getPkSettleGrade()).getData();
}
if (EGrade.VIP.getValue() == gradeDTO.getGradeValue()) { if (EGrade.VIP.getValue() == gradeDTO.getGradeValue()) {
// 会员等级为 博羚店主推荐人如果也是博羚店主需要升级为高级店主 // 会员等级为 博羚店主推荐人如果也是博羚店主需要升级为高级店主
CuMember parentMember = iCuMemberService.getShopkeeperMember(cuMember.getPkParent()); CuMember parentMember = iCuMemberService.getShopkeeperMember(cuMember.getPkParent());

View File

@ -58,4 +58,13 @@ public interface CuMemberRetailRegionMapper extends BaseMapper<CuMemberRetailReg
@Param("waresCodeList") List<String> waresCodeList); @Param("waresCodeList") List<String> waresCodeList);
List<BdArea> getRegionTreeList(@Param("queryType") String queryType, @Param("userId") Long userId); List<BdArea> getRegionTreeList(@Param("queryType") String queryType, @Param("userId") Long userId);
/**
* 插入或更新区域选择
*
* @param retailRegion
* @return
*/
int mergeMemberRetailRegion(@Param("retailRegion") CuMemberRetailRegion retailRegion);
} }

View File

@ -60,4 +60,13 @@ public interface ICuMemberRetailRegionService extends IService<CuMemberRetailReg
* @return * @return
*/ */
List<Tree<String>> getRegionTreeList(String queryType, Long pkMember); List<Tree<String>> getRegionTreeList(String queryType, Long pkMember);
/**
* 插入或更新区域选择
*
* @param retailRegion
* @return
*/
int mergeMemberRetailRegion(CuMemberRetailRegion retailRegion);
} }

View File

@ -115,4 +115,9 @@ public class CuMemberRetailRegionServiceImpl extends ServiceImpl<CuMemberRetailR
}); });
} }
@Override
public int mergeMemberRetailRegion(CuMemberRetailRegion retailRegion) {
return baseMapper.mergeMemberRetailRegion(retailRegion);
}
} }

View File

@ -235,4 +235,35 @@
nvl( region.num, 0 ) DESC nvl( region.num, 0 ) DESC
</select> </select>
<!-- 插入或更新区域选择 -->
<update id="mergeMemberRetailRegion">
merge into CU_MEMBER_RETAIL_REGION cmrr
using (
select
#{retailRegion.pkMember} pk_member,
#{retailRegion.province} province,
#{retailRegion.city} city,
#{retailRegion.county} county
from dual
) tmp
on (tmp.pk_member = cmrr.pk_member and cmrr.del_flag = 0)
WHEN MATCHED THEN
update
set cmrr.province = tmp.province,
cmrr.city = tmp.city,
cmrr.county = tmp.county,
cmrr.pk_modified = tmp.pk_member,
cmrr.modified_time = sysdate
WHEN NOT MATCHED THEN
insert
(pk_id, pk_member, province, city, county, pk_creator)
values
(cu_member_retail_region_seq.Nextval,
tmp.pk_member,
tmp.province,
tmp.city,
tmp.county,
tmp.pk_member)
</update>
</mapper> </mapper>

View File

@ -15,6 +15,7 @@ import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.web.domain.AjaxResult; import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.domain.member.base.CuMember; import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.ext.CuMemberAccountExt; import com.hzs.common.domain.member.ext.CuMemberAccountExt;
import com.hzs.common.domain.retail.member.ext.CuMemberRetailRegionExt;
import com.hzs.common.domain.sale.ext.SaOrderExt; import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.system.config.BdGrade; import com.hzs.common.domain.system.config.BdGrade;
import com.hzs.common.security.utils.SecurityUtils; import com.hzs.common.security.utils.SecurityUtils;
@ -220,6 +221,12 @@ public class ApiRetailOrderController {
return AjaxResult.error(checkStr); return AjaxResult.error(checkStr);
} }
// 校验会员选择区域是否已经被占用
checkStr = this.checkRegionNum(registerParam);
if (null != checkStr) {
return AjaxResult.error(checkStr);
}
// 手机号可以重复不需要进行是否重复校验 -- 已经跳过此处可以不需要当前判断 // 手机号可以重复不需要进行是否重复校验 -- 已经跳过此处可以不需要当前判断
// // 校验注册关系是否跨团队 -- 2024.12.24 修改为校验手机号必须唯一 // // 校验注册关系是否跨团队 -- 2024.12.24 修改为校验手机号必须唯一
// String relationStr = iMemberServiceApi.checkRegisterRelation(registerParam.getPhone(), registerParam.getParentCode()).getData(); // String relationStr = iMemberServiceApi.checkRegisterRelation(registerParam.getPhone(), registerParam.getParentCode()).getData();
@ -264,6 +271,12 @@ public class ApiRetailOrderController {
return AjaxResult.error(checkStr); return AjaxResult.error(checkStr);
} }
// 校验会员选择区域是否已经被占用
checkStr = this.checkRegionNum(registerParam);
if (null != checkStr) {
return AjaxResult.error(checkStr);
}
// 手机号可以重复不需要进行是否重复校验 -- 已经跳过此处可以不需要当前判断 // 手机号可以重复不需要进行是否重复校验 -- 已经跳过此处可以不需要当前判断
// // 校验注册关系是否跨团队 -- 2024.12.24 修改为校验手机号必须唯一 // // 校验注册关系是否跨团队 -- 2024.12.24 修改为校验手机号必须唯一
// String relationStr = iMemberServiceApi.checkRegisterRelation(registerParam.getPhone(), registerParam.getParentCode()).getData(); // String relationStr = iMemberServiceApi.checkRegisterRelation(registerParam.getPhone(), registerParam.getParentCode()).getData();
@ -291,6 +304,9 @@ public class ApiRetailOrderController {
if (memberAccountExt.getIsPayment()) { if (memberAccountExt.getIsPayment()) {
// 进行支付 // 进行支付
saOrderExt.setSpecialArea(registerParam.getSpecialArea()); saOrderExt.setSpecialArea(registerParam.getSpecialArea());
saOrderExt.setRegionProvince(registerParam.getRegionProvince());
saOrderExt.setRegionCity(registerParam.getRegionCity());
saOrderExt.setRegionCounty(registerParam.getRegionCounty());
String payStr = iRetailOrderService.payRegOrder(saOrderExt, newMember, memberAccountExt); String payStr = iRetailOrderService.payRegOrder(saOrderExt, newMember, memberAccountExt);
if (null != payStr) { if (null != payStr) {
return AjaxResult.error(payStr); return AjaxResult.error(payStr);
@ -345,6 +361,12 @@ public class ApiRetailOrderController {
} }
upgradeParam.setUpgradeMember(updateGradeMember); upgradeParam.setUpgradeMember(updateGradeMember);
// 校验会员选择区域是否已经被占用
otherCheckStr = this.checkRegionNum(upgradeParam);
if (null != otherCheckStr) {
return AjaxResult.error(otherCheckStr);
}
// 购物车中获取商品信息 // 购物车中获取商品信息
upgradeParam.setOrderItemsParams(convertShoppingCarToSku(upgradeParam.getPkCreator(), upgradeParam.getShopList())); upgradeParam.setOrderItemsParams(convertShoppingCarToSku(upgradeParam.getPkCreator(), upgradeParam.getShopList()));
@ -381,6 +403,12 @@ public class ApiRetailOrderController {
return AjaxResult.error(otherCheckStr); return AjaxResult.error(otherCheckStr);
} }
// 校验会员选择区域是否已经被占用
otherCheckStr = this.checkRegionNum(upgradeParam);
if (null != otherCheckStr) {
return AjaxResult.error(otherCheckStr);
}
// 支付入参 // 支付入参
upgradeParam.setIsPay(EYesNo.YES.getIntValue()); upgradeParam.setIsPay(EYesNo.YES.getIntValue());
@ -399,6 +427,9 @@ public class ApiRetailOrderController {
if (memberAccountExt.getIsPayment()) { if (memberAccountExt.getIsPayment()) {
// 进行支付 // 进行支付
saOrderExt.setSpecialArea(upgradeParam.getSpecialArea()); saOrderExt.setSpecialArea(upgradeParam.getSpecialArea());
saOrderExt.setRegionProvince(upgradeParam.getRegionProvince());
saOrderExt.setRegionCity(upgradeParam.getRegionCity());
saOrderExt.setRegionCounty(upgradeParam.getRegionCounty());
String payStr = iRetailOrderService.payUpgOrder(saOrderExt, updateGradeMember, memberAccountExt); String payStr = iRetailOrderService.payUpgOrder(saOrderExt, updateGradeMember, memberAccountExt);
if (null != payStr) { if (null != payStr) {
return AjaxResult.error(payStr); return AjaxResult.error(payStr);
@ -729,4 +760,24 @@ public class ApiRetailOrderController {
return null; return null;
} }
/**
* 校验会员选择区域是否已经被占用
*
* @param orderParam
* @return
*/
private String checkRegionNum(RetailOrderParam orderParam) {
if (null != orderParam.getRegionProvince()
&& null != orderParam.getRegionCity()) {
// 区域省市不为空则进行判断
CuMemberRetailRegionExt cuMemberRetailRegion = iSaOrderService.getRegionBindNum(orderParam.getRegionProvince(), orderParam.getRegionCity(), orderParam.getRegionCounty());
if (null != cuMemberRetailRegion) {
if (cuMemberRetailRegion.getRegionNum() >= cuMemberRetailRegion.getBindNum()) {
return "当前区域已经达到绑定上限,请重新选择";
}
}
}
return null;
}
} }

View File

@ -589,6 +589,9 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
newMember.setPkAwards(registerParam.getPkAwards()); newMember.setPkAwards(registerParam.getPkAwards());
saOrderExt.setPkMember(newMember.getPkId()); saOrderExt.setPkMember(newMember.getPkId());
saOrderExt.setRegionProvince(registerParam.getRegionProvince());
saOrderExt.setRegionCity(registerParam.getRegionCity());
saOrderExt.setRegionCounty(registerParam.getRegionCounty());
resultStr = this.payRegOrder(saOrderExt, newMember, null); resultStr = this.payRegOrder(saOrderExt, newMember, null);
} else { } else {
@ -599,8 +602,19 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
return "会员信息不存在"; return "会员信息不存在";
} }
if (EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) { if (EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) {
// 获取缓存参数
RetailOrderUpgradeParam upgradeParam = redisService.getCacheObject(CacheConstants.RETAIL_TEMP_UPG_PARAM + pkMember + orderCode);
if (null == upgradeParam) {
return "在线支付升级会员不存在";
}
// 升级订单 // 升级订单
cuMember.setPkSettleGrade(saOrderExt.getPkGrade()); cuMember.setPkSettleGrade(saOrderExt.getPkGrade());
saOrderExt.setRegionProvince(upgradeParam.getRegionProvince());
saOrderExt.setRegionCity(upgradeParam.getRegionCity());
saOrderExt.setRegionCounty(upgradeParam.getRegionCounty());
resultStr = this.payUpgOrder(saOrderExt, cuMember, null); resultStr = this.payUpgOrder(saOrderExt, cuMember, null);
} else { } else {
// 其它订单 // 其它订单
@ -640,7 +654,7 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
Map<Integer, Integer> waresLimitMap = new HashMap<>(); Map<Integer, Integer> waresLimitMap = new HashMap<>();
// 盒数商品 // 盒数商品
List<String> boxProductList = BoxProductUtil.getBoxProductListBySystemType(saOrderExt.getSystemType()); List<String> boxWaresList = BoxProductUtil.getBoxProductListBySystemType(saOrderExt.getSystemType());
for (SaOrderItems saOrderItems : saOrderExt.getOrderItemsList()) { for (SaOrderItems saOrderItems : saOrderExt.getOrderItemsList()) {
saOrderItems.setPkOrder(saOrderExt.getPkId()); saOrderItems.setPkOrder(saOrderExt.getPkId());
@ -649,7 +663,7 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
saOrderItems.setCreationTime(saOrderExt.getCreationTime()); saOrderItems.setCreationTime(saOrderExt.getCreationTime());
// 指定商品拆分 并且 非赠品 // 指定商品拆分 并且 非赠品
if (boxProductList.contains(saOrderItems.getWareCode()) if (boxWaresList.contains(saOrderItems.getWareCode())
&& EYesNo.NO.getIntValue() == saOrderItems.getIsGift()) { && EYesNo.NO.getIntValue() == saOrderItems.getIsGift()) {
// key: 商品ID-商品价格产品价格*产品数量 // key: 商品ID-商品价格产品价格*产品数量
String key = saOrderItems.getPkWares() + "-" + (saOrderItems.getPrice().multiply(new BigDecimal(saOrderItems.getQuantity()))); String key = saOrderItems.getPkWares() + "-" + (saOrderItems.getPrice().multiply(new BigDecimal(saOrderItems.getQuantity())));

View File

@ -166,4 +166,17 @@ public class RetailOrderParam implements Serializable {
*/ */
private Integer isPay; private Integer isPay;
/**
* 选择区域省
*/
private Integer regionProvince;
/**
* 选择区域市
*/
private Integer regionCity;
/**
* 选择区域县
*/
private Integer regionCounty;
} }

View File

@ -671,12 +671,6 @@ public class SaOrderBusinessController extends BaseController {
return AjaxResult.error(checkStr); return AjaxResult.error(checkStr);
} }
// 校验盒数商品与非盒数商品不能互换
checkStr = iOrderBusinessService.checkOrderRetailProduct(param);
if (null != checkStr) {
return AjaxResult.error(checkStr);
}
// 确认调换货物并发起审批 // 确认调换货物并发起审批
String str = iOrderBusinessService.changeProductApprovalSubmit(param, userTokenService.getLoginUser()); String str = iOrderBusinessService.changeProductApprovalSubmit(param, userTokenService.getLoginUser());
if (null == str) { if (null == str) {
@ -722,12 +716,6 @@ public class SaOrderBusinessController extends BaseController {
return AjaxResult.error(checkStr); return AjaxResult.error(checkStr);
} }
// 校验盒数商品与非盒数商品不能互换
checkStr = iOrderBusinessService.checkOrderRetailProduct(param);
if (null != checkStr) {
return AjaxResult.error(checkStr);
}
// 调换货物不走签呈 // 调换货物不走签呈
String str = iOrderBusinessService.changeProductApprovalFreeSign(param, userTokenService.getLoginUser()); String str = iOrderBusinessService.changeProductApprovalFreeSign(param, userTokenService.getLoginUser());
if (null == str) { if (null == str) {

View File

@ -1,6 +1,7 @@
package com.hzs.sale.order.mapper; package com.hzs.sale.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.retail.member.ext.CuMemberRetailRegionExt;
import com.hzs.common.domain.sale.ext.SaDeliverItemsExt; import com.hzs.common.domain.sale.ext.SaDeliverItemsExt;
import com.hzs.common.domain.sale.ext.SaOrderExt; import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.ext.SaOrderItemsExt; import com.hzs.common.domain.sale.ext.SaOrderItemsExt;
@ -277,4 +278,14 @@ public interface SaOrderMapper extends BaseMapper<SaOrder> {
*/ */
Date getFirstPayTime(@Param("pkMember") Long pkMember); Date getFirstPayTime(@Param("pkMember") Long pkMember);
/**
* 查询省区绑定次数
*
* @param province
* @param city
* @param county
* @return
*/
CuMemberRetailRegionExt getRegionBindNum(@Param("province") Integer province, @Param("city") Integer city, @Param("county") Integer county);
} }

View File

@ -42,14 +42,6 @@ public interface IOrderBusinessService {
*/ */
String checkOrderDeliver(List<String> orderCodeList, Integer pkCountry); String checkOrderDeliver(List<String> orderCodeList, Integer pkCountry);
/**
* 校验新零售盒数产品是否可以换货
*
* @param param 请求入参
* @return
*/
String checkOrderRetailProduct(OrderProductParam param);
/** /**
* 本次业务修改费用 * 本次业务修改费用
* *

View File

@ -5,6 +5,7 @@ import com.hzs.common.domain.member.account.CuMemberAccount;
import com.hzs.common.domain.member.base.CuMember; import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.ext.CuMemberAccountExt; import com.hzs.common.domain.member.ext.CuMemberAccountExt;
import com.hzs.common.domain.member.ext.CuMemberExt; import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.retail.member.ext.CuMemberRetailRegionExt;
import com.hzs.common.domain.sale.ext.*; import com.hzs.common.domain.sale.ext.*;
import com.hzs.common.domain.sale.order.SaOrder; import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.sale.order.SaOrderItems; import com.hzs.common.domain.sale.order.SaOrderItems;
@ -628,4 +629,15 @@ public interface ISaOrderService extends IService<SaOrder> {
*/ */
int handleBaseBoxNum(CuMember cuMember, BdGrade memberGrade, List<BdGrade> gradeList, List<String> boxProductList, Integer systemType); int handleBaseBoxNum(CuMember cuMember, BdGrade memberGrade, List<BdGrade> gradeList, List<String> boxProductList, Integer systemType);
/**
* 查询省区绑定次数
*
* @param province
* @param city
* @param county
* @return
*/
CuMemberRetailRegionExt getRegionBindNum(Integer province, Integer city, Integer county);
} }

View File

@ -151,34 +151,6 @@ public class OrderBusinessServiceImpl implements IOrderBusinessService {
return null; return null;
} }
@Override
public String checkOrderRetailProduct(OrderProductParam param) {
// 盒数商品对应的产品列表
List<Integer> pkProductList = iBdWaresService.listBoxProduct(BoxProductUtil.getBoxProductListBySystemType(null));
// 换货产品列表
List<Integer> paramProductList = param.getItemList().stream().map(OrderProductDetailParam::getPkProduct).collect(Collectors.toList());
SaOrder saOrder = iSaOrderService.getOne(Wrappers.<SaOrder>lambdaQuery()
.eq(SaOrder::getOrderCode, param.getOrderCode())
);
if (saOrder.getBoxNum() > 0) {
// 盒数商品订单换货的产品是否都是盒数商品下的如果是则可以进行更换如果不是则不能更换
for (Integer pkProduct : paramProductList) {
if (!pkProductList.contains(pkProduct)) {
return "盒数商品与普通商品不能互相换货";
}
}
} else {
// 非盒数商品订单
for (Integer pkProduct : paramProductList) {
if (pkProductList.contains(pkProduct)) {
return "普通商品与盒数商品不能互相换货";
}
}
}
return null;
}
@Override @Override
public Map<Long, OrderQueryChargeDTO> queryChargeLog(List<SaOrderExt> saOrderList, EApprovalBusiness eApprovalBusiness, Integer pkCountry) { public Map<Long, OrderQueryChargeDTO> queryChargeLog(List<SaOrderExt> saOrderList, EApprovalBusiness eApprovalBusiness, Integer pkCountry) {
// key 订单编号 value 扣款实体 // key 订单编号 value 扣款实体

View File

@ -26,6 +26,7 @@ import com.hzs.common.domain.member.detail.CuMemberLevel;
import com.hzs.common.domain.member.detail.CuMemberServiceLog; import com.hzs.common.domain.member.detail.CuMemberServiceLog;
import com.hzs.common.domain.member.ext.CuMemberAccountExt; import com.hzs.common.domain.member.ext.CuMemberAccountExt;
import com.hzs.common.domain.member.ext.CuMemberExt; import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.retail.member.ext.CuMemberRetailRegionExt;
import com.hzs.common.domain.sale.ext.*; import com.hzs.common.domain.sale.ext.*;
import com.hzs.common.domain.sale.order.*; import com.hzs.common.domain.sale.order.*;
import com.hzs.common.domain.sale.wares.BdWares; import com.hzs.common.domain.sale.wares.BdWares;
@ -2155,13 +2156,13 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
} }
// 盒数产品 // 盒数产品
List<String> boxProductList = BoxProductUtil.getBoxProductListBySystemType(systemType); List<String> boxWaresList = BoxProductUtil.getBoxProductListBySystemType(systemType);
// 当前产品盒数 // 当前产品盒数
int boxNum = 0; int boxNum = 0;
// 判断订单明细中指定产品数量校验等级 // 判断订单明细中指定产品数量校验等级
for (OrderItemsParam orderItemsParam : orderItemsParams) { for (OrderItemsParam orderItemsParam : orderItemsParams) {
if (boxProductList.contains(orderItemsParam.getWaresCode())) { if (boxWaresList.contains(orderItemsParam.getWaresCode())) {
// 存在指定商品需要累计盒数 // 存在指定商品需要累计盒数
boxNum += orderItemsParam.getQuantity(); boxNum += orderItemsParam.getQuantity();
} }
@ -2187,7 +2188,7 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
} }
// 获取升级盒数基数 // 获取升级盒数基数
int baseBoxNum = this.handleBaseBoxNum(updateGradeMember, memberGrade, gradeList, boxProductList, systemType); int baseBoxNum = this.handleBaseBoxNum(updateGradeMember, memberGrade, gradeList, boxWaresList, systemType);
// 计算等级 // 计算等级
bdGrade = this.getGradeByBox(boxNum + baseBoxNum, gradeList, memberGrade, true); bdGrade = this.getGradeByBox(boxNum + baseBoxNum, gradeList, memberGrade, true);
@ -2246,13 +2247,13 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
* @param cuMember 会员信息 * @param cuMember 会员信息
* @param memberGrade 会员等级信息 * @param memberGrade 会员等级信息
* @param gradeList 等级列表 * @param gradeList 等级列表
* @param boxProductList 盒数商品列表 * @param boxWaresList 盒数商品列表
* @param systemType 所属系统 * @param systemType 所属系统
* @return * @return
*/ */
@Override @Override
public int handleBaseBoxNum(CuMember cuMember, BdGrade memberGrade, public int handleBaseBoxNum(CuMember cuMember, BdGrade memberGrade,
List<BdGrade> gradeList, List<String> boxProductList, List<BdGrade> gradeList, List<String> boxWaresList,
Integer systemType) { Integer systemType) {
// 升级盒数基数 // 升级盒数基数
int baseBoxNum = 0; int baseBoxNum = 0;
@ -2266,25 +2267,18 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
BdGrade lastUpdateGrade = gradeList.stream().filter(tmpGrade -> tmpGrade.getPkId().equals(lastMemberLevel.getNewLevel())).findFirst().get(); BdGrade lastUpdateGrade = gradeList.stream().filter(tmpGrade -> tmpGrade.getPkId().equals(lastMemberLevel.getNewLevel())).findFirst().get();
// 盒数基数 = 手动升级盒数 + 手动升级之后的升级订单盒数 // 盒数基数 = 手动升级盒数 + 手动升级之后的升级订单盒数
baseBoxNum = lastUpdateGrade.getBoxNumber() baseBoxNum = lastUpdateGrade.getBoxNumber()
+ saOrderItemsService.getRetailWaresQuantityNew(cuMember.getPkId(), boxProductList, lastMemberLevel.getUpgradeTime(), Collections.singletonList(EOrderType.RETAIL_UPGRADE.getValue()), systemType); + saOrderItemsService.getRetailWaresQuantityNew(cuMember.getPkId(), boxWaresList, lastMemberLevel.getUpgradeTime(), Collections.singletonList(EOrderType.RETAIL_UPGRADE.getValue()), systemType);
} else { } else {
// 没有手动升级记录 // 没有手动升级记录
baseBoxNum = saOrderItemsService.getRetailWaresQuantityNew(cuMember.getPkId(), boxProductList, null, Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue()), systemType); baseBoxNum = saOrderItemsService.getRetailWaresQuantityNew(cuMember.getPkId(), boxWaresList, null, Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue()), systemType);
} }
} }
return baseBoxNum; return baseBoxNum;
} }
/** @Override
* 获取等级没有则返回V0 public CuMemberRetailRegionExt getRegionBindNum(Integer province, Integer city, Integer county) {
* return baseMapper.getRegionBindNum(province, city, county);
* @param eGrade 等级枚举
* @param gradeList 等级列表
* @return
*/
private BdGrade getGrade(EGrade eGrade, List<BdGrade> gradeList) {
Optional<BdGrade> gradeOptional = gradeList.stream().filter(tmp -> tmp.getGradeValue().equals(eGrade.getValue())).findFirst();
return gradeOptional.orElseGet(() -> this.getGrade(EGrade.START_UP, gradeList));
} }
} }

View File

@ -1,17 +1,8 @@
package com.hzs.sale.wares.mapper; package com.hzs.sale.wares.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.sale.wares.BdWaresAuthority; import com.hzs.common.domain.sale.wares.BdWaresAuthority;
/**
* <p>
* Mapper 接口
* </p>
*
* @author hzs
* @since 2022-09-09
*/
public interface BdWaresAuthorityMapper extends BaseMapper<BdWaresAuthority> { public interface BdWaresAuthorityMapper extends BaseMapper<BdWaresAuthority> {
} }

View File

@ -1,17 +1,8 @@
package com.hzs.sale.wares.service; package com.hzs.sale.wares.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.sale.wares.BdWaresAuthority; import com.hzs.common.domain.sale.wares.BdWaresAuthority;
/**
* <p>
* 服务类
* </p>
*
* @author hzs
* @since 2022-09-09
*/
public interface IBdWaresAuthorityService extends IService<BdWaresAuthority> { public interface IBdWaresAuthorityService extends IService<BdWaresAuthority> {
} }

View File

@ -190,14 +190,6 @@ public interface IBdWaresService extends IService<BdWares> {
*/ */
List<BdWaresExt> listRetailWaresByCondition(RetailWaresParam param); List<BdWaresExt> listRetailWaresByCondition(RetailWaresParam param);
/**
* 查询盒数商品对应产品列表
*
* @param boxWaresList 盒数商品列表
* @return
*/
List<Integer> listBoxProduct(List<String> boxWaresList);
/** /**
* 查询盒数商品列表 * 查询盒数商品列表
* *

View File

@ -1,20 +1,11 @@
package com.hzs.sale.wares.service.impl; package com.hzs.sale.wares.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.common.domain.sale.wares.BdWaresAuthority; import com.hzs.common.domain.sale.wares.BdWaresAuthority;
import com.hzs.sale.wares.mapper.BdWaresAuthorityMapper; import com.hzs.sale.wares.mapper.BdWaresAuthorityMapper;
import com.hzs.sale.wares.service.IBdWaresAuthorityService; import com.hzs.sale.wares.service.IBdWaresAuthorityService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author hzs
* @since 2022-09-09
*/
@Service @Service
public class BdWaresAuthorityServiceImpl extends ServiceImpl<BdWaresAuthorityMapper, BdWaresAuthority> implements IBdWaresAuthorityService { public class BdWaresAuthorityServiceImpl extends ServiceImpl<BdWaresAuthorityMapper, BdWaresAuthority> implements IBdWaresAuthorityService {

View File

@ -1173,11 +1173,6 @@ public class BdWaresServiceImpl extends ServiceImpl<BdWaresMapper, BdWares> impl
return baseMapper.listRetailWaresByCondition(param); return baseMapper.listRetailWaresByCondition(param);
} }
@Override
public List<Integer> listBoxProduct(List<String> boxWaresList) {
return baseMapper.listBoxProduct(boxWaresList, null, null).stream().map(BdWaresDetail::getPkProduct).collect(Collectors.toList());
}
@Override @Override
public List<BdWaresDetail> listBoxProductAndWares(List<String> boxWaresList, Integer pkProduct, Integer specialArea) { public List<BdWaresDetail> listBoxProductAndWares(List<String> boxWaresList, Integer pkProduct, Integer specialArea) {
return baseMapper.listBoxProduct(boxWaresList, pkProduct, specialArea); return baseMapper.listBoxProduct(boxWaresList, pkProduct, specialArea);

View File

@ -1392,4 +1392,26 @@
and so.box_num != 0 and so.box_num != 0
</select> </select>
<!-- 查询省、市、区绑定次数 -->
<select id="getRegionBindNum" resultType="com.hzs.common.domain.retail.member.ext.CuMemberRetailRegionExt">
select cmrr.*,
case
when cmrr.county = -1 then
(select nvl(ba.bind_num, 1)
from bd_area ba
where ba.pk_id = cmrr.city)
else
(select nvl(ba.bind_num, 1)
from bd_area ba
where ba.pk_id = cmrr.county)
end bind_num
from (select cmrr.province, cmrr.city, cmrr.county, count(1) region_num
from CU_MEMBER_RETAIL_REGION cmrr
where cmrr.del_flag = 0
and cmrr.province = #{province}
and cmrr.city = #{city}
and cmrr.county = #{county}
group by cmrr.province, cmrr.city, cmrr.county) cmrr
</select>
</mapper> </mapper>

View File

@ -2,30 +2,5 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzs.sale.wares.mapper.BdWaresAuthorityMapper"> <mapper namespace="com.hzs.sale.wares.mapper.BdWaresAuthorityMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.hzs.common.domain.sale.wares.BdWaresAuthority">
<id column="PK_ID" property="pkId" />
<result column="PK_CREATOR" property="pkCreator" />
<result column="CREATION_TIME" property="creationTime" />
<result column="PK_MODIFIED" property="pkModified" />
<result column="MODIFIED_TIME" property="modifiedTime" />
<result column="DEL_FLAG" property="delFlag" />
<result column="PK_COUNTRY" property="pkCountry" />
<result column="PK_WARES" property="pkWares" />
<result column="AUTHORITY_TYPE" property="authorityType" />
<result column="PK_MEMBER" property="pkMember" />
<result column="MEMBER_CODE" property="memberCode" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
PK_CREATOR,
CREATION_TIME,
PK_MODIFIED,
MODIFIED_TIME,
DEL_FLAG,
PK_COUNTRY,
PK_ID, PK_WARES, AUTHORITY_TYPE, PK_MEMBER,MEMBER_CODE
</sql>
</mapper> </mapper>

View File

@ -8,11 +8,7 @@ import lombok.EqualsAndHashCode;
import java.util.Date; import java.util.Date;
/** /**
* @Description: 新零售会员区域配置扩展类 * 新零售会员区域配置扩展类
* @Author: jiang chao
* @Time: 2024/12/10 14:58
* @Classname: CuMemberRetailRegionExt
* @PackageName: com.hzs.common.domain.retail.member.ext
*/ */
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data @Data
@ -102,4 +98,14 @@ public class CuMemberRetailRegionExt extends CuMemberRetailRegion {
* 2025年6月11日 是否激活 (0-, 1-) * 2025年6月11日 是否激活 (0-, 1-)
*/ */
private Integer isActivate; private Integer isActivate;
/**
* 已绑定地区数量
*/
private Integer regionNum;
/**
* 地区可绑定数量
*/
private Integer bindNum;
} }

View File

@ -176,4 +176,17 @@ public class SaOrderExt extends SaOrder {
private List<CuMemberLevel> deleteLevelList; private List<CuMemberLevel> deleteLevelList;
/**
* 选择区域省
*/
private Integer regionProvince;
/**
* 选择区域市
*/
private Integer regionCity;
/**
* 选择区域县
*/
private Integer regionCounty;
} }

View File

@ -9,14 +9,6 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author hzs
* @since 2022-09-09
*/
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Accessors(chain = true) @Accessors(chain = true)