Helius
2024-02-20 8bb4b36a259aa2eeca225ebd44af6c2500708ffd
Merge branch 'blnka-vip' into blnka
1 files added
11 files modified
384 ■■■■ changed files
src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java 4 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java 41 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/goods/goodsAddNew.html 7 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/goods/goodsUpdateNew.html 9 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html 20 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/mallMember/member-coupon-select.html 98 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/mallMember/moneyFlowList.html 152 ●●●● patch | view | raw | blame | history
src/test/java/cc/mrbird/febs/AgentTest.java 14 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java
@@ -10,7 +10,9 @@
     */
    PAY(1, "积分支付"),
    BUY(2, "购买商品获得积分");
    BUY(2, "购买商品获得积分"),
    RECOMMEND(3, "推荐下单获得积分");
    private final int value;
src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java
@@ -614,4 +614,9 @@
        return new FebsResponse().success().message("操作成功");
    }
    @PostMapping("addMemberCoupon")
    @ControllerEndpoint(operation = "会员添加优惠券呢", exceptionMessage = "操作失败")
    public FebsResponse addMemberCoupon(@Valid MallMember mallmember) {
        return mallMemberService.addMemberCoupon(mallmember);
    }
}
src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java
@@ -413,4 +413,11 @@
        return FebsUtil.view("modules/mallMember/vip-level-setting");
    }
    @GetMapping("addCoupon/{id}")
    public String addCoupon(@PathVariable long id, Model model) {
//        AdminAgentLevelSetInfoVo data = mallMemberService.getAgentLevelSetInfoByMemberId(id);
        model.addAttribute("memberId", id);
        return FebsUtil.view("modules/mallMember/member-coupon-select");
    }
}
src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java
@@ -136,4 +136,6 @@
    IPage<MallMember> getsalemanRuleList(MallMember mallMember, QueryRequest request);
    FebsResponse salemanCoupon(MallMember mallmember);
    FebsResponse addMemberCoupon(MallMember member);
}
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java
@@ -21,6 +21,8 @@
import cc.mrbird.febs.pay.model.MemberWithdrawalDto;
import cc.mrbird.febs.pay.service.IXcxPayService;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
@@ -75,6 +77,8 @@
    private final MallAgentRecordMapper mallAgentRecordMapper;
    private final MallSalesmanMapper mallSalesmanMapper;
    private final SalemanCouponMapper salemanCouponMapper;
    private final MallMemberCouponMapper mallMemberCouponMapper;
    private final MallGoodsCouponMapper mallGoodsCouponMapper;
    @Override
    public IPage<MallMember> getMallMemberList(MallMember mallMember, QueryRequest request) {
@@ -924,4 +928,25 @@
        return ids;
    }
    @Override
    public FebsResponse addMemberCoupon(MallMember member) {
        MallGoodsCoupon existCoupon = mallGoodsCouponMapper.selectById(member.getCouponId());
        if(existCoupon == null) {
            return new FebsResponse().fail().message("优惠券不存在");
        }
        MallMemberCoupon memberCoupon = new MallMemberCoupon();
        memberCoupon.setCouponId(existCoupon.getId());
        memberCoupon.setCouponName(existCoupon.getName());
        memberCoupon.setInviteId(member.getInviteId());
        memberCoupon.setCouponUuid(IdUtil.simpleUUID());
        memberCoupon.setState(1);
        memberCoupon.setFromType(4);
        memberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(), existCoupon.getExpireDay()));
        memberCoupon.setMemberId(member.getId());
        mallMemberCouponMapper.insert(memberCoupon);
        return new FebsResponse().success().message("操作成功");
    }
}
src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java
@@ -3,11 +3,13 @@
import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
import cc.mrbird.febs.common.enumerates.ScoreFlowTypeEnum;
import cc.mrbird.febs.mall.entity.MallGoods;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.entity.MallOrderInfo;
import cc.mrbird.febs.mall.entity.MallOrderItem;
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
import cc.mrbird.febs.mall.service.IApiMallGoodsService;
import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
import cc.mrbird.febs.mall.service.IApiMallOrderInfoService;
import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
@@ -27,8 +29,12 @@
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Handler;
import java.util.stream.Collectors;
@Slf4j
@@ -43,6 +49,7 @@
    private final MallMemberMapper mallMemberMapper;
    private final MallVipConfigMapper mallVipConfigMapper;
    private final AgentProducer agentProducer;
    private final IApiMallGoodsService mallGoodsService;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -55,6 +62,7 @@
        Long memberId = mallOrderInfo.getMemberId();
        MallVipBenefits mallVipBenefits = mallVipConfigService.hasVipBenefits(memberId);
        MallMember member = mallMemberMapper.selectById(memberId);
        BigDecimal multiple = BigDecimal.ONE;
        String name = "";
        if (mallVipBenefits != null) {
@@ -70,6 +78,39 @@
        mallMoneyFlowService.addMoneyFlow(memberId, new BigDecimal(score), ScoreFlowTypeEnum.BUY.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue(), CollUtil.join(skuNames, ","), 2);
        mallMemberWalletService.add(new BigDecimal(score), memberId, "prizeScore");
        List<Long> itemGoodsIds = mallOrderInfo.getItems().stream().map(MallOrderItem::getGoodsId).distinct().collect(Collectors.toList());
        List<MallGoods> goodsList = mallGoodsService.listByIds(itemGoodsIds);
        Map<Long, MallGoods> goodsMap = goodsList.stream().collect(Collectors.toMap(MallGoods::getId, MallGoods -> MallGoods));
        Map<Long, BigDecimal> recommendScoreMap = new HashMap<>();
        mallOrderInfo.getItems().forEach(item -> {
            if (StrUtil.isNotBlank(item.getMemberInviteId()) && !member.getInviteId().equals(item.getMemberInviteId())) {
                MallGoods mallGoods = goodsMap.get(item.getGoodsId());
                if (mallGoods.getStaticMulti() == null) {
                    return;
                }
                BigDecimal multi = mallGoods.getStaticMulti().divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
                MallMember mallMember = mallMemberMapper.selectInfoByInviteId(item.getMemberInviteId());
                if (mallMember == null) {
                    return;
                }
                BigDecimal recommendScore = recommendScoreMap.get(mallMember.getId());
                recommendScore = recommendScore == null ? BigDecimal.ZERO : recommendScore;
                recommendScore = recommendScore.add(item.getAmount().multiply(multi));
                recommendScoreMap.put(mallMember.getId(), recommendScore);
            }
        });
        recommendScoreMap.forEach((key, value) -> {
            if (value != null) {
                mallMoneyFlowService.addMoneyFlow(key, value, ScoreFlowTypeEnum.RECOMMEND.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue(), CollUtil.join(skuNames, ","), 2);
                mallMemberWalletService.add(value, key, "prizeScore");
            }
        });
        agentProducer.sendVipLevelUp(orderId);
    }
