xiaoyong931011
2022-08-11 3afcc72b898f91d808ba81f9620730e4665d6890
20220810
2 files added
4 files modified
140 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/ScorePoorDto.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java 25 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/system/scorePoorSetting.html 75 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -6,6 +6,9 @@
@Getter
public enum DataDictionaryEnum {
    //积分池设置{"everydayRatio":10,"dividEquallyRatio":1}每日订单的百分之几,增加到积分池;每日平分百分比
    SCORE_POOR_RADIO("SCORE_POOR", "SCORE_POOR_RADIO"),
    SCORE_SIGN_SETTING("SCORE_SETTING", "SCORE_SIGN_SETTING"),
    STATIC_BONUS("BONUS_TYPE", "STATIC_BONUS"),
    DYNAMIC_BONUS("BONUS_TYPE", "DYNAMIC_BONUS"),
src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
@@ -3,6 +3,7 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
import cc.mrbird.febs.mall.dto.CashOutSettingDto;
import cc.mrbird.febs.mall.dto.ScorePoorDto;
import cc.mrbird.febs.mall.service.ICommonService;
import cc.mrbird.febs.mall.service.ISystemService;
import lombok.RequiredArgsConstructor;
@@ -39,4 +40,10 @@
        commonService.addDataDic(DataDictionaryEnum.CASHOUT_SETTING.getType(), DataDictionaryEnum.CASHOUT_SETTING.getCode(), cashOutSettingDto, "提现设置");
        return new FebsResponse().success();
    }
    @PostMapping(value = "/scorePoor")
    public FebsResponse scorePoor(ScorePoorDto scorePoorDto) {
        commonService.addDataDic(DataDictionaryEnum.SCORE_POOR_RADIO.getType(), DataDictionaryEnum.SCORE_POOR_RADIO.getCode(), scorePoorDto, "积分池设置");
        return new FebsResponse().success();
    }
}
src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
@@ -4,6 +4,7 @@
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
import cc.mrbird.febs.common.utils.FebsUtil;
import cc.mrbird.febs.mall.dto.CashOutSettingDto;
import cc.mrbird.febs.mall.dto.ScorePoorDto;
import cc.mrbird.febs.mall.dto.ScoreSettingDto;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
@@ -37,4 +38,14 @@
        }
        return FebsUtil.view("modules/system/cashOutSetting");
    }
    @GetMapping("scorePoorSetting")
    @RequiresPermissions("scorePoorSetting:update")
    public String scorePoor(Model model) {
        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SCORE_POOR_RADIO.getType(), DataDictionaryEnum.SCORE_POOR_RADIO.getCode());
        if (dic != null) {
            model.addAttribute("scorePoor", JSONObject.parseObject(dic.getValue(), ScorePoorDto.class));
        }
        return FebsUtil.view("modules/system/scorePoorSetting");
    }
}
src/main/java/cc/mrbird/febs/mall/dto/ScorePoorDto.java
New file
@@ -0,0 +1,19 @@
package cc.mrbird.febs.mall.dto;
import lombok.Data;
import java.math.BigDecimal;
/**
 *积分池设置{"everydayRatio":10,"dividEquallyRatio":1}每日订单的百分之几,增加到积分池;每日平分百分比
 */
@Data
public class ScorePoorDto {
    //每日订单的百分之几,增加到积分池
    private BigDecimal everydayRatio;
    //每日平分百分比
    private BigDecimal dividEquallyRatio;
}
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -6,6 +6,7 @@
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
import cc.mrbird.febs.common.utils.AppContants;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.mall.dto.ScorePoorDto;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
@@ -17,7 +18,9 @@
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -503,9 +506,17 @@
         * 每天释放1%,给全体用户
         */
        //前一天的所有消费的10%
        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SCORE_POOR_RADIO.getType(), DataDictionaryEnum.SCORE_POOR_RADIO.getCode());
        if(ObjectUtil.isEmpty(dic)){
            return;
        }
        ScorePoorDto scorePoorDto = JSONUtil.toBean(dic.getValue(), ScorePoorDto.class);
        BigDecimal everydayRatio = scorePoorDto.getEverydayRatio().multiply(new BigDecimal(0.01));
        BigDecimal dividEquallyRatio = scorePoorDto.getDividEquallyRatio().multiply(new BigDecimal(0.01));
        Date date = DateUtil.offsetDay(new Date(), -1);
        BigDecimal totalAmount = mallOrderInfoMapper.selectTotalAmountByPayDoneAndDataString(1, date);
        BigDecimal multiplyTotalAmount = totalAmount.multiply(new BigDecimal(0.1));
        BigDecimal multiplyTotalAmount = totalAmount.multiply(everydayRatio);
        String redisKey = "scorePool";
        String scorePoolRedis = redisUtils.getString(redisKey);
