## Feat - 盒数调整为小数

This commit is contained in:
sangelxiu1 2025-06-30 11:16:47 +08:00
parent 7ee0f2bc8c
commit cfc9511687
8 changed files with 108 additions and 81 deletions

View File

@ -113,16 +113,16 @@ public class GradeDTO implements Serializable {
/**
* 购买盒数
*/
private Integer boxNumber;
private BigDecimal boxNumber;
/**
* 累计盒数
*/
private Integer boxTotal;
private BigDecimal boxTotal;
/**
* 小市场盒数
*/
private Integer boxSmallTotal;
private BigDecimal boxSmallTotal;
}

View File

@ -8,6 +8,7 @@ import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
/**
@ -61,7 +62,7 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
* @param cuMemberAchieveVO 入参
* @return CuMemberRetailAchieveVO
*/
Integer selectMemberBoxNoWaterInjection(CuMemberRetailAchieveVO cuMemberAchieveVO);
BigDecimal selectMemberBoxNoWaterInjection(CuMemberRetailAchieveVO cuMemberAchieveVO);
/**
@ -70,7 +71,7 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
* @param cuMemberAchieveVO 入参
* @return CuMemberRetailAchieveVO
*/
Integer selectMemberBoxWaterInjection(CuMemberRetailAchieveVO cuMemberAchieveVO);
BigDecimal selectMemberBoxWaterInjection(CuMemberRetailAchieveVO cuMemberAchieveVO);
/**
@ -79,7 +80,7 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
* @param cuMemberAchieveVO 入参
* @return CuMemberRetailAchieveVO
*/
Integer selectMemberTotalBox(CuMemberRetailAchieveVO cuMemberAchieveVO);
BigDecimal selectMemberTotalBox(CuMemberRetailAchieveVO cuMemberAchieveVO);
/**
* 查询会员业绩
@ -184,7 +185,7 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
* @param param 入参
* @return Integer
*/
Integer selectSelfNewBox(CuMemberRetailAchieveVO param);
BigDecimal selectSelfNewBox(CuMemberRetailAchieveVO param);
/**
* 查询会员大小区盒数市场动态

View File

@ -79,9 +79,9 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
Integer enableStatus = cuMember.getIsActivate();
if (null != enableStatus && enableStatus.equals(EYesNo.YES.getIntValue())) {
//查询总盒数
Integer totalBox = baseMapper.selectMemberTotalBox(memberAchieveVO);
BigDecimal totalBox = baseMapper.selectMemberTotalBox(memberAchieveVO);
if (null != totalBox) {
Integer maxBox = 0;
BigDecimal maxBox = BigDecimal.ZERO;
//查询是否配置注水
Integer total = baseMapper.selectWaterInjection(cuMember.getMemberCode());
if (null != total && total > 0) {
@ -91,18 +91,20 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
//查询无注水最大盒数
maxBox = baseMapper.selectMemberBoxNoWaterInjection(memberAchieveVO);
}
memberRetailAchieveVO = CuMemberRetailAchieveVO.builder().totalBox(totalBox).smallAreaBox(totalBox - maxBox).build();
// memberRetailAchieveVO = CuMemberRetailAchieveVO.builder().totalBox(totalBox).smallAreaBox(totalBox - maxBox).build();
memberRetailAchieveVO = CuMemberRetailAchieveVO.builder().totalBox(totalBox).smallAreaBox(totalBox.subtract(maxBox)).build();
//总盒数大于2800的时候显示2800
GradeDTO lastGrate = gradeServiceApi.getGradeByGradeValue(EGrade.S_VIP.getValue(), pkCountry).getData();
//配置中的总盒数
Integer totalBoxConfig = lastGrate.getBoxTotal();
Integer totalBoxMax = memberRetailAchieveVO.getTotalBox() > totalBoxConfig ? totalBoxConfig : memberRetailAchieveVO.getTotalBox();
BigDecimal totalBoxConfig = lastGrate.getBoxTotal();
// BigDecimal totalBoxMax = memberRetailAchieveVO.getTotalBox() > totalBoxConfig ? totalBoxConfig : memberRetailAchieveVO.getTotalBox();
BigDecimal totalBoxMax = memberRetailAchieveVO.getTotalBox().compareTo(totalBoxConfig) > 0 ? totalBoxConfig : memberRetailAchieveVO.getTotalBox();
memberRetailAchieveVO.setTotalBox(totalBoxMax);
} else {
memberRetailAchieveVO = CuMemberRetailAchieveVO.builder().totalBox(0).smallAreaBox(0).build();
memberRetailAchieveVO = CuMemberRetailAchieveVO.builder().totalBox(BigDecimal.ZERO).smallAreaBox(BigDecimal.ZERO).build();
}
} else {
memberRetailAchieveVO = CuMemberRetailAchieveVO.builder().totalBox(0).smallAreaBox(0).build();
memberRetailAchieveVO = CuMemberRetailAchieveVO.builder().totalBox(BigDecimal.ZERO).smallAreaBox(BigDecimal.ZERO).build();
}
return memberRetailAchieveVO;
}
@ -470,7 +472,7 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
Integer systemType = param.getSystemType();
//判断会员是否激活
if (!isActivate(pkMember)) {
return CuMemberRetailAchieveVO.builder().bigAreaBox(0).smallAreaBox(0).build();
return CuMemberRetailAchieveVO.builder().bigAreaBox(BigDecimal.ZERO).smallAreaBox(BigDecimal.ZERO).build();
}
//查询直推会员
List<Long> pkMemberList = baseMapper.selectDirectPushByPkMember(pkMember, systemType);
@ -478,23 +480,29 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
//查询参数
getParam(param);
//查询自己的业绩
Integer selfBox = baseMapper.selectSelfNewBox(param);
BigDecimal selfBox = baseMapper.selectSelfNewBox(param);
pkMemberList.remove(pkBigMember);
param.setPkMemberList(pkMemberList);
CuMemberRetailAchieveVO cuMemberRetailAchieveVO = baseMapper.selectMemberBigSmallBox(param);
if (null != cuMemberRetailAchieveVO) {
cuMemberRetailAchieveVO.setPkBigMember(pkBigMember);
Integer selfNewBox = null == selfBox ? 0 : selfBox;
// BigDecimal selfNewBox = null == selfBox ? 0 : selfBox;
BigDecimal selfNewBox = BigDecimal.ZERO;
if(ObjectUtil.isNotEmpty(selfBox)){
selfNewBox = selfBox;
}
//判断大小市场增加自己新增的盒数
if (!pkMember.equals(pkBigMember)) {
cuMemberRetailAchieveVO.setSmallAreaBox(cuMemberRetailAchieveVO.getSmallAreaBox() + selfNewBox);
// cuMemberRetailAchieveVO.setSmallAreaBox(cuMemberRetailAchieveVO.getSmallAreaBox() + selfNewBox);
cuMemberRetailAchieveVO.setSmallAreaBox(cuMemberRetailAchieveVO.getSmallAreaBox().add(selfNewBox));
} else {
cuMemberRetailAchieveVO.setBigAreaBox(cuMemberRetailAchieveVO.getBigAreaBox() + selfNewBox);
// cuMemberRetailAchieveVO.setBigAreaBox(cuMemberRetailAchieveVO.getBigAreaBox() + selfNewBox);
cuMemberRetailAchieveVO.setBigAreaBox(cuMemberRetailAchieveVO.getBigAreaBox().add(selfNewBox));
}
}
return cuMemberRetailAchieveVO;
}
return CuMemberRetailAchieveVO.builder().bigAreaBox(0).smallAreaBox(0).build();
return CuMemberRetailAchieveVO.builder().bigAreaBox(BigDecimal.ZERO).smallAreaBox(BigDecimal.ZERO).build();
}

View File

@ -41,11 +41,11 @@ public class DataStatisticsUtil {
// 激活判断上一天的ENABLE_STATUS 0为正常 1为当天激活 不计算日结数据
if(EYesNo.NO.getIntValue() == cuMember.getIsActivate()){
return CuMemberRetailDataStatisticsResultVO.builder()
.totalBoxNum(0)
.totalBoxNum(BigDecimal.ZERO)
.totalPv(BigDecimal.ZERO)
.bigRangeTotalBoxNum(0)
.bigRangeTotalBoxNum(BigDecimal.ZERO)
.bigRangeTotalPv(BigDecimal.ZERO)
.smallRangeTotalBoxNum(0)
.smallRangeTotalBoxNum(BigDecimal.ZERO)
.smallRangeTotalPv(BigDecimal.ZERO)
.build();
}
@ -62,9 +62,10 @@ public class DataStatisticsUtil {
}
CuMemberRetailDataStatisticsDetailVO bigRangeBox = getBigRangeBoxDetailVO(detailVOList, pkId);
CuMemberRetailDataStatisticsDetailVO bigRangePv = getBigRangePVDetailVO(detailVOList, pkId);
Integer smallRangeTotalBoxNum = total.getTotalBoxNum() - bigRangeBox.getTotalBoxNum();
if(smallRangeTotalBoxNum < 0){
smallRangeTotalBoxNum = 0;
// BigDecimal smallRangeTotalBoxNum = total.getTotalBoxNum() - bigRangeBox.getTotalBoxNum();
BigDecimal smallRangeTotalBoxNum = total.getTotalBoxNum().subtract(bigRangeBox.getTotalBoxNum());
if(smallRangeTotalBoxNum.compareTo(BigDecimal.ZERO) < 0){
smallRangeTotalBoxNum = BigDecimal.ZERO;
}
BigDecimal smallRangeTotalPv = total.getTotalPv().subtract(bigRangePv.getTotalPv());
if(smallRangeTotalPv.compareTo(BigDecimal.ZERO) < 0){
@ -86,15 +87,23 @@ public class DataStatisticsUtil {
public static void calcDetailVOTotalField(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
detailVOList.stream().forEach(detailVO -> {
detailVO.setTotalBoxNum(
detailVO.getConsumeBoxNum() // 个人累计消费盒数(日结)
// + detailVO.getNewBoxNum() // 个人新增盒数(日结)
+ detailVO.getTeamBoxNum() // 团队累计消费盒数(日结)
// + detailVO.getTeamNewBoxNum() // 团队新增盒数(日结)
+ detailVO.getSNewBoxNum() // 个人新增消费盒数(秒结)
+ detailVO.getSTeamNewBoxNum() // 团队新增盒数(秒结)
+ detailVO.getBigBoxNum() // 个人注水大区盒数(日结)
+ detailVO.getSmallBoxNum() // 个人注水小区盒数(日结)
detailVO.getConsumeBoxNum()
.add(detailVO.getTeamBoxNum())
.add(detailVO.getSNewBoxNum())
.add(detailVO.getSTeamNewBoxNum())
.add(detailVO.getBigBoxNum())
.add(detailVO.getSmallBoxNum())
);
// detailVO.setTotalBoxNum(
// detailVO.getConsumeBoxNum() // 个人累计消费盒数(日结)
//// + detailVO.getNewBoxNum() // 个人新增盒数(日结)
// + detailVO.getTeamBoxNum() // 团队累计消费盒数(日结)
//// + detailVO.getTeamNewBoxNum() // 团队新增盒数(日结)
// + detailVO.getSNewBoxNum() // 个人新增消费盒数(秒结)
// + detailVO.getSTeamNewBoxNum() // 团队新增盒数(秒结)
// + detailVO.getBigBoxNum() // 个人注水大区盒数(日结)
// + detailVO.getSmallBoxNum() // 个人注水小区盒数(日结)
// );
detailVO.setTotalPv(
detailVO.getConsumePv()
// .add(detailVO.getNewConsumePv())
@ -112,10 +121,11 @@ public class DataStatisticsUtil {
*/
public static void excludeDailySettlementData(List<CuMemberRetailDataStatisticsDetailVO> detailVOList){
detailVOList.stream().forEach(detailVO -> {
detailVO.setTotalBoxNum(
detailVO.getTotalBoxNum()
- detailVO.getTeamBoxNum() // 团队累计消费盒数(日结)
);
detailVO.setTotalBoxNum(detailVO.getTotalBoxNum().subtract(detailVO.getTeamBoxNum()));
// detailVO.setTotalBoxNum(
// detailVO.getTotalBoxNum()
// - detailVO.getTeamBoxNum() // 团队累计消费盒数(日结)
// );
detailVO.setTotalPv(
detailVO.getTotalPv().subtract(detailVO.getTeamConsumePv())
);
@ -130,11 +140,12 @@ public class DataStatisticsUtil {
public static void excludeWaterInjectionData(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
detailVOList.stream().forEach(detailVO -> {
if(!detailVO.getPkId().equals(pkId)){
detailVO.setTotalBoxNum(
detailVO.getTotalBoxNum()
- detailVO.getBigBoxNum() // 注水大区
- detailVO.getSmallBoxNum() // 注水小区
);
detailVO.setTotalBoxNum(detailVO.getTotalBoxNum().subtract(detailVO.getBigBoxNum()).subtract(detailVO.getSmallBoxNum()));
// detailVO.setTotalBoxNum(
// detailVO.getTotalBoxNum()
// - detailVO.getBigBoxNum() // 注水大区
// - detailVO.getSmallBoxNum() // 注水小区
// );
}
});
}
@ -151,22 +162,23 @@ public class DataStatisticsUtil {
if(ObjectUtil.isNotEmpty(detailVO)){
CuMemberRetailDataStatisticsDetailVO selfVirtualDetailVO = getCuMemberRetailDataStatisticsDetailVO(detailVO);
detailVOList.add(selfVirtualDetailVO);
if(detailVO.getBigBoxNum() >0 || detailVO.getSmallBoxNum() > 0){
// if(detailVO.getBigBoxNum() > 0 || detailVO.getSmallBoxNum() > 0){
if(detailVO.getBigBoxNum().compareTo(BigDecimal.ZERO) >= 0 || detailVO.getSmallBoxNum().compareTo(BigDecimal.ZERO) >= 0){
CuMemberRetailDataStatisticsDetailVO bigRangeVirtualDetailVO = CuMemberRetailDataStatisticsDetailVO.builder()
.pkId(BIG_RANGE_VIRTUAL_ID)
.memberCode(BIG_RANGE_VIRTUAL_NAME)
.totalBoxNum(detailVO.getBigBoxNum())
.totalPv(BigDecimal.ZERO)
.bigBoxNum(0)
.smallBoxNum(0)
.bigBoxNum(BigDecimal.ZERO)
.smallBoxNum(BigDecimal.ZERO)
.build();
CuMemberRetailDataStatisticsDetailVO smallRangeVirtualDetailVO = CuMemberRetailDataStatisticsDetailVO.builder()
.pkId(SMALL_RANGE_VIRTUAL_ID)
.memberCode(SMALL_RANGE_VIRTUAL_NAME)
.totalBoxNum(detailVO.getSmallBoxNum())
.totalPv(BigDecimal.ZERO)
.bigBoxNum(0)
.smallBoxNum(0)
.bigBoxNum(BigDecimal.ZERO)
.smallBoxNum(BigDecimal.ZERO)
.build();
detailVOList.add(bigRangeVirtualDetailVO);
detailVOList.add(smallRangeVirtualDetailVO);
@ -181,15 +193,19 @@ public class DataStatisticsUtil {
.memberCode(SELF_VIRTUAL_NAME)
.totalBoxNum(
detailVO.getConsumeBoxNum()
// + detailVO.getNewBoxNum()
+ detailVO.getSNewBoxNum()
.add(detailVO.getSNewBoxNum())
)
// .totalBoxNum(
// detailVO.getConsumeBoxNum()
//// + detailVO.getNewBoxNum()
// + detailVO.getSNewBoxNum()
// )
.totalPv(
detailVO.getConsumePv()
.add(detailVO.getSNewConsumePv())
)
.bigBoxNum(0)
.smallBoxNum(0)
.bigBoxNum(BigDecimal.ZERO)
.smallBoxNum(BigDecimal.ZERO)
.build();
}
@ -199,7 +215,7 @@ public class DataStatisticsUtil {
*/
public static List<CuMemberRetailDataStatisticsDetailVO> getSmallRangeList(List<CuMemberRetailDataStatisticsDetailVO> detailVOList){
List<CuMemberRetailDataStatisticsDetailVO> result = new ArrayList<>();
Integer maxTotalBoxNum = getMaxTotalBoxNum(detailVOList);
BigDecimal maxTotalBoxNum = getMaxTotalBoxNum(detailVOList);
if (maxTotalBoxNum == null) {
return new ArrayList<>(detailVOList);
}
@ -248,17 +264,19 @@ public class DataStatisticsUtil {
return result;
}
private static Integer getMaxTotalBoxNum(List<CuMemberRetailDataStatisticsDetailVO> detailVOList) {
private static BigDecimal getMaxTotalBoxNum(List<CuMemberRetailDataStatisticsDetailVO> detailVOList) {
return detailVOList.stream()
.map(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum)
.filter(Objects::nonNull)
.max(Integer::compare)
// .max(Integer::compare)
.max(BigDecimal::compareTo)
.orElse(null);
}
private static CuMemberRetailDataStatisticsDetailVO getBigRangeBoxDetailVO(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
return detailVOList.stream()
.filter(vo -> vo.getTotalBoxNum() != null && !vo.getPkId().equals(pkId))
.max(Comparator.comparingInt(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum))
// .max(Comparator.comparingInt(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum))
.max(Comparator.comparing(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum, BigDecimal::compareTo))
.orElse(null);
}
private static CuMemberRetailDataStatisticsDetailVO getBigRangePVDetailVO(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){

View File

@ -52,7 +52,7 @@ public class CuMemberRetailAchieveVO implements Serializable {
/**
* 盒数
*/
private Integer boxs;
private BigDecimal boxs;
/**
* 状态
@ -62,18 +62,18 @@ public class CuMemberRetailAchieveVO implements Serializable {
/**
* 总盒数
*/
private Integer totalBox;
private BigDecimal totalBox;
/**
* 小市场盒数
*/
private Integer smallAreaBox;
private BigDecimal smallAreaBox;
/**
* 大市场盒数
*/
private Integer bigAreaBox;
private BigDecimal bigAreaBox;
/**
* 小区业绩
@ -171,19 +171,19 @@ public class CuMemberRetailAchieveVO implements Serializable {
/**
* 今日盒数
*/
private Integer realTimeBox;
private BigDecimal realTimeBox;
/**
* 昨日盒数
*/
private Integer yesterdayBox;
private BigDecimal yesterdayBox;
/**
* 本月盒数
*/
private Integer monthBox;
private BigDecimal monthBox;
/**
* 上月盒数
*/
private Integer upMonthBox;
private BigDecimal upMonthBox;
/**
* 等级

View File

@ -54,28 +54,28 @@ public class CuMemberRetailDataStatisticsDetailVO implements Serializable {
/**
* 日结表-个人累计消费盒数
*/
private Integer consumeBoxNum;
private BigDecimal consumeBoxNum;
/**
* 日结表-个人当日新消费盒数
*/
private Integer newBoxNum;
private BigDecimal newBoxNum;
/**
* 日结表-个人伞下累计消费盒数
*/
private Integer teamBoxNum;
private BigDecimal teamBoxNum;
/**
* 日结表-个人伞下新消费盒数
*/
private Integer teamNewBoxNum;
private BigDecimal teamNewBoxNum;
/**
* 秒结表-个人新消费盒数
*/
private Integer sNewBoxNum;
private BigDecimal sNewBoxNum;
/**
* 秒结表-团队新消费盒数
*/
private Integer sTeamNewBoxNum;
private BigDecimal sTeamNewBoxNum;
/**
* 秒结表-个人新消费pv
*/
@ -85,7 +85,7 @@ public class CuMemberRetailDataStatisticsDetailVO implements Serializable {
*/
private BigDecimal sTeamNewPv;
private Integer sTeamBoxNum;
private BigDecimal sTeamBoxNum;
/**
* 个人总业绩
@ -94,16 +94,16 @@ public class CuMemberRetailDataStatisticsDetailVO implements Serializable {
/**
* 个人总盒数
*/
private Integer totalBoxNum;
private BigDecimal totalBoxNum;
/**
* 注水大区
*/
private Integer bigBoxNum;
private BigDecimal bigBoxNum;
/**
* 注水小区
*/
private Integer smallBoxNum;
private BigDecimal smallBoxNum;
@Override
public CuMemberRetailDataStatisticsDetailVO clone() {

View File

@ -33,15 +33,15 @@ public class CuMemberRetailDataStatisticsResultVO implements Serializable {
/**
* 总盒数
*/
private Integer totalBoxNum;
private BigDecimal totalBoxNum;
/**
* 大区盒数
*/
private Integer bigRangeTotalBoxNum;
private BigDecimal bigRangeTotalBoxNum;
/**
* 小区盒数
*/
private Integer smallRangeTotalBoxNum;
private BigDecimal smallRangeTotalBoxNum;
/**
* 总业绩

View File

@ -69,7 +69,7 @@
</sql>
<select id="selectMemberBoxNoWaterInjection" resultType="integer">
<select id="selectMemberBoxNoWaterInjection" resultType="java.math.BigDecimal">
SELECT nvl(max(smallAreaBox), 0) smallareabox
from
(
@ -90,14 +90,14 @@
</select>
<select id="selectMemberBoxWaterInjection" resultType="integer">
<select id="selectMemberBoxWaterInjection" resultType="java.math.BigDecimal">
SELECT NVL(mr.big_box_num, 0) smallAreaBox
FROM ${memberRetailTable} mr
WHERE mr.category = 0
AND mr.pk_member = #{pkMember}
</select>
<select id="selectMemberTotalBox" resultType="integer">
<select id="selectMemberTotalBox" resultType="java.math.BigDecimal">
SELECT nvl(sum(totalAreaBox), 0) totalAreaBox
FROM (SELECT NVL(mr.team_box_num + mr.consume_box_num, 0) totalAreaBox
FROM ${memberRetailTable} mr
@ -531,7 +531,7 @@
</select>
<select id="selectSelfNewBox" resultType="integer">
<select id="selectSelfNewBox" resultType="java.math.BigDecimal">
SELECT nvl(sum(box), 0) box
FROM (
<if test="isFirst != null and isFirst == 0">