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.security.SecureRandom;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 用户表 前端控制器
|
* </p>
|
*
|
* @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<Long> ids = new HashSet<>();
|
ids.add(id);
|
if (type==1) {
|
redisCache.setCacheSet("Consultation:"+userId, ids);
|
}else if (type==2){
|
Set<Long> 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<Long> ids = new HashSet<>();
|
ids.add(id);
|
if (type==1) {
|
Set<Long> cacheSet = redisCache.getCacheSet("Consultation:" + userId);
|
cacheSet.remove(id);
|
redisCache.deleteObject("Consultation:"+ userId);
|
redisCache.setCacheSet("Consultation:"+userId, cacheSet);
|
}else if (type==2){
|
Set<Long> cacheSet = redisCache.getCacheSet("COURSE:" + userId);
|
cacheSet.remove(id);
|
redisCache.deleteObject("COURSE:"+ userId);
|
|
redisCache.setCacheSet("COURSE:"+userId, cacheSet);
|
}else if (type ==3){
|
Set<Long> 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()));
|
// 5位随机使用英文+数字格式
|
|
appUser.setName("用户"+generateRandomString(5));
|
appUser.setAvatar("https://tcjt-zpw.obs.cn-east-3.myhuaweicloud.com/xinquan/89ff629aace742ff965e88eab7069b9c.png");
|
appUser.setCode(generateUniqueId());
|
appUserService.save(appUser);
|
|
|
return R.ok();
|
}
|
|
public static String generateRandomString(int length) {
|
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
SecureRandom random = new SecureRandom();
|
StringBuilder sb = new StringBuilder(length);
|
|
for (int i = 0; i < length; i++) {
|
int index = random.nextInt(characters.length());
|
sb.append(characters.charAt(index));
|
}
|
|
return sb.toString();
|
}
|
|
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(newPhone);
|
if (!code.equals("123456")&&!code.equals(cacheObject)){
|
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<Page<TAppUser>> pageList(@RequestBody AppUserQuery appUserQuery){
|
|
List<Long> finalIds = new ArrayList<>();
|
|
List<Long> newIds = new ArrayList<>();
|
//首先查出符合最新的条件的ids
|
if (appUserQuery.getMajorId1()!=null||appUserQuery.getRegionId1()!=null||appUserQuery.getTitleId1()!=null){
|
newIds = appUserService.getNewIds(appUserQuery);
|
newIds.add(-1L);
|
}
|
List<Long> 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<TAppUser> 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)
|
.orderByDesc(TAppUser::getCreateTime)
|
.page(Page.of(appUserQuery.getPageNum(), appUserQuery.getPageSize()));
|
|
for (TAppUser record : page.getRecords()) {
|
List<String> newString = new ArrayList<>();
|
//拿到最新的change
|
TUserChange newest = tUserChangeService.lambdaQuery().eq(TUserChange::getUserId,record.getId()).orderByDesc(TUserChange::getCreateTime).last("limit 1").one();
|
if (newest!=null){
|
List<TUserChangeDetail> 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<String> lateString = new ArrayList<>();
|
TUserChange latest = tUserChangeService.lambdaQuery().eq(TUserChange::getUserId,record.getId()).orderByAsc(TUserChange::getCreateTime).last("limit 1").one();
|
if (latest!=null){
|
List<TUserChangeDetail> 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<TAppUser> 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<Long> finalIds = new ArrayList<>();
|
|
List<Long> newIds = new ArrayList<>();
|
//首先查出符合最新的条件的ids
|
if (appUserQuery.getMajorId1()!=null||appUserQuery.getRegionId1()!=null||appUserQuery.getTitleId1()!=null){
|
newIds = appUserService.getNewIds(appUserQuery);
|
newIds.add(-1L);
|
}
|
List<Long> 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<TAppUser> 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<String> newString = new ArrayList<>();
|
//拿到最新的change
|
TUserChange newest = tUserChangeService.lambdaQuery().eq(TUserChange::getUserId,record.getId()).orderByDesc(TUserChange::getCreateTime).last("limit 1").one();
|
if (newest!=null){
|
List<TUserChangeDetail> 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<String> lateString = new ArrayList<>();
|
TUserChange latest = tUserChangeService.lambdaQuery().eq(TUserChange::getUserId,record.getId()).orderByAsc(TUserChange::getCreateTime).last("limit 1").one();
|
if (latest!=null){
|
List<TUserChangeDetail> 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);
|
|
record.setCreateTimeStr(DateUtils.localDateTimeToString(record.getCreateTime()));
|
|
}
|
|
|
|
|
// List<TOrderMealExportExcel> 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<TAppUser> detail(Long id){
|
TAppUser byId = appUserService.getById(id);
|
List<TUserChange> list = userChangeService.lambdaQuery().eq(TUserChange::getUserId, id).orderByDesc(TUserChange::getCreateTime).list();
|
for (TUserChange tUserChange : list) {
|
List<TUserChangeDetail> 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) ;
|
}
|
|
|
}
|