src/main/resources/templates/febs/views/modules/goods/goodsAddNew.html
@@ -103,11 +103,10 @@
                                            </div>
                                        </div>
                                        <div class="layui-form-item febs-hide tc-set">
                                            <label class="layui-form-label">静态倍数</label>
                                        <div class="layui-form-item">
                                            <label class="layui-form-label">推销员返积分比例(%)</label>
                                            <div class="layui-input-block">
                                                <input type="text" name="staticMulti" placeholder="请输入静态倍数" autocomplete="off" class="layui-input">
                                                <div class="layui-form-mid layui-word-aux">支付后,赠送(购买金额*静态倍数)的赠送积分</div>
                                                <input type="text" name="staticMulti" placeholder="请输入推销员返积分比例" autocomplete="off" class="layui-input">
                                            </div>
                                        </div>
src/main/resources/templates/febs/views/modules/goods/goodsUpdateNew.html
@@ -112,13 +112,10 @@
                                            </div>
                                        </div>
                                        <div class="layui-form-item febs-hide tc-set">
                                            <label class="layui-form-label">静态倍数</label>
                                        <div class="layui-form-item">
                                            <label class="layui-form-label">推销员返积分比例</label>
                                            <div class="layui-input-block">
                                                <input type="text" name="staticMulti" placeholder="请输入静态倍数"
                                                       autoComplete="off" class="layui-input">
                                                <div class="layui-form-mid layui-word-aux">支付后,赠送(购买金额*静态倍数)的赠送积分
                                                </div>
                                                <input type="text" name="staticMulti" placeholder="请输入推销员返积分比例" autocomplete="off" class="layui-input">
                                            </div>
                                        </div>
