package com.dsh.account.controller; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.dsh.account.dto.SelectDto; import com.dsh.account.dto.UserInfoQueryDTO; import com.dsh.account.entity.Coach; import com.dsh.account.entity.TAppUser; import com.dsh.account.entity.TCourseInfoRecord; import com.dsh.account.model.*; import com.dsh.account.model.query.appUserQuery.QueryAppUser; import com.dsh.account.model.vo.QueryAppUserVO; import com.dsh.account.service.IVipPaymentService; import com.dsh.account.service.TAppUserService; import com.dsh.account.service.TCourseInfoRecordService; import com.dsh.account.util.*; import com.dsh.account.vo.GroupCityInfoVO; import com.dsh.account.vo.UserInfoQueryVO; import com.dsh.account.vo.entity.DayData; import com.dsh.account.vo.entity.MonthData; import com.dsh.account.vo.entity.WeekData; import com.dsh.account.vo.entity.YearData; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.*; import java.util.List; /** * @author zhibing.pu * @date 2023/6/14 15:30 */ @RestController @RequestMapping("") public class AppUserController { @Autowired private TAppUserService appUserService; @Autowired private PayMoneyUtil payMoneyUtil; @Autowired private IVipPaymentService vipPaymentService; @Autowired private TokenUtil tokenUtil; @Autowired private TCourseInfoRecordService courseInfoRecordService; @Autowired private RedisUtil redisUtil; /** * 获取所有用户 */ @ResponseBody @PostMapping("/base/appUser/queryAppUserList") public List queryAppUserList(@RequestBody AppUserByNameAndPhoneDTO dto){ return appUserService.queryAPPUserByNameAndPhone(dto); } /** * 根据用户姓名和电话模糊查询 */ @ResponseBody @PostMapping("/base/appUser/queryAPPUserByNameAndPhone") public List queryAPPUserByNameAndPhone(@RequestBody AppUserByNameAndPhoneDTO dto){ return appUserService.queryAPPUserByNameAndPhone(dto); } /** * 根据用户id获取用户信息 * @param appUserId * @return */ @ResponseBody @PostMapping("/base/appUser/queryAppUser1") public TAppUser queryAppUser1(@RequestBody Integer appUserId){ TAppUser appUser = appUserService.getById(appUserId); return appUser; } /** * 冻结/解冻 1=解冻 2=冻结 */ @RequestMapping("/base/appUser/changeState") public Object changeState(@RequestBody AdvertisementChangeStateDTO dto){ return appUserService.changeState(dto); } /** * 后台添加 */ @RequestMapping("/base/appUser/addAppUser1") public Object addAppUser1(@RequestBody TAppUser query){ // 修改 if (query.getId()!=null){ TAppUser phone = appUserService.getOne(new QueryWrapper().eq("phone", query.getPhone()).ne("id",query.getId())); if (null != phone){ return 5001; } } query.setIsVip(0); query.setPassword("111111"); query.setInsertTime(new Date()); return appUserService.saveOrUpdate(query); } /** * 获取用户信息列表数据 */ @RequestMapping("/base/appUser/listAll") public List listAll(@RequestBody QueryAppUser query){ return appUserService.listAll(query); } /** * 根据用户手机号获取用户id */ @ResponseBody @GetMapping("/base/appUser/getAppUserByPhone/{phone}") public TAppUser getAppUserByPhone(@PathVariable("phone") String phone){ TAppUser appUser = appUserService.getOne(new QueryWrapper().eq("phone", phone)); return appUser; } @ResponseBody @PostMapping("/base/appUser/getSMSCode") @ApiOperation(value = "获取短信验证码", tags = {"APP-登录注册"}) @ApiImplicitParams({ @ApiImplicitParam(value = "类型(1:登录,2:注册,3:修改密码,4:忘记密码)", name = "type", dataType = "int", required = true), @ApiImplicitParam(value = "电话号码", name = "phone", dataType = "string", required = true) }) public ResultUtil getSMSCode(Integer type, String phone){ if(ToolUtil.isEmpty(phone)){ return ResultUtil.paranErr("phone"); } if(ToolUtil.isEmpty(type)){ return ResultUtil.paranErr("type"); } try { ResultUtil smsCode = appUserService.getSMSCode(type, phone); return smsCode; }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/base/appUser/addAppUser") @ApiOperation(value = "注册用户", tags = {"APP-登录注册"}) @ApiImplicitParams({ }) public ResultUtil addAppUser(AddAppUserVo addAppUserVo){ try { return appUserService.addAppUser(addAppUserVo); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/base/appUser/loginPassword") @ApiOperation(value = "账号密码登录", tags = {"APP-登录注册"}) @ApiImplicitParams({ @ApiImplicitParam(value = "电话号码", name = "phone", dataType = "string", required = true), @ApiImplicitParam(value = "登录密码", name = "password", dataType = "string", required = true) }) public ResultUtil loginPassword(String phone, String password){ if(ToolUtil.isEmpty(phone)){ return ResultUtil.paranErr("phone"); } if(ToolUtil.isEmpty(password)){ return ResultUtil.paranErr("password"); } try { return appUserService.loginPassword(phone, password); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/base/appUser/loginSMSCode") @ApiOperation(value = "短信验证码登录", tags = {"APP-登录注册"}) @ApiImplicitParams({ }) public ResultUtil loginSMSCode(LoginSMSCodeVo loginSMSCodeVo){ try { return appUserService.loginSMSCode(loginSMSCodeVo); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/base/appUser/loginWeChat") @ApiOperation(value = "微信登录", tags = {"APP-登录注册"}) @ApiImplicitParams({ }) public ResultUtil loginWeChat(LoginWeChatVo loginWeChatVo){ try { return appUserService.loginWechat(loginWeChatVo); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/base/appUser/bind") @ApiOperation(value = "微信登录--绑定手机号", tags = {"APP-登录注册"}) @ApiImplicitParams({ }) public ResultUtil bind(String phone,String openId,String code){ try { String value = redisUtil.getValue(phone); if(!code.equals(value)){ return ResultUtil.error("验证码无效", ""); } List list = appUserService.list(new LambdaQueryWrapper().eq(TAppUser::getOpenid, openId)); TAppUser tAppUser = list.get(0); tAppUser.setPhone(phone); appUserService.updateById(tAppUser); return ResultUtil.success(); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/base/appUser/updatePassword") @ApiOperation(value = "修改密码", tags = {"APP-登录注册"}) @ApiImplicitParams({ @ApiImplicitParam(value = "电话号码", name = "phone", dataType = "string", required = true), @ApiImplicitParam(value = "短信验证码", name = "code", dataType = "string", required = true), @ApiImplicitParam(value = "新密码", name = "password", dataType = "string", required = true) }) public ResultUtil updatePassword(String phone, String code, String password){ if(ToolUtil.isEmpty(phone)){ return ResultUtil.paranErr("phone"); } if(ToolUtil.isEmpty(code)){ return ResultUtil.paranErr("code"); } if(ToolUtil.isEmpty(password)){ return ResultUtil.paranErr("password"); } try { return appUserService.updatePassword(phone, code, password); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/base/appUser/forgetPassword") @ApiOperation(value = "忘记密码", tags = {"APP-登录注册"}) @ApiImplicitParams({ @ApiImplicitParam(value = "电话号码", name = "phone", dataType = "string", required = true), @ApiImplicitParam(value = "短信验证码", name = "code", dataType = "string", required = true), @ApiImplicitParam(value = "新密码", name = "password", dataType = "string", required = true) }) public ResultUtil forgetPassword(String phone, String code, String password){ if(ToolUtil.isEmpty(phone)){ return ResultUtil.paranErr("phone"); } if(ToolUtil.isEmpty(code)){ return ResultUtil.paranErr("code"); } if(ToolUtil.isEmpty(password)){ return ResultUtil.paranErr("password"); } try { return appUserService.updatePassword(phone, code, password); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/appUser/queryJoinPlayPai") @ApiOperation(value = "获取加入玩湃首页数据", tags = {"APP-加入玩湃"}) @ApiImplicitParams({ @ApiImplicitParam(value = "经度", name = "lon", dataType = "string", required = false), @ApiImplicitParam(value = "纬度", name = "lat", dataType = "string", required = false), @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil queryJoinPlayPai(String lon, String lat){ try { Integer uid = tokenUtil.getUserIdFormRedis(); if(null == uid){ return ResultUtil.tokenErr(); } JoinPlayPaiVo joinPlayPaiVo = appUserService.queryJoinPlayPai(uid, lon, lat); return ResultUtil.success(joinPlayPaiVo); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/appUser/addVipPayment") @ApiOperation(value = "购买年度会员", tags = {"APP-成为会员"}) @ApiImplicitParams({ @ApiImplicitParam(value = "支付方式(1=微信,2=支付宝)", name = "payType", dataType = "int", required = true), @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil addVipPayment(Integer payType){ if(ToolUtil.isEmpty(payType)){ return ResultUtil.paranErr("payType"); } try { Integer uid = tokenUtil.getUserIdFormRedis(); if(null == uid){ return ResultUtil.tokenErr(); } return vipPaymentService.addVipPayment(uid, payType); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 购买年度会员支付微信回调 * @param request * @param response */ @ResponseBody @PostMapping("/base/appUser/addVipPaymentWeChatCallback") public void addVipPaymentWeChatCallback(HttpServletRequest request, HttpServletResponse response){ try { Map map = payMoneyUtil.weixinpayCallback(request); if(null != map){ String out_trade_no = map.get("out_trade_no"); String transaction_id = map.get("transaction_id"); String result = map.get("result"); ResultUtil resultUtil = vipPaymentService.addVipPaymentCallback(out_trade_no, transaction_id); if(resultUtil.getCode() == 200){ PrintWriter out = response.getWriter(); out.write(result); out.flush(); out.close(); } } }catch (Exception e){ e.printStackTrace(); } } /** * 购买年度会员支付支付宝回调 * @param request * @param response */ @ResponseBody @PostMapping("/base/appUser/addVipPaymentAliCallback") public void addVipPaymentAliCallback(HttpServletRequest request, HttpServletResponse response){ try { Map map = payMoneyUtil.alipayCallback(request); if(null != map){ String out_trade_no = map.get("out_trade_no"); String trade_no = map.get("trade_no"); ResultUtil resultUtil = vipPaymentService.addVipPaymentCallback(out_trade_no, trade_no); if(resultUtil.getCode() == 200){ PrintWriter out = response.getWriter(); out.write("success"); out.flush(); out.close(); } } }catch (Exception e){ e.printStackTrace(); } } /** * 根据用户id获取用户信息 * @param appUserId * @return */ @ResponseBody @PostMapping("/base/appUser/queryAppUser") public TAppUser queryAppUser(@RequestBody Integer appUserId){ try { TAppUser appUser = appUserService.getById(appUserId); return appUser; }catch (Exception e){ e.printStackTrace(); return null; } } /** * 修改用户信息 * @param appUser */ @ResponseBody @PostMapping("/base/appUser/updateAppUser") public void updateAppUser(@RequestBody TAppUser appUser){ try { appUserService.updateById(appUser); }catch (Exception e){ e.printStackTrace(); } } @PostMapping("/base/appUser/getAllUser") @ResponseBody public List getAllUser(){ try { return appUserService.list(); }catch (Exception e){ e.printStackTrace(); return new ArrayList<>(); } } @PostMapping("/base/appUser/queryByNamePhone") public List queryByNamePhone(@RequestBody QueryByNamePhone queryByNamePhone){ try { LambdaQueryWrapper tAppUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); if(ToolUtil.isNotEmpty(queryByNamePhone.getName())){ tAppUserLambdaQueryWrapper.like(TAppUser::getName,queryByNamePhone.getName()); } if(ToolUtil.isNotEmpty(queryByNamePhone.getPhone())){ tAppUserLambdaQueryWrapper.like(TAppUser::getPhone,queryByNamePhone.getPhone()); } List list = appUserService.list(tAppUserLambdaQueryWrapper); return list; }catch (Exception e){ e.printStackTrace(); return new ArrayList<>(); } } @PostMapping("/base/appUser/queryById") public TAppUser queryById(@RequestBody Integer appUserId){ try { return appUserService.getById(appUserId); }catch (Exception e){ e.printStackTrace(); return new TAppUser(); } } /** * 根据名称模糊搜索用户 * @param name * @return */ @ResponseBody @PostMapping("/appUser/queryAppUserListByName") public List queryAppUserListByName(@RequestBody String name){ return appUserService.list(new QueryWrapper().eq("state", 1).like("name", name)); } @PostMapping("/appUser/addCourseInfoRecord") public Boolean addCourseInfoRecord(@RequestBody TCourseInfoRecord tCourseInfoRecord){ boolean save = courseInfoRecordService.save(tCourseInfoRecord); return save; } @PostMapping("/appUser/getSelects") public List getSelects(@RequestBody List studentIds){ List selectDtos = appUserService.getSelects(studentIds); System.out.println("=======selectDtos======>"+selectDtos); return selectDtos; } @PostMapping("/appUser/userInfo") public UserInfoQueryVO userInfo(@RequestBody UserInfoQueryDTO dto){ UserInfoQueryVO userInfoQueryVO = new UserInfoQueryVO(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if(StringUtils.hasLength(dto.getCityCode())){ wrapper.eq(TAppUser::getCityCode,dto.getCityCode()); } if(Objects.nonNull(dto.getOperatorId())){ wrapper.eq(TAppUser::getInsertType,2); wrapper.eq(TAppUser::getAddUserId,dto.getOperatorId()); } if(Objects.nonNull(dto.getStoreId())){ wrapper.eq(TAppUser::getInsertType,3); wrapper.eq(TAppUser::getAddUserId,dto.getStoreId()); } // 查询会员总数,年度会员总数 int userCount = appUserService.count(wrapper); int userVipCount = appUserService.count(wrapper.eq(TAppUser::getIsVip,1)); userInfoQueryVO.setUserCount(userCount); userInfoQueryVO.setUserVipCount(userVipCount); if(Objects.nonNull(dto.getIsVip())){ wrapper.eq(TAppUser::getIsVip,dto.getIsVip()); } // 年度数据 List yearData = appUserService.getYearUserCount(dto); userInfoQueryVO.setYearData(yearData); // 月度数据 List monthData = appUserService.getMonthUserCount(dto); userInfoQueryVO.setMonthData(monthData); // 获取最近四周 LocalDateTime minNow = LocalDateTime.now().with(LocalTime.MIN); LocalDateTime maxNow = LocalDateTime.now().with(LocalTime.MAX); // 周度数据 dto.setStartTime(minNow.minusDays(6).toString()); dto.setEndTime(maxNow.toString()); WeekData week4 = appUserService.getWeekUserCount4(dto); dto.setStartTime(minNow.minusDays(13).toString()); dto.setEndTime(maxNow.minusDays(6).toString()); WeekData week3 = appUserService.getWeekUserCount3(dto); dto.setStartTime(minNow.minusDays(20).toString()); dto.setEndTime(maxNow.minusDays(13).toString()); WeekData week2 = appUserService.getWeekUserCount2(dto); dto.setStartTime(minNow.minusDays(27).toString()); dto.setEndTime(maxNow.minusDays(20).toString()); WeekData week1 = appUserService.getWeekUserCount1(dto); List weekDataList = new ArrayList<>(); weekDataList.add(week1); weekDataList.add(week2); weekDataList.add(week3); weekDataList.add(week4); userInfoQueryVO.setWeekData(weekDataList); // 日度数据 dto.setStartTime(minNow.minusDays(6).toString()); dto.setEndTime(maxNow.toString()); List dayData = appUserService.getDayUserCount(dto); userInfoQueryVO.setDayData(dayData); return userInfoQueryVO; } @PostMapping("/appUser/ageInfo") public Map ageInfo(@RequestBody UserInfoQueryDTO dto){ Map map = new HashMap<>(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if(StringUtils.hasLength(dto.getCityCode())){ wrapper.eq(TAppUser::getCityCode,dto.getCityCode()); } if(Objects.nonNull(dto.getOperatorId())){ wrapper.eq(TAppUser::getInsertType,2); wrapper.eq(TAppUser::getAddUserId,dto.getOperatorId()); } if(Objects.nonNull(dto.getStoreId())){ wrapper.eq(TAppUser::getInsertType,3); wrapper.eq(TAppUser::getAddUserId,dto.getStoreId()); } List list = appUserService.list(wrapper); // 查询会员 list.forEach(tAppUser->tAppUser.setAge(DateUtil.ageOfNow(tAppUser.getBirthday()))); map.put("age1", list.stream().filter(e -> e.getAge() > 0 && e.getAge() <= 12).count()); map.put("age2",list.stream().filter(e -> e.getAge() >= 13 && e.getAge() <= 18).count()); map.put("age3",list.stream().filter(e -> e.getAge() >= 19 && e.getAge() <= 25).count()); map.put("age4",list.stream().filter(e -> e.getAge() >= 26 && e.getAge() <= 35).count()); map.put("age5",list.stream().filter(e -> e.getAge() >= 36 && e.getAge() <= 50).count()); map.put("age6",list.stream().filter(e -> e.getAge() >= 51).count()); return map; } @PostMapping("/appUser/sexInfo") public Map sexInfo(@RequestBody UserInfoQueryDTO dto){ Map map = new HashMap<>(2); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if(StringUtils.hasLength(dto.getCityCode())){ wrapper.eq(TAppUser::getCityCode,dto.getCityCode()); } if(Objects.nonNull(dto.getOperatorId())){ wrapper.eq(TAppUser::getInsertType,2); wrapper.eq(TAppUser::getAddUserId,dto.getOperatorId()); } if(Objects.nonNull(dto.getStoreId())){ wrapper.eq(TAppUser::getInsertType,3); wrapper.eq(TAppUser::getAddUserId,dto.getStoreId()); } // 查询会员 int boyCount = appUserService.count(wrapper.eq(TAppUser::getGender,1)); int girlCount = appUserService.count(wrapper.eq(TAppUser::getGender,2)); map.put("boyCount",boyCount); map.put("girlCount",girlCount); return map; } @PostMapping("/appUser/groupCityInfo") public List groupCityInfo(@RequestBody UserInfoQueryDTO dto){ // 查询地区会员 return appUserService.groupCityInfo(dto); } }