diff --git a/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizMemberController.java b/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizMemberController.java index e8dcd3281..cb1df3f46 100644 --- a/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizMemberController.java +++ b/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizMemberController.java @@ -148,14 +148,17 @@ public class BizMemberController extends BaseController //取出团队盒数等级配置 List levels = DictUtils.getDictCache("busi_teamaward_level"); int numLimit = Integer.parseInt(DictUtils.getDictLabel("busi_award_set", "1")); + long teamDou = getTeamDou(teamNum, levels, numLimit); //归总直属下级盒数 List list = (List) temp.get(memberID); - for (Map item : list) { - Long id = (Long) item.get("id"); - long num = ((BigDecimal) item.get("num")).longValue(); - item.put("totalNum", num); - long totalNum = getTeamNum((List) temp.get(id), item); - item.put("desc", getTeamDesc(totalNum, levels, numLimit)); + if (list != null) { + for (Map item : list) { + Long id = (Long) item.get("id"); + long num = ((BigDecimal) item.get("num")).longValue(); + item.put("totalNum", num); + getTeamNum((List) temp.get(id), item); + item.put("desc", getTeamDesc((Long) item.get("totalNum"), levels, numLimit, teamDou)); + } } Map resultMap = new HashMap(); resultMap.put("teamNum", teamNum); @@ -164,9 +167,9 @@ public class BizMemberController extends BaseController } //取出子级团队盒数 - private long getTeamNum(List chList, Map parent) + private void getTeamNum(List chList, Map parent) { - if (chList == null) return 0; + if (chList == null) return; for (Map item : chList) { long num = ((BigDecimal) item.get("num")).longValue(); long totalNum = (Long) parent.get("totalNum"); @@ -176,13 +179,12 @@ public class BizMemberController extends BaseController getTeamNum(children, parent); } } - return (Long) parent.get("totalNum"); } - //取出团队盒数说明 - private String getTeamDesc(long totalNum, List levels, int numLimit) + //取得当前团队盒数对应分成 + public static long getTeamDou(long totalNum, List levels, int numLimit) { - if (totalNum <= numLimit) return "[团队盒数" + totalNum + " 无分成]"; + if (totalNum <= numLimit) return 0L; for (SysDictData data : levels) { String label = data.getDictLabel(); long dou = Long.parseLong(data.getDictValue()); @@ -190,10 +192,20 @@ public class BizMemberController extends BaseController long begin = Long.parseLong(split[0]); long end = Long.parseLong(split[1]); if (totalNum >= begin && totalNum <= end) { - return "[团队盒数" + totalNum + " 分成" + dou + "福豆]"; + return dou; } } - return ""; + return 0L; + } + + //取出团队盒数说明 + private String getTeamDesc(long totalNum, List levels, int numLimit, long teamDou) + { + long dou = getTeamDou(totalNum, levels, numLimit); + if (teamDou == 0) { + return "[团队盒数" + totalNum + " 无分成]"; + } + return "[团队盒数" + totalNum + " 分成" + teamDou + "-" + dou + "=" + (teamDou - dou) + "福豆]"; } /** diff --git a/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizTeamRewardController.java b/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizTeamRewardController.java new file mode 100644 index 000000000..635c4b532 --- /dev/null +++ b/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizTeamRewardController.java @@ -0,0 +1,126 @@ +package com.ruoyi.business.controller; + +import java.util.List; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.business.domain.BizTeamReward; +import com.ruoyi.business.service.IBizTeamRewardService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 团队奖励明细Controller + * + * @author ruoyi + * @date 2020-09-22 + */ +@Controller +@RequestMapping("/business/reward") +public class BizTeamRewardController extends BaseController +{ + private String prefix = "business/reward"; + + @Autowired + private IBizTeamRewardService bizTeamRewardService; + + @RequiresPermissions("business:reward:view") + @GetMapping() + public String reward() + { + return prefix + "/reward"; + } + + /** + * 查询团队奖励明细列表 + */ + @RequiresPermissions("business:reward:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(BizTeamReward bizTeamReward) + { + startPage(); + List list = bizTeamRewardService.selectBizTeamRewardList(bizTeamReward); + return getDataTable(list); + } + + /** + * 导出团队奖励明细列表 + */ + @RequiresPermissions("business:reward:export") + @Log(title = "团队奖励明细", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ResponseBody + public AjaxResult export(BizTeamReward bizTeamReward) + { + List list = bizTeamRewardService.selectBizTeamRewardList(bizTeamReward); + ExcelUtil util = new ExcelUtil(BizTeamReward.class); + return util.exportExcel(list, "reward"); + } + + /** + * 新增团队奖励明细 + */ + @GetMapping("/add") + public String add() + { + return prefix + "/add"; + } + + /** + * 新增保存团队奖励明细 + */ + @RequiresPermissions("business:reward:add") + @Log(title = "团队奖励明细", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(BizTeamReward bizTeamReward) + { + return toAjax(bizTeamRewardService.insertBizTeamReward(bizTeamReward)); + } + + /** + * 修改团队奖励明细 + */ + @GetMapping("/edit/{id}") + public String edit(@PathVariable("id") Long id, ModelMap mmap) + { + BizTeamReward bizTeamReward = bizTeamRewardService.selectBizTeamRewardById(id); + mmap.put("bizTeamReward", bizTeamReward); + return prefix + "/edit"; + } + + /** + * 修改保存团队奖励明细 + */ + @RequiresPermissions("business:reward:edit") + @Log(title = "团队奖励明细", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(BizTeamReward bizTeamReward) + { + return toAjax(bizTeamRewardService.updateBizTeamReward(bizTeamReward)); + } + + /** + * 删除团队奖励明细 + */ + @RequiresPermissions("business:reward:remove") + @Log(title = "团队奖励明细", businessType = BusinessType.DELETE) + @PostMapping( "/remove") + @ResponseBody + public AjaxResult remove(String ids) + { + return toAjax(bizTeamRewardService.deleteBizTeamRewardByIds(ids)); + } +} diff --git a/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizMember.java b/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizMember.java index 2aaf2f033..a111d87d5 100644 --- a/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizMember.java +++ b/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizMember.java @@ -46,6 +46,9 @@ public class BizMember extends BaseEntity @Excel(name = "会员类型") private Integer memberType; + /** 专项返还等级:0-出局,1-第一次 */ + private Integer specialLevel; + /** 是否删除:0-否,1-是 */ private Integer isDelete; @@ -150,7 +153,16 @@ public class BizMember extends BaseEntity { return memberType; } - public void setIsDelete(Integer isDelete) + + public Integer getSpecialLevel() { + return specialLevel; + } + + public void setSpecialLevel(Integer specialLevel) { + this.specialLevel = specialLevel; + } + + public void setIsDelete(Integer isDelete) { this.isDelete = isDelete; } diff --git a/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizTeamReward.java b/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizTeamReward.java new file mode 100644 index 000000000..f3a5a8b5c --- /dev/null +++ b/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizTeamReward.java @@ -0,0 +1,145 @@ +package com.ruoyi.business.domain; + +import java.math.BigDecimal; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 团队奖励明细对象 biz_team_reward + * + * @author ruoyi + * @date 2020-09-22 + */ +public class BizTeamReward extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + //团队奖励明细类型 + public static final int TEAM_REWARD_TYPE_RECOMM = 0; + public static final int TEAM_REWARD_TYPE_SECOND = 1; + public static final int TEAM_REWARD_TYPE_TEAM = 2; + + /** 团队奖励ID */ + private Long id; + + /** 会员ID */ + @Excel(name = "会员ID") + private Long memberId; + + /** 团队用户ID */ + @Excel(name = "团队用户ID") + private Long rewardMemberId; + + /** 用户购买产品数量 */ + @Excel(name = "用户购买产品数量") + private Long rewardProductCount; + + /** 奖励的福豆数量 */ + @Excel(name = "奖励的福豆数量") + private Long rewardAmount; + + /** 产品ID */ + @Excel(name = "产品ID") + private Long productId; + + /** 奖励类型:0:一级直推;1:二级推荐;2:平级; */ + @Excel(name = "奖励类型:0:一级直推;1:二级推荐;2:团队;") + private Integer rewardType; + + /** 奖励日期(xxxx-xx-xx) */ + @Excel(name = "奖励日期(xxxx-xx-xx)") + private String rewardDate; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setMemberId(Long memberId) + { + this.memberId = memberId; + } + + public Long getMemberId() + { + return memberId; + } + public void setRewardMemberId(Long rewardMemberId) + { + this.rewardMemberId = rewardMemberId; + } + + public Long getRewardMemberId() + { + return rewardMemberId; + } + public void setRewardProductCount(Long rewardProductCount) + { + this.rewardProductCount = rewardProductCount; + } + + public Long getRewardProductCount() + { + return rewardProductCount; + } + public void setRewardAmount(Long rewardAmount) + { + this.rewardAmount = rewardAmount; + } + + public Long getRewardAmount() + { + return rewardAmount; + } + public void setProductId(Long productId) + { + this.productId = productId; + } + + public Long getProductId() + { + return productId; + } + public void setRewardType(Integer rewardType) + { + this.rewardType = rewardType; + } + + public Integer getRewardType() + { + return rewardType; + } + public void setRewardDate(String rewardDate) + { + this.rewardDate = rewardDate; + } + + public String getRewardDate() + { + return rewardDate; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("memberId", getMemberId()) + .append("rewardMemberId", getRewardMemberId()) + .append("rewardProductCount", getRewardProductCount()) + .append("rewardAmount", getRewardAmount()) + .append("productId", getProductId()) + .append("rewardType", getRewardType()) + .append("rewardDate", getRewardDate()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizMemberMapper.java b/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizMemberMapper.java index fb5f3245b..bafb3b8ca 100644 --- a/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizMemberMapper.java +++ b/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizMemberMapper.java @@ -106,4 +106,45 @@ public interface BizMemberMapper * @return 结果 */ public List selectTeamData(Map paramMap); + + /** + * 查询专项划拨任务会员列表 + * + * @param minValue 专项划拨每日金额 + * @return 会员集合 + */ + public List selectSpecialMember(int minValue); + + /** + * 取出某用户团队盒数 + * + * @param memberID 上级用户ID + * @return 结果 + */ + public long getMemberTeamCount(Long memberID); + + /** + * 修改会员出局等级 + * + * @param bizMember 会员 + * @return 结果 + */ + public int updateMemberLevel(BizMember bizMember); + + /** + * 查询需结算团队分成会员列表 + * + * @param minValue 团队分成最少盒数 + * @return 会员集合 + */ + public List selectTeamBenefitMember(int minValue); + + /** + * 查询直接下级会员列表 + * + * @param memberID 会员ID + * @return 会员ID集合 + */ + public List selectSubMember(Long memberID); + } diff --git a/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizOrderMapper.java b/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizOrderMapper.java index 9ec294a10..cbb739ed1 100644 --- a/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizOrderMapper.java +++ b/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizOrderMapper.java @@ -1,6 +1,8 @@ package com.ruoyi.business.mapper; import java.util.List; +import java.util.Map; + import com.ruoyi.business.domain.BizOrder; import com.ruoyi.business.domain.BizOrderDetail; @@ -67,4 +69,12 @@ public interface BizOrderMapper * @return 结果 */ public int insertBizOrderDetail(BizOrderDetail bizOrderDetail); + + /** + * 查询团队订单 + * + * @param memberID 会员ID + * @return 订单集合 + */ + public List selectTeamBizOrder(Long memberID); } diff --git a/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizTeamRewardMapper.java b/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizTeamRewardMapper.java new file mode 100644 index 000000000..4271fdc65 --- /dev/null +++ b/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizTeamRewardMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.business.mapper; + +import java.util.List; +import com.ruoyi.business.domain.BizTeamReward; + +/** + * 团队奖励明细Mapper接口 + * + * @author ruoyi + * @date 2020-09-22 + */ +public interface BizTeamRewardMapper +{ + /** + * 查询团队奖励明细 + * + * @param id 团队奖励明细ID + * @return 团队奖励明细 + */ + public BizTeamReward selectBizTeamRewardById(Long id); + + /** + * 查询团队奖励明细列表 + * + * @param bizTeamReward 团队奖励明细 + * @return 团队奖励明细集合 + */ + public List selectBizTeamRewardList(BizTeamReward bizTeamReward); + + /** + * 新增团队奖励明细 + * + * @param bizTeamReward 团队奖励明细 + * @return 结果 + */ + public int insertBizTeamReward(BizTeamReward bizTeamReward); + + /** + * 修改团队奖励明细 + * + * @param bizTeamReward 团队奖励明细 + * @return 结果 + */ + public int updateBizTeamReward(BizTeamReward bizTeamReward); + + /** + * 删除团队奖励明细 + * + * @param id 团队奖励明细ID + * @return 结果 + */ + public int deleteBizTeamRewardById(Long id); + + /** + * 批量删除团队奖励明细 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteBizTeamRewardByIds(String[] ids); +} diff --git a/ruoyi-business/src/main/java/com/ruoyi/business/service/IBizMemberService.java b/ruoyi-business/src/main/java/com/ruoyi/business/service/IBizMemberService.java index 74ac106bb..1134fcc52 100644 --- a/ruoyi-business/src/main/java/com/ruoyi/business/service/IBizMemberService.java +++ b/ruoyi-business/src/main/java/com/ruoyi/business/service/IBizMemberService.java @@ -99,4 +99,20 @@ public interface IBizMemberService * @return 结果 */ public List selectTeamData(Map paramMap); + + /** + * 执行专项划拨每日任务 + * + * @param + * @return 结果 + */ + public int doSpecialTask(); + + /** + * 执行团队福豆分成每日任务 + * + * @param + * @return 结果 + */ + public int doTeamTask(); } diff --git a/ruoyi-business/src/main/java/com/ruoyi/business/service/IBizTeamRewardService.java b/ruoyi-business/src/main/java/com/ruoyi/business/service/IBizTeamRewardService.java new file mode 100644 index 000000000..f6b18dda2 --- /dev/null +++ b/ruoyi-business/src/main/java/com/ruoyi/business/service/IBizTeamRewardService.java @@ -0,0 +1,69 @@ +package com.ruoyi.business.service; + +import java.util.List; +import com.ruoyi.business.domain.BizTeamReward; + +/** + * 团队奖励明细Service接口 + * + * @author ruoyi + * @date 2020-09-22 + */ +public interface IBizTeamRewardService +{ + /** + * 查询团队奖励明细 + * + * @param id 团队奖励明细ID + * @return 团队奖励明细 + */ + public BizTeamReward selectBizTeamRewardById(Long id); + + /** + * 查询团队奖励明细列表 + * + * @param bizTeamReward 团队奖励明细 + * @return 团队奖励明细集合 + */ + public List selectBizTeamRewardList(BizTeamReward bizTeamReward); + + /** + * 新增团队奖励明细 + * + * @param bizTeamReward 团队奖励明细 + * @return 结果 + */ + public int insertBizTeamReward(BizTeamReward bizTeamReward); + + /** + * 插入团队明细 + * + * @param + * @return + */ + public void addTeamReward(Long memberID, Long rewardMemberId, Long rewardProductCount, Long rewardAmount, Long productId, int rewardType, String rewardDate); + + /** + * 修改团队奖励明细 + * + * @param bizTeamReward 团队奖励明细 + * @return 结果 + */ + public int updateBizTeamReward(BizTeamReward bizTeamReward); + + /** + * 批量删除团队奖励明细 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteBizTeamRewardByIds(String ids); + + /** + * 删除团队奖励明细信息 + * + * @param id 团队奖励明细ID + * @return 结果 + */ + public int deleteBizTeamRewardById(Long id); +} diff --git a/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizMemberServiceImpl.java b/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizMemberServiceImpl.java index 064c6e5b6..49c6b2b8c 100644 --- a/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizMemberServiceImpl.java +++ b/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizMemberServiceImpl.java @@ -1,25 +1,31 @@ package com.ruoyi.business.service.impl; +import com.ruoyi.business.controller.BizMemberController; +import com.ruoyi.business.domain.BizAccount; +import com.ruoyi.business.domain.BizAccountDetail; +import com.ruoyi.business.domain.BizMember; +import com.ruoyi.business.domain.BizTeamReward; +import com.ruoyi.business.mapper.BizAccountMapper; +import com.ruoyi.business.mapper.BizMemberMapper; +import com.ruoyi.business.mapper.BizOrderMapper; +import com.ruoyi.business.service.IBizAccountService; +import com.ruoyi.business.service.IBizMemberService; +import com.ruoyi.business.service.IBizTeamRewardService; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.system.domain.SysDictData; +import com.ruoyi.system.utils.DictUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; import java.math.BigDecimal; -import java.util.Date; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import com.ruoyi.business.domain.BizAccount; -import com.ruoyi.business.domain.BizAccountDetail; -import com.ruoyi.business.mapper.BizAccountMapper; -import com.ruoyi.business.service.IBizAccountService; -import com.ruoyi.common.utils.DateUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import com.ruoyi.business.mapper.BizMemberMapper; -import com.ruoyi.business.domain.BizMember; -import com.ruoyi.business.service.IBizMemberService; -import com.ruoyi.common.core.text.Convert; - -import javax.annotation.Resource; - /** * 会员Service业务层处理 * @@ -32,9 +38,15 @@ public class BizMemberServiceImpl implements IBizMemberService @Resource private BizMemberMapper bizMemberMapper; - @Autowired + @Resource + private BizOrderMapper bizOrderMapper; + + @Resource private IBizAccountService bizAccountService; + @Resource + private IBizTeamRewardService bizTeamRewardService; + @Resource private BizAccountMapper bizAccountMapper; @@ -205,4 +217,157 @@ public class BizMemberServiceImpl implements IBizMemberService { return bizMemberMapper.selectTeamData(paramMap); } + + /** + * 执行专项划拨每日任务 + * + * @param + * @return 结果 + */ + @Override + @Transactional + public int doSpecialTask() + { + //划拨金额 + int dailyAmount = Integer.parseInt(DictUtils.getDictLabel("busi_award_set", "2")); + //出局次数 + int maxLevel = Integer.parseInt(DictUtils.getDictLabel("busi_award_set", "5")); + //团队盒数标准 + int teamCountLimit = Integer.parseInt(DictUtils.getDictLabel("busi_award_set", "3")); + + List memberList = bizMemberMapper.selectSpecialMember(dailyAmount); + int accessCount = 0; + for (BizMember member : memberList) { + Long memberID = member.getId(); + Long douSpecial = member.getDouSpecial(); + //先扣款 + boolean result = bizAccountService.accountChange(memberID, BizAccount.DOU_SPECIAL, BizAccountDetail.DOU_DETAIL_TYPE_EXCHANGE, (long) -dailyAmount, "", BizAccountDetail.DOU_DESC_SPECIAL2); + if (result) { + //加入个人账户 + result = bizAccountService.accountChange(memberID, BizAccount.DOU_PERSON, BizAccountDetail.DOU_DETAIL_TYPE_CHARGE, (long) dailyAmount, "", BizAccountDetail.DOU_DESC_SPECIAL2); + if (result) { + accessCount ++; + if (douSpecial <= dailyAmount) { + //已经划拨完余额为0,更新用户出局情况 + long teamCount = bizMemberMapper.getMemberTeamCount(memberID); + int specialLevel = member.getSpecialLevel(); + if (teamCount < teamCountLimit) { //团队盒数不足设定值盒则更新level + //达到最大等级则出局 + specialLevel = specialLevel == maxLevel ? 0 : (specialLevel + 1); + member.setSpecialLevel(specialLevel); + bizMemberMapper.updateMemberLevel(member); + } + } + } + } + } + return accessCount; + } + + /** + * 执行团队福豆分成每日任务 + * + * @param + * @return 结果 + */ + @Override + @Transactional + public int doTeamTask() + { + //分成标准 + List levels = DictUtils.getDictCache("busi_teamaward_level"); + //分成盒数限制 + int numLimit = Integer.parseInt(DictUtils.getDictLabel("busi_award_set", "1")); + //日期记录上一天的 + String dateStr = DateUtils.getDate(-1); + + List memberList = bizMemberMapper.selectTeamBenefitMember(numLimit); + int accessCount = 0; + for (Map member : memberList) { + Long memberID = (Long) member.get("id"); + Long totalNum = ((BigDecimal) member.get("totalNum")).longValue(); + long selfDou = BizMemberController.getTeamDou(totalNum, levels, numLimit); + + //存入直接子级的团队盒数和团队成员数据 + Map temp = new HashMap(); + //存入每个子团队用户的结算盒数 + Map numMap = new HashMap(); + //直接下级列表 + List subList = bizMemberMapper.selectSubMember(memberID); + for (Long subID : subList) { + Map map = new HashMap(); + map.put("num", 0); + map.put("teamMembers", new ArrayList()); + temp.put(subID, map); + } + + List orderList = bizOrderMapper.selectTeamBizOrder(memberID); + int counter = 0; //剔除前numLimit盒 + for (Map order : orderList) { + Long buyerID = (Long) order.get("id"); + String allID = (String) order.get("all_id"); + int count = (Integer) order.get("product_count"); + for (Long subID : subList) { + if (buyerID.equals(subID) || testContains(allID, subID)) { //是自己或子级 + Map subMap = temp.get(subID); + int num = (Integer) subMap.get("num"); + subMap.put("num", num + count); + List chList = (List) subMap.get("teamMembers"); + if (!chList.contains(buyerID)) { + chList.add(buyerID); + } + break; + } + } + //筛选出没到限制盒数的无效订单 + int oldCount = counter; + counter += count; + if (counter <= numLimit) continue; + if (oldCount <= numLimit) { + //有可能一个订单同时包含有效盒和无效盒 + count = counter - numLimit; + } + //存入每个团队成员的明细 + Integer chTotal = (Integer) numMap.get(buyerID); + if (chTotal == null) chTotal = 0; + chTotal += count; + numMap.put(buyerID, chTotal); + } + //根据直接下级计算数据 + long totalBenefit = 0L; + for (Long subID : subList) { + Map subMap = temp.get(subID); + int subTeamNum = (Integer) subMap.get("num"); + //比较subDou和selfDou得出子团队分成数值 + long subDou = BizMemberController.getTeamDou(subTeamNum, levels, numLimit); + long getDou = selfDou - subDou; + if (getDou <= 0) continue; + //子团队用户列表取出 + List chList = (List) subMap.get("teamMembers"); + //每个子级用户添加teamAward数据 + for (Long chID : chList) { + //子级盒数 + Integer chTotal = numMap.get(chID); + if (chTotal == null || chTotal <= 0) continue; + long benefit = getDou * chTotal; //该子用户分成 + //插入数据 + bizTeamRewardService.addTeamReward(memberID, chID, (long) chTotal, benefit, null, BizTeamReward.TEAM_REWARD_TYPE_TEAM, dateStr); + totalBenefit += benefit; + } + } + //团队福豆及福豆田 + if (totalBenefit > 0) { + accessCount ++; + bizAccountService.accountChange(memberID, BizAccount.DOU_TEAM, BizAccountDetail.DOU_DETAIL_TYPE_CHARGE, totalBenefit,"", BizAccountDetail.DOU_DESC_TEAM); + bizAccountService.accountChange(memberID, BizAccount.DOU_FIELD, BizAccountDetail.DOU_DETAIL_TYPE_CHARGE, totalBenefit,"", BizAccountDetail.DOU_DESC_TEAM); + } + } + return accessCount; + } + + //测试all包含字符串 + private boolean testContains(String allID, Long id) + { + return ("," + allID + ",").indexOf("," + id + ",") >= 0; + } } diff --git a/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizOrderServiceImpl.java b/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizOrderServiceImpl.java index 49e71406e..9e8b09367 100644 --- a/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizOrderServiceImpl.java +++ b/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizOrderServiceImpl.java @@ -44,6 +44,9 @@ public class BizOrderServiceImpl implements IBizOrderService @Resource private BizAccountServiceImpl bizAccountService; + @Resource + private BizTeamRewardServiceImpl bizTeamRewardService; + /** * 查询订单 * @@ -171,8 +174,17 @@ public class BizOrderServiceImpl implements IBizOrderService if (douBalance < orderTotal.longValue()) { return AjaxResult.error("福豆余额不足"); } - BigDecimal cashbackAmount = product.getCashbackAmount().multiply(new BigDecimal(productNum)); - //TODO cashbackAmount 专项划拨金额等级判断 + //判断专项划拨相关金额 + int decreaseAmount = Integer.parseInt(DictUtils.getDictLabel("busi_award_set", "4")); + BigDecimal cashbackAmount = product.getCashbackAmount(); + boolean isTeam = cashbackAmount.longValue() > 0; + Integer specialLevel = member.getSpecialLevel(); + BigDecimal cashbackTotalAmount = new BigDecimal(0); + if (specialLevel != null && specialLevel > 0) { //未出局 + //重新计算专项金额 + cashbackAmount = cashbackAmount.add(new BigDecimal((specialLevel - 1) * decreaseAmount)); + cashbackTotalAmount = cashbackAmount.multiply(new BigDecimal(productNum)); + } //判断地址 BizMemberAddress address = bizMemberAddressMapper.selectBizMemberAddressById(addressID); @@ -188,7 +200,7 @@ public class BizOrderServiceImpl implements IBizOrderService order.setMemberName(member.getMemberName()); order.setOrderAmount(orderTotal); order.setOrderStatus(BizOrder.STATUS_PAYED); //已支付 - order.setIsTeam(cashbackAmount.longValue() > 0 ? 1 : 0); //是否团队福豆影响订单 + order.setIsTeam(isTeam ? 1 : 0); //是否团队福豆影响订单 order.setRemark(remark); order.setAddressDetail(address.getAddress()); order.setAddressId(addressID); @@ -205,38 +217,43 @@ public class BizOrderServiceImpl implements IBizOrderService String businessCode = String.valueOf(order.getOrderSn()); //减去福豆余额账户 - // TODO 类型不对,同步完数据后在修改 boolean result = bizAccountService.accountChange(memberID, BizAccount.DOU_BALANCE, BizAccountDetail.DOU_DETAIL_TYPE_ORDER, -orderTotal.longValue(), businessCode, BizAccountDetail.DOU_DESC_ORDER); if (!result) { return AjaxResult.error("扣款失败,请联系管理员"); } //增加专项账户 - if(cashbackAmount.longValue() > 0) { - // TODO 类型不对,同步完数据后在修改 - result = bizAccountService.accountChange(memberID, BizAccount.DOU_SPECIAL, BizAccountDetail.DOU_DETAIL_TYPE_CHARGE, cashbackAmount.longValue(), businessCode, BizAccountDetail.DOU_DESC_SPECIAL1); - if (!result) { - return AjaxResult.error("扣款失败,请联系管理员"); + if(isTeam) { + if (cashbackTotalAmount.longValue() > 0) { + result = bizAccountService.accountChange(memberID, BizAccount.DOU_SPECIAL, BizAccountDetail.DOU_DETAIL_TYPE_CHARGE, cashbackTotalAmount.longValue(), businessCode, BizAccountDetail.DOU_DESC_SPECIAL1); + if (!result) { + return AjaxResult.error("扣款失败,请联系管理员"); + } } //增加直推奖励(团队福豆账户) Long recMemberID = member.getRecommendId(); if (recMemberID != null && recMemberID != 0) { //取出直推奖励金额 - String award1 = DictUtils.getDictLabel("busi_recommend_award", "1"); - result = bizAccountService.accountChange(memberID, BizAccount.DOU_TEAM, BizAccountDetail.DOU_DETAIL_TYPE_CHARGE, Long.parseLong(award1), businessCode, BizAccountDetail.DOU_DESC_RECOMM); + long award1 = productNum * Long.parseLong(DictUtils.getDictLabel("busi_recommend_award", "1")); + result = bizAccountService.accountChange(recMemberID, BizAccount.DOU_TEAM, BizAccountDetail.DOU_DETAIL_TYPE_CHARGE, award1, businessCode, BizAccountDetail.DOU_DESC_RECOMM); if (!result) { return AjaxResult.error("扣款失败,请联系管理员"); } + //增加团队积分数据(直推) + String dateStr = DateUtils.getDate(-1); //日期记录上一天的 + bizTeamRewardService.addTeamReward(recMemberID, memberID, (long) productNum, award1, productID, BizTeamReward.TEAM_REWARD_TYPE_RECOMM, dateStr); //判断二级直推(需要3个下级) BizMember recommendMember = bizMemberMapper.selectBizMemberSimple(recMemberID); Long topMemberID = recommendMember.getRecommendId(); //判断有效下级数不少于三个 - if (bizMemberMapper.getValidChildCount(topMemberID) >= BizAccount.SECOND_AWARD_CHILD_LIMIT) { - String award2 = DictUtils.getDictLabel("busi_recommend_award", "2"); - result = bizAccountService.accountChange(memberID, BizAccount.DOU_TEAM, BizAccountDetail.DOU_DETAIL_TYPE_CHARGE, Long.parseLong(award2), businessCode, BizAccountDetail.DOU_DESC_SECOND); + if (recMemberID != null && bizMemberMapper.getValidChildCount(topMemberID) >= BizAccount.SECOND_AWARD_CHILD_LIMIT) { + long award2 = productNum * Long.parseLong(DictUtils.getDictLabel("busi_recommend_award", "2")); + result = bizAccountService.accountChange(topMemberID, BizAccount.DOU_TEAM, BizAccountDetail.DOU_DETAIL_TYPE_CHARGE, award2, businessCode, BizAccountDetail.DOU_DESC_SECOND); if (!result) { return AjaxResult.error("扣款失败,请联系管理员"); } + //增加团队积分数据(二推) + bizTeamRewardService.addTeamReward(topMemberID, memberID, (long) productNum, award2, productID, BizTeamReward.TEAM_REWARD_TYPE_SECOND, dateStr); } } } diff --git a/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizTeamRewardServiceImpl.java b/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizTeamRewardServiceImpl.java new file mode 100644 index 000000000..6d9b20095 --- /dev/null +++ b/ruoyi-business/src/main/java/com/ruoyi/business/service/impl/BizTeamRewardServiceImpl.java @@ -0,0 +1,121 @@ +package com.ruoyi.business.service.impl; + +import java.util.Date; +import java.util.List; +import com.ruoyi.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.business.mapper.BizTeamRewardMapper; +import com.ruoyi.business.domain.BizTeamReward; +import com.ruoyi.business.service.IBizTeamRewardService; +import com.ruoyi.common.core.text.Convert; + +import javax.annotation.Resource; + +/** + * 团队奖励明细Service业务层处理 + * + * @author ruoyi + * @date 2020-09-22 + */ +@Service +public class BizTeamRewardServiceImpl implements IBizTeamRewardService +{ + @Resource + private BizTeamRewardMapper bizTeamRewardMapper; + + /** + * 查询团队奖励明细 + * + * @param id 团队奖励明细ID + * @return 团队奖励明细 + */ + @Override + public BizTeamReward selectBizTeamRewardById(Long id) + { + return bizTeamRewardMapper.selectBizTeamRewardById(id); + } + + /** + * 查询团队奖励明细列表 + * + * @param bizTeamReward 团队奖励明细 + * @return 团队奖励明细 + */ + @Override + public List selectBizTeamRewardList(BizTeamReward bizTeamReward) + { + return bizTeamRewardMapper.selectBizTeamRewardList(bizTeamReward); + } + + /** + * 新增团队奖励明细 + * + * @param bizTeamReward 团队奖励明细 + * @return 结果 + */ + @Override + public int insertBizTeamReward(BizTeamReward bizTeamReward) + { + bizTeamReward.setCreateTime(DateUtils.getNowDate()); + return bizTeamRewardMapper.insertBizTeamReward(bizTeamReward); + } + + /** + * 插入团队明细 + * + * @param + * @return + */ + @Override + public void addTeamReward(Long memberID, Long rewardMemberId, Long rewardProductCount, Long rewardAmount, Long productId, int rewardType, String rewardDate) + { + BizTeamReward bizTeamReward = new BizTeamReward(); + bizTeamReward.setMemberId(memberID); + bizTeamReward.setRewardMemberId(rewardMemberId); + bizTeamReward.setRewardProductCount(rewardProductCount); + bizTeamReward.setRewardAmount(rewardAmount); + bizTeamReward.setProductId(productId); + bizTeamReward.setRewardType(rewardType); + bizTeamReward.setRewardDate(rewardDate); + bizTeamReward.setCreateTime(new Date()); + insertBizTeamReward(bizTeamReward); + } + + /** + * 修改团队奖励明细 + * + * @param bizTeamReward 团队奖励明细 + * @return 结果 + */ + @Override + public int updateBizTeamReward(BizTeamReward bizTeamReward) + { + bizTeamReward.setUpdateTime(DateUtils.getNowDate()); + return bizTeamRewardMapper.updateBizTeamReward(bizTeamReward); + } + + /** + * 删除团队奖励明细对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteBizTeamRewardByIds(String ids) + { + return bizTeamRewardMapper.deleteBizTeamRewardByIds(Convert.toStrArray(ids)); + } + + /** + * 删除团队奖励明细信息 + * + * @param id 团队奖励明细ID + * @return 结果 + */ + @Override + public int deleteBizTeamRewardById(Long id) + { + return bizTeamRewardMapper.deleteBizTeamRewardById(id); + } +} diff --git a/ruoyi-business/src/main/java/com/ruoyi/business/task/BusinessTask.java b/ruoyi-business/src/main/java/com/ruoyi/business/task/BusinessTask.java index f2125ad6f..169f19a27 100644 --- a/ruoyi-business/src/main/java/com/ruoyi/business/task/BusinessTask.java +++ b/ruoyi-business/src/main/java/com/ruoyi/business/task/BusinessTask.java @@ -43,7 +43,7 @@ public class BusinessTask { LogUtils.getAccessLog().info("======今日非休息日,开始执行福豆相关任务======"); //专项划拨任务 - doSpecialTask(); + //doSpecialTask(); //团队福豆分成任务 doTeamTask(); @@ -67,10 +67,9 @@ public class BusinessTask { private void doSpecialTask() { try { - int dailyAmount = Integer.parseInt(DictUtils.getDictLabel("busi_award_set", "2")); + int accessCount = bizMemberService.doSpecialTask(); - - LogUtils.getAccessLog().info("======执行专项划拨任务完成======"); + LogUtils.getAccessLog().info("======执行专项划拨任务完成,处理会员数据" + accessCount + "条======"); } catch (Exception ex) { ex.printStackTrace(); LogUtils.getAccessLog().error("======执行专项划拨任务出错======" + ex.getMessage()); @@ -81,10 +80,9 @@ public class BusinessTask { private void doTeamTask() { try { - int numLimit = Integer.parseInt(DictUtils.getDictLabel("busi_award_set", "1")); + int accessCount = bizMemberService.doTeamTask(); - - LogUtils.getAccessLog().info("======执行团队福豆分成任务完成======"); + LogUtils.getAccessLog().info("======执行团队福豆分成任务完成,处理会员数据" + accessCount + "条======"); } catch (Exception ex) { ex.printStackTrace(); LogUtils.getAccessLog().error("======执行团队福豆分成任务出错======" + ex.getMessage()); diff --git a/ruoyi-business/src/main/resources/mapper/business/BizMemberMapper.xml b/ruoyi-business/src/main/resources/mapper/business/BizMemberMapper.xml index fbe3bf1bd..cca7a0f02 100644 --- a/ruoyi-business/src/main/resources/mapper/business/BizMemberMapper.xml +++ b/ruoyi-business/src/main/resources/mapper/business/BizMemberMapper.xml @@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -22,7 +23,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select a.id, mobile, member_name, password, recommend_id, recommend_mobile, recommend_name, member_type, is_delete, is_enable, create_by, create_time, update_by, update_time, + select a.id, mobile, member_name, password, recommend_id, recommend_mobile, recommend_name, member_type, special_level, is_delete, is_enable, create_by, create_time, update_by, update_time, (select amount from biz_account where member_id = a.id and account_type = 0) douBalance, (select amount from biz_account where member_id = a.id and account_type = 1) douPerson, (select amount from biz_account where member_id = a.id and account_type = 2) douTeam, @@ -59,7 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" @@ -150,4 +151,50 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" group by a.id,a.member_name,a.recommend_id + + + + + + update biz_member + set special_level = #{specialLevel} + where id = #{id} + + + + + \ No newline at end of file diff --git a/ruoyi-business/src/main/resources/mapper/business/BizOrderMapper.xml b/ruoyi-business/src/main/resources/mapper/business/BizOrderMapper.xml index da90c36af..fe4d44cf2 100644 --- a/ruoyi-business/src/main/resources/mapper/business/BizOrderMapper.xml +++ b/ruoyi-business/src/main/resources/mapper/business/BizOrderMapper.xml @@ -156,4 +156,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + \ No newline at end of file diff --git a/ruoyi-business/src/main/resources/mapper/business/BizTeamRewardMapper.xml b/ruoyi-business/src/main/resources/mapper/business/BizTeamRewardMapper.xml new file mode 100644 index 000000000..26366aec4 --- /dev/null +++ b/ruoyi-business/src/main/resources/mapper/business/BizTeamRewardMapper.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + select id, member_id, reward_member_id, reward_product_count, reward_amount, product_id, reward_type, reward_date, create_by, create_time, update_by, update_time from biz_team_reward + + + + + + + + insert into biz_team_reward + + member_id, + reward_member_id, + reward_product_count, + reward_amount, + product_id, + reward_type, + reward_date, + create_by, + create_time, + update_by, + update_time, + + + #{memberId}, + #{rewardMemberId}, + #{rewardProductCount}, + #{rewardAmount}, + #{productId}, + #{rewardType}, + #{rewardDate}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update biz_team_reward + + member_id = #{memberId}, + reward_member_id = #{rewardMemberId}, + reward_product_count = #{rewardProductCount}, + reward_amount = #{rewardAmount}, + product_id = #{productId}, + reward_type = #{rewardType}, + reward_date = #{rewardDate}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from biz_team_reward where id = #{id} + + + + delete from biz_team_reward where id in + + #{id} + + + + \ No newline at end of file diff --git a/ruoyi-business/src/main/resources/templates/business/member/accountTeam.html b/ruoyi-business/src/main/resources/templates/business/member/accountTeam.html index 843d2f8bb..acd31c2a5 100644 --- a/ruoyi-business/src/main/resources/templates/business/member/accountTeam.html +++ b/ruoyi-business/src/main/resources/templates/business/member/accountTeam.html @@ -29,7 +29,8 @@ .childDiv{padding:7px 0 0 0} .childDiv .cont{padding-left: 20px} .childDiv span{display:block;font-size: 14px;line-height: 24px;padding:0 0 4px 4px;cursor:pointer;border-radius: 5px;border:1px solid #AAAAAA} - .childDiv span.noneChild{padding-left: 29px;padding-top: 2px;padding-bottom: 2px} + .childDiv span.noneChild{padding-left: 19px;padding-top: 2px;padding-bottom: 2px} + .childDiv span ss{font-family: 宋体}