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) ;
}
}