zhaowenxuan
2025-06-05 b7adb9e5316030aabfb90a8ff1b43c848aa550ec
ltkj-admin/src/main/java/com/ltkj/web/controller/api/DefaultController.java
@@ -1,23 +1,39 @@
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.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
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: 西安路泰科技有限公司
@@ -34,6 +50,14 @@
    private TjCheckController tjCheckController;
    @Autowired
    private TjCustomerMapper tjCustomerMapper;
    @Autowired
    private ITjOrderService tjOrderService;
    @Autowired
    private ITjOrderDetailService detailService;
    @Autowired
    private ISysConfigService sysConfigService;
    @Autowired
    private TjOrderYcxmService tjOrderYcxmService;
    /**
     * 提供给三方调用的报告查看接口
@@ -44,7 +68,31 @@
    public void viewReport(HttpServletResponse response, @RequestBody String json) throws IOException {
        JSONObject entries = JSONUtil.parseObj(json);
        String tjNum = entries.getStr("tjNum");
        LambdaQueryWrapper<TjOrder> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(TjOrder::getHeshouStatus,1);
        wrapper.eq(TjOrder::getTjNumber,tjNum);
        List<TjOrder> 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<TjOrder> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(TjOrder::getHeshouStatus,1);
        wrapper.eq(TjOrder::getTjNumber,tjNum);
        List<TjOrder> 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);
    }
    /**
@@ -55,7 +103,38 @@
    @PostMapping("/reportData")
    public AjaxResult reportData(@RequestBody String json){
        String tjNum = JSONUtil.parseObj(json).getStr("tjNum");
        LambdaQueryWrapper<TjOrder> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(TjOrder::getHeshouStatus,1);
        wrapper.eq(TjOrder::getTjNumber,tjNum);
        List<TjOrder> list = tjOrderService.list(wrapper);
        if (list.isEmpty()){
            return AjaxResult.error("暂无数据!!");
        }
        JSONObject entries = JSONUtil.parseObj(tjCheckController.updateCheckType(tjNum));
        LambdaQueryWrapper<TjOrderYcxm> wq = new LambdaQueryWrapper<>();
        wq.eq(TjOrderYcxm::getTjh, tjNum);
        List<TjOrderYcxm> ycxms = tjOrderYcxmService.list(wq);
        Map<String, List<TjOrderYcxm>> stringListMap = ycxms.stream()
                .collect(Collectors.groupingBy(TjOrderYcxm::getParentName));
        JSONArray jczs = JSONUtil.createArray();
        JSONArray ysjy = JSONUtil.createArray();
        int xmXh = 1;
        for (Map.Entry<String, List<TjOrderYcxm>> entry : stringListMap.entrySet()) {
            List<TjOrderYcxm> details = entry.getValue();
            String xmmc = entry.getKey();
            details.sort(Comparator.comparing(TjOrderYcxm::getJcxm));
            JSONObject jczObject = processDetails(details, xmmc, xmXh, true);
            jczs.add(jczObject);
            JSONObject ysjyObject = processDetails(details, xmmc, xmXh, false);
            ysjy.add(ysjyObject);
        }
        entries.putOpt("jczs", jczs);
        entries.putOpt("ysjy", ysjy);
        removeNullFields(entries);
        return JSONUtil.toBean(entries, AjaxResult.class);
    }
@@ -71,8 +150,18 @@
        JSONObject entries = JSONUtil.parseObj(json);
        String card = entries.getStr("card");
//        TjCustomer customer = tjCustomerMapper.getCusInfo(card);
        List<Map<String ,Object>> customer = tjCustomerMapper.getCusInfoList(card);
        return AjaxResult.success(customer);
        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<Map<String ,Object>> customer = tjCustomerMapper.getCusInfoList(card,date);
            return AjaxResult.success(customer);
        } catch (ParseException e) {
            return AjaxResult.error();
        }
    }
    /**
@@ -86,6 +175,15 @@
        JSONObject entries = JSONUtil.parseObj(json);
        String card = entries.getStr("card");
        String name = entries.getStr("name");
        if (StrUtil.isBlank(name)){
            LambdaQueryWrapper<TjCustomer> 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<Map<String ,Object>> customer = tjCustomerMapper.getCusInfoListByCardAndName(card,name);
        return AjaxResult.success(customer);
    }
@@ -126,4 +224,89 @@
        }
    }
    /**
     * 小程序点击体检报告查询详情,显示身高体重体重指数收缩压舒张压
     */
    @GetMapping("/getShenGaoTiZhong")
    @ApiOperation(value = "小程序-体检报告查询详情")
    public AjaxResult getShenGaoTiZhong(@RequestParam @ApiParam(value = "体检号") String tjNumber) {
//        Map<String, Object> objectMap = new HashMap<>();
        LambdaQueryWrapper<TjOrder> 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<ShenGaoTiZhongVo> maps = detailService.getShenGaoTiZhongList(one.getTjNumber());
        log.info("ltkj {}的体检报告查询详情"+maps,tjNumber);
        return AjaxResult.success(maps);
    }
    private JSONObject processDetails(List<TjOrderYcxm> details, String xmmc, int xmXh, boolean isJcz) {
        JSONObject object = JSONUtil.createObj();
        boolean isXmWrite = false;
        int index = 1;
        for (TjOrderYcxm detail : details) {
            if (!isXmWrite) {
                object.putOpt("xh", xmXh++);
                object.putOpt("xmmc", xmmc);
                isXmWrite = true;
            }
            String result = detail.getJcjg();
            if (StrUtil.isNotBlank(result)) {
                result = result.replaceAll("本报告仅对本次检查负责,临床医生依据病情如有疑问,请及时复查或进一步检查", "")
                        .replaceAll("\n", "").trim();
                if (StrUtil.isNotBlank(result)) {
                    StringBuilder builder = new StringBuilder();
                    builder.append("    (").append(index).append(")").append(detail.getJcxm())
                            .append(": ").append(result).append("\n");
                    index++;
                    result = builder.toString();
                }
            }
            if (StrUtil.isNotBlank(result)) {
                object.putOpt("result", result);
            } else {
                object.putOpt("result", isJcz ? result : "建议定期复查");
            }
            if (!isJcz) {
                JSONArray contents = processJynr(detail.getJynr());
                object.putOpt("contents", contents);
            }
        }
        return object;
    }
    private JSONArray processJynr(String jynr) {
        JSONArray contents = JSONUtil.createArray();
        List<Map<String, Object>> maps = JSONUtil.parseArray(jynr).stream()
                .map(o -> {
                    JSONObject jsonObject = (JSONObject) o;
                    Map<String, Object> map = new HashMap<>();
                    String bt = jsonObject.getStr("bt");
                    String nr = jsonObject.getStr("nr");
                    if (StrUtil.isNotBlank(bt) || StrUtil.isNotBlank(nr)) {
                        map.put("bt", bt);
                        map.put("nr", nr);
                    }
                    return map;
                })
                .filter(map -> !map.isEmpty())
                .distinct()
                .collect(Collectors.toList());
        for (Map<String, Object> map : maps) {
            String content = "     " + map.get("bt") + map.get("nr");
            contents.add(StrUtil.isBlank(content) ? "     " : content);
        }
        return contents;
    }
}