Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
sangelxiu1 2025-09-19 14:52:59 +08:00
commit 6926f95e2c
8 changed files with 234 additions and 195 deletions

View File

@ -3,17 +3,15 @@ package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.hzs.bonus.achieve.service.ICuMemberRetailDetailService;
import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService;
import com.hzs.bonus.base.service.ICuMemberService;
import com.hzs.bonus.bonus.vo.BonusRecordDetailVO;
import com.hzs.bonus.constant.BonusConstants;
import com.hzs.bonus.detail.service.ICuMemberAwardsService;
import com.hzs.bonus.order.service.IBonusOrderService;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.constant.RetailConstants;
import com.hzs.common.core.constant.SysConstants;
import com.hzs.common.core.constant.TableNameConstants;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.ComputeUtil;
@ -23,20 +21,16 @@ import com.hzs.common.domain.member.achieve.CuMemberRetailDetail;
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import com.hzs.common.domain.member.bonus.*;
import com.hzs.common.domain.member.detail.*;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.ext.SaOrderItemsExt;
import com.hzs.common.domain.sale.ext.SaOrderWaresExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.system.config.BdAwards;
import com.hzs.system.config.dto.BonusConfigDTO;
import com.hzs.system.config.dto.GradeDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.temporal.ChronoUnit;
@ -946,7 +940,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
int pointCount = sourceMember.getPointCount();
for (int i = 1; i <= newPointInt; i++) {
// 订单生成的新点位
detailList.add(CuMemberRetailDetail.builder()
CuMemberRetailDetail tmpDetail = CuMemberRetailDetail.builder()
.pkMember(sourceMember.getPkMember())
.childNode(pointCount + i)
.pkParent(sourceMember.getPkParent())
@ -955,49 +949,83 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
.pointType(EBonusStageType.NORMAL.getValue())
.pointGift(0)
.creationTime(settleDate)
.build());
}
.build();
detailList.add(tmpDetail);
// 推荐人
Long pkParent = sourceMember.getPkParent();
while (true) {
CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(pkParent);
if (null == targetMember) {
break;
}
// 推荐人
Long pkParent = sourceMember.getPkParent();
while (true) {
CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(pkParent);
if (null == targetMember) {
// 没有推荐人了则直接结束
break;
}
// 推荐人一阶段子点位列表
List<CuMemberRetailDetail> parentDetailList = targetMember.getOneDetailList();
if (CollectionUtil.isEmpty(parentDetailList)) {
// 推荐人没有未完成点位继续往上找
continue;
}
for (CuMemberRetailDetail cuMemberRetailDetail : parentDetailList) {
if (EBonusStageStatus.NO.getValue() == cuMemberRetailDetail.getStageStatus()) {
// 推荐人子点位未完成则进行填充
String firstNode = this.fillChildNode(cuMemberRetailDetail, tmpDetail.getPkMember(), tmpDetail.getChildNode());
switch (firstNode) {
case BonusConstants.POINT_11:
break;
case BonusConstants.POINT_12:
break;
case BonusConstants.POINT_21:
break;
case BonusConstants.POINT_22:
break;
case BonusConstants.POINT_23:
break;
case BonusConstants.POINT_24:
break;
case BonusConstants.POINT_31:
break;
case BonusConstants.POINT_32:
break;
case BonusConstants.POINT_33:
break;
case BonusConstants.POINT_34:
break;
case BonusConstants.POINT_35:
break;
case BonusConstants.POINT_36:
break;
case BonusConstants.POINT_37:
break;
case BonusConstants.POINT_38:
// 第一个点位已经全部填满
cuMemberRetailDetail.setStageStatus(EBonusStageStatus.YES.getValue());
cuMemberRetailDetail.setStageDate(settleDate);
// 推荐人一阶段子点位列表
List<CuMemberRetailDetail> parentDetailList = targetMember.getOneDetailList();
if (CollectionUtil.isEmpty(parentDetailList)) {
continue;
}
for (CuMemberRetailDetail cuMemberRetailDetail : parentDetailList) {
if (EBonusStageStatus.NO.getValue() == cuMemberRetailDetail.getStageStatus()) {
// 推荐人子点位未完成则进行填充
// this.fillChildNode(cuMemberRetailDetail);
// TODO 一阶段全满则需要发放一阶段奖金
// TODO 需要记录填满子点位用来处理生成二阶段以及生成赠点
}
}
}
}
}
}
/**
* 填充子点位
*/
private static final List<String> fieldList = Arrays.asList("11", "12", "21", "22", "23", "24", "31", "32", "33", "34", "35", "36", "37", "38");
private static Map<String, Field> fieldMap = null;
private static final String pointFieldName = "point";
private static final String pointMemberFieldName = "pointMember";
private String fillChildNode(CuMemberRetailDetail cuMemberRetailDetail, Long pointValue, Long pointMemberValue) {
if(ObjectUtil.isEmpty(fieldMap)){
private String fillChildNode(CuMemberRetailDetail cuMemberRetailDetail, Long pointValue, Integer pointMemberValue) {
if (ObjectUtil.isEmpty(BonusConstants.FIELD_MAP)) {
initFieldMap();
}
for (String suffix : fieldList) {
Field pointField = fieldMap.get(pointFieldName + suffix);
Field pointMemberField = fieldMap.get(pointMemberFieldName + suffix);
for (String suffix : BonusConstants.FIELD_LIST) {
Field pointField = BonusConstants.FIELD_MAP.get(BonusConstants.POINT_FIELD_NAME + suffix);
Field pointMemberField = BonusConstants.FIELD_MAP.get(BonusConstants.POINT_MEMBER_FIELD_NAME + suffix);
Object pointFieldValue = ReflectUtil.getFieldValue(cuMemberRetailDetail, pointField);
if(ObjectUtil.isEmpty(pointFieldValue)){
if (ObjectUtil.isEmpty(pointFieldValue)) {
ReflectUtil.setFieldValue(cuMemberRetailDetail, pointField, pointValue);
ReflectUtil.setFieldValue(cuMemberRetailDetail, pointMemberField, pointMemberValue);
return suffix;
@ -1005,22 +1033,14 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
return null;
}
private void initFieldMap(){
fieldMap = new HashMap<>();
for (String suffix : fieldList) {
fieldMap.put(pointFieldName + suffix, ReflectUtil.getField(CuMemberRetailDetail.class, pointFieldName + suffix));
fieldMap.put(pointMemberFieldName + suffix, ReflectUtil.getField(CuMemberRetailDetail.class, pointMemberFieldName + suffix));
private void initFieldMap() {
BonusConstants.FIELD_MAP = new HashMap<>();
for (String suffix : BonusConstants.FIELD_LIST) {
BonusConstants.FIELD_MAP.put(BonusConstants.POINT_FIELD_NAME + suffix, ReflectUtil.getField(CuMemberRetailDetail.class, BonusConstants.POINT_FIELD_NAME + suffix));
BonusConstants.FIELD_MAP.put(BonusConstants.POINT_MEMBER_FIELD_NAME + suffix, ReflectUtil.getField(CuMemberRetailDetail.class, BonusConstants.POINT_MEMBER_FIELD_NAME + suffix));
}
}
// public static void main(String[] args) {
// BonusSettleRangeHandle test = new BonusSettleRangeHandle();
// CuMemberRetailDetail cuMemberRetailDetail = new CuMemberRetailDetail();
// for (int i = 0; i < 14; i++) {
// String suffix = test.fillChildNode(cuMemberRetailDetail, (long) i, (long) (i + 1));
// System.out.println(suffix);
// System.out.println(JSONUtil.toJsonPrettyStr(cuMemberRetailDetail));
// }
// }
}

View File

@ -0,0 +1,33 @@
package com.hzs.bonus.constant;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class BonusConstants {
public static final String POINT_11 = "11";
public static final String POINT_12 = "12";
public static final String POINT_21 = "21";
public static final String POINT_22 = "22";
public static final String POINT_23 = "23";
public static final String POINT_24 = "24";
public static final String POINT_31 = "31";
public static final String POINT_32 = "32";
public static final String POINT_33 = "33";
public static final String POINT_34 = "34";
public static final String POINT_35 = "35";
public static final String POINT_36 = "36";
public static final String POINT_37 = "37";
public static final String POINT_38 = "38";
public static final List<String> FIELD_LIST = Arrays.asList(POINT_11, POINT_12, POINT_21, POINT_22, POINT_23, POINT_24,
POINT_31, POINT_32, POINT_33, POINT_34, POINT_35, POINT_36, POINT_37, POINT_38);
public static final String POINT_FIELD_NAME = "point";
public static final String POINT_MEMBER_FIELD_NAME = "pointMember";
public static Map<String, Field> FIELD_MAP = null;
}

View File

@ -292,43 +292,49 @@
<update id="createCuMemberRetailDetail">
create table ${tableName}
(
pk_member NUMBER(20) not null,
child_node NUMBER(8) not null,
pk_parent NUMBER(20) not null,
stage NUMBER(1) default 1 not null,
stage_status NUMBER(1) default 1 not null,
stage_date DATE,
point_11 NUMBER(20),
point_12 NUMBER(20),
point_21 NUMBER(20),
point_22 NUMBER(20),
point_23 NUMBER(20),
point_24 NUMBER(20),
point_31 NUMBER(20),
point_32 NUMBER(20),
point_33 NUMBER(20),
point_34 NUMBER(20),
point_35 NUMBER(20),
point_36 NUMBER(20),
point_37 NUMBER(20),
point_38 NUMBER(20),
point_member_11 NUMBER(20),
point_member_12 NUMBER(20),
point_member_21 NUMBER(20),
point_member_22 NUMBER(20),
point_member_23 NUMBER(20),
point_member_24 NUMBER(20),
point_member_31 NUMBER(20),
point_member_32 NUMBER(20),
point_member_33 NUMBER(20),
point_member_34 NUMBER(20),
point_member_35 NUMBER(20),
point_member_36 NUMBER(20),
point_member_37 NUMBER(20),
point_member_38 NUMBER(20),
point_type NUMBER(1) default 0 not null,
point_gift NUMBER(1) default 0 not null,
creation_time DATE
pk_member NUMBER(20) not null,
child_node NUMBER(8) not null,
pk_parent NUMBER(20) not null,
stage NUMBER(1) default 1 not null,
stage_status NUMBER(1) default 1 not null,
stage_date DATE,
point_11 NUMBER(8),
point_12 NUMBER(8),
point_21 NUMBER(8),
point_22 NUMBER(8),
point_23 NUMBER(8),
point_24 NUMBER(8),
point_31 NUMBER(8),
point_32 NUMBER(8),
point_33 NUMBER(8),
point_34 NUMBER(8),
point_35 NUMBER(8),
point_36 NUMBER(8),
point_37 NUMBER(8),
point_38 NUMBER(8),
point_member_11 NUMBER(20),
point_member_12 NUMBER(20),
point_member_21 NUMBER(20),
point_member_22 NUMBER(20),
point_member_23 NUMBER(20),
point_member_24 NUMBER(20),
point_member_31 NUMBER(20),
point_member_32 NUMBER(20),
point_member_33 NUMBER(20),
point_member_34 NUMBER(20),
point_member_35 NUMBER(20),
point_member_36 NUMBER(20),
point_member_37 NUMBER(20),
point_member_38 NUMBER(20),
point_type NUMBER(1) default 0 not null,
point_gift NUMBER(1) default 0 not null,
creation_time DATE,
point_first NUMBER(8),
point_member_first NUMBER(20),
point_second NUMBER(8),
point_member_second NUMBER(20),
point_third NUMBER(8),
point_member_third NUMBER(20)
)
</update>

View File

@ -150,15 +150,7 @@ public interface ICuMemberService extends IService<CuMember> {
* @param digit 编号数字位数
* @return
*/
String createUserNameByPremix(Integer pkCountry, Integer digit); /**
* 生成会员编号
*
* @param pkCountry 所属国家
* @param isHaiFun
* @param digit 编号数字位数
* @return
*/
String createUserNameByPremix(Integer pkCountry, Boolean isHaiFun, Integer digit);
String createUserNameByPremix(Integer pkCountry, Integer digit);
/**
* 批量生成会员编号

View File

@ -1541,34 +1541,6 @@ public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> i
return memberCode;
}
@Override
public String createUserNameByPremix(Integer pkCountry, Boolean isHaiFun, Integer digit) {
String prefix;
if (isHaiFun) {
prefix = SysConstants.HAI_FUN_PREFIX;
} else {
CountryDTO country = iCountryServiceApi.getCountry(pkCountry).getData();
prefix = country.getCode();
}
if (StringUtils.isEmpty(prefix)) {
return null;
}
// 生成loginName
String memberCode = this.createMemberCode(prefix, digit);
CuMember cuMemberByKey = getMember(memberCode);
if (cuMemberByKey != null && cuMemberByKey.getPkId() > 0) {
// 用户名已经存在则继续尝试
return this.createUserNameByPremix(pkCountry, isHaiFun, digit);
} else {
// 验证空单注册里面是否存在编号
List<CuMemberEmptyCode> cuMemberEmptyDetails = iCuMemberEmptyCodeService.queryCuMemberEmptyCode(memberCode);
if (CollectionUtil.isNotEmpty(cuMemberEmptyDetails)) {
return this.createUserNameByPremix(pkCountry, isHaiFun, digit);
}
}
return memberCode;
}
/**
* 创建会员编号
*

View File

@ -1,6 +1,5 @@
package com.hzs.common.core.constant;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
@ -9,15 +8,10 @@ import java.util.List;
*/
public class SysConstants {
/**
* 嗨粉前缀
*/
public static final String HAI_FUN_PREFIX = "HF";
/**
* 众康系统前缀
*/
public static final String RETAIL_PREFIX = "KG";
public static final String RETAIL_PREFIX = "ZK";
/**
* 顶点
*/
@ -36,21 +30,11 @@ public class SysConstants {
/**
* 特殊处理编号对外开放使用主要用于支付接入审核
*/
public static final String SPECIAL_CODE = "KG68880628";
/**
* 血缘累计业绩30万
*/
public static final BigDecimal TOTAL_AREA_PV = new BigDecimal("300000");
/**
* 小区业绩累计10万
*/
public static final BigDecimal SMALL_AREA_PV = new BigDecimal("100000");
public static final String SPECIAL_CODE = "ZK68880628";
/**
* 开放使用会员编号用于支付登录查看数据
*/
public static final List<String> CONTROL_MEMBER_LIST = Collections.singletonList("KG66886688");
public static final List<String> CONTROL_MEMBER_LIST = Collections.singletonList("ZK68880628");
}

View File

@ -13,9 +13,9 @@ public enum ESysName {
MANAGE("manage", "后台管理"),
/**
* 系统
* 康系统
*/
KG("kg", "系统"),
ZK("zk", "康系统"),
;

View File

@ -1,15 +1,10 @@
package com.hzs.common.domain.member.achieve;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.hzs.common.core.annotation.Excel;
import com.hzs.common.core.web.domain.BaseEntity;
import lombok.*;
import lombok.experimental.Accessors;
@ -63,169 +58,169 @@ public class CuMemberRetailDetail {
private Date stageDate;
/**
* 点位1-1
* 点位1-1会员子节点
*/
@TableField("POINT_11")
private Long point11;
private Integer point11;
/**
* 点位1-2
* 点位1-2会员子节点
*/
@TableField("POINT_12")
private Long point12;
private Integer point12;
/**
* 点位2-1
* 点位2-1会员子节点
*/
@TableField("POINT_21")
private Long point21;
private Integer point21;
/**
* 点位2-2
* 点位2-2会员子节点
*/
@TableField("POINT_22")
private Long point22;
private Integer point22;
/**
* 点位2-3
* 点位2-3会员子节点
*/
@TableField("POINT_23")
private Long point23;
private Integer point23;
/**
* 点位2-4
* 点位2-4会员子节点
*/
@TableField("POINT_24")
private Long point24;
private Integer point24;
/**
* 点位3-1
* 点位3-1会员子节点
*/
@TableField("POINT_31")
private Long point31;
private Integer point31;
/**
* 点位3-2
* 点位3-2会员子节点
*/
@TableField("POINT_32")
private Long point32;
private Integer point32;
/**
* 点位3-3
* 点位3-3会员子节点
*/
@TableField("POINT_33")
private Long point33;
private Integer point33;
/**
* 点位3-4
* 点位3-4会员子节点
*/
@TableField("POINT_34")
private Long point34;
private Integer point34;
/**
* 点位3-5
* 点位3-5会员子节点
*/
@TableField("POINT_35")
private Long point35;
private Integer point35;
/**
* 点位3-6
* 点位3-6会员子节点
*/
@TableField("POINT_36")
private Long point36;
private Integer point36;
/**
* 点位3-7
* 点位3-7会员子节点
*/
@TableField("POINT_37")
private Long point37;
private Integer point37;
/**
* 点位3-8
* 点位3-8会员子节点
*/
@TableField("POINT_38")
private Long point38;
private Integer point38;
/**
* 点位1-1会员
* 点位1-1会员ID
*/
@TableField("POINT_MEMBER_11")
private Long pointMember11;
/**
* 点位1-2会员
* 点位1-2会员ID
*/
@TableField("POINT_MEMBER_12")
private Long pointMember12;
/**
* 点位2-1会员
* 点位2-1会员ID
*/
@TableField("POINT_MEMBER_21")
private Long pointMember21;
/**
* 点位2-2会员
* 点位2-2会员ID
*/
@TableField("POINT_MEMBER_22")
private Long pointMember22;
/**
* 点位2-3会员
* 点位2-3会员ID
*/
@TableField("POINT_MEMBER_23")
private Long pointMember23;
/**
* 点位2-4会员
* 点位2-4会员ID
*/
@TableField("POINT_MEMBER_24")
private Long pointMember24;
/**
* 点位3-1会员
* 点位3-1会员ID
*/
@TableField("POINT_MEMBER_31")
private Long pointMember31;
/**
* 点位3-2会员
* 点位3-2会员ID
*/
@TableField("POINT_MEMBER_32")
private Long pointMember32;
/**
* 点位3-3会员
* 点位3-3会员ID
*/
@TableField("POINT_MEMBER_33")
private Long pointMember33;
/**
* 点位3-4会员
* 点位3-4会员ID
*/
@TableField("POINT_MEMBER_34")
private Long pointMember34;
/**
* 点位3-5会员
* 点位3-5会员ID
*/
@TableField("POINT_MEMBER_35")
private Long pointMember35;
/**
* 点位3-6会员
* 点位3-6会员ID
*/
@TableField("POINT_MEMBER_36")
private Long pointMember36;
/**
* 点位3-7会员
* 点位3-7会员ID
*/
@TableField("POINT_MEMBER_37")
private Long pointMember37;
/**
* 点位3-8会员
* 点位3-8会员ID
*/
@TableField("POINT_MEMBER_38")
private Long pointMember38;
@ -249,4 +244,41 @@ public class CuMemberRetailDetail {
@TableField("CREATION_TIME")
private Date creationTime;
/**
* 第一层会员子节点
*/
@TableField("POINT_FIRST")
private Integer pointFirst;
/**
* 第一层会员ID
*/
@TableField("POINT_MEMBER_FIRST")
private Long pointMemberFirst;
/**
* 第二层会员子节点
*/
@TableField("POINT_SECOND")
private Integer pointSecond;
/**
* 第二层会员ID
*/
@TableField("POINT_MEMBER_SECOND")
private Long pointMemberSecond;
/**
* 第三层会员子节点
*/
@TableField("POINT_THIRD")
private Integer pointThird;
/**
* 第三层会员ID
*/
@TableField("POINT_MEMBER_THIRD")
private Long pointMemberThird;
}