src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/entity/MallSystemSetting.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/mapper/MallSystemSettingMapper.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/modules/MallMemberMapper.xml | ●●●●● patch | view | raw | blame | history |
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -81,7 +81,12 @@ /** * 美业直推分红设置 */ DIRECT_BONUS_SETTING("DIRECT_BONUS_SETTING", ""); DIRECT_BONUS_SETTING("DIRECT_BONUS_SETTING", ""), INTERNET_LEVEL_BONUS("INTERNET_LEVEL_BONUS", ""), ALL_INTERNET_BONUS("MEIYE_BONUS_TYPE", "ALL_BONUS"), ALL_INTERNET_BONUS_RELEASE("MEIYE_BONUS_TYPE", "BONUS_RELEASE"); private String type; private String code; src/main/java/cc/mrbird/febs/mall/entity/MallSystemSetting.java
New file @@ -0,0 +1,24 @@ package cc.mrbird.febs.mall.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.math.BigDecimal; /** * @author wzy * @date 2023-04-21 **/ @Data @TableName("mall_system_setting") public class MallSystemSetting { @TableId(type = IdType.AUTO) private Long id; private BigDecimal allBonus; private BigDecimal agentBonus; } src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
@@ -103,4 +103,6 @@ List<MallMember> selectByRole(@Param("type") int type, @Param("state")int state); List<MallMember> selectParentMemberList(@Param("list") List<String> inviteIds, @Param("refererId") String refererId, @Param("limit") Integer limit); List<MallMember> selectMemberAfterLevelList(String level); } src/main/java/cc/mrbird/febs/mall/mapper/MallSystemSettingMapper.java
New file @@ -0,0 +1,7 @@ package cc.mrbird.febs.mall.mapper; import cc.mrbird.febs.mall.entity.MallSystemSetting; import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface MallSystemSettingMapper extends BaseMapper<MallSystemSetting> { } src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
@@ -42,7 +42,7 @@ */ @Scheduled(cron = "0 30 0 * * ?") public void profitJob() { memberProfitService.agentProfit(null); memberProfitService.agentProfit(); } /** src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java
@@ -30,4 +30,6 @@ void scorePool(); void selaHalfVoucher(String price); void allInternetProfit(); } src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -61,6 +61,8 @@ private final MallScoreAchieveReleaseMapper mallScoreAchieveReleaseMapper; private final MallScoreVoucherMapper mallScoreVoucherMapper; private final MallSystemSettingMapper mallSystemSettingMapper; @Override @Transactional(rollbackFor = Exception.class) public void staticProfit(Date profitDate) { @@ -628,4 +630,72 @@ return achieveRelease; } @Override public void allInternetProfit() { log.info("###全网分红执行--start--###"); MallSystemSetting systemSetting = mallSystemSettingMapper.selectById(1L); if (systemSetting == null) { log.info("没有系统配置"); return; } BigDecimal hundred = BigDecimal.valueOf(100); DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.ALL_INTERNET_BONUS_RELEASE.getType(), DataDictionaryEnum.ALL_INTERNET_BONUS_RELEASE.getCode()); if (dic == null || StrUtil.isBlank(dic.getValue()) || Integer.parseInt(dic.getValue()) == 0) { log.info("不进行全网分红"); return; } // 全网分红 BigDecimal waitToBonus = systemSetting.getAllBonus().multiply(new BigDecimal(dic.getValue()).divide(hundred, 2, RoundingMode.HALF_UP)); List<MallMember> mallMembers = mallMemberMapper.selectMemberAfterLevelList(MemberLevelEnums.FIRST_LEVEL_Y.getCode()); if (CollUtil.isEmpty(mallMembers) || waitToBonus.compareTo(BigDecimal.ZERO) < 1) { log.info("待分红金额不足或会员不足"); return; } List<DataDictionaryCustom> dicList = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.INTERNET_LEVEL_BONUS.getType()); if (CollUtil.isEmpty(dicList)) { return; } Map<String, BigDecimal> levelBonusMap = new HashMap<>(); dicList.forEach(item -> { BigDecimal levelRatio = new BigDecimal(item.getValue()).divide(hundred, 2, RoundingMode.HALF_UP); levelBonusMap.put(item.getCode(), waitToBonus.multiply(levelRatio)); }); Map<String, List<MallMember>> levelMemberMap = new HashMap<>(); // TODO 并发处理 mallMembers.forEach(item -> { List<MallMember> memberList = levelMemberMap.get(item.getLevel()); if (CollUtil.isEmpty(memberList)) { memberList = new ArrayList<>(); } memberList.add(item); levelMemberMap.put(item.getLevel(), memberList); }); if (levelMemberMap.isEmpty()) { return; } for (Map.Entry<String, List<MallMember>> entry : levelMemberMap.entrySet()) { BigDecimal levelBonus = levelBonusMap.get(entry.getKey()); List<MallMember> memberList = entry.getValue(); if (CollUtil.isEmpty(memberList) || levelBonus.compareTo(BigDecimal.ZERO) < 1) { continue; } BigDecimal perBonus = levelBonus.divide(BigDecimal.valueOf(memberList.size()), 2, RoundingMode.HALF_UP); memberList.forEach(item -> { changeScoreAndCommission(item.getId(), perBonus, 2, null); }); } log.info("###全网分红执行--end--###"); } } src/main/resources/mapper/modules/MallMemberMapper.xml
@@ -457,4 +457,27 @@ limit #{limit} </if> </select> <select id="selectMemberAfterLevelList" resultType="cc.mrbird.febs.mall.entity.MallMember"> SELECT m.*, b. VALUE FROM mall_member m INNER JOIN data_dictionary_custom b ON m.LEVEL = b. CODE WHERE 1=1 AND b.type = 'AGENT_LEVEL' AND b.VALUE > ( SELECT VALUE FROM data_dictionary_custom a WHERE a. CODE = #{level} AND a.type = 'AGENT_LEVEL' ) GROUP BY m.id </select> </mapper>