@@ -517,13 +528,14 @@
        BigDecimal scorePoolNew = scorePoolOld.add(multiplyTotalAmount);
        //每天释放1%给全体用户
        BigDecimal scorePoolToDay = scorePoolNew.multiply(new BigDecimal(0.01));
        BigDecimal scorePoolToDay = scorePoolNew.multiply(dividEquallyRatio);
        redisUtils.set(redisKey,scorePoolNew.subtract(scorePoolToDay).intValue(),0L);
        QueryWrapper<MallMember> formalMember = new QueryWrapper<>();
        formalMember.ne("level", AgentLevelEnum.ZERO_LEVEL.name());
        List<MallMember> mallMembers = mallMemberMapper.selectList(formalMember);
        int cnt = 0;
        if(CollUtil.isNotEmpty(mallMembers)){
            BigDecimal income = new BigDecimal(scorePoolToDay.divide(new BigDecimal(mallMembers.size()), 2, RoundingMode.HALF_UP).intValue());
            if(income.compareTo(BigDecimal.ZERO) < 1){
@@ -536,6 +548,9 @@
                 */
                BigDecimal outCome = BigDecimal.ZERO;
                MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMember.getId());
                if(mallMemberWallet.getScore().compareTo(BigDecimal.ZERO) < 1){
                    continue;
                }
                if(mallMemberWallet.getScore().compareTo(income) < 0){
                    outCome = new BigDecimal(mallMemberWallet.getScore().intValue());
                }else{
@@ -545,9 +560,13 @@
                walletService.reduce(outCome, mallMember.getId(), "score");
                moneyFlowService.addMoneyFlow(mallMember.getId(), outCome, MoneyFlowTypeEnum.SCORE_POOL.getValue(), null, FlowTypeEnum.COMMISSION.getValue());
                moneyFlowService.addMoneyFlow(mallMember.getId(), outCome.negate(), MoneyFlowTypeEnum.SCORE_POOL.getValue(), null, FlowTypeEnum.SCORE.getValue());
                cnt ++;
            }
        }
        log.info("#####==积分池==end==######");
        log.info("#####==积分池==end==######;" +
                "今日新增积分:" + multiplyTotalAmount.setScale(2, RoundingMode.HALF_UP)
                +";平分积分数量:"+scorePoolToDay.setScale(2, RoundingMode.HALF_UP)
                +";人数:"+cnt);
    }
}
src/main/resources/templates/febs/views/modules/system/scorePoorSetting.html
New file
@@ -0,0 +1,75 @@
<div class="layui-fluid layui-anim febs-anim" id="scorePoor-setting" lay-title="积分池设置">
    <div class="layui-row layui-col-space8 febs-container">
        <form class="layui-form" action="" lay-filter="scorePoor-setting-form">
            <div class="layui-card">
                <div class="layui-card-body">
                    <div class="layui-form-item">
                        <label class="layui-form-label ">增加到积分池比例:</label>
                        <div class="layui-input-block">
                            <input type="text" name="everydayRatio" data-th-id="${scorePoor.everydayRatio}"
                                   lay-verify="number" autocomplete="off" class="layui-input" >
                        </div>
                        <div class="layui-word-aux" style="margin-left: 150px;">【填写整数】每日订单金额的百分之几,增加到积分池:直接输入百分比,例如25%,直接输入25</div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label ">每日平分百分比:</label>
                        <div class="layui-input-block">
                            <input type="text" name="dividEquallyRatio" data-th-id="${scorePoor.dividEquallyRatio}"
                                   lay-verify="number" autocomplete="off" class="layui-input" >
                        </div>
                        <div class="layui-word-aux" style="margin-left: 150px;">【填写整数】积分池每日平分百分比:直接输入百分比,例如25%,直接输入25</div>
                    </div>
                </div>
                <div class="layui-card-footer">
                    <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="scorePoor-setting-form-submit" id="submit">保存</button>
                </div>
            </div>
        </form>
    </div>
</div>
<style>
    .layui-form-label {
        width: 120px;
    }
    .layui-form-item .layui-input-block {
        margin-left: 150px;
    }
    .layui-table-form .layui-form-item {
        margin-bottom: 20px !important;
    }
</style>
<script data-th-inline="javascript" type="text/javascript">
    layui.use(['dropdown', 'jquery', 'validate', 'febs', 'form', 'eleTree'], function () {
        var $ = layui.jquery,
            febs = layui.febs,
            form = layui.form,
            scorePoor = [[${scorePoor}]],
            validate = layui.validate,
            $view = $('#scorePoor-setting');
        form.verify(validate);
        initCashoutValue();
        form.render();
        function initCashoutValue() {
            form.val("scorePoor-setting-form", {
                "everydayRatio": scorePoor.everydayRatio,
                "dividEquallyRatio": scorePoor.dividEquallyRatio
            });
        }
        form.on('submit(scorePoor-setting-form-submit)', function (data) {
            console.log(data);
            febs.post(ctx + 'admin/system/scorePoor', data.field, function (res) {
                febs.alert.success('设置成功');
            });
            window.location.reload();
            return false;
        });
    });
</script>