src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html
@@ -112,13 +112,7 @@
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="updateReferer">修改推荐人</button>
        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="updateVipLevel">修改会员等级</button>
<!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="registMember">添加会员</button>-->
<!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="balance">拨付余额</button>-->
<!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="score">拨付赠送积分</button>-->
<!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="prizeScore">拨付竞猜积分</button>-->
<!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="resetPwd">重置登录密码</button>-->
<!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="resetPayPwd">重置支付密码</button>-->
<!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="agentLevel">设置代理等级</button>-->
        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="addCoupon">优惠券派送</button>
    </div>
</script>
<!-- 表格操作栏 end -->
@@ -451,6 +445,18 @@
                    }
                });
            }
            if (layEvent === 'addCoupon') {
                febs.modal.open('添加优惠券', 'modules/mallMember/addCoupon/' + checkData[0].id, {
                    btn: ['确认', '取消'],
                    yes: function (index, layero) {
                        $('#member-coupon-select').find('#submit').trigger('click');
                    },
                    btn2: function () {
                        layer.closeAll();
                    }
                });
            }
        });
        function systemPay(text, id, type) {
src/main/resources/templates/febs/views/modules/mallMember/member-coupon-select.html
New file
@@ -0,0 +1,98 @@
<style>
    #member-coupon-select {
        padding: 20px 25px 25px 0;
    }
    #member-coupon-select .layui-treeSelect .ztree li a, .ztree li span {
        margin: 0 0 2px 3px !important;
    }
    #member-coupon-select #data-permission-tree-block {
        border: 1px solid #eee;
        border-radius: 2px;
        padding: 3px 0;
    }
    #member-coupon-select .layui-treeSelect .ztree li span.button.switch {
        top: 1px;
        left: 3px;
    }
    #member-coupon-select img{
        max-width:100px
    }
</style>
<div class="layui-fluid" id="member-coupon-select">
    <form class="layui-form" action="" lay-filter="member-coupon-select-form">
        <div class="layui-form-item febs-hide">
            <label class="layui-form-label febs-form-item-require">用户id:</label>
            <div class="layui-input-block">
                <input type="text" name="id" data-th-value="${memberId}">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">优惠卷:</label>
            <div class="layui-input-inline">
                <select name="couponId" class="member-coupon-select-category" id="couponCategarySelect">
                    <option value="">请选择</option>
                </select>
            </div>
        </div>
        <div class="layui-form-item febs-hide">
            <button class="layui-btn" lay-submit="" lay-filter="member-coupon-select-form-submit" id="submit"></button>
        </div>
    </form>
</div>
<script data-th-inline="javascript">
    layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree', 'laydate','upload'], function () {
        var $ = layui.$,
            febs = layui.febs,
            layer = layui.layer,
            formSelects = layui.formSelects,
            treeSelect = layui.treeSelect,
            form = layui.form,
            laydate = layui.laydate,
            eleTree = layui.eleTree,
            adminCouponSelectVo = [[${adminCouponSelectVo}]],
            $view = $('#member-coupon-select'),
            upload = layui.upload,
            validate = layui.validate;
        form.render();
        laydate.render({
            elem: '#febs-form-group-date'
        });
        formSelects.render();
        //(下拉框)
        $.get(ctx + 'admin/goods/coupon/tree', function (data) {
            for (var k in data)
            {
                $(".member-coupon-select-category").append("<option value='" + data[k].couponId + "'>" + data[k].couponName + "</option>");
            }
            layui.use('form', function () {
                var form = layui.form;
                $("#couponCategarySelect").val('')
                form.render();
            });
        });
        // initUserValue();
        //
        // function initUserValue() {
        //     form.val("member-coupon-select-form", {
        //         "id": adminCouponSelectVo.id,
        //     });
        // }
        form.on('submit(member-coupon-select-form-submit)', function (data) {
            febs.post(ctx + 'admin/mallMember/addMemberCoupon', data.field, function () {
                layer.closeAll();
                febs.alert.success('操作成功');
                $('#febs-member-list').find('#reset').click();
            });
            return false;
        });
    });
