package com.ruoyi.web.controller.api; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.BasePage; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.WebUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.domain.*; import com.ruoyi.system.export.TOrderMealExportExcel; import com.ruoyi.system.query.AppUserQuery; import com.ruoyi.system.service.*; import com.ruoyi.web.controller.query.dto.FreezeDto; import com.ruoyi.web.controller.query.dto.RegisterDto; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; /** *

* 用户表 前端控制器 *

* * @author luodangjia * @since 2024-09-19 */ @RestController @RequestMapping("/t-app-user") public class TAppUserController { //列表 @Resource private TAppUserService appUserService; @Resource private TUserChangeService tUserChangeService; @Resource private TUserChangeDetailService tUserChangeDetailService; @Resource private TRegionService regionService; @Resource private TTechnicalTitleService tTechnicalTitleService; @Resource private TTitleMajorService majorService; @Resource private TLevelService levelService; @Resource private ISysUserService sysUserService; @Resource private TokenService tokenService; @Resource private RedisCache redisCache; @ApiOperation(value = "收藏通用接口1咨询2课程3资料",tags = "web-个人中心") @PostMapping("/collect") public R collect(@RequestParam Long id,@RequestParam Integer type) { Long userId = tokenService.getLoginUser().getUserId(); HashSet ids = new HashSet<>(); ids.add(id); if (type==1) { redisCache.setCacheSet("Consultation:"+userId, ids); }else if (type==2){ Set users = new HashSet<>(); users.add(userId); redisCache.setCacheSet("COLLECT:" + id,users); redisCache.setCacheSet("COURSE:"+userId, ids); }else if (type ==3){ redisCache.setCacheSet("INFORMATION:"+userId, ids); } return R.ok(); } @ApiOperation(value = "取消收藏通用接口1咨询2课程3资料",tags = "web-个人中心") @PostMapping("/cancel") public R cancelcollect(@RequestParam Long id,@RequestParam Integer type) { Long userId = tokenService.getLoginUser().getUserId(); HashSet ids = new HashSet<>(); ids.add(id); if (type==1) { Set cacheSet = redisCache.getCacheSet("Consultation:" + userId); cacheSet.remove(id); redisCache.deleteObject("Consultation:"+ userId); redisCache.setCacheSet("Consultation:"+userId, cacheSet); }else if (type==2){ Set cacheSet = redisCache.getCacheSet("COURSE:" + userId); cacheSet.remove(id); redisCache.deleteObject("COURSE:"+ userId); redisCache.setCacheSet("COURSE:"+userId, cacheSet); }else if (type ==3){ Set cacheSet = redisCache.getCacheSet("INFORMATION:" + userId); cacheSet.remove(id); redisCache.deleteObject("INFORMATION:"+ userId); redisCache.setCacheSet("INFORMATION:"+userId, cacheSet); } return R.ok(); } @ApiOperation(value = "注册",tags = "web-登录") @PostMapping("/regis") public R regis(@RequestBody RegisterDto registerDto) { TAppUser one = appUserService.lambdaQuery().eq(TAppUser::getPhone, registerDto.getPhone()).one(); if (one!=null){ return R.fail("当前手机号已注册"); } String cacheObject = redisCache.getCacheObject(registerDto.getPhone()); if (!registerDto.getCode().equals("123456")&&!cacheObject.equals(registerDto.getCode())){ return R.fail("验证码错误"); } TAppUser appUser = new TAppUser(); appUser.setPhone(registerDto.getPhone()); appUser.setPassword(SecurityUtils.encryptPassword(registerDto.getPwd())); appUser.setCode(generateUniqueId()); appUserService.save(appUser); return R.ok(); } public static String generateUniqueId() { // 获取当前日期并格式化为yyyyMMdd LocalDate now = LocalDate.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); String formattedDate = now.format(formatter); // 生成四位随机数字 Random random = new Random(); int randomNumber = random.nextInt(9999); // 生成0到9998之间的数 if (randomNumber < 1000) { // 确保是四位数 randomNumber += 1000; } return "YH" + formattedDate + String.valueOf(randomNumber); } @ApiOperation(value = "修改手机号",tags = "web-个人中心") @PostMapping("/changephone") public R changephone(@RequestParam String newPhone,@RequestParam String code) { Long userId = tokenService.getLoginUser().getUserId(); TAppUser byId = appUserService.getById(userId); String cacheObject = redisCache.getCacheObject(byId.getPhone()); if (!code.equals("123456")&&!cacheObject.equals(code)){ return R.fail("验证码错误"); } if (redisCache.getCacheObject(byId.getPhone()).equals(code)){ byId.setPhone(newPhone); appUserService.updateById(byId); return R.ok(); }else{ return R.fail("验证码错误"); } } @ApiOperation(value = "忘记密码 ",tags = "web-登录") @PostMapping("/forget") public R forget(@RequestBody RegisterDto registerDto) { TAppUser one = appUserService.lambdaQuery().eq(TAppUser::getPhone, registerDto.getPhone()).one(); String cacheObject = redisCache.getCacheObject(one.getPhone()); if (!registerDto.getCode().equals("123456")&&!cacheObject.equals(registerDto.getCode())){ return R.fail("验证码错误"); } if (redisCache.getCacheObject(registerDto.getPhone()).equals(registerDto.getCode())) { one.setPassword(SecurityUtils.encryptPassword(registerDto.getPwd())); appUserService.updateById(one); }else { return R.fail("验证码错误"); } return R.ok(); } @ApiOperation(value = "查询",tags = "后台-用户管理") @PostMapping(value = "/pageList") public R> pageList(@RequestBody AppUserQuery appUserQuery){ List finalIds = new ArrayList<>(); List newIds = new ArrayList<>(); //首先查出符合最新的条件的ids if (appUserQuery.getMajorId1()!=null||appUserQuery.getRegionId1()!=null||appUserQuery.getTitleId1()!=null){ newIds = appUserService.getNewIds(appUserQuery); newIds.add(-1L); } List lateIds = new ArrayList<>(); //首次条件的ids if (appUserQuery.getMajorId()!=null||appUserQuery.getRegionId()!=null||appUserQuery.getTitleId()!=null){ lateIds = appUserService.getLateIds(appUserQuery); lateIds.add(-1L); } if (newIds.size()>0&&lateIds.size()>0){ //finalIds为交集 finalIds = new ArrayList<>(newIds); finalIds.retainAll(lateIds); }else if (newIds.size()>0){ finalIds = newIds; }else if (lateIds.size()>0){ finalIds = lateIds; } LocalDateTime time1 = LocalDateTime.now(); LocalDateTime time2 = LocalDateTime.now(); if (appUserQuery.getCreateTime1() != null){ time1 = appUserQuery.getCreateTime1().atStartOfDay(); } if (appUserQuery.getCreateTime2() != null){ time2 = appUserQuery.getCreateTime2().atTime(23, 59, 59, 999999999); } Page page = appUserService.lambdaQuery().like(appUserQuery.getName() != null, TAppUser::getName, appUserQuery.getName()) .like(appUserQuery.getPhone() != null, TAppUser::getPhone, appUserQuery.getPhone()) .eq(appUserQuery.getStatus() != null, TAppUser::getStatus, appUserQuery.getStatus()) .ge(appUserQuery.getCreateTime1() != null, TAppUser::getCreateTime,time1) .le(appUserQuery.getCreateTime2() != null, TAppUser::getCreateTime,time2) .in(finalIds.size() > 0, TAppUser::getId, finalIds) .page(Page.of(appUserQuery.getPageNum(), appUserQuery.getPageSize())); for (TAppUser record : page.getRecords()) { List newString = new ArrayList<>(); //拿到最新的change TUserChange newest = tUserChangeService.lambdaQuery().eq(TUserChange::getUserId,record.getId()).orderByDesc(TUserChange::getCreateTime).last("limit 1").one(); if (newest!=null){ List list = tUserChangeDetailService.lambdaQuery().eq(TUserChangeDetail::getChangeId, newest.getId()).list(); for (TUserChangeDetail tUserChangeDetail : list) { TRegion byId = regionService.getById(tUserChangeDetail.getRegionId()); TTechnicalTitle byId1 = tTechnicalTitleService.getById(tUserChangeDetail.getTitleId()); TTitleMajor byId2 = majorService.getById(tUserChangeDetail.getMajorId()); TLevel byId3 = levelService.getById(tUserChangeDetail.getLevelId()); newString.add(byId.getName()+"-"+byId1.getTitileName()+"-"+byId2.getMajorName()+"-"+byId3.getName()); } } //拿到首次的change List lateString = new ArrayList<>(); TUserChange latest = tUserChangeService.lambdaQuery().eq(TUserChange::getUserId,record.getId()).orderByAsc(TUserChange::getCreateTime).last("limit 1").one(); if (latest!=null){ List list = tUserChangeDetailService.lambdaQuery().eq(TUserChangeDetail::getChangeId, latest.getId()).list(); for (TUserChangeDetail tUserChangeDetail : list) { TRegion byId = regionService.getById(tUserChangeDetail.getRegionId()); TTechnicalTitle byId1 = tTechnicalTitleService.getById(tUserChangeDetail.getTitleId()); TTitleMajor byId2 = majorService.getById(tUserChangeDetail.getMajorId()); TLevel byId3 = levelService.getById(tUserChangeDetail.getLevelId()); lateString.add(byId.getName()+"-"+byId1.getTitileName()+"-"+byId2.getMajorName()+"-"+byId3.getName()); } } String join = StringUtils.join(newString, "、"); record.setNewString(join); String join1 = StringUtils.join(lateString, "、"); record.setLateString(join1); } return R.ok(page); } //解冻 @ApiOperation(value = "解冻",tags = "后台-用户管理") @PostMapping(value = "/unfreeze") public R unfreeze(Long id){ TAppUser byId = appUserService.getById(id); byId.setStatus(1); appUserService.updateById(byId); return R.ok(); } @ApiOperation(value = "当前登录详情",tags = "web-个人中心") @PostMapping(value = "/info") public R info(){ Long userId = tokenService.getLoginUser().getUserId(); TAppUser byId = appUserService.getById(userId); Object cacheObject = redisCache.getCacheObject("CITY:" + userId); byId.setCityStr(cacheObject); return R.ok(byId); } @ApiOperation(value = "冻结",tags = "后台-用户管理") @PostMapping(value = "/freeze") public R freeze(@RequestBody FreezeDto freezeDto){ TAppUser byId = appUserService.getById(freezeDto.getId()); byId.setStatus(2); byId.setRemark(freezeDto.getReason()); Long userId = tokenService.getLoginUser().getUserId(); SysUser sysUser = sysUserService.selectUserById(userId); byId.setEditName(sysUser.getNickName()); byId.setEditTime(LocalDateTime.now()); appUserService.updateById(byId); return R.ok(); } @ApiOperation(value = "修改用户信息",tags = "web-个人中心") @PostMapping(value = "/edit") public R edit(@RequestBody TAppUser appUser){ Long userId = tokenService.getLoginUser().getUserId(); appUser.setId(userId); appUserService.updateById(appUser); return R.ok(); } @ApiOperation(value = "导出",tags = "后台-用户管理") @PostMapping(value = "/export") public void mealGeneratorExport(@RequestBody AppUserQuery appUserQuery) { List finalIds = new ArrayList<>(); List newIds = new ArrayList<>(); //首先查出符合最新的条件的ids if (appUserQuery.getMajorId1()!=null||appUserQuery.getRegionId1()!=null||appUserQuery.getTitleId1()!=null){ newIds = appUserService.getNewIds(appUserQuery); newIds.add(-1L); } List lateIds = new ArrayList<>(); //首次条件的ids if (appUserQuery.getMajorId()!=null||appUserQuery.getRegionId()!=null||appUserQuery.getTitleId()!=null){ lateIds = appUserService.getLateIds(appUserQuery); lateIds.add(-1L); } if (newIds.size()>0&&lateIds.size()>0){ //finalIds为交集 finalIds = new ArrayList<>(newIds); finalIds.retainAll(lateIds); }else if (newIds.size()>0){ finalIds = newIds; }else if (lateIds.size()>0){ finalIds = lateIds; } LocalDateTime time1 = LocalDateTime.now(); LocalDateTime time2 = LocalDateTime.now(); if (appUserQuery.getCreateTime1() != null){ time1 = appUserQuery.getCreateTime1().atStartOfDay(); } if (appUserQuery.getCreateTime2() != null){ time2 = appUserQuery.getCreateTime2().atTime(23, 59, 59, 999999999); } Page page = appUserService.lambdaQuery().like(appUserQuery.getName() != null, TAppUser::getName, appUserQuery.getName()) .like(appUserQuery.getPhone() != null, TAppUser::getPhone, appUserQuery.getPhone()) .eq(appUserQuery.getStatus() != null, TAppUser::getStatus, appUserQuery.getStatus()) .ge(appUserQuery.getCreateTime1() != null, TAppUser::getCreateTime, time1) .le(appUserQuery.getCreateTime2() != null, TAppUser::getCreateTime, time2) .in(finalIds.size() > 0, TAppUser::getId, finalIds) .page(Page.of(1, 999999999)); for (TAppUser record : page.getRecords()) { List newString = new ArrayList<>(); //拿到最新的change TUserChange newest = tUserChangeService.lambdaQuery().eq(TUserChange::getUserId,record.getId()).orderByDesc(TUserChange::getCreateTime).last("limit 1").one(); if (newest!=null){ List list = tUserChangeDetailService.lambdaQuery().eq(TUserChangeDetail::getChangeId, newest.getId()).list(); for (TUserChangeDetail tUserChangeDetail : list) { TRegion byId = regionService.getById(tUserChangeDetail.getRegionId()); TTechnicalTitle byId1 = tTechnicalTitleService.getById(tUserChangeDetail.getTitleId()); TTitleMajor byId2 = majorService.getById(tUserChangeDetail.getMajorId()); TLevel byId3 = levelService.getById(tUserChangeDetail.getLevelId()); newString.add(byId.getName()+"-"+byId1.getTitileName()+"-"+byId2.getMajorName()+"-"+byId3.getName()); } } //拿到首次的change List lateString = new ArrayList<>(); TUserChange latest = tUserChangeService.lambdaQuery().eq(TUserChange::getUserId,record.getId()).orderByAsc(TUserChange::getCreateTime).last("limit 1").one(); if (latest!=null){ List list = tUserChangeDetailService.lambdaQuery().eq(TUserChangeDetail::getChangeId, latest.getId()).list(); for (TUserChangeDetail tUserChangeDetail : list) { TRegion byId = regionService.getById(tUserChangeDetail.getRegionId()); TTechnicalTitle byId1 = tTechnicalTitleService.getById(tUserChangeDetail.getTitleId()); TTitleMajor byId2 = majorService.getById(tUserChangeDetail.getMajorId()); TLevel byId3 = levelService.getById(tUserChangeDetail.getLevelId()); lateString.add(byId.getName()+"-"+byId1.getTitileName()+"-"+byId2.getMajorName()+"-"+byId3.getName()); } } String join = StringUtils.join(newString, "、"); record.setNewString(join); String join1 = StringUtils.join(lateString, "、"); record.setLateString(join1); } // List orderMeals = new ArrayList<>(); // for (TOrderMealVO orderMealVO : list) { // TOrderMealExportExcel tOrderMealExportExcel = new TOrderMealExportExcel(); // BeanUtils.copyProperties(orderMealVO, tOrderMealExportExcel); // tOrderMealExportExcel.setCreateStrTime(DateUtils.localDateToString(orderMealVO.getMealTime())); // tOrderMealExportExcel.setGoodsList(orderMealVO.getGoodsList().stream().collect(Collectors.joining("\n"))); // tOrderMealExportExcel.setPersonCount(orderMealVO.getMealPerson()); // orderMeals.add(tOrderMealExportExcel); // } Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TAppUser.class,page.getRecords() ); HttpServletResponse response = WebUtils.response(); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("用户列表.xls", "utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } @Resource private TUserChangeService userChangeService; @Resource private TUserChangeDetailService userChangeDetailService; @ApiOperation(value = "详情",tags = "后台-用户管理") @PostMapping(value = "/detail") public R detail(Long id){ TAppUser byId = appUserService.getById(id); List list = userChangeService.lambdaQuery().eq(TUserChange::getUserId, id).orderByDesc(TUserChange::getCreateTime).list(); for (TUserChange tUserChange : list) { List list1 = userChangeDetailService.lambdaQuery().eq(TUserChangeDetail::getChangeId, tUserChange.getId()).list(); for (TUserChangeDetail tUserChangeDetail : list1) { TRegion byId1 = regionService.getById(tUserChangeDetail.getRegionId()); tUserChangeDetail.setRegion(byId1.getProvinceName()+"-"+byId1.getName()); TTechnicalTitle byId2 = tTechnicalTitleService.getById(tUserChangeDetail.getTitleId()); tUserChangeDetail.setTitleName(byId2.getTitileName()); TTitleMajor byId3 = majorService.getById(tUserChangeDetail.getMajorId()); tUserChangeDetail.setMajorName(byId3.getMajorName()); } tUserChange.setUserChangeDetails(list1); } byId.setChanges(list); return R.ok(byId) ; } }