package com.xinquan.user.controller.client;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xinquan.common.core.domain.R;
import com.xinquan.common.core.utils.WebUtils;
import com.xinquan.common.core.utils.page.BeanUtils;
import com.xinquan.common.core.utils.page.CollUtils;
import com.xinquan.common.core.utils.page.PageDTO;
import com.xinquan.common.core.web.domain.BaseModel;
import com.xinquan.common.security.service.TokenService;
import com.xinquan.common.security.utils.SecurityUtils;
import com.xinquan.course.api.domain.Course;
import com.xinquan.course.api.domain.CourseCategory;
import com.xinquan.course.api.domain.CourseDTO;
import com.xinquan.course.api.domain.OrderCourseVO;
import com.xinquan.order.api.feign.RemoteOrderService;
import com.xinquan.system.api.RemoteBannerService;
import com.xinquan.system.api.RemoteUserService;
import com.xinquan.system.api.domain.*;
import com.xinquan.system.api.domain.vo.*;
import com.xinquan.system.api.model.LoginUser;
import com.xinquan.user.api.domain.dto.AppUserManagementDTO;
import com.xinquan.user.api.domain.dto.OrderListDTO;
import com.xinquan.user.api.domain.dto.UserChildDTO;
import com.xinquan.user.api.domain.vo.FreezingVO;
import com.xinquan.user.api.domain.vo.ViewReport;
import com.xinquan.user.domain.dto.UserAnswerDTO;
import com.xinquan.user.domain.dto.UserFreezingDTO;
import com.xinquan.user.domain.export.UserExport;
import com.xinquan.user.domain.export.UserInfoExport;
import com.xinquan.user.domain.export.WithdrawExport;
import com.xinquan.user.domain.vo.TagVO;
import com.xinquan.user.service.*;
import com.xinquan.user.utils.MailUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import java.awt.image.BufferedImage;
import java.io.*;
import java.math.BigDecimal;
import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.stream.Collectors;
import io.swagger.models.auth.In;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.util.ByteArrayDataSource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import static com.xinquan.common.core.enums.TreeLevelEnum.TOWERING_TREES;
/**
*
* 用户信息表 前端控制器
*
*
* @author mitao
* @since 2024-08-21
*/
@RestController
@RequestMapping("/client/app-user")
@RequiredArgsConstructor
public class ClientAppUserController {
private final AppUserService appUserService;
@Resource
private AppUserViewingHistoryService appUserViewingHistoryService;
@Resource
private AppUserEnergyRecordService appUserEnergyRecordService;
@Resource
private AppUserTagService appUserTagService;
@Resource
private TagService tagService;
@Resource
private AppUserTreeService appUserTreeService;
@Resource
private AppUserQuestionService appUserQuestionService;
@Resource
private RemoteBannerService remoteBannerService;
@Resource
private RemoteOrderService remoteOrderService;
@Resource
private RemoteUserService remoteUserService;
@GetMapping("/getAllUserList")
public R> getAllUserList() {
List list = appUserService.list();
return R.ok(list);
}
public static void main(String[] args) {
// 获取当前年份
int currentYear = LocalDate.now().getYear();
// 定义日期时间格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 获取1月份的第一天
LocalDate firstDayOfMonth = LocalDate.of(currentYear, 2, 1);
LocalDateTime firstDayOfMonthDateTime = firstDayOfMonth.atStartOfDay();
// 获取1月份的最后一天
LocalDate lastDayOfMonth = LocalDate.of(currentYear, 2, 12).with(TemporalAdjusters.lastDayOfMonth());
LocalDateTime lastDayOfMonthDateTime = lastDayOfMonth.atTime(23, 59, 59);
// 格式化日期时间
String firstDayOfMonthString = firstDayOfMonthDateTime.format(formatter);
String lastDayOfMonthString = lastDayOfMonthDateTime.format(formatter);
System.out.println("1月份的第一天: " + firstDayOfMonthString);
System.out.println("1月份的最后一天: " + lastDayOfMonthString);
}
@GetMapping("/addVipExpireTime/{id}/{type}")
public R addVipExpireTime(@PathVariable("id")Long id,@PathVariable("type")Integer type) {
AppUser byId = appUserService.getById(id);
byId.setVipLevel(type);
switch (type){
case 1:
if (byId.getVipExpireTime()!=null&&byId.getVipExpireTime().isAfter(LocalDateTime.now())){
byId.setVipExpireTime(byId.getVipExpireTime().plusDays(30));
}else{
byId.setVipExpireTime(LocalDateTime.now().plusDays(30));
}
break;
case 2:
if (byId.getVipExpireTime()!=null&&byId.getVipExpireTime().isAfter(LocalDateTime.now())){
byId.setVipExpireTime(byId.getVipExpireTime().plusDays(90));
}else{
byId.setVipExpireTime(LocalDateTime.now().plusDays(90));
}
break;
case 3:
if (byId.getVipExpireTime()!=null&&byId.getVipExpireTime().isAfter(LocalDateTime.now())){
byId.setVipExpireTime(byId.getVipExpireTime().plusDays(365));
}else{
byId.setVipExpireTime(LocalDateTime.now().plusDays(365));
}
break;
}
appUserService.updateById(byId);
return R.ok();
}
@GetMapping("/addBalance/{id}/{money}")
public R addBalance(@PathVariable("id")Long id,@PathVariable("money")BigDecimal money) {
AppUser byId = appUserService.getById(id);
byId.setBalance(byId.getBalance().add(money));
appUserService.updateById(byId);
return R.ok();
}
/**
* 远程调用 获取用户总数上升趋势
*/
@ApiOperation(value = "首页统计测试接口", tags = "首页统计测试接口")
@PostMapping("/getUserListCount")
public R