</script>
src/main/resources/templates/febs/views/modules/mallMember/moneyFlowList.html
@@ -49,6 +49,16 @@
                                            </select>
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <label class="layui-form-label layui-form-label-sm">资金类型</label>
                                        <div class="layui-input-inline">
                                            <select name="flowType">
                                                <option value="">请选择</option>
                                                <option value="1">余额</option>
                                                <option value="3">积分</option>
                                            </select>
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <label class="layui-form-label layui-form-label-sm">开始时间</label>
@@ -65,18 +75,6 @@
                                                   placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input">
                                        </div>
                                    </div>
<!--                                    <div class="layui-inline">-->
<!--                                        <label class="layui-form-label layui-form-label-sm">资金类型</label>-->
<!--                                        <div class="layui-input-inline">-->
<!--                                            <select name="flowType">-->
<!--                                                <option value="">请选择</option>-->
<!--                                                <option value="1">余额</option>-->
<!--                                                <option value="2">赠送积分</option>-->
<!--                                                <option value="3">竞猜积分</option>-->
<!--                                                <option value="4">佣金</option>-->
<!--                                            </select>-->
<!--                                        </div>-->
<!--                                    </div>-->
                                </div>
                            </div>
                            <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
@@ -156,68 +154,76 @@
                    {field: 'amount', title: '金额', minWidth: 150,align:'left', totalRow:true},
                    {field: 'type', title: '流水类型',
                        templet: function (d) {
                            if (d.type === 1) {
                                return '<span>静态收益</span>'
                            } else if (d.type === 2) {
                                return '<span>直推奖</span>'
                            } else if (d.type === 3) {
                                return '<span>代理收益</span>'
                            } else if (d.type === 4) {
                                return '<span>排名收益</span>'
                            }else if (d.type === 5) {
                                return '<span>总监收益</span>'
                            }else if (d.type === 6) {
                                return '<span>社区店补</span>'
                            }else if (d.type === 7) {
                                return '<span>一代收益</span>'
                            }else if (d.type === 8) {
                                return '<span>提现</span>'
                            }else if (d.type === 9) {
                                return '<span>转账</span>'
                            }else if (d.type === 10) {
                                return '<span>余额支付</span>'
                            }else if (d.type === 11) {
                                return '<span>退款</span>'
                            }else if (d.type === 12) {
                                return '<span>佣金转竞猜积分</span>'
                            }else if (d.type === 13) {
                                return '<span>佣金转余额</span>'
                            }else if (d.type === 14) {
                                return '<span>竞猜积分签到</span>'
                            }else if (d.type === 15) {
                                return '<span>感恩奖</span>'
                            }else if (d.type === 16) {
                                return '<span>系统拨付</span>'
                            }else if (d.type === 17) {
                                return '<span>抽奖</span>'
                            }else if (d.type === 18) {
                                return '<span>充值</span>'
                            }else if (d.type === 19) {
                                return '<span>收益</span>'
                            }else if (d.type === 20) {
                                return '<span>赠送金额</span>'
                            }else if (d.type === 21) {
                                return '<span>微信支付</span>'
                            }else if (d.type === 22) {
                                return '<span>微信退款</span>'
                            }else{
                                return ''
                            if (d.flowType === 3) {
                                if (d.type === 1) {
                                    return '<span>积分支付</span>'
                                } else if (d.type === 2) {
                                    return '<span>购买商品获得积分</span>'
                                } else if (d.type === 3) {
                                    return '<span>推荐下单获得积分</span>'
                                }
                            }
                            if (d.flowType === 1) {
                                if (d.type === 1) {
                                    return '<span>静态收益</span>'
                                } else if (d.type === 2) {
                                    return '<span>直推奖</span>'
                                } else if (d.type === 3) {
                                    return '<span>代理收益</span>'
                                } else if (d.type === 4) {
                                    return '<span>排名收益</span>'
                                }else if (d.type === 5) {
                                    return '<span>总监收益</span>'
                                }else if (d.type === 6) {
                                    return '<span>社区店补</span>'
                                }else if (d.type === 7) {
                                    return '<span>一代收益</span>'
                                }else if (d.type === 8) {
                                    return '<span>提现</span>'
                                }else if (d.type === 9) {
                                    return '<span>转账</span>'
                                }else if (d.type === 10) {
                                    return '<span>余额支付</span>'
                                }else if (d.type === 11) {
                                    return '<span>退款</span>'
                                }else if (d.type === 12) {
                                    return '<span>佣金转竞猜积分</span>'
                                }else if (d.type === 13) {
                                    return '<span>佣金转余额</span>'
                                }else if (d.type === 14) {
                                    return '<span>竞猜积分签到</span>'
                                }else if (d.type === 15) {
                                    return '<span>感恩奖</span>'
                                }else if (d.type === 16) {
                                    return '<span>系统拨付</span>'
                                }else if (d.type === 17) {
                                    return '<span>抽奖</span>'
                                }else if (d.type === 18) {
                                    return '<span>充值</span>'
                                }else if (d.type === 19) {
                                    return '<span>收益</span>'
                                }else if (d.type === 20) {
                                    return '<span>赠送金额</span>'
                                }else if (d.type === 21) {
                                    return '<span>微信支付</span>'
                                }else if (d.type === 22) {
                                    return '<span>微信退款</span>'
                                }else{
                                    return ''
                                }
                            }
                        }, minWidth: 80,align:'center'},
                    // {field: 'flowType', title: '资金类型',
                    //     templet: function (d) {
                    //         if (d.flowType === 1) {
                    //             return '余额';
                    //         } else if(d.flowType === 2) {
                    //             return '赠送积分'
                    //         } else if(d.flowType === 3) {
                    //             return '竞猜积分'
                    //         } else if(d.flowType === 4) {
                    //             return '佣金'
                    //         } else {
                    //             return '-';
                    //         }
                    //     }, minWidth: 80,align:'center'},
                    {field: 'flowType', title: '资金类型',
                        templet: function (d) {
                            if (d.flowType === 1) {
                                return '余额';
                            } else if(d.flowType === 3) {
                                return '积分'
                            } else {
                                return '-';
                            }
                        }, minWidth: 80,align:'center'},
                    {field: 'orderNo', title: '订单编号', minWidth: 150,align:'left'},
                    {field: 'createdTime', title: '创建时间', minWidth: 180,align:'center'}
                ]]
@@ -238,7 +244,7 @@
                name: $searchForm.find('input[name="name"]').val().trim(),
                phone: $searchForm.find('input[name="phone"]').val().trim(),
                type: $searchForm.find("select[name='type']").val(),
                // flowType: $searchForm.find("select[name='flowType']").val(),
                flowType: $searchForm.find("select[name='flowType']").val(),
            };
        }
src/test/java/cc/mrbird/febs/AgentTest.java
@@ -805,11 +805,11 @@
//    }
//
//
//    @Autowired
//    private AgentConsumer agentConsumer;
//
//    @Test
//    public void orderReturnTest() {
//        agentConsumer.orderReturnMoney("7");
//    }
    @Autowired
    private AgentConsumer agentConsumer;
    @Test
    public void orderReturnTest() {
        agentConsumer.getScoreMsg(212L);
    }
}