## Feat - 选择区域增加小区10W验证&按体系分组绑定区域

This commit is contained in:
sangelxiu1 2025-06-30 10:27:44 +08:00
parent 8f459c779e
commit c48916fd6e
13 changed files with 184 additions and 53 deletions

View File

@ -115,7 +115,10 @@ public class RetailMemberController extends BaseController {
CuMemberRetailAchieveVO retailAchieve = iCuMemberRetailAchieveService.selectMemberSumAchieve(userId, pkCountry, systemType);
log.info("retailAchieve : {}", JSONUtil.toJsonStr(retailAchieve));
if(ObjectUtil.isNotEmpty(retailAchieve.getArealPv())
&& retailAchieve.getArealPv().compareTo(SysConstants.TOTAL_AREA_PV) >= 0){
&& retailAchieve.getArealPv().compareTo(SysConstants.TOTAL_AREA_PV) >= 0
&& retailAchieve.getSmallAreaPv().compareTo(SysConstants.SMALL_AREA_PV) >=0
){
return AjaxResult.success(RetailMemberRegionVO.builder()
.regionStatus(EYesNo.YES.getIntValue())
.build());
@ -173,7 +176,9 @@ public class RetailMemberController extends BaseController {
}
if(EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsActivate()){
CuMemberRetailAchieveVO retailAchieve = iCuMemberRetailAchieveService.selectMemberSumAchieve(userId, pkCountry, systemType);
if(retailAchieve.getArealPv().compareTo(SysConstants.TOTAL_AREA_PV) >= 0){
if(retailAchieve.getArealPv().compareTo(SysConstants.TOTAL_AREA_PV) >= 0
&& retailAchieve.getSmallAreaPv().compareTo(SysConstants.SMALL_AREA_PV) >=0
){
canSet = true;
}
}
@ -220,22 +225,25 @@ public class RetailMemberController extends BaseController {
}
// 校验区域是否被占用
CuMemberRetailRegion cuMemberRetailRegion = iCuMemberRetailRegionService.getOne(Wrappers.<CuMemberRetailRegion>lambdaQuery()
.eq(CuMemberRetailRegion::getProvince, param.getProvince())
.eq(CuMemberRetailRegion::getCity, param.getCity())
.eq(CuMemberRetailRegion::getCounty, param.getCounty())
.eq(CuMemberRetailRegion::getEffective, EYesNo.YES.getIntValue())
.eq(CuMemberRetailRegion::getSystemType, systemType)
);
if (null != cuMemberRetailRegion) {
if (userId.equals(cuMemberRetailRegion.getPkMember())) {
// 当前收益区域就是当前会员不需要处理
return AjaxResult.success();
} else {
// CuMemberRetailRegion cuMemberRetailRegion = iCuMemberRetailRegionService.getOne(Wrappers.<CuMemberRetailRegion>lambdaQuery()
// .eq(CuMemberRetailRegion::getProvince, param.getProvince())
// .eq(CuMemberRetailRegion::getCity, param.getCity())
// .eq(CuMemberRetailRegion::getCounty, param.getCounty())
// .eq(CuMemberRetailRegion::getEffective, EYesNo.YES.getIntValue())
// .eq(CuMemberRetailRegion::getSystemType, systemType)
// );
// if (null != cuMemberRetailRegion) {
// if (userId.equals(cuMemberRetailRegion.getPkMember())) {
// // 当前收益区域就是当前会员不需要处理
// return AjaxResult.success();
// } else {
// return AjaxResult.error("当前区域已经被占用");
// }
// }
int cuMemberRetailRegion = iCuMemberRetailRegionService.validateBindCount(param, EYesNo.YES.getIntValue(), SecurityUtils.getSystemType(), param.getPkMember());
if (cuMemberRetailRegion > 0) {
return AjaxResult.error("当前区域已经被占用");
}
}
param.setPkId(cuMemberRetailRegionExt.getPkId());
param.setPkMember(userId);
param.setPkCountry(pkCountry);
@ -260,7 +268,6 @@ public class RetailMemberController extends BaseController {
PageUtils.clearPage();
List<BdArea> areaList = iCuMemberRetailRegionService.listChooseRegion(SecurityUtils.getSystemType());
if (CollectionUtil.isEmpty(areaList)) {
log.info("region-tree: 111");
return AjaxResult.success();
}
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
@ -273,7 +280,6 @@ public class RetailMemberController extends BaseController {
tree.setParentId(treeNode.getParent().toString());
tree.setName(treeNode.getName());
});
log.info("region-tree: 222");
return AjaxResult.success(build);
}

View File

@ -152,13 +152,14 @@ public class CuMemberRetailRegionController extends BaseController {
return AjaxResult.error(ConfigMsgConstants.MEMBER_RETAIL_REGION_REPEAT);
}
// 校验区域是否被占用
int cuMemberRetailRegion = cuMemberRetailRegionService.count(Wrappers.<CuMemberRetailRegion>lambdaQuery()
.eq(CuMemberRetailRegion::getProvince, mrrExt.getProvince())
.eq(CuMemberRetailRegion::getCity, mrrExt.getCity())
.eq(CuMemberRetailRegion::getCounty, mrrExt.getCounty())
.eq(CuMemberRetailRegion::getEffective, EYesNo.YES.getIntValue())
.eq(CuMemberRetailRegion::getSystemType, systemType)
);
// int cuMemberRetailRegion = cuMemberRetailRegionService.count(Wrappers.<CuMemberRetailRegion>lambdaQuery()
// .eq(CuMemberRetailRegion::getProvince, mrrExt.getProvince())
// .eq(CuMemberRetailRegion::getCity, mrrExt.getCity())
// .eq(CuMemberRetailRegion::getCounty, mrrExt.getCounty())
// .eq(CuMemberRetailRegion::getEffective, EYesNo.YES.getIntValue())
// .eq(CuMemberRetailRegion::getSystemType, systemType)
// );
int cuMemberRetailRegion = cuMemberRetailRegionService.validateBindCount(mrrExt, EYesNo.YES.getIntValue(), SecurityUtils.getSystemType(), mrrExt.getPkMember());
if (cuMemberRetailRegion > 0) {
return AjaxResult.error("当前区域已经被占用");
}
@ -195,19 +196,21 @@ public class CuMemberRetailRegionController extends BaseController {
}
// 校验区域是否被占用
int cuMemberRetailRegion = cuMemberRetailRegionService.count(Wrappers.<CuMemberRetailRegion>lambdaQuery()
.eq(CuMemberRetailRegion::getProvince, mrrExt.getProvince())
.eq(CuMemberRetailRegion::getCity, mrrExt.getCity())
.eq(CuMemberRetailRegion::getCounty, mrrExt.getCounty())
.eq(CuMemberRetailRegion::getEffective, EYesNo.YES.getIntValue())
.eq(CuMemberRetailRegion::getSystemType, SecurityUtils.getSystemType())
.ne(CuMemberRetailRegion::getPkId, mrrExt.getPkId())
);
// int cuMemberRetailRegion = cuMemberRetailRegionService.count(Wrappers.<CuMemberRetailRegion>lambdaQuery()
// .eq(CuMemberRetailRegion::getProvince, mrrExt.getProvince())
// .eq(CuMemberRetailRegion::getCity, mrrExt.getCity())
// .eq(CuMemberRetailRegion::getCounty, mrrExt.getCounty())
// .eq(CuMemberRetailRegion::getEffective, EYesNo.YES.getIntValue())
// .eq(CuMemberRetailRegion::getSystemType, SecurityUtils.getSystemType())
// .ne(CuMemberRetailRegion::getPkId, mrrExt.getPkId())
// );
int cuMemberRetailRegion = cuMemberRetailRegionService.validateBindCount(mrrExt, EYesNo.YES.getIntValue(), SecurityUtils.getSystemType(), mrrExt.getPkMember());
if (cuMemberRetailRegion > 0) {
return AjaxResult.error("当前区域已经被占用");
}
mrrExt.setPkModified(SecurityUtils.getUserId());
mrrExt.setModifiedTime(new Date());
mrrExt.setRegionVertexPkId(cuMemberRetailRegionService.getRegionVertexPkIdByPkMember(mrrExt.getPkMember()));
return toAjax(cuMemberRetailRegionService.updateById(mrrExt));
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.retail.member.CuMemberRetailRegion;
import com.hzs.common.domain.retail.member.ext.CuMemberRetailRegionExt;
import com.hzs.common.domain.system.base.BdArea;
import com.hzs.retail.member.param.RetailMemberRegionParam;
import com.hzs.retail.member.vo.UnboundAreaVO;
import org.apache.ibatis.annotations.Param;
@ -32,7 +33,7 @@ public interface CuMemberRetailRegionMapper extends BaseMapper<CuMemberRetailReg
* @param systemType 系统类型
* @return
*/
List<BdArea> listChooseRegion(@Param("systemType") Integer systemType);
List<BdArea> listChooseRegion(@Param("systemType") Integer systemType, @Param("userId") Long userId);
/**
* 插入收益区域
@ -99,4 +100,9 @@ public interface CuMemberRetailRegionMapper extends BaseMapper<CuMemberRetailReg
@Param("county") Integer county,
@Param("systemType") Integer systemType);
int validateBindCountA(@Param("mrrExt") CuMemberRetailRegionExt mrrExt, @Param("yesOrNoValue") Integer yesOrNoValue, @Param("systemType") Integer systemType, @Param("pkId") Long pkId);
int validateBindCountB(@Param("mrrExt") RetailMemberRegionParam mrrExt, @Param("yesOrNoValue") Integer yesOrNoValue, @Param("systemType") Integer systemType, @Param("pkId") Long pkId);
Long getRegionVertexPkIdByPkMember(@Param("pkMember") Long pkMember);
}

View File

@ -6,6 +6,7 @@ import com.hzs.common.domain.retail.member.ext.CuMemberRetailRegionExt;
import com.hzs.common.domain.system.base.BdArea;
import com.hzs.retail.member.param.RetailMemberRegionParam;
import com.hzs.retail.member.vo.UnboundAreaVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -84,4 +85,9 @@ public interface ICuMemberRetailRegionService extends IService<CuMemberRetailReg
*/
void handleRepeatRegion();
int validateBindCount(CuMemberRetailRegionExt mrrExt, Integer yesOrNoValue, Integer systemType, Long pkId);
int validateBindCount(RetailMemberRegionParam mrrExt, Integer yesOrNoValue, Integer systemType, Long pkId);
Long getRegionVertexPkIdByPkMember(Long pkMember);
}

View File

@ -10,6 +10,7 @@ import com.hzs.common.core.service.RedisService;
import com.hzs.common.domain.retail.member.CuMemberRetailRegion;
import com.hzs.common.domain.retail.member.ext.CuMemberRetailRegionExt;
import com.hzs.common.domain.system.base.BdArea;
import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.retail.member.mapper.CuMemberRetailRegionMapper;
import com.hzs.retail.member.param.RetailMemberRegionParam;
import com.hzs.retail.member.service.ICuMemberRetailAchieveService;
@ -73,6 +74,7 @@ public class CuMemberRetailRegionServiceImpl extends ServiceImpl<CuMemberRetailR
.systemType(param.getSystemType())
.build();
retailRegion.setPkCreator(param.getPkMember());
retailRegion.setRegionVertexPkId(baseMapper.getRegionVertexPkIdByPkMember(retailRegion.getPkMember()));
if (baseMapper.insertData(retailRegion) == 0) {
throw new ServiceException("选择区域失败,请刷新后重试");
}
@ -84,7 +86,7 @@ public class CuMemberRetailRegionServiceImpl extends ServiceImpl<CuMemberRetailR
@Override
public List<BdArea> listChooseRegion(Integer systemType) {
return baseMapper.listChooseRegion(systemType);
return baseMapper.listChooseRegion(systemType, SecurityUtils.getUserId());
}
@Override
@ -204,4 +206,19 @@ public class CuMemberRetailRegionServiceImpl extends ServiceImpl<CuMemberRetailR
}
}
@Override
public int validateBindCount(CuMemberRetailRegionExt mrrExt, Integer yesOrNoValue, Integer systemType, Long pkId) {
return baseMapper.validateBindCountA(mrrExt, yesOrNoValue, systemType, pkId);
}
@Override
public int validateBindCount(RetailMemberRegionParam mrrExt, Integer yesOrNoValue, Integer systemType, Long pkId) {
return baseMapper.validateBindCountB(mrrExt, yesOrNoValue, systemType, pkId);
}
@Override
public Long getRegionVertexPkIdByPkMember(Long pkMember) {
return baseMapper.getRegionVertexPkIdByPkMember(pkMember);
}
}

