From 7f55c18d7db36c9cad2ac96e481680bc1107e51c Mon Sep 17 00:00:00 2001 From: Hentua <wangdoubleone@gmail.com> Date: Thu, 15 Jun 2023 11:16:11 +0800 Subject: [PATCH] Merge branch 'meiye_mall' of http://120.27.238.55:7000/r/xc-mall into meiye_mall --- src/main/java/cc/mrbird/febs/mall/vo/AdminTeamListVo.java | 39 ++++ src/main/resources/static/febs/lay/modules/view.js | 5 src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java | 2 src/main/resources/templates/febs/views/modules/mallMember/teamList.html | 146 ++++++++++++++++ src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java | 22 ++ src/main/resources/mapper/modules/MallMemberMapper.xml | 31 +++ src/main/java/cc/mrbird/febs/mall/excel/FlowTypeConverter.java | 23 ++ src/main/java/cc/mrbird/febs/mall/dto/MoneyFlowListDto.java | 4 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java | 32 +++ src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html | 15 + src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java | 79 ++++---- src/main/resources/templates/febs/views/modules/mallMember/moneyFlowList.html | 23 ++ src/main/java/cc/mrbird/febs/mall/entity/MallMember.java | 3 src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java | 19 ++ src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java | 22 +- src/main/java/cc/mrbird/febs/mall/excel/MoneyFlowTypeConverter.java | 22 ++ src/main/resources/mapper/modules/MallMoneyFlowMapper.xml | 20 ++ src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java | 2 src/main/java/cc/mrbird/febs/mall/vo/AdminMoneyFlowListVo.java | 12 + src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java | 2 20 files changed, 467 insertions(+), 56 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java index 2d1d46d..b8e197b 100644 --- a/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java +++ b/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java @@ -13,44 +13,46 @@ /** * 余额 */ - BALANCE(1), + BALANCE(1, "余额"), /** * 积分 */ - SCORE(2), + SCORE(2, "积分"), /** * 竞猜积分 */ - PRIZE_SCORE(3), + PRIZE_SCORE(3, "竞猜积分"), /** * 佣金 */ - COMMISSION(4), + COMMISSION(4, "佣金"), /** * 贡献点 */ - STAR(5), + STAR(5, ""), /** * 补贴额度 */ - TOTAL_SCORE(6), + TOTAL_SCORE(6, ""), /** * 凭证数量 */ - VOUCHER_CNT(7), + VOUCHER_CNT(7, ""), /** * 凭证数量 */ - VOUCHER_AMOUNT(8), + VOUCHER_AMOUNT(8, ""), /** * 微信支付 */ - WECHAT(9); + WECHAT(9, ""); private final int value; + private final String name; - FlowTypeEnum(int value) { + FlowTypeEnum(int value, String name) { this.value = value; + this.name = name; } } diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java index 17d4163..2178f7e 100644 --- a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java +++ b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java @@ -14,189 +14,192 @@ /** * 直推收益 */ - DIRECT_BONUS(1), + DIRECT_BONUS(1, "直推奖"), /** * 隔代收益 */ - SECOND_BONUS(2), + SECOND_BONUS(2, "隔代收益"), /** * 全网分红 */ - ALL_INTERNET_BONUS(3), + ALL_INTERNET_BONUS(3, "全网分红"), /** * 代理分红 */ - AGENT_BONUS(4), + AGENT_BONUS(4, "代理分红"), /** * 股东分红 */ - PARTNER_BONUS(5), + PARTNER_BONUS(5, "股东分红"), /** * 获得静态积分 */ - BUY_TC(6), + BUY_TC(6, "积分兑换"), /** * 推荐奖 */ - RECOMMEND_BONUS(7), + RECOMMEND_BONUS(7, "推荐奖"), /** * 提现 */ - WITHDRAWAL(8), + WITHDRAWAL(8, "提现"), /** * 转账 */ - TRANSFER(9), + TRANSFER(9, "转账"), /** * 支付 */ - PAY(10), + PAY(10, "支付"), /** * 退款 */ - REFUND(11), + REFUND(11, "退款"), /** * 佣金转竞猜积分 */ - COMMISSION_TO_PRIZESCORE(12), + COMMISSION_TO_PRIZESCORE(12, "1"), /** * 佣金转余额 */ - COMMISSION_TO_BALANCE(13), + COMMISSION_TO_BALANCE(13, "1"), /** * 竞猜积分签到 */ - SCORE_SIGN(14), + SCORE_SIGN(14, "1"), /** * 感恩奖 */ - THANKFUL(15), + THANKFUL(15, "感恩奖"), /** * 系统 */ - SYSTEM(16), + SYSTEM(16, "系统"), /** * 抽奖 */ - PRIZE(17), + PRIZE(17, "1"), /** * 积分池收益 */ - SCORE_POOL(18), + SCORE_POOL(18, ""), /** * 星级奖励 */ - STAR_PERK_TWO(19), + STAR_PERK_TWO(19, ""), /** * 星级奖励 */ - STAR_PERK_THREE(20), + STAR_PERK_THREE(20, ""), /** * 星级奖励 */ - STAR_PERK_FOUR(21), + STAR_PERK_FOUR(21, ""), /** * 星级奖励 */ - STAR_PERK_FIVE(22), + STAR_PERK_FIVE(22, ""), /** * 星级奖励 */ - STAR_PERK_SIX(23), + STAR_PERK_SIX(23, ""), /** * 星级奖励 */ - STAR_PERK_SEVEN(24), + STAR_PERK_SEVEN(24, ""), /** * 贡献点 */ - STAR(25), + STAR(25, ""), /** * 补贴额度 */ - TOTAL_SCORE(26), + TOTAL_SCORE(26, ""), /** * 团队补贴明细 */ - TEAM_PERK(27), + TEAM_PERK(27, ""), /** * 平级奖励补贴 */ - TEAM_EQUALS_PERK(28), + TEAM_EQUALS_PERK(28, ""), /** * 线下服务中心补贴 */ - OFFLINE_PERK(29), + OFFLINE_PERK(29, ""), /** * 代理商补贴 */ - AGENT_PERK(30), + AGENT_PERK(30, ""), /** * 联创合伙人释放凭证 */ - ROLE_RELEASE_SCORE(31), + ROLE_RELEASE_SCORE(31, ""), /** * 业绩释放联创凭证 */ - ACHIEVE_RELEASE_SCORE_LC(32), + ACHIEVE_RELEASE_SCORE_LC(32, ""), /** * 业绩释放合伙人凭证 */ - ACHIEVE_RELEASE_SCORE_HHR(33), + ACHIEVE_RELEASE_SCORE_HHR(33, ""), /** * 业绩释放贡献点凭证 */ - ACHIEVE_RELEASE_SCORE_GXD(34), + ACHIEVE_RELEASE_SCORE_GXD(34, ""), /** * 业绩释放星级凭证 */ - ACHIEVE_RELEASE_SCORE_XJ(35), + ACHIEVE_RELEASE_SCORE_XJ(35, ""), /** * 凭证买入 */ - VOUCHER_BUY(36), + VOUCHER_BUY(36, ""), /** * 凭证卖出 */ - VOUCHER_SALE(37); + VOUCHER_SALE(37, ""); private final int value; - MoneyFlowTypeEnum(int value) { + private final String name; + + MoneyFlowTypeEnum(int value, String name) { this.value = value; + this.name = name; } } diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java index 5c39417..6aeac21 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java @@ -10,6 +10,7 @@ import cc.mrbird.febs.mall.service.IAdminMallMemberService; import cc.mrbird.febs.mall.service.IApiMallMemberService; import cc.mrbird.febs.mall.vo.AdminAgentLevelOptionTreeVo; +import cc.mrbird.febs.mall.vo.AdminMoneyFlowListVo; import cc.mrbird.febs.mall.vo.ChargeListExportVo; import cc.mrbird.febs.system.entity.Dept; import com.alibaba.excel.EasyExcel; @@ -485,4 +486,25 @@ EasyExcel.write(response.getOutputStream(),ChargeListExportVo.class).sheet("提现列表").doWrite(list); } + @GetMapping("teamList") + public FebsResponse teamList(MallMember mallMember, QueryRequest request) { + Map<String, Object> data = getDataTable(mallMemberService.findTeamList(mallMember, request)); + return new FebsResponse().success().data(data); + } + + @GetMapping(value = "/moneyFlow/excel") + public void exportMoneyFlow(MoneyFlowListDto moneyFlowListDto, HttpServletResponse response) throws IOException { + QueryRequest request = new QueryRequest(); + request.setPageNum(1); + request.setPageSize(999999999); + + List<AdminMoneyFlowListVo> list = this.mallMemberService.getMoneyFlowListInPage(moneyFlowListDto, request).getRecords(); + + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + String fileName= URLEncoder.encode("资金明细表","UTF-8").replaceAll("\\+","%20"); + response.setHeader("Content-disposition","attachment;filename*=utf-8''"+fileName+".xlsx"); + EasyExcel.write(response.getOutputStream(),AdminMoneyFlowListVo.class).sheet("资金明细表").doWrite(list); + } + } diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java index 048babc..6f84b70 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java @@ -16,6 +16,9 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.servlet.http.HttpServletRequest; @Controller("mallMemberView") @RequestMapping(FebsConstant.VIEW_PREFIX + "modules/mallMember") @@ -125,7 +128,9 @@ */ @GetMapping("moneyFlowList") @RequiresPermissions("moneyFlowList:view") - public String moneyFlowList() { + public String moneyFlowList(String refererId, String inviteId, Model model) { + model.addAttribute("referrerId", refererId); + model.addAttribute("inviteId", inviteId); return FebsUtil.view("modules/mallMember/moneyFlowList"); } @@ -374,5 +379,17 @@ return FebsUtil.view("modules/mallMember/matrixTree"); } + @GetMapping("teamList") + public String teamList() { + return FebsUtil.view("modules/mallMember/teamList"); + } + + @GetMapping("teamList/{type}/{inviteId}") + public String teamListByInviteId(@PathVariable(value = "inviteId") String inviteId, @PathVariable("type") Integer type, Model model) { + model.addAttribute("refererId", inviteId); + model.addAttribute("type", type); + return FebsUtil.view("modules/mallMember/teamList"); + } + } diff --git a/src/main/java/cc/mrbird/febs/mall/dto/MoneyFlowListDto.java b/src/main/java/cc/mrbird/febs/mall/dto/MoneyFlowListDto.java index 4f9560b..0bfb1ac 100644 --- a/src/main/java/cc/mrbird/febs/mall/dto/MoneyFlowListDto.java +++ b/src/main/java/cc/mrbird/febs/mall/dto/MoneyFlowListDto.java @@ -15,4 +15,8 @@ private Integer flowType; + private String inviteId; + + private String referrerId; + } diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java index 562f1fa..8425235 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java @@ -183,4 +183,7 @@ return null; } + + @TableField(exist = false) + private Integer type; } diff --git a/src/main/java/cc/mrbird/febs/mall/excel/FlowTypeConverter.java b/src/main/java/cc/mrbird/febs/mall/excel/FlowTypeConverter.java new file mode 100644 index 0000000..4a3ff62 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/excel/FlowTypeConverter.java @@ -0,0 +1,23 @@ +package cc.mrbird.febs.mall.excel; + +import cc.mrbird.febs.common.enumerates.FlowTypeEnum; +import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +public class FlowTypeConverter implements Converter<Integer> { + + @Override + public WriteCellData<?> convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + + for (FlowTypeEnum flowType : FlowTypeEnum.values()) { + if(flowType.getValue() == value) { + return new WriteCellData<>(flowType.getName()); + } + } + return null; + } +} diff --git a/src/main/java/cc/mrbird/febs/mall/excel/MoneyFlowTypeConverter.java b/src/main/java/cc/mrbird/febs/mall/excel/MoneyFlowTypeConverter.java new file mode 100644 index 0000000..3ce1483 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/excel/MoneyFlowTypeConverter.java @@ -0,0 +1,22 @@ +package cc.mrbird.febs.mall.excel; + +import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +public class MoneyFlowTypeConverter implements Converter<Integer> { + + + @Override + public WriteCellData<?> convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + for (MoneyFlowTypeEnum type : MoneyFlowTypeEnum.values()) { + if(type.getValue() == value) { + return new WriteCellData<>(type.getName()); + } + } + return null; + } +} diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java index 77e6f2b..3010667 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java @@ -112,4 +112,6 @@ Integer selectOwnCntByInviteIdAndAccountLevel(@Param("inviteId") String inviteId, @Param("accountLevel") Integer accountLevel); List<MallMember> selectMatrixTreeMemberList(); + + IPage<AdminTeamListVo> selectTeamListInPage(@Param("record") MallMember mallMember, Page<AdminTeamListVo> page); } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java index debd3cb..34f223d 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java @@ -52,4 +52,6 @@ MallMoneyFlow selectByOrderNoAndMemberId(@Param("orderNo")String orderNo, @Param("memberId")Long memberId, @Param("isReturn")int isReturn); List<ChargeListExportVo> selectChargeListForExcel(@Param("record") MoneyChargeListDto moneyChargeListDto); + + List<MallMoneyFlow> selectMemberProfitByMemberIds(@Param("list") List<Long> memberIds); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java index fb7902b..be60712 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java @@ -118,4 +118,6 @@ TreeItemVo findMatrixTree(); List<ChargeListExportVo> findChargeListForExcel(MoneyChargeListDto moneyChargeListDto); + + IPage<AdminTeamListVo> findTeamList(MallMember mallMember, QueryRequest request); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java index fb9fc50..73f91e2 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java @@ -36,9 +36,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -812,4 +810,32 @@ public List<ChargeListExportVo> findChargeListForExcel(MoneyChargeListDto moneyChargeListDto) { return this.mallMoneyFlowMapper.selectChargeListForExcel(moneyChargeListDto); } + + @Override + public IPage<AdminTeamListVo> findTeamList(MallMember mallMember, QueryRequest request) { + Page<AdminTeamListVo> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<AdminTeamListVo> teamListInPage = this.mallMemberMapper.selectTeamListInPage(mallMember, page); + if (CollUtil.isEmpty(teamListInPage.getRecords())) { + return teamListInPage; + } + + List<Long> memberIds = teamListInPage.getRecords().stream().map(AdminTeamListVo::getId).collect(Collectors.toList()); + List<MallMoneyFlow> mallMoneyFlows = this.mallMoneyFlowMapper.selectMemberProfitByMemberIds(memberIds); + if (CollUtil.isNotEmpty(mallMoneyFlows)) { + Map<Long, MallMoneyFlow> map = new HashMap<>(); + mallMoneyFlows.forEach(item -> { + map.put(item.getMemberId(), item); + }); + + teamListInPage.getRecords().forEach(item -> { + MallMoneyFlow mallMoneyFlow = map.get(item.getId()); + if (mallMoneyFlow != null) { + item.setTeamProfitAmount(mallMoneyFlow.getAmount()); + } + }); + } + + + return teamListInPage; + } } diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AdminMoneyFlowListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AdminMoneyFlowListVo.java index 1f931a5..46d3309 100644 --- a/src/main/java/cc/mrbird/febs/mall/vo/AdminMoneyFlowListVo.java +++ b/src/main/java/cc/mrbird/febs/mall/vo/AdminMoneyFlowListVo.java @@ -1,5 +1,9 @@ package cc.mrbird.febs.mall.vo; +import cc.mrbird.febs.mall.excel.FlowTypeConverter; +import cc.mrbird.febs.mall.excel.MoneyFlowTypeConverter; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import lombok.Data; @@ -8,26 +12,33 @@ import java.util.Date; @Data +@ExcelIgnoreUnannotated @ApiModel(value = "AdminMoneyFlowListVo", description = "信息返回类") public class AdminMoneyFlowListVo { private Long id; + @ExcelProperty(value = "时间", index = 6) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createdTime; + @ExcelProperty(value = "金额", index = 3) private BigDecimal amount; + @ExcelProperty(value = "流水类型", index = 4, converter = MoneyFlowTypeConverter.class) private Integer type; + @ExcelProperty(value = "订单编号", index = 7) private String orderNo; private String description; private String remark; + @ExcelProperty(value = "名称", index = 1) private String name; + @ExcelProperty(value = "账号", index = 2) private String phone; private Integer status; @@ -36,6 +47,7 @@ private String bindPhone; + @ExcelProperty(value = "资金类型", index = 5, converter = FlowTypeConverter.class) private Integer flowType; /** * 来源 diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AdminTeamListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AdminTeamListVo.java new file mode 100644 index 0000000..069eaae --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/AdminTeamListVo.java @@ -0,0 +1,39 @@ +package cc.mrbird.febs.mall.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class AdminTeamListVo { + + private Long id; + + private String name; + + private String phone; + + private String inviteId; + + private Integer directCnt; + + private Integer teamCnt; + + private BigDecimal teamOrderAmount; + + private BigDecimal teamProfitAmount; + + private BigDecimal selfProfitAmount; + + public BigDecimal getTeamProfitAmount() { + return teamProfitAmount == null ? BigDecimal.ZERO : teamProfitAmount; + } + + public BigDecimal getTeamOrderAmount() { + return teamOrderAmount == null ? BigDecimal.ZERO : teamOrderAmount; + } + + public BigDecimal getSelfProfitAmount() { + return selfProfitAmount== null ? BigDecimal.ZERO : selfProfitAmount; + } +} diff --git a/src/main/resources/mapper/modules/MallMemberMapper.xml b/src/main/resources/mapper/modules/MallMemberMapper.xml index b7ab81e..0ae5631 100644 --- a/src/main/resources/mapper/modules/MallMemberMapper.xml +++ b/src/main/resources/mapper/modules/MallMemberMapper.xml @@ -508,4 +508,35 @@ select memberInfo.* from mall_member memberInfo inner join matrix_tree_node nodeInfo on memberInfo.id=nodeInfo.tree_node </select> + + <select id="selectTeamListInPage" resultType="cc.mrbird.febs.mall.vo.AdminTeamListVo"> + select + memberInfo.id + ,memberInfo.phone + ,memberInfo.name + ,memberInfo.invite_id inviteId + ,(select count(1) from mall_member a where a.referrer_id=memberInfo.invite_id) directCnt + ,(select count(1) from mall_member a where find_in_set(memberInfo.invite_id, a.referrer_ids)) teamCnt + ,ifnull(sum(orderInfo.amount), 0) teamOrderAmount + ,ifnull((select sum(b.amount) from mall_money_flow b where memberInfo.id=b.member_id and b.flow_type = 1 and b.type in (1,2,3,4,5,7)),0) selfProfitAmount + from mall_member memberInfo + left join mall_member orderMember on find_in_set(memberInfo.invite_id, orderMember.referrer_ids) + left join mall_order_info orderInfo on orderMember.id=orderInfo.member_id and orderInfo.status in (2, 3, 4) and orderInfo.order_type = 1 + <where> + 1=1 + <if test="record != null"> + <if test="record.query != null and record.query != ''"> + and (memberInfo.invite_id=#{record.query} or memberInfo.phone=#{record.query} or instr(memberInfo.name, #{record.query})) + </if> + <if test="record.referrerId != null and record.referrerId != '' and record.type == 1"> + and memberInfo.referrer_id = #{record.referrerId} + </if> + <if test="record.referrerId != null and record.referrerId != '' and record.type == 2"> + and find_in_set(#{record.referrerId}, memberInfo.referrer_ids) + </if> + </if> + </where> + group by memberInfo.id + order by teamOrderAmount desc + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml b/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml index dcfaea2..8d69468 100644 --- a/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml +++ b/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml @@ -51,7 +51,7 @@ b.phone, d.name fromMemberName from mall_money_flow a - left join mall_member b on a.member_id=b.id + inner join mall_member b on a.member_id=b.id left join mall_order_info c on a.order_no = c.order_no left join mall_member d on d.id = a.rt_member_id <where> @@ -67,6 +67,12 @@ </if> <if test="record.flowType!=null and record.flowType!=''"> and a.flow_type like concat('%', #{record.flowType},'%') + </if> + <if test="record.referrerId!=null and record.referrerId!=''"> + and find_in_set(#{record.referrerId}, b.referrer_ids) + </if> + <if test="record.inviteId!=null and record.inviteId!=''"> + and b.invite_id = #{record.inviteId} </if> </if> </where> @@ -271,4 +277,16 @@ </where> order by a.created_time desc </select> + + <select id="selectMemberProfitByMemberIds" resultType="cc.mrbird.febs.mall.entity.MallMoneyFlow"> + select memberInfo.id memberId, ifnull(sum(flowInfo.amount),0) amount from mall_member memberInfo + inner join mall_member flowMember on find_in_set(memberInfo.invite_id, flowMember.referrer_ids) + inner join mall_money_flow flowInfo on flowMember.id=flowInfo.member_id and flowInfo.flow_type = 1 and flowInfo.type in (1,2,3,4,5,7) + <where> + memberInfo.id in <foreach collection="list" item="item" separator="," open="(" close=")"> + #{item} + </foreach> + </where> + group by memberInfo.id + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/static/febs/lay/modules/view.js b/src/main/resources/static/febs/lay/modules/view.js index 78dbb62..32891dc 100644 --- a/src/main/resources/static/febs/lay/modules/view.js +++ b/src/main/resources/static/febs/lay/modules/view.js @@ -155,13 +155,14 @@ url = url || conf.entry; loadBar.start(); var queryIndex = url.indexOf('?'); - if (queryIndex !== -1) url = url.slice(0, queryIndex); + var v = '?v='; + if (queryIndex !== -1) v = '&v='; $.ajax({ url: (url.indexOf(conf.base) === 0 ? '' : conf.views) + url + conf.engine + - '?v=' + + v + conf.v, type: 'get', data: { diff --git a/src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html b/src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html index be12562..4ef47be 100644 --- a/src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html +++ b/src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html @@ -29,6 +29,21 @@ </select> </div> </div> + <div class="layui-inline"> + <label class="layui-form-label">会员类型:</label> + <div class="layui-input-inline"> + <select name="level"> + <option value="">请选择</option> + <option value="ZERO_LEVEL">迷梦素人</option> + <option value="FIRST_LEVEL">觉醒须眉/觉醒丽人</option> + <option value="SECOND_LEVEL">先知蓝颜/先知红颜</option> + <option value="THIRD_LEVEL">追影才子/追影佳人</option> + <option value="FOUR_LEVEL">赋权玉郎/赋权娇娘</option> + <option value="FIFTH_LEVEL">位极尊上/位极女卿</option> + <option value="SIX_LEVEL">权倾圣主/权倾女帝</option> + </select> + </div> + </div> </div> </div> <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> diff --git a/src/main/resources/templates/febs/views/modules/mallMember/moneyFlowList.html b/src/main/resources/templates/febs/views/modules/mallMember/moneyFlowList.html index e7697fb..4efe547 100644 --- a/src/main/resources/templates/febs/views/modules/mallMember/moneyFlowList.html +++ b/src/main/resources/templates/febs/views/modules/mallMember/moneyFlowList.html @@ -19,6 +19,18 @@ <input type="text" placeholder="账号" name="phone" autocomplete="off" class="layui-input"> </div> </div> + <div class="layui-inline febs-hide"> + <label class="layui-form-label">账号:</label> + <div class="layui-input-inline"> + <input type="text" placeholder="账号" name="inviteId" data-th-value="${inviteId}" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-inline febs-hide"> + <label class="layui-form-label">账号:</label> + <div class="layui-input-inline"> + <input type="text" placeholder="账号" name="referrerId" data-th-value="${referrerId}" autocomplete="off" class="layui-input"> + </div> + </div> <div class="layui-inline"> <label class="layui-form-label">流水类型:</label> <div class="layui-input-inline"> @@ -58,6 +70,9 @@ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> <i class="layui-icon"></i> </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="exportExcel"> + 导出 + </div> </div> </div> </form> @@ -79,6 +94,7 @@ $query = $view.find('#query'), $reset = $view.find('#reset'), $searchForm = $view.find('form'), + $exportExcel = $view.find('#exportExcel'), sortObject = {field: 'phone', type: null}, tableIns; @@ -107,10 +123,12 @@ }); function initTable() { + var inviteId = $searchForm.find('input[name="inviteId"]').val().trim(); + var referrerId = $searchForm.find('input[name="referrerId"]').val().trim(); tableIns = febs.table.init({ elem: $view.find('table'), id: 'moneyFlowTable', - url: ctx + 'admin/mallMember/getMoneyFlowList', + url: ctx + 'admin/mallMember/getMoneyFlowList?inviteId='+inviteId +"&referrerId=" + referrerId, cols: [[ {field: 'name', title: '名称', minWidth: 100,align:'left'}, {field: 'phone', title: '账号', minWidth: 150,align:'left'}, @@ -211,5 +229,8 @@ }; } + $exportExcel.on('click', function() { + febs.download(ctx + 'admin/mallMember/moneyFlow/excel', getQueryParams(), '资金明细表.xlsx'); + }); }) </script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/mallMember/teamList.html b/src/main/resources/templates/febs/views/modules/mallMember/teamList.html new file mode 100644 index 0000000..f45351a --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/mallMember/teamList.html @@ -0,0 +1,146 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-team-list" lay-title="团队业绩"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="team-list-table-form"> + <div class="layui-row"> + <div class="layui-col-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="text" placeholder="会员名称/账号/邀请码" name="query" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label">上级邀请码:</label> + <div class="layui-input-inline"> + <input type="text" placeholder="" name="refererId" autocomplete="off" data-th-value="${refererId}" class="layui-input"> + </div> + </div> + <div class="layui-inline febs-hide"> + <label class="layui-form-label">上级邀请码:</label> + <div class="layui-input-inline"> + <input type="text" placeholder="" name="type" autocomplete="off" data-th-value="${type}" class="layui-input"> + </div> + </div> + </div> + </div> + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="teamListTable" lay-data="{id: 'teamListTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="user:view,user:update,user:delete"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="edit" shiro:hasPermission="user:update"><i + class="layui-icon febs-edit-area febs-blue"></i></a> +</script> + +<script type="text/html" id="directCntTemplate"> + <a lay-href="/modules/mallMember/teamList/1/{{d.inviteId}}" target="_blank">{{d.directCnt}}</a> +</script> +<script type="text/html" id="teamCntTemplate"> + <a lay-href="/modules/mallMember/teamList/2/{{d.inviteId}}" target="_blank">{{d.teamCnt}}</a> +</script> +<script type="text/html" id="teamMoneyFlow"> + <a lay-href="/modules/mallMember/moneyFlowList?refererId={{d.inviteId}}" target="_blank">{{d.teamProfitAmount}}</a> +</script> +<script type="text/html" id="selfMoneyFlow"> + <a lay-href="/modules/mallMember/moneyFlowList?inviteId={{d.inviteId}}" target="_blank">{{d.selfProfitAmount}}</a> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use([ 'jquery', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + febs = layui.febs, + form = layui.form, + table = layui.table, + $view = $('#febs-team-list'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + refererId = $searchForm.find('input[name="refererId"]').val().trim(), + sortObject = {field: 'phone', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initTable(); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(teamListTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + if (layEvent === 'agentLevelUpdate') { + febs.modal.open('编辑', 'modules/mallMember/agentLevelUpdate/' + data.id, { + btn: ['确认', '取消'], + yes: function (index, layero) { + $('#agent-level-edit').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + }); + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + + function initTable() { + var type = $searchForm.find('input[name="type"]').val().trim(), + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'teamListTable', + url: ctx + 'admin/mallMember/teamList?referrerId=' + refererId + "&type=" + type, + where : getQueryParams, + cols: [[ + {field: 'name', title: '会员名称', minWidth: 100}, + {field: 'phone', title: '会员账号', minWidth: 100}, + {field: 'directCnt', title: '直推人数', templet:"#directCntTemplate", minWidth: 100}, + {field: 'teamCnt', title: '团队人数', templet:"#teamCntTemplate", minWidth: 100}, + {field: 'selfProfitAmount', title: '会员收益', templet:"#selfMoneyFlow", minWidth: 100}, + {field: 'teamOrderAmount', title: '团队订单金额', minWidth: 100}, + {field: 'teamProfitAmount', title: '团队收益', templet:"#teamMoneyFlow", minWidth: 100}, + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + query: $searchForm.find('input[name="query"]').val().trim(), + referrerId: $searchForm.find('input[name="refererId"]').val().trim(), + }; + } + }) +</script> +<script> +</script> \ No newline at end of file -- Gitblit v1.9.1