| package com.ruoyi.web.controller.api; | 
|   | 
|   | 
| import cn.afterturn.easypoi.excel.ExcelExportUtil; | 
| import cn.afterturn.easypoi.excel.entity.ExportParams; | 
| import com.baomidou.mybatisplus.core.toolkit.Wrappers; | 
| import com.ruoyi.common.annotation.Log; | 
| import com.ruoyi.common.basic.PageInfo; | 
| import com.ruoyi.common.core.domain.R; | 
| import com.ruoyi.common.enums.BusinessType; | 
| import com.ruoyi.common.utils.DateUtils; | 
| import com.ruoyi.common.utils.StringUtils; | 
| import com.ruoyi.common.utils.WebUtils; | 
| import com.ruoyi.system.export.TCrmClinicAuditExport; | 
| import com.ruoyi.system.export.TSysAppUserClinicExport; | 
| import com.ruoyi.system.export.TSysAppUserExport; | 
| import com.ruoyi.system.export.TSysAppUserListExport; | 
| import com.ruoyi.system.model.TSysAppUser; | 
| import com.ruoyi.system.model.TSysChronicDisease; | 
| import com.ruoyi.system.model.TSysInspection; | 
| import com.ruoyi.system.model.TSysMessageTemplate; | 
| import com.ruoyi.system.query.TCrmClinicQuery; | 
| import com.ruoyi.system.query.TSysAppUserQuery; | 
| import com.ruoyi.system.service.*; | 
| import com.ruoyi.system.vo.TSysAppUserVO; | 
| import com.ruoyi.system.vo.TSysOrderVO; | 
| import com.ruoyi.web.controller.tool.MsgUtils; | 
| import io.swagger.annotations.Api; | 
| import io.swagger.annotations.ApiOperation; | 
| import org.apache.poi.ss.usermodel.Workbook; | 
| import org.springframework.beans.BeanUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.validation.annotation.Validated; | 
| import org.springframework.web.bind.annotation.*; | 
|   | 
| import javax.servlet.ServletOutputStream; | 
| import javax.servlet.http.HttpServletResponse; | 
| import java.io.IOException; | 
| import java.net.URLEncoder; | 
| import java.text.ParseException; | 
| import java.text.SimpleDateFormat; | 
| import java.time.LocalDateTime; | 
| import java.time.temporal.ChronoUnit; | 
| import java.util.*; | 
|   | 
| /** | 
|  * <p> | 
|  * 用户管理 前端控制器 | 
|  * </p> | 
|  * | 
|  * @author xiaochen | 
|  * @since 2025-08-20 | 
|  */ | 
| @Api(tags = "用户管理") | 
| @RestController | 
| @RequestMapping("/t-sys-app-user") | 
| public class TSysAppUserController { | 
|   | 
|     private final TSysAppUserService sysAppUserService; | 
|     private final TSysInspectionService sysInspectionService; | 
|     private final TSysOrderService sysOrderService; | 
|     private final TSysChronicDiseaseService sysChronicDiseaseService; | 
|     private final MsgUtils msgUtils; | 
|     private final TSysMessageTemplateService sysMessageTemplateService; | 
|     @Autowired | 
|     public TSysAppUserController(TSysAppUserService sysAppUserService, TSysInspectionService sysInspectionService, TSysOrderService sysOrderService, TSysChronicDiseaseService sysChronicDiseaseService, MsgUtils msgUtils, TSysMessageTemplateService sysMessageTemplateService) { | 
|         this.sysAppUserService = sysAppUserService; | 
|         this.sysInspectionService = sysInspectionService; | 
|         this.sysOrderService = sysOrderService; | 
|         this.sysChronicDiseaseService = sysChronicDiseaseService; | 
|         this.msgUtils = msgUtils; | 
|         this.sysMessageTemplateService = sysMessageTemplateService; | 
|     } | 
|   | 
|     /** | 
|      * 获取用户管理管理列表 | 
|      */ | 
|     @ApiOperation(value = "获取用户管理分页列表") | 
|     @PostMapping(value = "/pageList") | 
|     public R<PageInfo<TSysAppUserVO>> pageList(@RequestBody TSysAppUserQuery query) { | 
|         return R.ok(sysAppUserService.pageList(query)); | 
|     } | 
|   | 
|     /** | 
|      * 获取用户管理管理列表 | 
|      */ | 
|     @ApiOperation(value = "获取慢性病患者分页列表") | 
|     @PostMapping(value = "/pageChronicDiseaseUserList") | 
|     public R<PageInfo<TSysAppUserVO>> pageChronicDiseaseUserList(@RequestBody TSysAppUserQuery query) { | 
|         return R.ok(sysAppUserService.pageChronicDiseaseUserList(query)); | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 用药提醒 | 
|      */ | 
|     @ApiOperation(value = "慢性病患者-用药提醒", notes = "userId:患者用户id,templateId:短信模板id") | 
|     @GetMapping(value = "/medicationReminder") | 
|     public R<String> medicationReminder(@RequestParam(value = "userId") String userId, | 
|                                                          @RequestParam(value = "templateId") String templateId) { | 
|         TSysAppUser sysAppUser = sysAppUserService.getById(userId); | 
|         if(StringUtils.isNotBlank(sysAppUser.getPhone())){ | 
|             sysAppUser.setLastReminderTime(LocalDateTime.now()); | 
|             sysAppUserService.updateById(sysAppUser); | 
|             TSysMessageTemplate messageTemplate = sysMessageTemplateService.getById(templateId); | 
|             // 发送短信 | 
|             try { | 
|                 Map<String,String> params = new HashMap<>(); | 
|                 msgUtils.sendMsg(sysAppUser.getPhone(),params, messageTemplate.getTemplateCode()); | 
|             } catch (Exception e) { | 
|                 throw new RuntimeException(e); | 
|             } | 
|         } | 
|         return R.ok(); | 
|     } | 
|   | 
|     /** | 
|      * 获取用户管理管理列表 | 
|      */ | 
|     @ApiOperation(value = "获取用户管理列表") | 
|     @PostMapping(value = "/list") | 
|     public R<List<TSysAppUser>> list() { | 
|         return R.ok(sysAppUserService.list(Wrappers.lambdaQuery(TSysAppUser.class) | 
|                 .eq(TSysAppUser::getStatus,1) | 
|                 .orderByDesc(TSysAppUser::getCreateTime))); | 
|     } | 
|   | 
|     /** | 
|      * 添加用户管理管理 | 
|      */ | 
|     @Log(title = "用户管理信息-新增用户管理", businessType = BusinessType.INSERT) | 
|     @ApiOperation(value = "添加用户管理") | 
|     @PostMapping(value = "/add") | 
|     public R<Boolean> add(@Validated @RequestBody TSysAppUser dto) { | 
|         if (sysAppUserService.isExit(dto)) { | 
|             return R.fail("用户管理信息已存在"); | 
|         } | 
|         return R.ok(sysAppUserService.save(dto)); | 
|     } | 
|   | 
|     /** | 
|      * 修改用户管理 | 
|      */ | 
|     @Log(title = "用户管理信息-修改用户管理", businessType = BusinessType.UPDATE) | 
|     @ApiOperation(value = "修改用户管理") | 
|     @PostMapping(value = "/update") | 
|     public R<Boolean> update(@Validated @RequestBody TSysAppUser dto) { | 
|         if (sysAppUserService.isExit(dto)) { | 
|             return R.fail("用户管理信息已存在"); | 
|         } | 
|         return R.ok(sysAppUserService.updateById(dto)); | 
|     } | 
|   | 
|     /** | 
|      * 查看用户管理详情 | 
|      */ | 
|     @ApiOperation(value = "查看用户管理详情") | 
|     @GetMapping(value = "/getDetailById") | 
|     public R<TSysAppUserVO> getDetailById(@RequestParam String id) { | 
|         TSysAppUser sysAppUser = sysAppUserService.getById(id); | 
|         TSysAppUserVO sysAppUserVO = new TSysAppUserVO(); | 
|         BeanUtils.copyProperties(sysAppUser, sysAppUserVO); | 
|         // 查询慢性病 | 
|         String chronicDiseaseId = sysAppUserVO.getChronicDiseaseId(); | 
|         if(StringUtils.isNotBlank(chronicDiseaseId)){ | 
|             String[] split = chronicDiseaseId.split(","); | 
|             List<TSysChronicDisease> sysChronicDiseases = sysChronicDiseaseService.list(Wrappers.lambdaQuery(TSysChronicDisease.class).in(TSysChronicDisease::getId, Arrays.asList(split))); | 
|             sysAppUserVO.setSysChronicDiseases(sysChronicDiseases); | 
|         } | 
|         // 查询检测信息 | 
|         List<TSysInspection> sysInspections = sysInspectionService.list(Wrappers.lambdaQuery(TSysInspection.class).eq(TSysInspection::getAppUserId, id)); | 
|         sysAppUserVO.setSysInspections(sysInspections); | 
|         // 订单信息 | 
|         List<TSysOrderVO> sysOrders = sysOrderService.queryListByAppUserId(id); | 
|         sysAppUserVO.setSysOrders(sysOrders); | 
|         if(sysAppUserVO.getBirthTime() != null){ | 
|             long age = ChronoUnit.YEARS.between(sysAppUserVO.getBirthTime(), LocalDateTime.now()); | 
|             sysAppUserVO.setAge(age); | 
|         } | 
|         return R.ok(sysAppUserVO); | 
|     } | 
|   | 
|     /** | 
|      * 根据用户id查询检测信息 | 
|      */ | 
|     @ApiOperation(value = "根据用户id查询检测信息") | 
|     @GetMapping(value = "/getInspectionByAppUserId") | 
|     public R<List<TSysInspection>> getInspectionByAppUserId(@RequestParam String appUserId) { | 
|         // 订单信息 | 
|         List<TSysInspection> sysInspections = sysInspectionService.list(Wrappers.lambdaQuery(TSysInspection.class).eq(TSysInspection::getAppUserId, appUserId)); | 
|         return R.ok(sysInspections); | 
|     } | 
|   | 
|     /** | 
|      * 查看用户管理详情 | 
|      */ | 
|     @ApiOperation(value = "查看用户购药详情") | 
|     @GetMapping(value = "/getOrderByAppUserId") | 
|     public R<List<TSysOrderVO>> getOrderByAppUserId(@RequestParam String appUserId) { | 
|         List<TSysOrderVO> sysOrders = sysOrderService.queryListByAppUserId(appUserId); | 
|         return R.ok(sysOrders); | 
|     } | 
|   | 
|     /** | 
|      * 删除用户管理 | 
|      */ | 
|     @Log(title = "用户管理信息-删除用户管理", businessType = BusinessType.DELETE) | 
|     @ApiOperation(value = "删除用户管理") | 
|     @DeleteMapping(value = "/deleteById") | 
|     public R<Boolean> deleteById(@RequestParam String id) { | 
|         return R.ok(sysAppUserService.removeById(id)); | 
|     } | 
|   | 
|     /** | 
|      * 批量删除用户管理 | 
|      */ | 
|     @Log(title = "用户管理信息-删除用户管理", businessType = BusinessType.DELETE) | 
|     @ApiOperation(value = "批量删除用户管理") | 
|     @DeleteMapping(value = "/deleteByIds") | 
|     public R<Boolean> deleteByIds(@RequestBody List<String> ids) { | 
|         return R.ok(sysAppUserService.removeByIds(ids)); | 
|     } | 
|   | 
|     /** | 
|      * 分公司管理解冻冻结 | 
|      */ | 
|     @Log(title = "用户管理信息-用户管理解冻冻结", businessType = BusinessType.UPDATE) | 
|     @ApiOperation(value = "用户管理解冻冻结",notes = "状态 1=使用中 2=冻结") | 
|     @PutMapping(value = "/thawOrFreeze") | 
|     public R<Boolean> thawOrFreeze(@RequestParam(value = "id")String id, | 
|                                    @RequestParam(value = "status")Integer status) { | 
|         TSysAppUser sysAppUser = sysAppUserService.getById(id); | 
|         sysAppUser.setStatus(status); | 
|         sysAppUserService.updateById(sysAppUser); | 
|         if(status == 2){ | 
|             // TODO 退出账号 冻结 | 
|   | 
|         } | 
|         return R.ok(); | 
|     } | 
|   | 
|     @Log(title = "用户管理信息-慢性病患者导出-平台", businessType = BusinessType.EXPORT) | 
|     @ApiOperation(value = "慢性病患者导出-平台") | 
|     @PostMapping("/exportList") | 
|     public void exportList(@RequestBody TSysAppUserQuery query){ | 
|         List<TSysAppUserListExport> sysAppUserListExports = sysAppUserService.exportList(query); | 
|         Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TSysAppUserListExport.class, sysAppUserListExports); | 
|         HttpServletResponse response = WebUtils.response(); | 
|         assert response != null; | 
|         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(); | 
|             } | 
|         } | 
|     } | 
|     @Log(title = "用户管理信息-慢性病患者导出-诊所", businessType = BusinessType.EXPORT) | 
|     @ApiOperation(value = "慢性病患者导出-诊所") | 
|     @PostMapping("/exportListClinic") | 
|     public void exportListClinic(@RequestBody TSysAppUserQuery query){ | 
|         List<TSysAppUserClinicExport> sysAppUserClinicExports = sysAppUserService.exportListClinic(query); | 
|         for (TSysAppUserClinicExport sysAppUserClinicExport : sysAppUserClinicExports) { | 
|             String lastReminderTime = sysAppUserClinicExport.getLastReminderTime(); | 
|             lastReminderTime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(lastReminderTime); | 
|             sysAppUserClinicExport.setLastReminderTime(lastReminderTime); | 
|         } | 
|         Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TSysAppUserClinicExport.class, sysAppUserClinicExports); | 
|         HttpServletResponse response = WebUtils.response(); | 
|         assert response != null; | 
|         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(); | 
|             } | 
|         } | 
|     } | 
|   | 
|     @Log(title = "用户管理信息-用户管理信息导出", businessType = BusinessType.EXPORT) | 
|     @ApiOperation(value = "用户管理信息导出") | 
|     @PostMapping("/exportListAppUser") | 
|     public void exportListAppUser(@RequestBody TSysAppUserQuery query){ | 
|         List<TSysAppUserExport> sysAppUserExports = sysAppUserService.exportListAppUser(query); | 
|         for (TSysAppUserExport sysAppUserExport : sysAppUserExports) { | 
|             String lastInspectionTime = sysAppUserExport.getLastInspectionTime(); | 
|             if(StringUtils.isNotEmpty(lastInspectionTime)){ | 
|                 lastInspectionTime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(lastInspectionTime); | 
|                 sysAppUserExport.setLastInspectionTime(lastInspectionTime); | 
|             } | 
|             sysAppUserExport.setCreateTimeStr(sysAppUserExport.getCreateTime().toLocalDate().toString()); | 
|         } | 
|         Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TSysAppUserExport.class, sysAppUserExports); | 
|         HttpServletResponse response = WebUtils.response(); | 
|         assert response != null; | 
|         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(); | 
|             } | 
|         } | 
|     } | 
|   | 
| } |