View File

@ -42,6 +42,18 @@
where ba.del_flag = 0
and ba.pk_country = 1
and ba.ENABLE_STATE = 0
and ba.pk_id not in (
SELECT
COUNTY
FROM
CU_MEMBER_RETAIL_REGION cmrr
INNER JOIN cu_member cm ON cmrr.pk_member = cm.pk_id
LEFT JOIN BD_VERTEX bv ON cm.PK_VERTEX = bv.PK_ID
LEFT JOIN BD_REGION_VERTEX brv ON bv.REGION_VERTEX_PK_ID = brv.PK_ID
where 1=1
and cm.pk_id = ${userId}
and cmrr.system_type = #{systemType}
)
and ba.pk_id not in (select cmrr.county
from cu_member_retail_region cmrr
where cmrr.del_flag = 0
@ -62,7 +74,9 @@
source,
creation_time,
pk_creator,
system_type)
system_type,
REGION_VERTEX_PK_ID
)
select cu_member_retail_region_seq.nextval,
#{retailRegion.pkMember},
#{retailRegion.province},
@ -71,16 +85,22 @@
#{retailRegion.source},
sysdate,
#{retailRegion.pkCreator},
#{retailRegion.systemType}
#{retailRegion.systemType},
#{retailRegion.regionVertexPkId}
from dual
where not exists(select 1
from cu_member_retail_region cmrr
INNER JOIN cu_member cm ON cmrr.pk_member = cm.pk_id
LEFT JOIN BD_VERTEX bv ON cm.PK_VERTEX = bv.PK_ID
LEFT JOIN BD_REGION_VERTEX brv ON bv.REGION_VERTEX_PK_ID = brv.PK_ID
where cmrr.province = #{retailRegion.province}
and cmrr.city = #{retailRegion.city}
and cmrr.county = #{retailRegion.county}
and cmrr.del_flag = 0
and cmrr.effective = 0
and cmrr.system_type = #{retailRegion.systemType})
and cmrr.system_type = #{retailRegion.systemType}
AND cm.pk_id = #{retailRegion.pkMember}
)
</insert>
<!-- 未绑定收益区域-->
@ -239,6 +259,66 @@
group by cmrr.province, cmrr.city, cmrr.county
having count(1) > 1
</select>
<select id="validateBindCountA" resultType="java.lang.Integer">
SELECT
COUNT(DISTINCT cmrr.pk_member)
FROM
CU_MEMBER_RETAIL_REGION cmrr
where 1=1
<if test="mrrExt.province != null">
and cmrr.PROVINCE = #{mrrExt.province}
</if>
<if test="mrrExt.city != null">
and cmrr.CITY = #{mrrExt.city}
</if>
<if test="mrrExt.county != null">
and cmrr.COUNTY = #{mrrExt.county}
</if>
<if test="yesOrNoValue != null">
and cmrr.EFFECTIVE = #{yesOrNoValue}
</if>
<if test="systemType != null">
and cmrr.SYSTEM_TYPE = #{systemType}
</if>
and cmrr.del_flag = 0
AND cmrr.PK_MEMBER IN (select pk_id from CU_MEMBER where PK_VERTEX in (select pk_id from BD_VERTEX where REGION_VERTEX_PK_ID in (select REGION_VERTEX_PK_ID from BD_VERTEX where pk_id in (select PK_VERTEX FROM cu_member WHERE PK_ID = #{pkId} )) and DEL_FLAG = 0))
</select>
<select id="validateBindCountB" resultType="java.lang.Integer">
SELECT
COUNT(DISTINCT cmrr.pk_member)
FROM
CU_MEMBER_RETAIL_REGION cmrr
where 1=1
<if test="mrrExt.province != null">
and cmrr.PROVINCE = #{mrrExt.province}
</if>
<if test="mrrExt.city != null">
and cmrr.CITY = #{mrrExt.city}
</if>
<if test="mrrExt.county != null">
and cmrr.COUNTY = #{mrrExt.county}
</if>
<if test="yesOrNoValue != null">
and cmrr.EFFECTIVE = #{yesOrNoValue}
</if>
<if test="systemType != null">
and cmrr.SYSTEM_TYPE = #{systemType}
</if>
and cmrr.del_flag = 0
AND cmrr.PK_MEMBER IN (select pk_id from CU_MEMBER where PK_VERTEX in (select pk_id from BD_VERTEX where REGION_VERTEX_PK_ID in (select REGION_VERTEX_PK_ID from BD_VERTEX where pk_id in (select PK_VERTEX FROM cu_member WHERE PK_ID = #{pkId} )) and DEL_FLAG = 0))
<!--
GROUP BY
NVL(TO_CHAR(brv.PK_ID), 'NULL_GROUP')
-->
</select>
<select id="getRegionVertexPkIdByPkMember" resultType="java.lang.Long" parameterType="java.lang.Long">
SELECT
REGION_VERTEX_PK_ID
FROM
BD_VERTEX
WHERE
pk_id IN (select PK_VERTEX FROM cu_member cm WHERE cm.pk_id = #{pkMember} )
</select>
<!-- 更新非最新区域其它数据 -->
<update id="updateRepeatDate">

View File

@ -1,18 +1,10 @@
package com.hzs.system.base.controller.manage;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hzs.common.core.constant.CacheConstants;
import com.hzs.common.core.enums.EDelayBusType;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.core.web.page.TableDataInfo;
import com.hzs.common.domain.system.base.BdCurrency;
import com.hzs.common.domain.system.base.BdRegionVertex;
import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.system.base.service.IBdRegionVertexService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

View File

@ -3,6 +3,7 @@ package com.hzs.system.base.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.common.core.enums.EDelFlag;
import com.hzs.common.core.exception.ServiceException;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.domain.system.base.BdRegionVertex;
@ -40,12 +41,13 @@ public class BdRegionVertexServiceImpl extends ServiceImpl<BdRegionVertexMapper,
@Override
public void add(BdRegionVertex param) {
if(ObjectUtil.isNotEmpty(param)){
if(!StringUtils.isNotEmpty(param.getName())){
if(StringUtils.isEmpty(param.getName())){
throw new ServiceException("区域体系分组名称不能为空!");
}
}
LambdaQueryWrapper<BdRegionVertex> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(BdRegionVertex::getName, param.getName());
queryWrapper.eq(BdRegionVertex::getDelFlag, EDelFlag.UN_DELETE.getValue());
int sameNameCount = baseMapper.selectCount(queryWrapper);
if(sameNameCount > 0){
throw new ServiceException("已存在相同的区域体系分组名称!");
@ -54,6 +56,7 @@ public class BdRegionVertexServiceImpl extends ServiceImpl<BdRegionVertexMapper,
param.setCreationTime(new Date());
param.setPkModified(param.getPkCreator());
param.setModifiedTime(param.getModifiedTime());
param.setDelFlag(EDelFlag.UN_DELETE.getValue());
baseMapper.insert(param);
}
@ -61,7 +64,7 @@ public class BdRegionVertexServiceImpl extends ServiceImpl<BdRegionVertexMapper,
public void delete(BdRegionVertex param) {
// 验证是否已被引用
if(ObjectUtil.isNotEmpty(param)){
if(ObjectUtil.isNotEmpty(param.getPkId())){
if(ObjectUtil.isEmpty(param.getPkId())){
throw new ServiceException("区域体系分组主键不能为空!");
}
}
@ -75,29 +78,31 @@ public class BdRegionVertexServiceImpl extends ServiceImpl<BdRegionVertexMapper,
@Override
public void update(BdRegionVertex param) {
if(ObjectUtil.isNotEmpty(param)){
if(ObjectUtil.isNotEmpty(param.getPkId())){
if(ObjectUtil.isEmpty(param.getPkId())){
throw new ServiceException("区域体系分组主键不能为空!");
}
if(StringUtils.isNotEmpty(param.getName())){
if(StringUtils.isEmpty(param.getName())){
throw new ServiceException("区域体系分组名称不能为空!");
}
}
LambdaQueryWrapper<BdRegionVertex> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(BdRegionVertex::getName, param.getName());
queryWrapper.ne(BdRegionVertex::getPkId, param.getPkId());
queryWrapper.eq(BdRegionVertex::getDelFlag, EDelFlag.UN_DELETE.getValue());
int sameNameCount = baseMapper.selectCount(queryWrapper);
if(sameNameCount > 0){
throw new ServiceException("已存在相同的区域体系分组名称!");
}
param.setPkModified(SecurityUtils.getUserId());
param.setModifiedTime(new Date());
param.setDelFlag(EDelFlag.UN_DELETE.getValue());
baseMapper.updateById(param);
}
@Override
public BdRegionVertex getById(BdRegionVertex param) {
if(ObjectUtil.isNotEmpty(param)){
if(ObjectUtil.isNotEmpty(param.getPkId())){
if(ObjectUtil.isEmpty(param.getPkId())){
throw new ServiceException("区域体系分组主键不能为空!");
}
}

View File

@ -49,4 +49,7 @@ public class VertexVo extends BaseEntity {
* 区域体系配置分组名称
*/
private String regionVertexName;
@TableField("REGION_VERTEX_PK_ID")
private Long regionVertexPkId;
}

View File

@ -33,6 +33,11 @@ public class SysConstants {
*/
public static final BigDecimal TOTAL_AREA_PV = new BigDecimal("300000");
/**
* 小区业绩累计10万
*/
public static final BigDecimal SMALL_AREA_PV = new BigDecimal("100000");
/**
* 开放使用会员编号用于支付登录查看数据
*/

View File

@ -83,4 +83,6 @@ public class CuMemberRetailRegion extends BaseEntity {
@TableField("SYSTEM_TYPE")
private Integer systemType;
@TableField("REGION_VERTEX_PK_ID")
private Long regionVertexPkId;
}

View File

@ -1,6 +1,7 @@
package com.hzs.common.domain.system.base;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableField;
import com.hzs.common.core.web.domain.BaseEntity;
@ -25,7 +26,7 @@ public class BdRegionVertex extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableField("PK_ID")
@TableId("PK_ID")
private Long pkId;
/**

View File

@ -28,3 +28,8 @@ ALTER TABLE "RETAIL"."BD_VERTEX"
ADD ("REGION_VERTEX_PK_ID" NUMBER(6,0));
COMMENT ON COLUMN "RETAIL"."BD_VERTEX"."REGION_VERTEX_PK_ID" IS '区域体系分组配置表ID';
ALTER TABLE "RETAIL"."CU_MEMBER_RETAIL_REGION"
ADD ("REGION_VERTEX_PK_ID" NUMBER(6,0));
COMMENT ON COLUMN "RETAIL"."CU_MEMBER_RETAIL_REGION"."REGION_VERTEX_PK_ID" IS '区域体系分组配置表ID'