package com.ltkj.web.controller.pacs;
|
|
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.RandomUtil;
|
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.XmlUtil;
|
import cn.hutool.http.HttpRequest;
|
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.ltkj.common.core.domain.AjaxResult;
|
import com.ltkj.common.core.domain.entity.SysDept;
|
import com.ltkj.common.utils.AgeResult;
|
import com.ltkj.common.utils.DateUtils;
|
import com.ltkj.hosp.domain.*;
|
import com.ltkj.hosp.hisDto.OutpintestapplyDetailsDto;
|
import com.ltkj.hosp.pacsDto.SavePacsApply;
|
import com.ltkj.hosp.service.*;
|
import com.ltkj.hosp.sqlDomain.LtkjExamJcsqd;
|
import com.ltkj.system.service.ISysConfigService;
|
import com.ltkj.system.service.ISysDeptService;
|
import com.ltkj.web.controller.his.HisApiGetMethodService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import java.math.BigDecimal;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @Company: 西安路泰科技有限公司
|
* @Author: zhaowenxuan
|
* @Date: 2024/9/18 10:55
|
*/
|
@Slf4j
|
@Component
|
public class PacsApiMethodService {
|
@Autowired
|
private HisApiGetMethodService getMethodService;
|
@Autowired
|
private ISysDeptService deptService;
|
@Autowired
|
private ITjProjectService projectService;
|
@Autowired
|
private LtkjJfzhglmxjfxmzdService ltkjJfzhglmxjfxmzdService;
|
@Autowired
|
private LtkjMxjfxmzdService ltkjMxjfxmzdService;
|
@Autowired
|
private LtkjEjjfxmzdService ltkjEjjfxmzdService;
|
@Autowired
|
private LtkjJianchajianyanTreeService ltkjJianchajianyanTreeService;
|
@Autowired
|
private ISysConfigService configService;
|
@Autowired
|
private ITbTransitionService transitionService;
|
@Autowired
|
private ITjOrderService tjOrderService;
|
@Autowired
|
private LtkjExamJcsqdService ltkjExamJcsqdService;
|
|
|
/**
|
* pas 检查申请信息保存
|
*
|
* @param savePacsApply
|
* @return
|
*/
|
private AjaxResult savePacsApply(SavePacsApply savePacsApply) {
|
Map<String, Object> map = BeanUtil.beanToMap(savePacsApply);
|
return getMethodService.getPacsData("savePacsApply", map);
|
}
|
|
/**
|
* pas 结果获取
|
*
|
* @param regNo 检查申请单号
|
* @return
|
*/
|
public AjaxResult getPacsReport(String regNo) {
|
HashMap<String, Object> hashMap = new HashMap<>();
|
hashMap.put("regNo", regNo);
|
return getMethodService.getPacsData("getPacsReport", hashMap);
|
}
|
|
/**
|
* pas 检查申请信息作废
|
*
|
* @param regNo 检查申请单号
|
* @param examNo 体检号
|
* @param name 病人姓名
|
* @return
|
*/
|
public AjaxResult updatePacsApply(String regNo, String examNo, String name) {
|
HashMap<String, Object> hashMap = new HashMap<>();
|
hashMap.put("regNo", regNo);
|
hashMap.put("examNo", examNo);
|
hashMap.put("name", name);
|
log.info("作废检查 ->{}", JSONUtil.toJsonStr(hashMap));
|
return getMethodService.getPacsData("updatePacsApply", hashMap);
|
// JSONObject object = JSONUtil.createObj();
|
// object.putOpt("ResultCode","1");
|
// return AjaxResult.success().put("data",JSONUtil.toJsonStr(object));
|
}
|
|
public Boolean save(TjOrder tjOrder, TjCustomer tjCustomer, List<TbTransition> detailList) {
|
// if (true)
|
// return true;
|
JSONArray array = JSONUtil.createArray();
|
ArrayList<SavePacsApply> errorPacsList = new ArrayList<>();
|
ArrayList<SavePacsApply> successPacsList = new ArrayList<>();
|
int allTotal = 0;
|
if (detailList != null && !detailList.isEmpty()) {
|
LambdaQueryWrapper<TjProject> wq = new LambdaQueryWrapper<>();
|
wq.in(TjProject::getProId, detailList.stream().map(TbTransition::getParentProId).collect(Collectors.toList()));
|
wq.in(TjProject::getDeptId, deptService.getJcDeptIds());
|
List<TjProject> projects = projectService.list(wq);
|
try {
|
allTotal = saveProjects(tjOrder, tjCustomer, projects, array, successPacsList, errorPacsList);
|
} catch (Exception e) {
|
log.error(e.getMessage());
|
for (Object object : array) {
|
JSONObject jsonObject = (JSONObject) object;
|
updatePacsApply(jsonObject.getStr("regNo"), jsonObject.getStr("cardId"), jsonObject.getStr("name"));
|
}
|
return false;
|
}
|
}
|
log.info("检查总计 ->{}个", allTotal);
|
if (!errorPacsList.isEmpty()) {
|
log.info("成功 ->{}", successPacsList);
|
log.error("失败 ->{}", errorPacsList);
|
}
|
return true;
|
}
|
|
public int saveProjects(TjOrder tjOrder, TjCustomer tjCustomer, List<TjProject> projects, JSONArray array, ArrayList<SavePacsApply> successPacsList, ArrayList<SavePacsApply> errorPacsList) {
|
int allTotal = 0;
|
if (projects != null && !projects.isEmpty()) {
|
String dept = configService.selectConfigByKey("request_default_dept");
|
String ysbm = configService.selectConfigByKey("request_default_ysbm");
|
for (TjProject project : projects) {
|
if (0 == project.getProParentId() && project.getProPrice().compareTo(BigDecimal.ZERO) != 0) {
|
if (null != project.getHisXmbm()) {
|
SavePacsApply savePacsApply = new SavePacsApply();
|
savePacsApply.setExamNo(tjOrder.getCardId());
|
savePacsApply.setName(tjCustomer.getCusName());
|
savePacsApply.setSex(tjCustomer.getCusSex() == 1 ? "2" : "1");
|
AgeResult ageResult = DateUtils.calculateAge(tjCustomer.getCusBrithday());
|
savePacsApply.setAge(String.valueOf(ageResult.getAge()));
|
savePacsApply.setAgeUnit(String.valueOf(ageResult.getUnit()));
|
savePacsApply.setBirthday(DateFormatUtils.format(tjCustomer.getCusBrithday(), "yyyy-MM-dd"));
|
savePacsApply.setCardNumber(tjCustomer.getCusIdcard());
|
savePacsApply.setTel(tjCustomer.getCusPhone());
|
Date date = new Date();
|
String regNo = "M_jk" + tjOrder.getCardId() +"_" + project.getHisXmbm();
|
savePacsApply.setRegNo(regNo);
|
JSONObject jsonObject = JSONUtil.createObj();
|
jsonObject.putOpt("cardId", tjOrder.getCardId());
|
jsonObject.putOpt("regNo", regNo);
|
jsonObject.putOpt("name", tjCustomer.getCusName());
|
array.add(jsonObject);
|
savePacsApply.setCheckItemID(project.getHisXmbm());
|
savePacsApply.setCheckItem(project.getHisXmmc());
|
// TODO 检查部位
|
savePacsApply.setCheckPosition("-");
|
savePacsApply.setAmount(project.getProPrice());
|
savePacsApply.setApplyDate(DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss"));
|
savePacsApply.setApplyDepment(dept);
|
savePacsApply.setApplyDepmentName("体检中心");
|
savePacsApply.setApplyDoctor(ysbm);
|
savePacsApply.setApplyDoctorName("王健萍");
|
savePacsApply.setExecDepment(dept);
|
savePacsApply.setExecDepmentName("体检中心");
|
savePacsApply.setCreateTime(savePacsApply.getApplyDate());
|
// TODO 检查设备
|
savePacsApply.setDevice("-");
|
// TODO 检查设备类型
|
savePacsApply.setDeviceType("-");
|
log.info("PACS检查申请 ->{}", JSONUtil.toJsonStr(savePacsApply));
|
AjaxResult ajaxResult = savePacsApply(savePacsApply);
|
log.info("返回 ->{}",JSONUtil.toJsonStr(ajaxResult));
|
String result = ajaxResult.get("data").toString();
|
JSONObject object = JSONUtil.parseObj(JSONUtil.parseObj(result));
|
log.info("PACS请求返回 ->{}", object);
|
String code = object.getStr("ResultCode");
|
allTotal++;
|
if (code.equals("1")) {
|
successPacsList.add(savePacsApply);
|
LtkjJianchajianyanTree tree = new LtkjJianchajianyanTree();
|
tree.setCardId(tjOrder.getCardId());
|
tree.setPationid(tjCustomer.getPationId());
|
tree.setSqdh(regNo);
|
tree.setFyhj(String.valueOf(project.getProPrice()));
|
tree.setHisXmdm(project.getHisXmbm());
|
tree.setType("检查");
|
tree.setService("pacs");
|
tree.setTjPrice(String.valueOf(project.getProPrice()));
|
LambdaQueryWrapper<LtkjJfzhglmxjfxmzd> wrapper1 = new LambdaQueryWrapper<>();
|
if (project.getSfzhfy().equals("Y"))
|
wrapper1.eq(LtkjJfzhglmxjfxmzd::getZhxmdm, project.getHisXmbm());
|
else wrapper1.eq(LtkjJfzhglmxjfxmzd::getXmdm, project.getHisXmbm());
|
List<LtkjJfzhglmxjfxmzd> ltkjJfzhglmxjfxmzds = ltkjJfzhglmxjfxmzdService.list(wrapper1);
|
if (ltkjJfzhglmxjfxmzds != null && !ltkjJfzhglmxjfxmzds.isEmpty()) {
|
String xmdm = ltkjJfzhglmxjfxmzds.get(0).getXmdm();
|
LambdaQueryWrapper<LtkjMxjfxmzd> wrapper2 = new LambdaQueryWrapper<>();
|
wrapper2.eq(LtkjMxjfxmzd::getXmdm, xmdm);
|
LtkjMxjfxmzd mxjfxmzd = ltkjMxjfxmzdService.getOne(wrapper2);
|
LambdaQueryWrapper<LtkjEjjfxmzd> wrapper3 = new LambdaQueryWrapper<>();
|
wrapper3.eq(LtkjEjjfxmzd::getEjkmdm, mxjfxmzd.getEjkmdm());
|
LtkjEjjfxmzd ejjfxmzd = ltkjEjjfxmzdService.getOne(wrapper3);
|
tree.setXmfl(ejjfxmzd.getYjkmdm());
|
}
|
tree.setCreateTime(DateUtil.date());
|
ltkjJianchajianyanTreeService.save(tree);
|
} else {
|
errorPacsList.add(savePacsApply);
|
}
|
}
|
}
|
}
|
}
|
return allTotal;
|
}
|
|
/* 查询检查结果、更新查询状态 */
|
// 调用返回检验结果:
|
// exec usp_tjjk_pacsjg ‘体检号’
|
// 调用更新状态:
|
// exec usp_tjjk_pacszt ‘体检号’
|
|
|
/**
|
* 调用pacs申请单推送
|
* xml传递
|
*/
|
public boolean OrderAdd(TjCustomer customer,TjOrder tjOrder){
|
List<TbTransition> detailList = transitionService.getTbTransitionListByCusId(customer.getCusIdcard(), tjOrder.getCardId());
|
LambdaQueryWrapper<TjProject> wq = new LambdaQueryWrapper<>();
|
wq.in(TjProject::getProId, detailList.stream().map(TbTransition::getParentProId).collect(Collectors.toList()));
|
wq.in(TjProject::getDeptId, deptService.getJcDeptIds());
|
List<TjProject> projects = projectService.list(wq);
|
HashMap<String, Object> root = new HashMap<>();
|
HashMap<String, Object> hashMap = new HashMap<>();
|
|
HashMap<String, Object> 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());
|
|
String examItems = "";
|
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
|
for (TjProject project : projects) {
|
HashMap<String, Object> examItem = new HashMap<>();
|
// 申请单号规则:体检号_project.getProId()后四位
|
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", date);
|
SysDept dept = deptService.getById(project.getDeptId());
|
examItem.put("Modality", dept.getModality());
|
// TODO 收费标识 1是收费 和 0未收费
|
examItem.put("ChargeFlag","");
|
examItems += "<ExamItem>"+
|
XmlUtil.mapToXmlStr(examItem)
|
.replaceAll("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>","")
|
.replaceAll("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>","")
|
.replaceAll("<xml>","")
|
.replaceAll("</xml>","")
|
+"</ExamItem>";
|
}
|
hashMap.put("PatientInfor",patientInfo);
|
hashMap.put("ExamItemList",examItems);
|
root.put("Root",hashMap);
|
String result = HttpRequest.post("").body(XmlUtil.mapToXmlStr(root)).contentType("application/xml;charset:utf-8;").execute().body();
|
Map<String, Object> map = XmlUtil.xmlToMap(result);
|
if (map.get("Code").toString().equals("1")){
|
for (TjProject project : projects) {
|
LtkjJianchajianyanTree tree = new LtkjJianchajianyanTree();
|
tree.setCardId(tjOrder.getTjNumber());
|
tree.setPationid(String.valueOf(customer.getCusId()));
|
tree.setSqdh(tjOrder.getTjNumber() + String.valueOf(project.getProId()).substring(String.valueOf(project.getProId()).length() - 4));
|
tree.setFyhj(String.valueOf(project.getProPrice()));
|
tree.setHisXmdm(project.getHisXmbm());
|
tree.setType("检查");
|
tree.setService("pacs");
|
tree.setTjPrice(String.valueOf(project.getProPrice()));
|
LambdaQueryWrapper<LtkjJfzhglmxjfxmzd> wrapper1 = new LambdaQueryWrapper<>();
|
if (project.getSfzhfy().equals("Y"))
|
wrapper1.eq(LtkjJfzhglmxjfxmzd::getZhxmdm, project.getHisXmbm());
|
else wrapper1.eq(LtkjJfzhglmxjfxmzd::getXmdm, project.getHisXmbm());
|
List<LtkjJfzhglmxjfxmzd> ltkjJfzhglmxjfxmzds = ltkjJfzhglmxjfxmzdService.list(wrapper1);
|
if (ltkjJfzhglmxjfxmzds != null && !ltkjJfzhglmxjfxmzds.isEmpty()) {
|
String xmdm = ltkjJfzhglmxjfxmzds.get(0).getXmdm();
|
LambdaQueryWrapper<LtkjMxjfxmzd> wrapper2 = new LambdaQueryWrapper<>();
|
wrapper2.eq(LtkjMxjfxmzd::getXmdm, xmdm);
|
LtkjMxjfxmzd mxjfxmzd = ltkjMxjfxmzdService.getOne(wrapper2);
|
LambdaQueryWrapper<LtkjEjjfxmzd> wrapper3 = new LambdaQueryWrapper<>();
|
wrapper3.eq(LtkjEjjfxmzd::getEjkmdm, mxjfxmzd.getEjkmdm());
|
LtkjEjjfxmzd ejjfxmzd = ltkjEjjfxmzdService.getOne(wrapper3);
|
tree.setXmfl(ejjfxmzd.getYjkmdm());
|
}
|
tree.setCreateTime(DateUtil.date());
|
ltkjJianchajianyanTreeService.save(tree);
|
|
|
LtkjExamJcsqd jcsqd = new LtkjExamJcsqd();
|
jcsqd.setTjh(tjOrder.getTjNumber());
|
jcsqd.setTmh(tree.getSqdh());
|
jcsqd.setJcxmid(tree.getHisXmdm());
|
jcsqd.setJcxmmc(project.getHisXmmc());
|
jcsqd.setSqsj(date);
|
ltkjExamJcsqdService.save(jcsqd);
|
}
|
return true;
|
}
|
return false;
|
}
|
|
/**
|
* 调用pacs申请单作废
|
* @param sqdh 申请单号
|
* @param czrid 操作人编码
|
* @return
|
*/
|
public boolean OrderDelete(String sqdh,String czrid){
|
HashMap<String, Object> root = new HashMap<>();
|
HashMap<String, Object> hashMap = new HashMap<>();
|
LtkjJianchajianyanTree tree = ltkjJianchajianyanTreeService.getOne(new LambdaQueryWrapper<LtkjJianchajianyanTree>().eq(LtkjJianchajianyanTree::getSqdh, sqdh));
|
String pationid = tree.getPationid();
|
hashMap.put("PatientId",pationid);
|
hashMap.put("PatType","P");
|
hashMap.put("Operator",czrid);
|
hashMap.put("HisID",sqdh);
|
root.put("Root",hashMap);
|
String result = HttpRequest.post("").body(XmlUtil.mapToXmlStr(root)).contentType("application/xml;charset:utf-8;").execute().body();
|
Map<String, Object> map = XmlUtil.xmlToMap(result);
|
if (map.get("Code").toString().equals("1")){
|
ltkjJianchajianyanTreeService.removeById(tree);
|
return true;
|
}
|
return false;
|
}
|
}
|