package com.ruoyi.web.controller.api;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.model.TCrmClinic;
import com.ruoyi.system.model.TSysAppUser;
import com.ruoyi.system.model.TSysInspection;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.TCrmClinicService;
import com.ruoyi.system.service.TSysAppUserService;
import com.ruoyi.system.service.TSysInspectionService;
import com.ruoyi.web.controller.tool.WordUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.text.SimpleDateFormat;
import java.util.*;
/**
*
* 用户检测信息 前端控制器
*
*
* @author xiaochen
* @since 2025-08-20
*/
@Api(tags = "用户检测信息管理")
@RestController
@RequestMapping("/t-sys-inspection")
public class TSysInspectionController {
private final TSysInspectionService sysInspectionService;
private final TokenService tokenService;
private final TCrmClinicService crmClinicService;
private final ISysUserService sysUserService;
private final TSysAppUserService sysAppUserService;
private final WordUtil wordUtil;
@Autowired
public TSysInspectionController(TSysInspectionService sysInspectionService, TokenService tokenService, TCrmClinicService crmClinicService, ISysUserService sysUserService, TSysAppUserService sysAppUserService, WordUtil wordUtil) {
this.sysInspectionService = sysInspectionService;
this.tokenService = tokenService;
this.crmClinicService = crmClinicService;
this.sysUserService = sysUserService;
this.sysAppUserService = sysAppUserService;
this.wordUtil = wordUtil;
}
// /**
// * 获取用户检测信息管理管理列表
// */
// @ApiOperation(value = "获取用户检测信息管理分页列表")
// @PostMapping(value = "/pageList")
// public R> pageList(@RequestBody TSysInspectionQuery query) {
// return R.ok(sysInspectionService.pageList(query));
// }
/**
* 获取用户检测信息管理管理列表
*/
@ApiOperation(value = "获取用户检测信息管理列表")
@PostMapping(value = "/list")
public R> list() {
return R.ok(sysInspectionService.list(Wrappers.lambdaQuery(TSysInspection.class).orderByDesc(TSysInspection::getCreateTime)));
}
/**
* 添加用户检测信息管理管理
*/
@Log(title = "用户检测信息管理信息-新增用户检测信息管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "添加用户检测信息管理")
@PostMapping(value = "/add")
public R add(@Validated @RequestBody TSysInspection dto) {
dto.setIsPay(1);
String checkTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
dto.setCheckTime(checkTime);
Long userId = tokenService.getLoginUser().getUserId();
TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class)
.eq(TCrmClinic::getUserId, userId)
.last("LIMIT 1"));
if(Objects.isNull(crmClinic)){
SysUser sysUser = sysUserService.selectUserById(userId);
crmClinic = crmClinicService.getById(sysUser.getObjectId());
}
dto.setClinicId(crmClinic.getId());
// 查询该诊所最新的一条检测记录
TSysInspection sysInspection = sysInspectionService.getOne(Wrappers.lambdaQuery(TSysInspection.class)
.eq(TSysInspection::getClinicId, crmClinic.getId())
.orderByDesc(TSysInspection::getCreateTime)
.last("LIMIT 1"));
if(StringUtils.hasLength(sysInspection.getPrescriptionNumber())){
// 生成处方编号 总共六位数字,不满6位前面补0
String prescriptionNumber = sysInspection.getPrescriptionNumber();
prescriptionNumber = prescriptionNumber.substring(prescriptionNumber.length() - 6);
prescriptionNumber = String.format("%06d", Integer.parseInt(prescriptionNumber) + 1);
dto.setPrescriptionNumber(prescriptionNumber);
dto.setHospitalizationNumber(prescriptionNumber);
}else{
dto.setPrescriptionNumber("000001");
dto.setHospitalizationNumber("000001");
}
dto.setInspectionType(1);
return R.ok(sysInspectionService.save(dto));
}
/**
* 修改用户检测信息管理
*/
@Log(title = "用户检测信息管理信息-修改用户检测信息管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "修改用户检测信息管理")
@PostMapping(value = "/update")
public R update(@Validated @RequestBody TSysInspection dto) {
return R.ok(sysInspectionService.updateById(dto));
}
/**
* 查看用户检测信息管理详情
*/
@ApiOperation(value = "查看用户检测信息管理详情")
@GetMapping(value = "/getDetailById")
public R getDetailById(@RequestParam String id) {
return R.ok(sysInspectionService.getById(id));
}
/**
* 删除用户检测信息管理
*/
@Log(title = "用户检测信息管理信息-删除用户检测信息管理", businessType = BusinessType.DELETE)
@ApiOperation(value = "删除用户检测信息管理")
@DeleteMapping(value = "/deleteById")
public R deleteById(@RequestParam String id) {
return R.ok(sysInspectionService.removeById(id));
}
/**
* 批量删除用户检测信息管理
*/
@Log(title = "用户检测信息管理信息-删除用户检测信息管理", businessType = BusinessType.DELETE)
@ApiOperation(value = "批量删除用户检测信息管理")
@DeleteMapping(value = "/deleteByIds")
public R deleteByIds(@RequestBody List ids) {
return R.ok(sysInspectionService.removeByIds(ids));
}
@Log(title = "用户检测信息管理信息-导出检测信息", businessType = BusinessType.UPDATE)
@ApiOperation(value = "导出检测信息")
@GetMapping(value = "/exportInspection")
public R exportInspection(@RequestParam String id) {
TSysInspection sysInspection = sysInspectionService.getById(id);
if(StringUtils.hasLength(sysInspection.getDetectionPdf())){
return R.ok(sysInspection.getDetectionPdf());
}
// 查询诊所信息
TCrmClinic crmClinic = crmClinicService.getById(sysInspection.getClinicId());
if(Objects.isNull(crmClinic)){
return R.fail("诊所信息不存在");
}
Map templateParam = new HashMap<>();
fill(templateParam, "clinicName", crmClinic.getClinicName());
// 住院次数
if(StringUtils.hasLength(sysInspection.getHospitalizationCount())){
fill(templateParam, "hospitalizationCount", sysInspection.getHospitalizationCount());
}
// 住院编号
if(StringUtils.hasLength(sysInspection.getHospitalizationNumber())){
fill(templateParam, "hospitalizationNumber", sysInspection.getHospitalizationNumber());
}
// 姓名
if(StringUtils.hasLength(sysInspection.getNickName())){
fill(templateParam, "nickName", sysInspection.getNickName());
}
// 出生地
if(StringUtils.hasLength(sysInspection.getBirthplace())){
fill(templateParam, "birthplace", sysInspection.getBirthplace());
}
// 性别
if(Objects.nonNull(sysInspection.getSex())){
if(sysInspection.getSex() == 1){
fill(templateParam, "sex", "男");
}else{
fill(templateParam, "sex", "女");
}
}
// 民族
if(StringUtils.hasLength(sysInspection.getNation())){
fill(templateParam, "nation", sysInspection.getNation());
}
// 年龄
if(Objects.nonNull(sysInspection.getAge())){
fill(templateParam, "age", sysInspection.getAge());
}
// 入院日期
if(StringUtils.hasLength(sysInspection.getAdmissionDate())){
fill(templateParam, "admissionDate", sysInspection.getAdmissionDate());
}
// 婚姻状况
if(Objects.nonNull(sysInspection.getMaritalStatus())){
fill(templateParam, "maritalStatus", sysInspection.getMaritalStatus());
}
// 记录日期
if(StringUtils.hasLength(sysInspection.getRecordDate())){
fill(templateParam, "recordDate", sysInspection.getRecordDate());
}
// 职业
if(StringUtils.hasLength(sysInspection.getOccupation())){
fill(templateParam, "occupation", sysInspection.getOccupation());
}
// 病史陈述者
if(StringUtils.hasLength(sysInspection.getHistoryNarrator())){
fill(templateParam, "historyNarrator", sysInspection.getHistoryNarrator());
}
// 主诉
if(StringUtils.hasLength(sysInspection.getChiefComplaint())){
fill(templateParam, "chiefComplaint", sysInspection.getChiefComplaint());
}
// 现病史
if(StringUtils.hasLength(sysInspection.getPresentHistory())){
fill(templateParam, "presentHistory", sysInspection.getPresentHistory());
}
// 既往史
if(StringUtils.hasLength(sysInspection.getPastMedicalHistory())){
fill(templateParam, "pastMedicalHistory", sysInspection.getPastMedicalHistory());
}
// 个人史
if(StringUtils.hasLength(sysInspection.getPersonalHistory())){
fill(templateParam, "personalHistory", sysInspection.getPersonalHistory());
}
// 月经史
if(StringUtils.hasLength(sysInspection.getMenstrualHistory())){
fill(templateParam, "menstrualHistory", sysInspection.getMenstrualHistory());
}
// 婚育史
if(StringUtils.hasLength(sysInspection.getObstetricHistory())){
fill(templateParam, "obstetricHistory", sysInspection.getObstetricHistory());
}
// 家族史
if(StringUtils.hasLength(sysInspection.getFamilyHistory())){
fill(templateParam, "familyHistory", sysInspection.getFamilyHistory());
}
// 体温
if(StringUtils.hasLength(sysInspection.getBodyTemperature())){
fill(templateParam, "bodyTemperature", sysInspection.getBodyTemperature());
}
// 脉搏
if(StringUtils.hasLength(sysInspection.getPulse())){
fill(templateParam, "pulse", sysInspection.getPulse());
}
// 呼吸
if(StringUtils.hasLength(sysInspection.getBreathe())){
fill(templateParam, "breathe", sysInspection.getBreathe());
}
// 血压
if(StringUtils.hasLength(sysInspection.getBloodPressure())){
fill(templateParam, "bloodPressure", sysInspection.getBloodPressure());
}
// 一般情况
if(StringUtils.hasLength(sysInspection.getGeneralSituation())){
fill(templateParam, "generalSituation", sysInspection.getGeneralSituation());
}
String url = wordUtil.generatePdf(
"/usr/local/project/template/",
"病历-样例.docx",
templateParam,
"病历-"+sysInspection.getNickName(),
"/usr/local/project/template/");
// windows
// String url = wordUtil.generatePdf(
// "E:\\WXWork\\1688857451467088\\Cache\\File\\2026-01\\",
// "病历-样例.docx",
// templateParam,
// "病历-样例-temp",
// "E:\\WXWork\\1688857451467088\\Cache\\File\\2026-01\\");
sysInspection.setDetectionPdf(url);
sysInspectionService.updateById(sysInspection);
return R.ok(url);
}
@Log(title = "用户检测信息管理信息-导出处方信息", businessType = BusinessType.UPDATE)
@ApiOperation(value = "导出处方信息")
@GetMapping(value = "/exportPrescription")
public R exportPrescription(@RequestParam String id) {
TSysInspection sysInspection = sysInspectionService.getById(id);
if(StringUtils.hasLength(sysInspection.getPrescriptionPdf())){
return R.ok(sysInspection.getPrescriptionPdf());
}
// 查询诊所信息
TCrmClinic crmClinic = crmClinicService.getById(sysInspection.getClinicId());
if(Objects.isNull(crmClinic)){
return R.fail("诊所信息不存在");
}
Map templateParam = new HashMap<>();
fill(templateParam, "clinicName", crmClinic.getClinicName());
// 住院编号
if(StringUtils.hasLength(sysInspection.getPrescriptionNumber())){
fill(templateParam, "prescriptionNumber", sysInspection.getPrescriptionNumber());
}
// 科室
if(StringUtils.hasLength(sysInspection.getDepartmentName())){
fill(templateParam, "departmentName", sysInspection.getDepartmentName());
}
// 处方时间
if(StringUtils.hasLength(sysInspection.getPrescriptionTime())){
fill(templateParam, "prescriptionTime", sysInspection.getPrescriptionTime());
}
// 姓名
if(StringUtils.hasLength(sysInspection.getNickName())){
fill(templateParam, "nickName", sysInspection.getNickName());
}
// 性别
if(Objects.nonNull(sysInspection.getSex())){
if(sysInspection.getSex() == 1){
fill(templateParam, "sex", "男");
}else{
fill(templateParam, "sex", "女");
}
}
// 年龄
if(Objects.nonNull(sysInspection.getAge())){
fill(templateParam, "age", sysInspection.getAge());
}
// 门诊病历号
if(StringUtils.hasLength(sysInspection.getId())){
fill(templateParam, "id", sysInspection.getId());
}
// 单位或家庭住址
if(Objects.nonNull(sysInspection.getHomeAddress())){
fill(templateParam, "homeAddress", sysInspection.getHomeAddress());
}
// 临床诊断及证型
if(StringUtils.hasLength(sysInspection.getClinicalDiagnosis())){
fill(templateParam, "clinicalDiagnosis", sysInspection.getClinicalDiagnosis());
}
// 处方内容
if(StringUtils.hasLength(sysInspection.getPrescriptionContent())){
fill(templateParam, "prescriptionContent", sysInspection.getPrescriptionContent());
}
// 备注
if(StringUtils.hasLength(sysInspection.getRemarks())){
fill(templateParam, "remarks", sysInspection.getRemarks());
}
String url = wordUtil.generatePdf(
"/usr/local/project/template/",
"处方单-样例.docx",
templateParam,
"处方单-"+sysInspection.getNickName(),
"/usr/local/project/template/");
// windows
// String url = wordUtil.generatePdf(
// "E:\\WXWork\\1688857451467088\\Cache\\File\\2026-01\\",
// "处方单-样例.docx",
// templateParam,
// "处方单-"+sysInspection.getNickName(),
// "E:\\WXWork\\1688857451467088\\Cache\\File\\2026-01\\");
sysInspection.setPrescriptionPdf(url);
sysInspectionService.updateById(sysInspection);
return R.ok(url);
}
private void fill(Map templateParam, String key, Object value) {
if (com.ruoyi.common.utils.StringUtils.isEmpty(key)){
throw new RuntimeException("key不能为空");
}
templateParam.put("${"+key+"}", value != null ? value : "");
}
}