package com.stylefeng.guns.modular.code.controller; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.stylefeng.guns.core.support.HttpKit; import com.stylefeng.guns.modular.system.dto.BalanceQuery; import com.stylefeng.guns.modular.system.dto.TeamQuery; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.Page; import com.stylefeng.guns.modular.system.util.ResultUtil; import com.stylefeng.guns.modular.system.dto.AppUserQuery; import com.stylefeng.guns.modular.system.vo.*; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Controller; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.math.BigInteger; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @Controller @RequestMapping("/base/appUser") public class AppUserController { protected HttpServletResponse getHttpServletResponse() { return HttpKit.getResponse(); } protected HttpServletRequest getHttpServletRequest() { return HttpKit.getRequest(); } @Autowired private IUserService userService; @Autowired private IBannerService bannerService; @Autowired private ISysDataTypeService typeService; @Autowired private IMenuService menuService; @Autowired private IRegionService regionService; @Autowired private IAppUserService appUserService; @Autowired private IRechargeService rechargeService; @Autowired private IInviteService inviteService; @Autowired private IWithdrawalService withdrawalService; @Autowired private IOrderService orderService; @Autowired private IOrderCourseService orderCourseService; @Autowired private IRedPackageService redPackageService; @ResponseBody @PostMapping("/findTeam") @ApiOperation(value = "用户团队销售统计-查看成员", tags = {"用户管理"}) public ResultUtil> findTeam(BalanceQuery query) { List teamVOS = new ArrayList<>(); if (query.getEndTime()!=null){ query.getEndTime().setHours(23); query.getEndTime().setMinutes(59); query.getEndTime().setSeconds(59); } // 先统计团队成员有哪些 List inviteUserId = appUserService.selectList(new EntityWrapper() .eq("inviteUserId", query.getId())).stream().map(AppUser::getId) .collect(Collectors.toList()); if (inviteUserId.size()!=0) { // 再查询这些用户邀请了哪些人 这些人就是这个用户的团队成员 List users = appUserService.selectList(new EntityWrapper() .in("inviteUserId", inviteUserId)); for (AppUser user : users) { TeamVO teamVO = new TeamVO(); teamVO.setPhone(user.getPhone()); teamVO.setName(user.getName()); teamVO.setId(user.getId()); teamVOS.add(teamVO); } } List res = inviteService.findTeam(query); for (TeamVO re : res) { for (TeamVO teamVO : res) { if (re.getId().equals(teamVO.getId())){ re.setName(teamVO.getName()); re.setPhone(teamVO.getPhone()); break; } } } List sortedList = res.stream() .sorted(Comparator.comparing(TeamVO::getAmount).reversed()) .collect(Collectors.toList()); // PageHelper.startPage(query.getPageNum(),query.getPageSize()); PageInfo info=new PageInfo<>(sortedList); return ResultUtil.success(info); } @ResponseBody @PostMapping("/userList") @ApiOperation(value = "用户列表", tags = {"用户管理"}) public ResultUtil> couponReceive(AppUserQuery query) { List appUserVOS = new ArrayList<>(); List users = appUserService.selectList1(query.getName(),query.getPhone()); for (AppUser user : users) { AppUserVO appUserVO = new AppUserVO(); BeanUtils.copyProperties(user,appUserVO); // 查询这个用户是不是有人邀请他 if (user.getInviteUserId()!=null){ AppUser appUser = appUserService.selectById(user.getInviteUserId()); if (appUser!=null){ String name = appUser.getName(); appUserVO.setInviteUserName(name); } } appUserVOS.add(appUserVO); } // PageHelper.startPage(query.getPageNum(),query.getPageSize()); PageInfo info=new PageInfo<>(appUserVOS); return ResultUtil.success(info); } @ResponseBody @PostMapping("/freeze") @ApiOperation(value = "冻结/解冻", tags = {"用户管理"}) @ApiImplicitParams({ @ApiImplicitParam(value = "类型1=冻结 2=解冻 3=删除", name = "type"), @ApiImplicitParam(value = "用户id", name = "id") }) public ResultUtil freeze(Integer type,Integer id) { AppUser appUser = appUserService.selectById(id); if (type==1){ appUser.setState(2); appUserService.updateById(appUser); return ResultUtil.success("冻结成功"); }else if (type==2){ appUser.setState(1); appUserService.updateById(appUser); return ResultUtil.success("解冻成功"); }else { appUser.setState(3); appUserService.updateById(appUser); return ResultUtil.success("删除成功"); } } @Autowired private IRecipientService recipientService; @ResponseBody @PostMapping("/userDetail") @ApiOperation(value = "用户详情", tags = {"用户管理"}) @ApiImplicitParams({ @ApiImplicitParam(value = "用户id", name = "id") }) public ResultUtil userDetail(Integer id) { AppUser appUser = appUserService.selectById(id); AppUserDetailVO res = new AppUserDetailVO(); res.setName(appUser.getName()); res.setGender(appUser.getGender()); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); if (appUser.getBirthday()!=null){ String format1 = format.format(appUser.getBirthday()); res.setBirthday(format1); } if (null == appUser.getHeight()){ res.setHeight("0cm"); }else{ res.setHeight(appUser.getHeight()+"cm"); } if (null == appUser.getWeight()){ res.setWeight("0kg"); }else{ res.setWeight(appUser.getWeight()+"kg"); } res.setPhone(appUser.getPhone()); String temp = "新人"; if (appUser.getClockIn()>=240){ temp = "王者达人"; }else if (appUser.getClockIn()>=120){ temp = "大师达人"; }else if (appUser.getClockIn()>=90){ temp = "钻石达人"; }else if (appUser.getClockIn()>=60){ temp = "黄金达人"; }else if (appUser.getClockIn()>=30){ temp = "白银达人"; }else if (appUser.getClockIn()>=10){ temp = "青铜达人"; } res.setClockIn(temp); SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String format2 = format1.format(appUser.getInsertTime()); res.setInsertTime(format2); Recipient userId1 = recipientService.selectOne(new EntityWrapper() .eq("userId", appUser.getId())); if (userId1!=null){ res.setAddress(userId1.getProvince()+userId1.getCity()+userId1.getAddress()); } if (appUser.getInviteUserId()!=null){ AppUser appUser1 = appUserService.selectById(appUser.getInviteUserId()); if (appUser1!=null){ res.setInviteUserName(appUser1.getName()); } } BigDecimal totalAmount = new BigDecimal("0"); res.setBalance(appUser.getBalance()); // 查询用户充值金额 List recharges = rechargeService.selectList(new EntityWrapper() .eq("userId", id).eq("state", 2)); if (recharges.size()>0){ List collect = recharges.stream() .map(Recharge::getAmount).collect(Collectors.toList()); totalAmount = collect.stream() .reduce(BigDecimal.ZERO, BigDecimal::add); } res.setRechargeMoney(totalAmount); BigDecimal friendMoney = new BigDecimal("0"); // 查询消费金额 List userId = inviteService.selectList(new EntityWrapper() .eq("giftUserId", id) .eq("type",1)).stream().map(Invite::getAmount).collect(Collectors.toList()); friendMoney = userId.stream() .reduce(BigDecimal.ZERO, BigDecimal::add); res.setFriendMoney(friendMoney); BigDecimal withdrawalMoney = new BigDecimal("0"); List collect1 = withdrawalService.selectList(new EntityWrapper() .eq("userId", id) .eq("payment", 2)); if (collect1.size()>0){ withdrawalMoney = collect1.stream().map(Withdrawal::getAmount) .reduce(BigDecimal.ZERO, BigDecimal::add); } res.setWithdrawalMoney(withdrawalMoney); // 查询用户总共消费多少 只查询购买课程和套餐所花的钱 List collect2 = orderService.selectList(new EntityWrapper() .eq("userId", id) .eq("state", 2)); BigDecimal consum1 = new BigDecimal("0"); BigDecimal consum2 = new BigDecimal("0"); if (collect2.size() >0){ consum1 = collect2.stream().map(Order::getRealMoney) .collect(Collectors.toList()).stream() .reduce(BigDecimal.ZERO, BigDecimal::add); } List collect3 = orderCourseService.selectList(new EntityWrapper() .eq("userId", id) .eq("state", 2)).stream().map(OrderCourse::getAmount) .collect(Collectors.toList()); if (orderCourseService.selectList(new EntityWrapper() .eq("userId", id) .eq("state", 2)).size()>0){ consum2 = collect3.stream() .reduce(BigDecimal.ZERO, BigDecimal::add); } BigDecimal add = consum1.add(consum2); res.setConsumeMoney(add); return ResultUtil.success(res); } @ResponseBody @PostMapping("/inviteUserList") @ApiOperation(value = "用户详情-已邀请用户列表", tags = {"用户管理"}) public ResultUtil> inviteUserList(AppUserQuery query) { List res = appUserService.inviteUserList(query); // PageHelper.startPage(query.getPageNum(),query.getPageSize()); PageInfo info=new PageInfo<>(res); return ResultUtil.success(info); } @ResponseBody @PostMapping("/teamList") @ApiOperation(value = "用户团队销售统计", tags = {"用户管理"}) public ResultUtil> teamList(TeamQuery query) { List res = new ArrayList<>(); EntityWrapper wrapper = new EntityWrapper<>(); wrapper.ne("state",3); wrapper.isNotNull("phone"); if (StringUtils.hasLength(query.getName())){ wrapper.like("name",query.getName()); } if (StringUtils.hasLength(query.getPhone())){ wrapper.like("phone",query.getPhone()); } // 所有的用户ids List userIds = appUserService.selectList(wrapper) .stream().map(AppUser::getId).collect(Collectors.toList()); for (Integer userId : userIds) { // 查询这个用户获取了多少团队消费奖励 TeamDetailVO teamDetailVO = new TeamDetailVO(); AppUser appUser = appUserService.selectById(userId); teamDetailVO.setId(userId); teamDetailVO.setName(appUser.getName()); teamDetailVO.setPhone(appUser.getPhone()); EntityWrapper wrapper1 = new EntityWrapper<>(); wrapper1.eq("giftUserId", userId).eq("type", 2); if (query.getStartTime()!=null && query.getEndTime()!=null){ query.getEndTime().setHours(23); query.getEndTime().setMinutes(59); query.getEndTime().setSeconds(59); wrapper1.ge("insertTime",query.getStartTime()); wrapper1.le("insertTime",query.getEndTime()); } // 查询团队消费奖励记录 List collect = inviteService.selectList(wrapper1).stream() .map(Invite::getAmount).collect(Collectors.toList()); BigDecimal consume = collect.stream() .reduce(BigDecimal.ZERO, BigDecimal::add); // 查询这个用户有多少团队成员 // 查询这个用户邀请了 哪些人 List inviteUserId = appUserService.selectList(new EntityWrapper() .eq("inviteUserId", userId)).stream().map(AppUser::getId) .collect(Collectors.toList()); if (inviteUserId.size()!=0){ // 再查询这些用户邀请了哪些人 这些人就是这个用户的团队成员 int inviteUserId1 = appUserService.selectList(new EntityWrapper() .in("inviteUserId", inviteUserId)).size(); teamDetailVO.setCount(inviteUserId1); }else{ teamDetailVO.setCount(0); } teamDetailVO.setAmount(consume); res.add(teamDetailVO); } List sortedList = res.stream() .sorted(Comparator.comparing(TeamDetailVO::getAmount).reversed()) .collect(Collectors.toList()); // PageHelper.startPage(query.getPageNum(),query.getPageSize()); PageInfo info=new PageInfo<>(sortedList); return ResultUtil.success(info); } @ResponseBody @PostMapping("/balanceDetail") @ApiOperation(value = "用户详情-资金记录列表", tags = {"用户管理"}) public ResultUtil> balanceDetail(BalanceQuery query) { WalletVO walletVO = new WalletVO(); List detail = new ArrayList<>(); BigDecimal balance = appUserService.selectById(query.getId()).getBalance(); walletVO.setBalance(balance); List strings = new ArrayList<>(); strings.add("insertTime"); Wrapper eq1 = new EntityWrapper() .eq("userId", query.getId()) .eq("state", 2) .orderDesc(strings); // 如果传递了年份和月份,则添加时间条件 if (query.getStartTime() != null && query.getEndTime() != null) { query.getEndTime().setHours(23); query.getEndTime().setMinutes(59); query.getEndTime().setSeconds(59); eq1.ge("insertTime", query.getStartTime()).le("insertTime", query.getEndTime()); } // 查询充值记录 List recharges = rechargeService.selectList(eq1); for (Recharge recharge : recharges) { UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setAmount("+"+recharge.getAmount().toString()); userDetailVO.setType("充值"); userDetailVO.setTypeId(1); userDetailVO.setInsertTime(recharge.getInsertTime()); detail.add(userDetailVO); } // 查询购课记录 只查询钱包支付的 Wrapper eq2 = new EntityWrapper() .eq("userId", query.getId()) .orderDesc(strings) // .eq("payType", 3) .eq("state", 2); // 如果传递了年份和月份,则添加时间条件 if (query.getStartTime() != null && query.getEndTime() != null) { eq2.ge("insertTime", query.getStartTime()).le("insertTime", query.getEndTime()); } List orderCourses = orderCourseService.selectList(eq2); for (OrderCourse orderCours : orderCourses) { UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setAmount("-"+orderCours.getRealMoney()); userDetailVO.setType("购买课程"); userDetailVO.setTypeId(2); userDetailVO.setInsertTime(orderCours.getInsertTime()); detail.add(userDetailVO); } Wrapper eq = new EntityWrapper() .eq("userId", query.getId()) .eq("payType", 3) .orderDesc(strings) .eq("state", 2); // 如果传递了年份和月份,则添加时间条件 if (query.getStartTime() != null && query.getEndTime() != null) { eq.ge("insertTime", query.getStartTime()).le("insertTime", query.getEndTime()); } List orders = orderService.selectList(eq); // 查询购买套餐记录 只查询钱包支付的 for (Order order : orders) { UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setAmount("-"+order.getRealMoney()); userDetailVO.setType("购买套餐"); userDetailVO.setTypeId(2); userDetailVO.setInsertTime(order.getInsertTime()); detail.add(userDetailVO); } // 查询提现记录 Wrapper eq3 = new EntityWrapper() .eq("userId", query.getId()) .orderDesc(strings); // 如果传递了年份和月份,则添加时间条件 if (query.getStartTime() != null && query.getEndTime() != null) { eq3.ge("insertTime", query.getStartTime()).le("insertTime", query.getEndTime()); } List withdrawals = withdrawalService.selectList(eq3); for (Withdrawal withdrawal : withdrawals) { UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setTypeId(3); switch (withdrawal.getState()){ case 1: userDetailVO.setInsertTime(withdrawal.getInsertTime()); userDetailVO.setAmount("-"+withdrawal.getAmount()); userDetailVO.setType("提现"); break; case 2: userDetailVO.setInsertTime(withdrawal.getInsertTime()); userDetailVO.setAmount("-"+withdrawal.getAmount()); userDetailVO.setType("提现"); break; case 3: userDetailVO.setInsertTime(withdrawal.getRefuseTime()); userDetailVO.setAmount("+"+withdrawal.getAmount()); userDetailVO.setType("提现失败,提现金额返回至余额"); // 添加一条提醒扣款明细 UserDetailVO userDetailVO1 = new UserDetailVO(); userDetailVO1.setTypeId(3); userDetailVO1.setInsertTime(withdrawal.getInsertTime()); userDetailVO1.setAmount("-"+withdrawal.getAmount()); userDetailVO1.setType("提现"); detail.add(userDetailVO1); break; } detail.add(userDetailVO); } // 查询是否有邀请过用户 获得消费奖励 Wrapper eq4 = new EntityWrapper() .eq("giftUserId", query.getId()) .eq("type",1) .orderDesc(strings); // 如果传递了年份和月份,则添加时间条件 if (query.getStartTime() != null && query.getEndTime() != null) { eq4.ge("insertTime", query.getStartTime()).le("insertTime", query.getEndTime()); } List giftUserId = inviteService.selectList(eq4); for (Invite invite : giftUserId) { UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setAmount("+"+invite.getAmount()); userDetailVO.setTypeId(4); AppUser appUser = appUserService.selectById(invite.getUserId()); userDetailVO.setType("好友消费:"+appUser.getName()+"消费了"+invite.getConsume()+"元"); userDetailVO.setInsertTime(invite.getInsertTime()); detail.add(userDetailVO); } AppUser appUser = appUserService.selectById(query.getId()); // 查询红包发放记录 Wrapper eq5 = new EntityWrapper(); eq5.ge("insertTime",appUser.getInsertTime()) .orderDesc(strings); if (query.getStartTime() != null && query.getEndTime() != null) { eq5.ge("insertTime", query.getStartTime()).le("insertTime", query.getEndTime()); } List redPackages = redPackageService.selectList(eq5); for (RedPackage redPackage : redPackages) { UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setAmount("+"+redPackage.getAmount()); userDetailVO.setTypeId(5); userDetailVO.setType("平台红包"); userDetailVO.setInsertTime(redPackage.getInsertTime()); detail.add(userDetailVO); } // 如果筛选了类型 if (query.getType()!=null){ detail = detail.stream().filter(t -> t.getTypeId() == query.getType()).collect(Collectors.toList()); } List sortedDetail = detail.stream() .sorted(Comparator.comparing(UserDetailVO::getInsertTime).reversed()) // 根据 insertTime 从大到小排序 .collect(Collectors.toList()); // PageHelper.startPage(query.getPageNum(),query.getPageSize()); PageInfo info=new PageInfo<>(sortedDetail); return ResultUtil.success(info); } }