6 files added
12 files modified
New file |
| | |
| | | package cc.mrbird.febs.common.enumerates; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | @Getter |
| | | public enum MemberLevelEnums { |
| | | |
| | | ZERO_LEVEL_Y(1, "ZERO_LEVEL", "素人") |
| | | ,ZERO_LEVEL_N(2, "ZERO_LEVEL", "素人") |
| | | ,FIRST_LEVEL_Y(1, "FIRST_LEVEL", "玉郎") |
| | | ,FIRST_LEVEL_N(2, "FIRST_LEVEL", "丽人") |
| | | ,SECOND_LEVEL_Y(1, "SECOND_LEVEL", "才子") |
| | | ,SECOND_LEVEL_N(2, "SECOND_LEVEL", "佳人") |
| | | ,THIRD_LEVEL_Y(1, "THIRD_LEVEL", "蓝颜") |
| | | ,THIRD_LEVEL_N(2, "THIRD_LEVEL", "红颜") |
| | | ,FOUR_LEVEL_Y(1, "FOUR_LEVEL", "娇娘") |
| | | ,FOUR_LEVEL_N(2, "FOUR_LEVEL", "贤仕"); |
| | | |
| | | private int male; |
| | | |
| | | private String code; |
| | | |
| | | private String desc; |
| | | MemberLevelEnums(int male, String code, String desc) { |
| | | this.male = male; |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | for (MemberNode node : nodeList) { |
| | | if (node.getMemberId().equals(param) || node.getAddress().equals(param) || node.getInviteId().equals(param)) { |
| | | if (node.getMemberId().equals(param) || node.getPhone().equals(param) || node.getInviteId().equals(param)) { |
| | | return node; |
| | | } |
| | | |
| | |
| | | |
| | | private Long memberId; |
| | | |
| | | private String address; |
| | | private String phone; |
| | | |
| | | private String inviteId; |
| | | |
| | |
| | | |
| | | public List<MemberNode> CHILD = new LinkedList<>(); |
| | | |
| | | public MemberNode(Long memberId, String address, String inviteId, String refererId) { |
| | | public MemberNode(Long memberId, String phone, String inviteId, String refererId) { |
| | | this.memberId = memberId; |
| | | this.address = address; |
| | | this.phone = phone; |
| | | this.inviteId = inviteId; |
| | | this.refererId = refererId; |
| | | } |
| | |
| | | public String profitSetting() { |
| | | return FebsUtil.view("modules/system/profitSetting"); |
| | | } |
| | | @GetMapping("bonusSetting") |
| | | public String bonusSetting() { |
| | | return FebsUtil.view("modules/system/bonusSetting"); |
| | | } |
| | | |
| | | /** |
| | | * 积分设置 |
| | |
| | | */ |
| | | private Integer scorePercent; |
| | | |
| | | private Integer goodsLevel; |
| | | |
| | | private Integer normalPer; |
| | | |
| | | } |
| | |
| | | * 积分兑换比例 |
| | | */ |
| | | private Integer scorePercent; |
| | | |
| | | private Integer goodsLevel; |
| | | |
| | | private Integer normalPer; |
| | | } |
| | |
| | | * 账号级别 1-会员 2-代理 3-股东 |
| | | */ |
| | | private Integer accountLevel; |
| | | |
| | | /** |
| | | * 伞下数量 |
| | | */ |
| | | private Integer childNodeCnt; |
| | | } |
New file |
| | |
| | | package cc.mrbird.febs.mall.entity; |
| | | |
| | | import cc.mrbird.febs.common.entity.BaseEntity; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @TableName(value = "matrix_tree_node") |
| | | public class MatrixTreeNode extends BaseEntity { |
| | | |
| | | private Long treeNode; |
| | | |
| | | private Long parentNode; |
| | | |
| | | private Integer deep; |
| | | |
| | | @TableField(exist = false) |
| | | private String phone; |
| | | |
| | | @TableField(exist = false) |
| | | private String name; |
| | | |
| | | @TableField(exist = false) |
| | | private String inviteId; |
| | | |
| | | @TableField(exist = false) |
| | | private String referrerId; |
| | | } |
New file |
| | |
| | | package cc.mrbird.febs.mall.init; |
| | | |
| | | import cc.mrbird.febs.common.tree.MatrixTree; |
| | | import cc.mrbird.febs.common.tree.MemberNode; |
| | | import cc.mrbird.febs.mall.entity.MatrixTreeNode; |
| | | import cc.mrbird.febs.mall.mapper.MatrixTreeNodeMapper; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 初始化 |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class MatrixTreeInit { |
| | | |
| | | @Autowired |
| | | private MatrixTreeNodeMapper matrixTreeNodeMapper; |
| | | |
| | | @PostConstruct |
| | | public void init() { |
| | | List<MatrixTreeNode> tree = matrixTreeNodeMapper.selectAllMatrixTreeNode(); |
| | | |
| | | if (CollUtil.isEmpty(tree)) { |
| | | return; |
| | | } |
| | | |
| | | for (MatrixTreeNode node : tree) { |
| | | MemberNode memberNode = new MemberNode(); |
| | | memberNode.setMemberId(node.getTreeNode()); |
| | | memberNode.setPhone(node.getPhone()); |
| | | memberNode.setInviteId(node.getInviteId()); |
| | | MatrixTree.getInstance().addNode(memberNode); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package cc.mrbird.febs.mall.mapper; |
| | | |
| | | import cc.mrbird.febs.mall.entity.MatrixTreeNode; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | |
| | | public interface MatrixTreeNodeMapper extends BaseMapper<MatrixTreeNode> { |
| | | |
| | | List<MatrixTreeNode> selectAllMatrixTreeNode(); |
| | | |
| | | MatrixTreeNode selectByTreeNode(@Param("treeNode") Long treeNode); |
| | | } |
| | |
| | | /** |
| | | * 代理分红 |
| | | */ |
| | | // @Scheduled(cron = "0 30 0 * * ?") |
| | | // public void profitJob() { |
| | | // memberProfitService.agentProfit(null); |
| | | // } |
| | | |
| | | // @Scheduled(cron = "0 30 1 * * ?") |
| | | // public void storeAndDirectorJob() { |
| | | // memberProfitService.storeAndDirectorProfit(null); |
| | | // } |
| | | |
| | | // /** |
| | | // * 线下服务中心补贴 |
| | | // */ |
| | | // @Scheduled(cron = "0 0 1 * * ?") |
| | | // public void thankfulJob() { |
| | | // memberProfitService.thankfulProfit(null); |
| | | // } |
| | | |
| | | /** |
| | | * 代理商补贴 TODO 需要去掉注释 |
| | | */ |
| | | @Scheduled(cron = "0 0 1 * * ?") |
| | | public void agentPerkJob() { |
| | | memberProfitService.agentPerkJob(null); |
| | | @Scheduled(cron = "0 30 0 * * ?") |
| | | public void profitJob() { |
| | | memberProfitService.agentProfit(null); |
| | | } |
| | | |
| | | /** |
| | | * 线下服务中心补贴 |
| | | */ |
| | | @Scheduled(cron = "0 0 1 * * ?") |
| | | public void offLinePerkJob() { |
| | | memberProfitService.offLinePerkJob(null); |
| | | } |
| | | |
| | | /** |
| | | * 平级奖励补贴 |
| | | */ |
| | | @Scheduled(cron = "0 0 1 * * ?") |
| | | public void teamEqualsPerkJob() { |
| | | memberProfitService.teamEqualsPerkJob(null); |
| | | } |
| | | |
| | | /** |
| | | * 补贴消息--重试 |
| | | * 一个小时运行一次 |
| | | */ |
| | | @Scheduled(cron = "0 0/5 * * * ?") |
| | | public void mqPerkRetryJob() { |
| | | memberProfitService.mqPerkRetryJob(); |
| | | } |
| | | /** |
| | | * 联创、合伙人的每日绿色凭证释放 |
| | | */ |
| | | @Scheduled(cron = "0 0 1 * * ?") |
| | | public void scoreRecordReleaseJob() { |
| | | memberProfitService.scoreRecordReleaseJob(); |
| | | } |
| | | |
| | | /** |
| | | * 业绩产生凭证 |
| | | */ |
| | | @Scheduled(cron = "0 0 1 * * ?") |
| | | public void achieveReleaseJob() { |
| | | memberProfitService.achieveReleaseJob(); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 静态分红 |
| | | */ |
| | | // @Scheduled(cron = "0 0 0 * * ?") |
| | | // public void staticProfitJob() { |
| | | // memberProfitService.staticProfit(null); |
| | | // } |
| | | |
| | | /** |
| | | * 排名奖 每月1号 |
| | | */ |
| | | // @Scheduled(cron = "0 30 0 1 * ?") |
| | | // public void rankJob() { |
| | | // memberProfitService.rankProfit(); |
| | | // } |
| | | |
| | | /** |
| | | * 积分池,所有消费拿出10%放到积分池,然后按1%每天释放加权平分 |
| | | */ |
| | | // @Scheduled(cron = "0 0 2 * * ?") |
| | | // @Scheduled(cron = "0 0/5 * * * ? ") |
| | | // public void scorePool() { |
| | | // memberProfitService.scorePool(); |
| | | // } |
| | | } |
| | |
| | | package cc.mrbird.febs.mall.service.impl; |
| | | |
| | | import cc.mrbird.febs.common.enumerates.*; |
| | | import cc.mrbird.febs.common.tree.MatrixTree; |
| | | import cc.mrbird.febs.common.tree.MemberNode; |
| | | import cc.mrbird.febs.common.utils.AppContants; |
| | | import cc.mrbird.febs.common.utils.MallUtils; |
| | | import cc.mrbird.febs.mall.entity.*; |
| | | import cc.mrbird.febs.mall.mapper.*; |
| | |
| | | private final MallMemberMapper memberMapper; |
| | | private final MallOrderInfoMapper mallOrderInfoMapper; |
| | | |
| | | private final IApiMallMemberWalletService iApiMallMemberWalletService; |
| | | private final IMallMoneyFlowService mallMoneyFlowService; |
| | | private final MallMemberWalletMapper mallMemberWalletMapper; |
| | | private final SqlSessionTemplate sqlSessionTemplate; |
| | | private final IApiMallMemberWalletService memberWalletService; |
| | | private final MallMoneyFlowMapper mallMoneyFlowMapper; |
| | | private final MallMqRecordMapper mallMqRecordMapper; |
| | | |
| | | private final MatrixTreeNodeMapper matrixTreeNodeMapper; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void autoUpAgentLevel(Long memberId) { |
| | | log.info("###代理自动升级###"); |
| | | MallMember member = memberMapper.selectById(memberId); |
| | | if(StrUtil.isBlank(member.getReferrerIds())) { |
| | | |
| | | MatrixTree tree = MatrixTree.getInstance(); |
| | | MemberNode node = tree.getNode(member.getInviteId()); |
| | | if (node != null) { |
| | | return; |
| | | } |
| | | |
| | | List<String> ids = StrUtil.split(member.getReferrerIds(), ','); |
| | | List<MallMember> parentMembers = memberMapper.selectByInviteIds(ids); |
| | | for (MallMember parent : parentMembers) { |
| | | // 没有购买套餐无法升级合伙人等级 |
| | | if (AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())) { |
| | | continue; |
| | | } |
| | | //合伙人的下一个层级 |
| | | String parentLevel = parent.getLevel(); |
| | | String nextLevel = MemberLevelEnum.SECOND_LEVEL.getNextLevel(parentLevel); |
| | | if (parentLevel.equals(nextLevel)) { |
| | | log.info("当前层级无下一级:{}", parent.getLevel()); |
| | | continue; |
| | | } |
| | | |
| | | DataDictionaryCustom nextLevelDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("AGENT_LEVEL_REQUIRE", nextLevel); |
| | | AgentInfo agentInfo = JSONObject.parseObject(nextLevelDic.getValue(), AgentInfo.class); |
| | | if (!directMemberCnt(parent, agentInfo)) { |
| | | continue; |
| | | } |
| | | |
| | | if (!agentCntFinish(parent, agentInfo)) { |
| | | continue; |
| | | } |
| | | |
| | | if (!teamIncome(parent, agentInfo)) { |
| | | continue; |
| | | } |
| | | |
| | | parent.setLevel(nextLevel); |
| | | memberMapper.updateById(parent); |
| | | MatrixTreeNode matrixTreeNode = matrixTreeNodeMapper.selectByTreeNode(memberId); |
| | | if (matrixTreeNode != null) { |
| | | return; |
| | | } |
| | | |
| | | node = new MemberNode(); |
| | | node.setInviteId(member.getInviteId()); |
| | | node.setPhone(member.getPhone()); |
| | | node.setRefererId(member.getReferrerId()); |
| | | node.setMemberId(member.getId()); |
| | | MemberNode parentNode = tree.addNode(node); |
| | | |
| | | matrixTreeNode = new MatrixTreeNode(); |
| | | matrixTreeNode.setTreeNode(memberId); |
| | | matrixTreeNode.setParentNode(parentNode.getMemberId()); |
| | | matrixTreeNodeMapper.insert(matrixTreeNode); |
| | | |
| | | List<DataDictionaryCustom> dicList = dataDictionaryCustomMapper.selectDicByType(AppContants.AGENT_LEVEL); |
| | | DataDictionaryCustom dic = null; |
| | | for (DataDictionaryCustom dataDictionaryCustom : dicList) { |
| | | if (Integer.parseInt(dataDictionaryCustom.getValue()) == parentNode.CHILD.size()) { |
| | | dic = dataDictionaryCustom; |
| | | } |
| | | } |
| | | |
| | | if (dic == null) { |
| | | return; |
| | | } |
| | | |
| | | MallMember parentMember = memberMapper.selectById(parentNode.getMemberId()); |
| | | parentMember.setChildNodeCnt(parentNode.CHILD.size()); |
| | | parentMember.setLevel(dic.getCode()); |
| | | memberMapper.updateById(parentMember); |
| | | } |
| | | |
| | | /** |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void agentProfit(Date profitDate) { |
| | | log.info("#####==代理分红==start==#####"); |
| | | if (profitDate == null) { |
| | | profitDate = DateUtil.offset(new Date(), DateField.DAY_OF_YEAR, -1); |
| | | } |
| | | // 套餐业绩 |
| | | // BigDecimal tcIncome = mallOrderInfoMapper.selectTotalAmountUnCostForDate(profitDate, null, "D", 2); |
| | | // 普通商品业绩 |
| | | // BigDecimal normalIncome = mallOrderInfoMapper.selectTotalAmountUnCostForDate(profitDate, null, "D", 1); |
| | | |
| | | BigDecimal totalIncome = mallAchieveRecordMapper.selectAchieveTotal("D", profitDate); |
| | | |
| | | DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.AGENT_BONUS.getType(), DataDictionaryEnum.AGENT_BONUS.getCode()); |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="cc.mrbird.febs.mall.mapper.MatrixTreeNodeMapper"> |
| | | |
| | | <select id="selectAllMatrixTreeNode" resultType="cc.mrbird.febs.mall.entity.MatrixTreeNode"> |
| | | select a.*, b.phone, b.name, b.invite_id, b.referrer_id from matrix_tree_node a |
| | | inner join mall_member b on a.tree_node=b.id |
| | | order by a.id |
| | | </select> |
| | | |
| | | <select id="selectByTreeNode" resultType="cc.mrbird.febs.mall.entity.MatrixTreeNode"> |
| | | select * from matrix_tree_node where tree_node=#{treeNode} |
| | | </select> |
| | | </mapper> |
| | |
| | | <div class="layui-form-mid layui-word-aux">设置商品排序位置,想排列在前,设置的数字越小</div> |
| | | </div> |
| | | </div> |
| | | <div class="layui-col-lg6"> |
| | | <label class="layui-form-label febs-form-item-require">抵扣现金(%):</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="scorePercent" lay-verify="required|integer" placeholder="" autocomplete="off" class="layui-input"> |
| | | <div class="layui-word-aux">设置50,即商品价格1000,积分可抵扣的最大金额为1000*50%=500,填写整数,如【50】</div> |
| | | </div> |
| | | </div> |
| | | <!-- <div class="layui-col-lg6">--> |
| | | <!-- <label class="layui-form-label febs-form-item-require">抵扣现金(%):</label>--> |
| | | <!-- <div class="layui-input-block">--> |
| | | <!-- <input type="text" name="scorePercent" lay-verify="required|integer" placeholder="" autocomplete="off" class="layui-input">--> |
| | | <!-- <div class="layui-word-aux">设置50,即商品价格1000,积分可抵扣的最大金额为1000*50%=500,填写整数,如【50】</div>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | </div> |
| | | |
| | | <div class="layui-form-item"> |
| | |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-form-item febs-hide tc-set"> |
| | | <label class="layui-form-label">贡献值:</label> |
| | | <div class="layui-form-item tc-set"> |
| | | <label class="layui-form-label febs-form-item-require">商品类型</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="star" placeholder="请输入贡献值" autocomplete="off" class="layui-input"> |
| | | <div class="layui-form-mid layui-word-aux">支付后,用户获取对应的贡献值</div> |
| | | <select name="goodsLevel" class="goods-level" lay-filter="goods-level-select"> |
| | | <option value="1">会员套餐</option> |
| | | <option value="2">代理套餐</option> |
| | | <option value="2">股东套餐</option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- <div class="layui-form-item febs-hide tc-set">--> |
| | | <!-- <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>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | <div class="layui-form-item febs-hide tc-set"> |
| | | <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> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- <div class="layui-form-item febs-hide tc-set">--> |
| | | <!-- <label class="layui-form-label">静态占比(%)</label>--> |
| | | <!-- <div class="layui-input-block">--> |
| | | <!-- <input type="text" name="staticProp" placeholder="请输入静态占比" autocomplete="off" class="layui-input">--> |
| | | <!-- <div class="layui-form-mid layui-word-aux">所有套餐静态占比相加应等于100%</div>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | <div class="layui-form-item normal-set"> |
| | | <label class="layui-form-label febs-form-item-require">直推比例(%)</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="normalPer" placeholder="请输入直推比例" |
| | | autoComplete="off" class="layui-input"> |
| | | <div class="layui-form-mid layui-word-aux">普通商品直推奖励</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-tab-item"> |
| | |
| | | $(this).hide(); |
| | | } |
| | | }) |
| | | |
| | | $('.normal-set').each(function () { |
| | | if (data.value == 2) { |
| | | $(this).hide(); |
| | | } else { |
| | | $(this).show(); |
| | | } |
| | | }) |
| | | }); |
| | | }); |
| | | </script> |
| | |
| | | <div class="layui-form-mid layui-word-aux">设置商品排序位置,想排列在前,设置的数字越小</div> |
| | | </div> |
| | | </div> |
| | | <div class="layui-col-lg6"> |
| | | <label class="layui-form-label febs-form-item-require">抵扣现金(%):</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="scorePercent" lay-verify="required|integer" placeholder="" autocomplete="off" class="layui-input"> |
| | | <div class="layui-word-aux">设置50,即商品价格1000,积分可抵扣的最大金额为1000*50%=500,填写整数,如【50】</div> |
| | | </div> |
| | | </div> |
| | | <!-- <div class="layui-col-lg6">--> |
| | | <!-- <label class="layui-form-label febs-form-item-require">抵扣现金(%):</label>--> |
| | | <!-- <div class="layui-input-block">--> |
| | | <!-- <input type="text" name="scorePercent" lay-verify="required|integer" placeholder="" autocomplete="off" class="layui-input">--> |
| | | <!-- <div class="layui-word-aux">设置50,即商品价格1000,积分可抵扣的最大金额为1000*50%=500,填写整数,如【50】</div>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | </div> |
| | | |
| | | <div class="layui-form-item"> |
| | |
| | | </div> |
| | | |
| | | <div class="layui-form-item febs-hide tc-set"> |
| | | <label class="layui-form-label">贡献值:</label> |
| | | <label class="layui-form-label febs-form-item-require">套餐类型</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="star" lay-verify="required" placeholder="请输入贡献值" autocomplete="off" class="layui-input"> |
| | | <div class="layui-form-mid layui-word-aux">支付后,用户获取对应的贡献值</div> |
| | | <select name="goodsLevel" class="goods-level"> |
| | | <option value="1">会员套餐</option> |
| | | <option value="2">代理套餐</option> |
| | | <option value="2">股东套餐</option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | | <!-- <div class="layui-form-item febs-hide tc-set">--> |
| | | <!-- <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>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | |
| | | <!-- <div class="layui-form-item febs-hide tc-set">--> |
| | | <!-- <label class="layui-form-label">静态占比(%)</label>--> |
| | | <!-- <div class="layui-input-block">--> |
| | | <!-- <input type="text" name="staticProp" placeholder="请输入静态占比"--> |
| | | <!-- autoComplete="off" class="layui-input">--> |
| | | <!-- <div class="layui-form-mid layui-word-aux">所有套餐静态占比相加应等于100%</div>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | <div class="layui-form-item febs-hide tc-set"> |
| | | <label class="layui-form-label febs-form-item-require">静态倍数</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> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-form-item normal-set"> |
| | | <label class="layui-form-label febs-form-item-require">直推比例(%)</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="normalPer" placeholder="请输入直推比例" |
| | | autoComplete="off" class="layui-input"> |
| | | <div class="layui-form-mid layui-word-aux">普通商品直推奖励</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-tab-item"> |
| | |
| | | "star": goodsInfo.star, |
| | | "sortCnt": goodsInfo.sortCnt, |
| | | "scorePercent": goodsInfo.scorePercent, |
| | | "goodsLevel": goodsInfo.goodsLevel, |
| | | "thumbs": thumbs |
| | | }); |
| | | |
| | |
| | | |
| | | if (goodsInfo.isNormal == 2) { |
| | | $(".tc-set").show(); |
| | | $(".normal-set").hide(); |
| | | } |
| | | |
| | | if (goodsInfo.hasCarriage == 1) { |
| | |
| | | $(this).hide(); |
| | | } |
| | | }) |
| | | |
| | | $('.normal-set').each(function () { |
| | | if (data.value == 2) { |
| | | $(this).hide(); |
| | | } else { |
| | | $(this).show(); |
| | | } |
| | | }) |
| | | }); |
| | | |
| | | }); |
New file |
| | |
| | | <div class="layui-fluid layui-anim febs-anim" id="bonus-setting" lay-title="系统返利设置"> |
| | | <div class="layui-row layui-col-space8 febs-container"> |
| | | <form class="layui-form" action="" lay-filter="bonus-setting-form"> |
| | | <div class="layui-card"> |
| | | <div class="layui-card-body"> |
| | | <blockquote class="layui-elem-quote blue-border">直推设置</blockquote> |
| | | <div class="layui-tab-item layui-show"> |
| | | <table id="agentBonus" lay-filter="agentBonus"></table> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <blockquote class="layui-elem-quote blue-border">全网分红设置</blockquote> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label febs-form-item-require">全网分红比例(%):</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="AGENT_BONUS" lay-verify="required|integer" autocomplete="off" class="layui-input" > |
| | | </div> |
| | | <div class="layui-word-aux" style="margin-left: 150px;">设置为0则不分红</div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label febs-form-item-require">每天分红释放比例:</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="allCashOut" lay-verify="required|integer" autocomplete="off" class="layui-input" > |
| | | </div> |
| | | <div class="layui-word-aux" style="margin-left: 150px;">每天从分红池中释放分红的比例,设置为0则不释放</div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label febs-form-item-require">代理全网分红比例:</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="allCashOut" lay-verify="required|integer" autocomplete="off" class="layui-input" > |
| | | </div> |
| | | <div class="layui-word-aux" style="margin-left: 150px;"></div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label febs-form-item-require">股东全网分红比例:</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="allCashOut" lay-verify="required|integer" autocomplete="off" class="layui-input" > |
| | | </div> |
| | | <div class="layui-word-aux" style="margin-left: 150px;"></div> |
| | | </div> |
| | | </div> |
| | | <div class="layui-card-footer"> |
| | | <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="bonus-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', 'laytpl', 'table'], function () { |
| | | var $ = layui.jquery, |
| | | febs = layui.febs, |
| | | form = layui.form, |
| | | table = layui.table, |
| | | validate = layui.validate, |
| | | $view = $('#bonus-setting') |
| | | , laytpl = layui.laytpl |
| | | , agentBonusArr; |
| | | |
| | | form.verify(validate); |
| | | form.render(); |
| | | |
| | | table.render({ |
| | | elem: '#agentBonus' |
| | | ,cols: [[ //表头 |
| | | {field: 'pushCnt', title: '直推(个)', edit:'text'} |
| | | ,{field: 'prop', title: '比例', edit:'text'} |
| | | ]] |
| | | ,data: [] |
| | | }); |
| | | table.on('edit(agentBonus)', function(obj){ |
| | | var value = obj.value //得到修改后的值 |
| | | ,data = obj.data //得到所在行所有键值 |
| | | ,field = obj.field; //得到字段 |
| | | |
| | | for (let i = 0; i < agentBonusArr.length; i++) { |
| | | if (agentBonusArr[i].code === data.code) { |
| | | var valueData = {}; |
| | | valueData.pushCnt = data.pushCnt; |
| | | valueData.prop = data.prop; |
| | | agentBonusArr[i].value = JSON.stringify(valueData); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | dicDataReq("DIRECT_BONUS_SETTING"); |
| | | function dicDataReq(type) { |
| | | $.get(ctx + 'admin/common/findDicByType/' + type, function (r) { |
| | | if (r.code === 200) { |
| | | var data = r.data; |
| | | if ("DIRECT_BONUS_SETTING" == type) { |
| | | for (let i = 0; i < data.length; i++) { |
| | | data[i].pushCnt = JSON.parse(data[i].value).pushCnt; |
| | | data[i].prop = JSON.parse(data[i].value).prop; |
| | | } |
| | | agentBonusArr = data; |
| | | table.reload('agentBonus', { |
| | | data : data |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | form.on('submit(bonus-setting-form-submit)', function (data) { |
| | | data.field.agentBonus = agentBonusArr; |
| | | $.ajax({ |
| | | 'url':ctx + 'admin/system/bonusSystemSetting', |
| | | 'type':'post', |
| | | 'dataType':'json', |
| | | 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, |
| | | 'traditional': true, |
| | | 'data':JSON.stringify(data.field), |
| | | 'success':function (data) { |
| | | if (data.code == 200) { |
| | | febs.alert.success(data.message); |
| | | } |
| | | }, |
| | | 'error':function () { |
| | | febs.alert.warn('服务器繁忙'); |
| | | } |
| | | }) |
| | | return false; |
| | | }); |
| | | }); |
| | | </script> |
| | |
| | | MemberNode node = new MemberNode(); |
| | | node.setMemberId((long) i); |
| | | node.setInviteId(String.valueOf(i)); |
| | | node.setAddress(String.valueOf(i)); |
| | | node.setPhone(String.valueOf(i)); |
| | | instance.addNode(node); |
| | | } |
| | | |