package com.ltkj.web.controller.api; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.itextpdf.text.Element; import com.itextpdf.text.Paragraph; import com.ltkj.common.core.domain.AjaxResult; import com.ltkj.hosp.domain.TjCustomer; import com.ltkj.hosp.domain.TjOrder; import com.ltkj.hosp.domain.TjOrderYcxm; import com.ltkj.hosp.mapper.TjCustomerMapper; import com.ltkj.hosp.service.ITjOrderDetailService; import com.ltkj.hosp.service.ITjOrderService; import com.ltkj.hosp.service.TjOrderYcxmService; import com.ltkj.hosp.vodomain.ShenGaoTiZhongVo; import com.ltkj.system.service.ISysConfigService; import com.ltkj.web.config.pdfutils.PdfUtils; import com.ltkj.web.controller.system.TjCheckController; import com.ltkj.web.controller.system.TjReportController; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; import static com.ltkj.framework.datasource.DynamicDataSourceContextHolder.log; /** * @Company: 西安路泰科技有限公司 * @Author: zhaowenxuan * @Date: 2025/2/18 10:59 */ @RequestMapping("/api") @RestController public class DefaultController { @Autowired private TjReportController tjReportController; @Autowired private TjCheckController tjCheckController; @Autowired private TjCustomerMapper tjCustomerMapper; @Autowired private ITjOrderService tjOrderService; @Autowired private ITjOrderDetailService detailService; @Autowired private ISysConfigService sysConfigService; @Autowired private TjOrderYcxmService tjOrderYcxmService; /** * 提供给三方调用的报告查看接口 * @param response * @param json */ @PostMapping("/viewReport") public void viewReport(HttpServletResponse response, @RequestBody String json) throws IOException { JSONObject entries = JSONUtil.parseObj(json); String tjNum = entries.getStr("tjNum"); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TjOrder::getHeshouStatus,1); wrapper.eq(TjOrder::getTjNumber,tjNum); List list = tjOrderService.list(wrapper); if (list.isEmpty()){ return; } tjReportController.preview(response,true,tjNum); } @PostMapping("/viewReportUrl") public AjaxResult viewReportUrl(@RequestBody String json){ JSONObject entries = JSONUtil.parseObj(json); String tjNum = entries.getStr("tjNum"); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TjOrder::getHeshouStatus,1); wrapper.eq(TjOrder::getTjNumber,tjNum); List list = tjOrderService.list(wrapper); if (list.isEmpty()){ return AjaxResult.error(); } TjOrder tjOrder = tjOrderService.getOrderByTjNum(tjNum); TjCustomer tjCustomer = tjCustomerMapper.selectById( tjOrder.getUserId()); String filePath = tjCustomer.getCusId() + tjNum + tjCustomer.getCusName() + "_报告.pdf"; return AjaxResult.success(filePath); } /** * 提供给三方调用的报告数据接口 * @param json * @return */ @PostMapping("/reportData") public AjaxResult reportData(@RequestBody String json){ String tjNum = JSONUtil.parseObj(json).getStr("tjNum"); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TjOrder::getHeshouStatus,1); wrapper.eq(TjOrder::getTjNumber,tjNum); List list = tjOrderService.list(wrapper); if (list.isEmpty()){ return AjaxResult.error("暂无数据!!"); } JSONObject entries = JSONUtil.parseObj(tjCheckController.updateCheckType(tjNum)); LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjOrderYcxm::getTjh, tjNum); List ycxms = tjOrderYcxmService.list(wq); Map> stringListMap = ycxms.stream().collect(Collectors.groupingBy(TjOrderYcxm::getParentName)); int xmXh = 1; JSONArray jczs = JSONUtil.createArray(); for (Map.Entry> entry : stringListMap.entrySet()) { List details = entry.getValue(); String xmmc = entry.getKey(); boolean isXmWrite = false; int index = 1; JSONObject object = JSONUtil.createObj(); for (TjOrderYcxm detail : details) { if (!isXmWrite) { object.putOpt("xh",xmXh); object.putOpt("xmmc",xmmc); xmXh++; } String result = detail.getJcjg(); if (StrUtil.isNotBlank(result)) { result = result.replaceAll("本报告仅对本次检查负责,临床医生依据病情如有疑问,请及时复查或进一步检查", ""); StringBuilder builder = new StringBuilder(); if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue; builder.append(" (").append(index).append(")").append(detail.getJcxm()).append(": ").append(result).append("\n"); index++; result = builder.toString(); } object.putOpt("result",result); } jczs.add(object); } entries.putOpt("jczs",jczs); xmXh = 1; JSONArray ysjy = JSONUtil.createArray(); for (Map.Entry> entry : stringListMap.entrySet()) { List details = entry.getValue(); if(null !=details && !details.isEmpty()){ details= details.stream() .sorted(Comparator.comparing(TjOrderYcxm::getJcxm)) .collect(Collectors.toList()); boolean isXmWrite = false; int index1 = 1; for (TjOrderYcxm detail : details) { JSONObject obj = JSONUtil.createObj(); String xmmc = entry.getKey().toString(); if (!isXmWrite) { isXmWrite = true; obj.putOpt("xh",xmXh); obj.putOpt("xmmc",xmmc); xmXh++; } String result = detail.getJcjg(); if (StrUtil.isNotBlank(result)) { StringBuilder builder = new StringBuilder(); if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue; builder.append(" (").append(index1).append(")").append(detail.getJcxm()).append(": ").append(result).append("\n"); index1++; result = builder.toString(); } if (StrUtil.isNotBlank(result)) { obj.putOpt("result",result); } else { obj.putOpt("result","建议定期复查"); } String str = " "; List> maps = new ArrayList<>(); String jynr = detail.getJynr(); JSONArray array = JSONUtil.parseArray(jynr); for (Object object : array) { Map objectMap=new HashMap<>(); JSONObject jsonObject = (JSONObject) object; String bt = jsonObject.getStr("bt"); String nr = jsonObject.getStr("nr"); objectMap.put("bt",bt); objectMap.put("nr",nr); if(null !=bt || null !=nr) maps.add(objectMap); } ArrayList strings = new ArrayList<>(); List> collect1 = maps.stream().distinct().collect(Collectors.toList()); for (Map objectMap : collect1) { String content = str + objectMap.get("bt").toString() + objectMap.get("nr").toString(); if (StrUtil.isBlank(content)) content = " "; strings.add(content); } obj.putOpt("contents",strings); ysjy.add(obj); } } } entries.putOpt("ysjy",ysjy); removeNullFields(entries); return JSONUtil.toBean(entries, AjaxResult.class); } /** * 对于HIS提供 * 根据身份证号查询返回体检记录:包含姓名、身份证号、性别、出生日期、年龄、体检号、联系电话,体检日期,报告状态 * @param json * @return */ @PostMapping("/getInfo") public AjaxResult getInfo(@RequestBody String json){ JSONObject entries = JSONUtil.parseObj(json); String card = entries.getStr("card"); // TjCustomer customer = tjCustomerMapper.getCusInfo(card); String key = sysConfigService.selectConfigByKey("h5OrXcxQueryDate"); if (StrUtil.isBlank(key)){ key = "2025-05-01"; } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { Date date = sdf.parse(key); List> customer = tjCustomerMapper.getCusInfoList(card,date); return AjaxResult.success(customer); } catch (ParseException e) { return AjaxResult.error(); } } /** * 对于小程序提供 * 根据身份证号查询返回体检记录:包含姓名、身份证号、性别、出生日期、年龄、体检号、联系电话,体检日期,报告状态 * @param json * @return */ @PostMapping("/getCusInfo") public AjaxResult getInfoCus(@RequestBody String json){ JSONObject entries = JSONUtil.parseObj(json); String card = entries.getStr("card"); String name = entries.getStr("name"); if (StrUtil.isBlank(name)){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TjCustomer::getCusIdcard,card); wrapper.orderByDesc(TjCustomer::getCusId); wrapper.last("LIMIT 1"); TjCustomer customer = tjCustomerMapper.selectOne(wrapper); if (customer == null) return AjaxResult.error(); name = customer.getCusName(); } List> customer = tjCustomerMapper.getCusInfoListByCardAndName(card,name); return AjaxResult.success(customer); } public static void removeNullFields(JSONObject jsonObject) { ArrayList strings = new ArrayList<>(); strings.add("orderId"); strings.add("updateTime"); strings.add("orderDetailId"); strings.add("flowingWaterId"); strings.add("createBy"); strings.add("deleted"); strings.add("createTime"); strings.add("updateBy"); strings.add("createId"); strings.add("prosId"); strings.add("params"); List keysToRemove = new ArrayList<>(); jsonObject.forEach((key, value) -> { if (strings.contains(key)) { keysToRemove.add(key); } else if (value == null) { keysToRemove.add(key); } else if (value instanceof JSONObject) { removeNullFields((JSONObject) value); } else if (value instanceof JSONArray) { JSONArray jsonArray = (JSONArray) value; for (Object arrayItem : jsonArray) { if (arrayItem instanceof JSONObject) { removeNullFields((JSONObject) arrayItem); } } } }); for (String key : keysToRemove) { jsonObject.remove(key); } } /** * 小程序点击体检报告查询详情,显示身高体重体重指数收缩压舒张压 */ @GetMapping("/getShenGaoTiZhong") @ApiOperation(value = "小程序-体检报告查询详情") public AjaxResult getShenGaoTiZhong(@RequestParam @ApiParam(value = "体检号") String tjNumber) { // Map objectMap = new HashMap<>(); LambdaQueryWrapper wq1 = new LambdaQueryWrapper<>(); wq1.eq(TjOrder::getTjNumber, tjNumber); wq1.eq(TjOrder::getCheckStatus, 1); TjOrder one = tjOrderService.getOne(wq1); if (one == null) { return AjaxResult.success("体检暂未完成!!"); } List maps = detailService.getShenGaoTiZhongList(one.getTjNumber()); log.info("ltkj {}的体检报告查询详情"+maps,tjNumber); return AjaxResult.success(maps); } }