package com.xinquan.system.controller; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import com.xinquan.common.core.constant.CacheConstants; import com.xinquan.common.core.domain.R; import com.xinquan.common.core.exception.ServiceException; import com.xinquan.common.core.utils.DateUtils; import com.xinquan.common.core.utils.WebUtils; import com.xinquan.common.core.utils.page.BeanUtils; import com.xinquan.common.core.utils.page.PageDTO; import com.xinquan.common.core.web.domain.BaseModel; import com.xinquan.common.redis.service.RedisService; 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.feign.RemoteCourseService; import com.xinquan.meditation.api.feign.RemoteMeditationService; import com.xinquan.order.api.domain.Order; import com.xinquan.order.api.domain.vo.HomeDto; import com.xinquan.order.api.feign.RemoteOrderService; import com.xinquan.system.api.domain.SysUser; import com.xinquan.system.api.domain.vo.HomeVO; import com.xinquan.system.domain.Banner; import com.xinquan.system.domain.Turn; import com.xinquan.system.domain.Version; import com.xinquan.system.domain.export.HomeExport; import com.xinquan.system.service.BannerService; import com.xinquan.system.service.ISysUserService; import com.xinquan.system.service.TurnService; import com.xinquan.user.api.feign.RemoteAppUserService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; 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.math.BigDecimal; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; /** *

* 用户信息表 前端控制器 *

* * @author mitao * @since 2024-08-21 */ @RestController @RequestMapping("/system/home") public class HomeController { @Resource private BannerService bannerService; @Resource private RemoteCourseService remoteCourseService; @Resource private RemoteAppUserService remoteAppUserService; @Resource private RemoteMeditationService remoteMeditationService; @Resource private RemoteOrderService remoteOrderService; @Resource private ISysUserService sysUserService; @Resource private RedisService redisService; @Resource private TurnService turnService; @GetMapping("/getTurn") @ApiOperation(value = "IOS获取是否跳转三方支付", tags = "IOS获取是否跳转三方支付") public R getTurn() { Turn one = turnService.getOne(null); if (one.getIsTurn()==1){ return R.ok(true); }else{ return R.ok(false); } } @GetMapping("/updatePassword") @ApiOperation(value = "管理后台-修改密码", tags = "管理后台-修改密码") public R updatePassword(String userName,String password) { SysUser one = sysUserService.lambdaQuery() .eq(SysUser::getUserType, "00") .eq(SysUser::getDelFlag, "0") .eq(SysUser::getUserName, userName).one(); if (one!=null){ // if (one.getStatus().equals("1")){ // return R.fail("账号已被冻结"); // } one.setPassword(SecurityUtils.encryptPassword(password)); sysUserService.updateById(one); return R.ok(); } return R.fail("修改失败,账号不存在"); } @PostMapping("/homeStatistics") @ApiOperation(value = "首页统计",tags = "管理后台-首页统计") public R bannerList(@RequestBody HomeDto homeDto) { HomeVO homeVO = new HomeVO(); // homeVO.setOrderMoney(); // homeVO.setOrderCount(); // homeVO.setOrderList(); // homeVO.setOrderTimeList(); // 查询用户总数、非会员数、月卡会员数、季卡会员数、年卡会员数 String data = remoteAppUserService.getUserCount().getData(); if (data!=null){ String[] split = data.split(","); homeVO.setUserCount(split[0]); homeVO.setNoVip(split[1]); homeVO.setVipMonth(split[2]); homeVO.setVipQuarter(split[3]); homeVO.setVipYear(split[4]); } // 查询课程总数 免费、会员免费、单独收费、线下课程数 String data1 = remoteCourseService.getCourseCount().getData(); if (data1!=null){ String[] split = data1.split(","); homeVO.setCourseCount(split[0]); homeVO.setCourseFree(split[1]); homeVO.setCourseVip(split[2]); homeVO.setCoursePay(split[3]); homeVO.setCourseOffOnline(split[4]); } // 查询疗愈总数 免费、会员免费、单独收费 String data2 = remoteMeditationService.getMeditationCount().getData(); if (data2!=null){ String[] split = data2.split(","); homeVO.setMeditationCount(split[0]); homeVO.setMeditationFree(split[1]); homeVO.setMeditationVip(split[2]); homeVO.setMeditationPay(split[3]); } String data3 = remoteMeditationService.getQuestionCount().getData(); if (data3!=null){ homeVO.setQuestionRecord(data3); } String data4 = remoteAppUserService.getPrizeRecordCount().getData(); if (data4!=null){ homeVO.setPrizeRecord(data4); } // 查询用户总数列表变化趋势 Map data5 = remoteAppUserService.getUserListCount().getData(); homeVO.setUserList(data5); // 查询时间范围内的订单列表 课程 疗愈 会员 if (!StringUtils.hasLength(homeDto.getTime())){ homeDto.setTime("1"); } if (homeDto.getTimeType()==null){ homeDto.setTimeType(5); } List data6 = remoteOrderService.getOrderList(homeDto.getStatus(), homeDto.getTimeType(), homeDto.getTime()).getData(); homeVO.setOrderCount(data6.size()+""); BigDecimal bigDecimal = new BigDecimal("0"); for (Order order : data6) { if (order.getRealPayAmount()!=null){ bigDecimal= bigDecimal.add(order.getRealPayAmount()); } } homeVO.setOrderMoney(bigDecimal+""); Map x = new HashMap<>(); Map x1 = new HashMap<>(); Map x2 = new HashMap<>(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("d"); SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); switch (homeDto.getTimeType()){ case 1: // 年 x.put("1",0); x.put("2",0); x.put("3",0); x.put("4",0); x.put("5",0); x.put("6",0); x.put("7",0); x.put("8",0); x.put("9",0); x.put("10",0); x.put("11",0); x.put("12",0); x1.put("1",0); x1.put("2",0); x1.put("3",0); x1.put("4",0); x1.put("5",0); x1.put("6",0); x1.put("7",0); x1.put("8",0); x1.put("9",0); x1.put("10",0); x1.put("11",0); x1.put("12",0); x2.put("1",0); x2.put("2",0); x2.put("3",0); x2.put("4",0); x2.put("5",0); x2.put("6",0); x2.put("7",0); x2.put("8",0); x2.put("9",0); x2.put("10",0); x2.put("11",0); x2.put("12",0); break; case 2: // 获取当前日期格式为 yyyy-MM-dd Date date = new Date(); String format = simpleDateFormat.format(date); x.put(format,0); x1.put(format,0); x2.put(format,0); break; case 3: // 周 // 获取本周7天 格式为dd calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); for (int i = 1; i <= 7; i++) { Date time = calendar.getTime(); String format1 = simpleDateFormat.format(time); x.put(format1,0); x1.put(format1,0); x2.put(format1,0); calendar.add(Calendar.DAY_OF_WEEK, 1); } break; case 4: // 月 // 获取本月31天 格式为dd calendar.set(Calendar.DAY_OF_MONTH, 1); for (int i = 1; i <= 31; i++) { Date time = calendar.getTime(); String format1 = simpleDateFormat.format(time); x.put(format1,0); x1.put(format1,0); x2.put(format1,0); calendar.add(Calendar.DAY_OF_MONTH, 1); } break; case 5: String startTime = null; String endTime = null; if (org.springframework.util.StringUtils.hasLength(homeDto.getTime())){ String[] split = homeDto.getTime().split(" - "); startTime = split[0]; endTime = split[1]; // 将其转化为LocalDate LocalDate startLocalDate = LocalDate.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd")); LocalDate endLocalDate = LocalDate.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd")); // 将startLocalDate到endLocalDate之间的每一天的日期,包括startLocalDate和endLocalDate List localDates = new ArrayList<>(); while (!startLocalDate.isAfter(endLocalDate)) { // 将startLocalDate转化为格式为yyyy-MM-dd格式字符串 String format1 = startLocalDate.format(DateTimeFormatter.ofPattern("d")); x.put(format1,0); x1.put(format1,0); x2.put(format1,0); localDates.add(startLocalDate); startLocalDate = startLocalDate.plusDays(1); } } break; } // if (StringUtils.hasLength(homeDto.getTime())&&(!homeDto.getTime().equals("1"))){ // List localDates = generateDateList(homeDto.getTime()); // for (LocalDate localDate : localDates) { // x.put(localDate+"",0); // x1.put(localDate+"",0); // x2.put(localDate+"",0); // } // // } for (Order order : data6) { int value = order.getCreateTime().getMonth().getValue(); int value1 = order.getCreateTime().getDayOfMonth(); LocalDateTime createTime = order.getCreateTime(); LocalDate localDate = createTime.toLocalDate(); switch (order.getOrderFrom()){ case 1: switch (homeDto.getTimeType()){ case 1: // 获取订单月份 if (StringUtils.hasLength(homeDto.getTime())&&x.get(value+"")!=null){ x.put(value+"",(int)x.get(value+"")+1); } break; case 2: Date date = new Date(); String format = simpleDateFormat.format(date); if (StringUtils.hasLength(homeDto.getTime())&&x.get(value1+"")!=null){ x.put(value1+"",(int)x.get(value1+"")+1); } break; case 3: if (StringUtils.hasLength(homeDto.getTime())&&x.get(value1+"")!=null){ x.put(value1+"",(int)x.get(value1+"")+1); } break; case 4: if (StringUtils.hasLength(homeDto.getTime())&&x.get(value1+"")!=null){ x.put(value1+"",(int)x.get(value1+"")+1); } break; case 5: if (StringUtils.hasLength(homeDto.getTime())&&x.get(value1+"")!=null){ x.put(value1+"",(int)x.get(value1+"")+1); } break; } break; case 2: switch (homeDto.getTimeType()){ case 1: // 获取订单月份 if (StringUtils.hasLength(homeDto.getTime())&&x1.get(value+"")!=null){ x1.put(value+"",(int)x1.get(value+"")+1); } break; case 2: Date date = new Date(); String format = simpleDateFormat.format(date); if (StringUtils.hasLength(homeDto.getTime())&&x1.get(value1+"")!=null){ x1.put(value1+"",(int)x1.get(value1+"")+1); } break; case 3: if (StringUtils.hasLength(homeDto.getTime())&&x1.get(value1+"")!=null){ x1.put(value1+"",(int)x1.get(value1+"")+1); } break; case 4: if (StringUtils.hasLength(homeDto.getTime())&&x1.get(value1+"")!=null){ x1.put(value1+"",(int)x1.get(value1+"")+1); } break; case 5: if (StringUtils.hasLength(homeDto.getTime())&&x1.get(value1+"")!=null){ x1.put(value1+"",(int)x1.get(value1+"")+1); } break; } break; case 3: switch (homeDto.getTimeType()){ case 1: // 获取订单月份 if (StringUtils.hasLength(homeDto.getTime())&&x2.get(value+"")!=null){ x2.put(value+"",(int)x2.get(value+"")+1); } break; case 2: Date date = new Date(); String format = simpleDateFormat.format(date); if (StringUtils.hasLength(homeDto.getTime())&&x2.get(value1+"")!=null){ x2.put(value1+"",(int)x2.get(value1+"")+1); } break; case 3: if (StringUtils.hasLength(homeDto.getTime())&&x2.get(value1+"")!=null){ x2.put(value1+"",(int)x2.get(value1+"")+1); } break; case 4: if (StringUtils.hasLength(homeDto.getTime())&&x2.get(value1+"")!=null){ x2.put(value1+"",(int)x2.get(value1+"")+1); } break; case 5: if (StringUtils.hasLength(homeDto.getTime())&&x2.get(value1+"")!=null){ x2.put(value1+"",(int)x2.get(value1+"")+1); } break; } break; } } // 对x的key值进行从小到大排序 Map sortedMap = new TreeMap<>(Comparator.reverseOrder()); sortedMap.putAll(x); Map sortedMap1 = new TreeMap<>(Comparator.reverseOrder()); sortedMap1.putAll(x1); Map sortedMap2 = new TreeMap<>(Comparator.reverseOrder()); sortedMap2.putAll(x2); homeVO.setOrderMeditationList(sortedMap); homeVO.setOrderCourseList(sortedMap1); homeVO.setOrderVipList(sortedMap2); return R.ok(homeVO); } public static List generateDateList(String dateRange) { // 定义日期格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 解析日期范围字符串 String[] dates = dateRange.split(" - "); LocalDate startDate = LocalDate.parse(dates[0], formatter); LocalDate endDate = LocalDate.parse(dates[1], formatter); // 创建日期列表 List dateList = new ArrayList<>(); for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) { dateList.add(date); } return dateList; } @PutMapping("/homeStatisticsExport") @ApiOperation(value = "首页统计-导出",tags = "管理后台-首页统计") public void homeStatisticsExport() { HomeVO homeVO = new HomeVO(); // 查询用户总数、非会员数、月卡会员数、季卡会员数、年卡会员数 String data = remoteAppUserService.getUserCount().getData(); if (data!=null){ String[] split = data.split(","); homeVO.setUserCount(split[0]); homeVO.setNoVip(split[1]); homeVO.setVipMonth(split[2]); homeVO.setVipQuarter(split[3]); homeVO.setVipYear(split[4]); } // 查询课程总数 免费、会员免费、单独收费、线下课程数 String data1 = remoteCourseService.getCourseCount().getData(); if (data1!=null){ String[] split = data1.split(","); homeVO.setCourseCount(split[0]); homeVO.setCourseFree(split[1]); homeVO.setCourseVip(split[2]); homeVO.setCoursePay(split[3]); homeVO.setCourseOffOnline(split[4]); } // 查询疗愈总数 免费、会员免费、单独收费 String data2 = remoteMeditationService.getMeditationCount().getData(); if (data2!=null){ String[] split = data2.split(","); homeVO.setMeditationCount(split[0]); homeVO.setMeditationFree(split[1]); homeVO.setMeditationVip(split[2]); homeVO.setMeditationPay(split[3]); } String data3 = remoteMeditationService.getQuestionCount().getData(); if (data3!=null){ homeVO.setQuestionRecord(data3); } String data4 = remoteAppUserService.getPrizeRecordCount().getData(); if (data4!=null){ homeVO.setPrizeRecord(data4); } HomeExport homeExport = new HomeExport(); BeanUtils.copyProperties(homeVO, homeExport); if (data1!=null){ String[] split = data1.split(","); homeVO.setCourseCount(split[0]); homeVO.setCourseFree(split[1]); homeVO.setCourseVip(split[2]); homeVO.setCoursePay(split[3]); homeVO.setCourseOffOnline(split[4]); Integer i = Integer.valueOf(homeExport.getCourseCount()); Integer i1 = Integer.valueOf(split[4]); } List homeExports = new ArrayList<>(); homeExports.add(homeExport); Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), HomeExport.class, homeExports); 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(); } } } @PostMapping("/cateList") @ApiOperation(value = "课程分类下拉选择列表-不分页",tags = "管理后台banner") public R> cateList() { List data = remoteCourseService.cateList().getData(); return R.ok(data); } @GetMapping("/courseList") @ApiOperation(value = "选择课程-分页",tags = "管理后台banner") @ApiImplicitParams({ @ApiImplicitParam(value = "分页参数,当前页码", name = "pageCurr", required = false, dataType = "Integer"), @ApiImplicitParam(value = "分页参数,每页数量", name = "pageSize", required = false, dataType = "Integer"), @ApiImplicitParam(value = "课程类型1线上2线下", name = "courseType", required = false, dataType = "Integer"), @ApiImplicitParam(value = "课程分类id", name = "cateId", required = false, dataType = "Long"), @ApiImplicitParam(value = "课程标题", name = "courseTitle", required = false, dataType = "String"), @ApiImplicitParam(value = "导师名称", name = "tutor", required = false, dataType = "String"), }) public R> courseList( Integer pageCurr, Integer pageSize, Integer courseType, Long cateId, String courseTitle, String tutor ) { CourseDTO courseDTO = new CourseDTO(); courseDTO.setPageCurr(pageCurr); courseDTO.setPageSize(pageSize); courseDTO.setCourseType(courseType); courseDTO.setCateId(cateId); courseDTO.setCourseTitle(courseTitle); courseDTO.setTutor(tutor); PageDTO data = remoteCourseService.courseList(courseDTO).getData(); return R.ok(data); } @PostMapping("/deleteBatch") @ApiOperation(value = "批量删除banner",tags = "管理后台banner") @ApiImplicitParams({ @ApiImplicitParam(value = "ids", name = "ids", required = true, dataType = "String"), }) public R deleteBatch( @RequestParam(value = "ids") String ids) { List list = Arrays.asList(ids.split(",")).stream().map(Long::valueOf).collect(Collectors.toList()); bannerService.removeBatchByIds(list); return R.ok(); } @PostMapping("/addBanner") @ApiOperation(value = "添加banner",tags = "管理后台banner") public R addBanner(@RequestBody Banner banner) { bannerService.save(banner); return R.ok(); } @PostMapping("/updateBanner") @ApiOperation(value = "修改banner",tags = "管理后台banner") public R updateBanner(@RequestBody Banner banner) { bannerService.updateById(banner); return R.ok(); } @PostMapping("/bannerDetail") @ApiOperation(value = "查看详情",tags = "管理后台banner") public R bannerDetail(String uid) { Banner byId = bannerService.getById(uid); if (byId.getCourseId()!=null){ Course data = remoteCourseService.getCourseById(byId.getCourseId()).getData(); if (data!=null){ byId.setCourseTitle(data.getCourseTitle()); byId.setCoverUrl(data.getCoverUrl()); byId.setTutor(data.getTutor()); byId.setPrice(data.getGeneralPrice()); if (data.getCateId()!=null){ CourseCategory data1 = remoteCourseService.getCategoryById(data.getCateId().toString()).getData(); byId.setCate(data1.getName()); } } } return R.ok(byId); } }