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<PageInfo<TeamVO>> findTeam(BalanceQuery query) {
|
List<TeamVO> teamVOS = new ArrayList<>();
|
if (query.getEndTime()!=null){
|
query.getEndTime().setHours(23);
|
query.getEndTime().setMinutes(59);
|
query.getEndTime().setSeconds(59);
|
|
}
|
// 先统计团队成员有哪些
|
List<Integer> inviteUserId = appUserService.selectList(new EntityWrapper<AppUser>()
|
.eq("inviteUserId", query.getId())).stream().map(AppUser::getId)
|
.collect(Collectors.toList());
|
if (inviteUserId.size()!=0) {
|
// 再查询这些用户邀请了哪些人 这些人就是这个用户的团队成员
|
List<AppUser> users = appUserService.selectList(new EntityWrapper<AppUser>()
|
.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<TeamVO> 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<TeamVO> sortedList = res.stream()
|
.sorted(Comparator.comparing(TeamVO::getAmount).reversed())
|
.collect(Collectors.toList());
|
// PageHelper.startPage(query.getPageNum(),query.getPageSize());
|
PageInfo<TeamVO> info=new PageInfo<>(sortedList);
|
return ResultUtil.success(info);
|
}
|
|
@ResponseBody
|
@PostMapping("/userList")
|
@ApiOperation(value = "用户列表", tags = {"用户管理"})
|
public ResultUtil<PageInfo<AppUserVO>> couponReceive(AppUserQuery query) {
|
List<AppUserVO> appUserVOS = new ArrayList<>();
|
|
List<AppUser> users = appUserService.selectList1(query.getName(),query.getPhone());
|
|
for (AppUser user : users) {
|
AppUserVO appUserVO = new AppUserVO();
|
BeanUtils.copyProperties(user,appUserVO);
|
// 查询这个用户是不是有人邀请他
|
if (user.getInviteUserId()!=null){
|
String name = appUserService.selectById(user.getInviteUserId()).getName();
|
appUserVO.setInviteUserName(name);
|
}
|
appUserVOS.add(appUserVO);
|
}
|
// PageHelper.startPage(query.getPageNum(),query.getPageSize());
|
PageInfo<AppUserVO> 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<AppUserDetailVO> 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<Recipient>()
|
.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<Recharge> recharges = rechargeService.selectList(new EntityWrapper<Recharge>()
|
.eq("userId", id).eq("state", 2));
|
if (recharges.size()>0){
|
List<BigDecimal> 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<BigDecimal> userId = inviteService.selectList(new EntityWrapper<Invite>()
|
.eq("userId", id)).stream().map(Invite::getAmount).collect(Collectors.toList());
|
friendMoney = userId.stream()
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
res.setFriendMoney(friendMoney);
|
|
BigDecimal withdrawalMoney = new BigDecimal("0");
|
List<Withdrawal> collect1 = withdrawalService.selectList(new EntityWrapper<Withdrawal>()
|
.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<Order> collect2 = orderService.selectList(new EntityWrapper<Order>()
|
.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<BigDecimal> collect3 = orderCourseService.selectList(new EntityWrapper<OrderCourse>()
|
.eq("userId", id)
|
.eq("state", 2)).stream().map(OrderCourse::getAmount)
|
.collect(Collectors.toList());
|
if (orderCourseService.selectList(new EntityWrapper<OrderCourse>()
|
.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<PageInfo<InviteUserVO>> inviteUserList(AppUserQuery query) {
|
List<InviteUserVO> res = appUserService.inviteUserList(query);
|
// PageHelper.startPage(query.getPageNum(),query.getPageSize());
|
PageInfo<InviteUserVO> info=new PageInfo<>(res);
|
return ResultUtil.success(info);
|
}
|
@ResponseBody
|
@PostMapping("/teamList")
|
@ApiOperation(value = "用户团队销售统计", tags = {"用户管理"})
|
public ResultUtil<PageInfo<TeamDetailVO>> teamList(TeamQuery query) {
|
List<TeamDetailVO> res = new ArrayList<>();
|
EntityWrapper<AppUser> 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<Integer> 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<Invite> 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<BigDecimal> collect = inviteService.selectList(wrapper1).stream()
|
.map(Invite::getAmount).collect(Collectors.toList());
|
BigDecimal consume = collect.stream()
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
// 查询这个用户有多少团队成员
|
// 查询这个用户邀请了 哪些人
|
List<Integer> inviteUserId = appUserService.selectList(new EntityWrapper<AppUser>()
|
.eq("inviteUserId", userId)).stream().map(AppUser::getId)
|
.collect(Collectors.toList());
|
if (inviteUserId.size()!=0){
|
// 再查询这些用户邀请了哪些人 这些人就是这个用户的团队成员
|
int inviteUserId1 = appUserService.selectList(new EntityWrapper<AppUser>()
|
.in("inviteUserId", inviteUserId)).size();
|
teamDetailVO.setCount(inviteUserId1);
|
}else{
|
teamDetailVO.setCount(0);
|
}
|
teamDetailVO.setAmount(consume);
|
res.add(teamDetailVO);
|
}
|
List<TeamDetailVO> sortedList = res.stream()
|
.sorted(Comparator.comparing(TeamDetailVO::getAmount).reversed())
|
.collect(Collectors.toList());
|
// PageHelper.startPage(query.getPageNum(),query.getPageSize());
|
PageInfo<TeamDetailVO> info=new PageInfo<>(sortedList);
|
return ResultUtil.success(info);
|
}
|
|
|
@ResponseBody
|
@PostMapping("/balanceDetail")
|
@ApiOperation(value = "用户详情-资金记录列表", tags = {"用户管理"})
|
public ResultUtil<PageInfo<UserDetailVO>> balanceDetail(BalanceQuery query) {
|
WalletVO walletVO = new WalletVO();
|
List<UserDetailVO> detail = new ArrayList<>();
|
BigDecimal balance = appUserService.selectById(query.getId()).getBalance();
|
walletVO.setBalance(balance);
|
List<String> strings = new ArrayList<>();
|
strings.add("insertTime");
|
Wrapper<Recharge> eq1 = new EntityWrapper<Recharge>()
|
.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<Recharge> 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<OrderCourse> eq2 = new EntityWrapper<OrderCourse>()
|
.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<OrderCourse> 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<Order> eq = new EntityWrapper<Order>()
|
.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<Order> 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<Withdrawal> eq3 = new EntityWrapper<Withdrawal>()
|
.eq("userId", query.getId())
|
.orderDesc(strings);
|
// 如果传递了年份和月份,则添加时间条件
|
if (query.getStartTime() != null && query.getEndTime() != null) {
|
eq3.ge("insertTime", query.getStartTime()).le("insertTime", query.getEndTime());
|
}
|
List<Withdrawal> 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<Invite> eq4 = new EntityWrapper<Invite>()
|
.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<Invite> 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<RedPackage> eq5 = new EntityWrapper<RedPackage>();
|
eq5.ge("insertTime",appUser.getInsertTime())
|
.orderDesc(strings);
|
if (query.getStartTime() != null && query.getEndTime() != null) {
|
eq5.ge("insertTime", query.getStartTime()).le("insertTime", query.getEndTime());
|
}
|
List<RedPackage> 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<UserDetailVO> sortedDetail = detail.stream()
|
.sorted(Comparator.comparing(UserDetailVO::getInsertTime).reversed()) // 根据 insertTime 从大到小排序
|
.collect(Collectors.toList());
|
// PageHelper.startPage(query.getPageNum(),query.getPageSize());
|
PageInfo<UserDetailVO> info=new PageInfo<>(sortedDetail);
|
return ResultUtil.success(info);
|
}
|
|
|
}
|