package com.ltkj.web.controller.pacs;
import cn.hutool.core.util.XmlUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ltkj.common.core.domain.entity.SysDept;
import com.ltkj.hosp.domain.TbTransition;
import com.ltkj.hosp.domain.TjCustomer;
import com.ltkj.hosp.domain.TjOrder;
import com.ltkj.hosp.domain.TjProject;
import com.ltkj.hosp.service.*;
import com.ltkj.hosp.sqlDomain.LtkjExamJcbgd;
import com.ltkj.hosp.sqlDomain.LtkjExamJcsqd;
import com.ltkj.system.service.ISysDeptService;
import jodd.util.StringUtil;
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 java.security.PrivateKey;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Company: 西安路泰科技有限公司
* @Author: zhaowenxuan
* @Date: 2024/12/2 14:36
*/
@RestController
@RequestMapping("/pacs/InvokeRisService")
public class PacsServiceController {
@Autowired
private ISysDeptService deptService;
@Autowired
private ITjProjectService projectService;
@Autowired
private ITbTransitionService transitionService;
@Autowired
private ITjCustomerService customerService;
@Autowired
private ITjOrderService tjOrderService;
@Autowired
private LtkjExamJcsqdService ltkjExamJcsqdService;
@Autowired
private LtkjExamJcbgdService ltkjExamJcbgdService;
@PostMapping("InvokeRisService")
public String InvokeRisService(String dataSourceName, String action, String message)
{
switch (StringUtil.toLowerCase(action) )
{
case "qeryorder":
return queryOrder(dataSourceName);
break;
case "updateorderstatus":
updateOrderstatus(dataSourceName);
break;
case "reportverifyupload":
return reportVerifyUpload(dataSourceName);
break;
}
}
private String updateOrderstatus(@RequestBody String json) {
// HIS或体检病人ID
// 病人类型
// 操作人工号
// HIS或体检申请单号
// 单据状态
Map map = XmlUtil.xmlToMap(json);
JSONObject parseObj = JSONUtil.parseObj(map);
String msgStr = "";
//必填HIS或体检病人ID
String PatientId = parseObj.getStr("PatientId");
// 必填 病人类型病人类型O:门诊,I:住院,P:体检
String PatType = parseObj.getStr("PatType");
// 必填 操作人工号
String Operator = parseObj.getStr("Operator");
// 必填 HIS或体检申请单号
String HisID = parseObj.getStr("HisID");
// 必填 单据状态 单据状态 1已登记,0取消登记
String OrderStatus = parseObj.getStr("OrderStatus");
if (PatientId == "") {
msgStr = msgStr + "HIS或体检病人ID未填写 ; ";
}
if (PatType == "") {
msgStr = msgStr + "病人类型未填写 ; ";
}
if (Operator == "") {
msgStr = msgStr + "操作人工号未填写 ; ";
}
if (HisID == "") {
msgStr = msgStr + "HIS或体检申请单号未填写 ; ";
}
if (OrderStatus == "") {
msgStr = msgStr + "单据状态未填写 ; ";
}
HashMap hashMap = new HashMap<>();
// 执行状态 执行状态 1 成功, 0失败
// 结果消息
HashMap result = new HashMap<>();
if(msgStr=="")
{
result.put("Code", 1);
result.put("Message", "接口成功");
}
else {
result.put("Code", 0);
result.put("Message", msgStr);
}
hashMap.put("ResultInfor", result);
return XmlUtil.mapToXmlStr(hashMap);
}
//@PostMapping("QueryOrder")
private String queryOrder(@RequestBody String json){
Map map = XmlUtil.xmlToMap(json);
JSONObject parseObj = JSONUtil.parseObj(map);
String hospitalID = parseObj.getStr("HospitalID");
// 必填 查询ID,根据IDType给
String queryID = parseObj.getStr("QueryID");
// 必填 ID类别 1病人id,2申请单号,根据业务情况可以扩展其他类型。
String idType = parseObj.getStr("IDType");
// 非必填 病人类型O:门诊,I:住院,P:体检
String patType = parseObj.getStr("PatType");
// 非必填 检查类别:US(超声)、ES(内镜)、CT、CR、DX等
String modality = parseObj.getStr("Modality");
// 必填 申请单状态:1已登记,0 未登记,2.全部
String orderSatus = parseObj.getStr("OrderSatus");
TjCustomer customer = null;
switch (idType){
case "1":
customer = customerService.getById(queryID);
}
HashMap hashMap = new HashMap<>();
if (customer == null){
HashMap result = new HashMap<>();
result.put("Code",0);
result.put("Message","未查询到人员信息");
hashMap.put("ResultInfor",result);
return XmlUtil.mapToXmlStr(hashMap);
}
List list = tjOrderService.list(new LambdaQueryWrapper().eq(TjOrder::getUserId, customer.getCusId()).orderByDesc(TjOrder::getCreateTime));
if (list.isEmpty()){
HashMap result = new HashMap<>();
result.put("Code",0);
result.put("Message","未查询到记录信息");
hashMap.put("ResultInfor",result);
return XmlUtil.mapToXmlStr(hashMap);
}
TjOrder tjOrder = list.get(0);
List detailList = transitionService.getTbTransitionListByCusId(customer.getCusIdcard(), tjOrder.getCardId());
LambdaQueryWrapper wq = new LambdaQueryWrapper<>();
wq.in(TjProject::getProId, detailList.stream().map(TbTransition::getParentProId).collect(Collectors.toList()));
wq.in(TjProject::getDeptId, deptService.getJcDeptIds());
List projects = projectService.list(wq);
HashMap patientInfo = new HashMap<>();
patientInfo.put("PatientId",customer.getCusId());
patientInfo.put("VisitNo",tjOrder.getTjNumber());
patientInfo.put("PatType","P");
patientInfo.put("PatientName",customer.getCusName());
if (customer.getCusSex() == 0) patientInfo.put("PatientSex","M");
else if (customer.getCusSex() == 1) patientInfo.put("PatientSex","F");
else patientInfo.put("PatientSex","O");
patientInfo.put("PatBirthday",customer.getCusBrithday());
patientInfo.put("IdCard",customer.getCusIdcard());
// ArrayList> examItems = new ArrayList<>();
String examItems = "";
for (TjProject project : projects) {
HashMap examItem = new HashMap<>();
examItem.put("HisID", tjOrder.getTjNumber() + String.valueOf(project.getProId()).substring(String.valueOf(project.getProId()).length() - 4));
examItem.put("EmergencyFlag", "0");
examItem.put("ExamItemID", project.getHisXmbm());
examItem.put("ExamItemName", project.getHisXmmc());
examItem.put("OrderDT", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tjOrder.getCreateTime()));
SysDept dept = deptService.getById(project.getDeptId());
examItem.put("Modality", dept.getModality());
examItems += ""+
XmlUtil.mapToXmlStr(examItem)
.replaceAll("","")
.replaceAll("","")
.replaceAll("","")
.replaceAll("","")
+"";
}
hashMap.put("ExamItemList", examItems);
hashMap.put("PatientInfor",patientInfo);
HashMap result = new HashMap<>();
result.put("Code",1);
result.put("Message","查询成功");
hashMap.put("ResultInfor",result);
return XmlUtil.mapToXmlStr(hashMap)
.replaceAll("<","<").replaceAll(">",">");
}
//@PostMapping("ReportVerifyUpload")
private String reportVerifyUpload(@RequestBody String json){
Map map = XmlUtil.xmlToMap(json);
HashMap reportInfor = (HashMap) map.get("ReportInfor");
// cus_id
String patientId = reportInfor.get("PatientId").toString();
String reportID = reportInfor.get("ReportID").toString();
// 报告医生
String reportDR = reportInfor.get("ReportDR").toString();
// 报告医生id
String reportDRCode = reportInfor.get("ReportDRCode").toString();
// 报告时间
String reportDT = reportInfor.get("ReportDT").toString();
// 审核医师
String verifyDR = reportInfor.get("VerifyDR").toString();
// 审核医师编号
String verifyDRCode = reportInfor.get("VerifyDRCode").toString();
// 审核时间
String verifyDT = reportInfor.get("VerifyDT").toString();
// 检查所见
String studyResult = reportInfor.get("StudyResult").toString();
// 诊断结果
String diagResult = reportInfor.get("DiagResult").toString();
// 如果返回格式为
//
// HIS或体检申请单号
// HIS或体检申请单号
// HIS或体检申请单号
//
HashMap hashMap = (HashMap) map.get("ApplyInfos");
ArrayList strings = (ArrayList) hashMap.get("HisID");
for (String s : strings) {
LtkjExamJcsqd jcsqd = ltkjExamJcsqdService.getOne(new LambdaQueryWrapper().eq(LtkjExamJcsqd::getTmh, s));
LtkjExamJcbgd jcbgd = new LtkjExamJcbgd();
jcbgd.setTjh(jcsqd.getTjh());
jcbgd.setTmh(s);
jcbgd.setXmdm(jcsqd.getJcxmid());
jcbgd.setXmmc(jcsqd.getJcxmmc());
jcbgd.setBgNr(diagResult);
jcbgd.setShysxm(verifyDR);
jcbgd.setShysdm(verifyDRCode);
jcbgd.setYxzd(studyResult);
jcbgd.setYxbx(diagResult);
jcbgd.setZdsj(reportDT);
jcbgd.setSqsj(jcsqd.getSqsj());
jcbgd.setJcbw(jcsqd.getJcxmmc());
ltkjExamJcbgdService.save(jcbgd);
jcsqd.setBgys(reportDR);
jcsqd.setBgysid(reportDRCode);
jcsqd.setJgsj(reportDT);
jcsqd.setBw(jcsqd.getJcxmmc());
jcsqd.setJgzt(studyResult);
jcsqd.setJgbx(diagResult);
ltkjExamJcsqdService.updateById(jcsqd);
}
HashMap result = new HashMap<>();
result.put("Code",1);
result.put("Message","查询成功");
return XmlUtil.mapToXmlStr(hashMap)
.replaceAll("<","<").replaceAll(">",">");
}
}