zjh
2025-04-24 672ce84d5ce6545a0e81709ea736c69cbbef8c1a
ltkj-admin/src/main/java/com/ltkj/web/controller/pacs/PacsApiMethodService.java
@@ -22,15 +22,19 @@
import com.ltkj.system.service.ISysConfigService;
import com.ltkj.system.service.ISysDeptService;
import com.ltkj.web.controller.his.HisApiGetMethodService;
import jodd.util.StringUtil;
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.io.ByteArrayOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import javax.xml.soap.*;
/**
 * @Company: 西安路泰科技有限公司
@@ -143,85 +147,101 @@
        if (projects != null && !projects.isEmpty()) {
            String dept = configService.selectConfigByKey("request_default_dept");
            String ysbm = configService.selectConfigByKey("request_default_ysbm");
            String ysmc = configService.selectConfigByKey("request_default_ysmc");
            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());
                    if(project.getSfzhfy().equalsIgnoreCase("Y")){
                        allTotal = getAllTotal(tjOrder, tjCustomer, array, successPacsList, errorPacsList, project, dept, ysbm, ysmc, allTotal);
                    }else {
                        List<TjProject> bySoneId = projectService.getTjProjectListBySoneId(project.getProId().toString());
                        for (TjProject tjProject : bySoneId) {
                            if(project.getProPrice().compareTo(BigDecimal.ZERO) != 0){
                                allTotal = getAllTotal(tjOrder, tjCustomer, array, successPacsList, errorPacsList, tjProject, dept, ysbm, ysmc, allTotal);
                            }
                            tree.setCreateTime(DateUtil.date());
                            ltkjJianchajianyanTreeService.save(tree);
                        } else {
                            errorPacsList.add(savePacsApply);
                        }
                    }
                }
            }
        }
        return allTotal;
    }
    private int getAllTotal(TjOrder tjOrder, TjCustomer tjCustomer, JSONArray array, ArrayList<SavePacsApply> successPacsList, ArrayList<SavePacsApply> errorPacsList, TjProject project, String dept, String ysbm, String ysmc, int allTotal) {
        if (StringUtil.isNotBlank(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.getProName());
            // 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(ysmc);
            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;
@@ -239,6 +259,8 @@
     * xml传递
     */
    public boolean OrderAdd(TjCustomer customer,TjOrder tjOrder){
        String hospbm = configService.selectConfigByKey("common_api_service_hospbm");
        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()));
@@ -247,51 +269,113 @@
        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",new SimpleDateFormat("yyyy-MM-dd").format(customer.getCusBrithday()));
        patientInfo.put("IdCard",customer.getCusIdcard());
        patientInfo.put("hospitalid","chkwyy");
        String xmlRequest = "";
//        String examItems = "";
        HashMap<String, Object> examItem = new HashMap<>();
        List<Map<String,Object>> list = new ArrayList<>();
        String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        for (TjProject project : projects) {
            HashMap<String, Object> examItems = new HashMap<>();
            // 申请单号规则:体检号_project.getProId()后四位
            examItems.put("HisID", tjOrder.getTjNumber() + String.valueOf(project.getProId()).substring(String.valueOf(project.getProId()).length() - 4));
            examItems.put("EmergencyFlag", "0");
            examItems.put("ExamItemID", project.getHisXmbm());
            examItems.put("ExamItemName", project.getHisXmmc());
            examItems.put("OrderDT", date);
            SysDept dept = deptService.getById(project.getDeptId());
            examItems.put("Modality", dept.getModality());
            // TODO 收费标识 1是收费 和 0未收费
            examItems.put("ChargeFlag","");
//            examItems += "<ExamItem>"+
//                    XmlUtil.mapToXmlStr(examItem)
//                            .replace("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>","")
////                            .replaceAll("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>","")
//                            .replace("<xml>","")
//                            .replace("</xml>","")
//                    +"</ExamItem>";
            list.add(examItems);
        MessageFactory messageFactory = null;
        try {
            // 创建SOAP消息
            messageFactory = MessageFactory.newInstance();
            SOAPMessage soapMessage = messageFactory.createMessage();
            // 创建SOAP Envelope
            SOAPPart soapPart = soapMessage.getSOAPPart();
            SOAPEnvelope envelope = soapPart.getEnvelope();
            envelope.addNamespaceDeclaration("xmlns", "http://tempuri.org/");
            // 创建SOAP Body
            SOAPBody soapBody = envelope.getBody();
            SOAPElement rootElement = soapBody.addChildElement("OrderAdd", "xmlns");
            rootElement.addChildElement("dataSourceName").addTextNode("hisDataSource");
            // PatientInfor 部分
            SOAPElement patientInfor = rootElement.addChildElement("PatientInfor");
            if (customer.getCusSex() == 0) patientInfor.addChildElement("PatientSex").addTextNode("M");
            else if (customer.getCusSex() == 1) patientInfor.addChildElement("PatientSex").addTextNode("F");
            else patientInfor.addChildElement("PatientSex").addTextNode("O");
            patientInfor.addChildElement("PatBirthday").addTextNode(new SimpleDateFormat("yyyy-MM-dd").format(customer.getCusBrithday()));
            patientInfor.addChildElement("VisitNo").addTextNode(tjOrder.getTjNumber());
            patientInfor.addChildElement("PatientId").addTextNode(String.valueOf(customer.getCusId()));
            patientInfor.addChildElement("HospitalID").addTextNode("shanxiqinxamjyy");
            patientInfor.addChildElement("IdCard").addTextNode(customer.getCusIdcard());
            patientInfor.addChildElement("PatientName").addTextNode(customer.getCusName());
            patientInfor.addChildElement("PatType").addTextNode("P");
            // ExamItemList 部分
            SOAPElement examItemList = rootElement.addChildElement("ExamItemList");
            String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
            for (TjProject project : projects) {
                SOAPElement examItem = examItemList.addChildElement("ExamItem");
                examItem.addChildElement("HisID").addTextNode(tjOrder.getTjNumber() + String.valueOf(project.getProId()).substring(String.valueOf(project.getProId()).length() - 4));
                examItem.addChildElement("EmergencyFlag").addTextNode("0");
                examItem.addChildElement("ExamItemID").addTextNode(project.getHisXmbm());
                examItem.addChildElement("ExamItemName").addTextNode(project.getHisXmmc());
                examItem.addChildElement("OrderDT").addTextNode(date);
                SysDept dept = deptService.getById(project.getDeptId());
                examItem.addChildElement("Modality").addTextNode(dept.getModality());
                examItem.addChildElement("ChargeFlag").addTextNode("1");
            }
            // 保存SOAP消息
            soapMessage.saveChanges();
            // 打印生成的SOAP请求
            System.out.println("生成的SOAP请求内容:");
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            soapMessage.writeTo(byteArrayOutputStream);
            xmlRequest = byteArrayOutputStream.toString("UTF-8");
        } catch (SOAPException | IOException e) {
            log.error("SOAP异常 ->{}",String.valueOf(e));
        }
        examItem.put("ExamItem",list);
        hashMap.put("PatientInfor",patientInfo);
        hashMap.put("ExamItemList",examItem);
        root.put("Root",hashMap);
        String result = HttpRequest.post("http://10.100.100.222:8000/WebInterfaceService.asmx")
        .body(XmlUtil.mapToXmlStr(root)).contentType("application/xml;charset:utf-8;").execute().body();
        String s = XmlUtil.mapToXmlStr(root);
        log.info("调用pacs传递参数的值为: "+s);
//        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",new SimpleDateFormat("yyyy-MM-dd").format(customer.getCusBrithday()));
//        patientInfo.put("IdCard",customer.getCusIdcard());
//        patientInfo.put("hospitalid","chkwyy");
//        patientInfo.put("HospitalID",hospbm);
//
//        HashMap<String, Object> examItemList = new HashMap<>();
//        List<Map<String, Object>> examItemsList = new ArrayList<>();
        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());
//            // 收费标识:1 是收费,0 未收费
//            examItem.put("ChargeFlag", "1");
//
//            examItemsList.add(examItem); // 将每个ExamItem添加到集合
//        }
//
//        // 构造最终的ExamItemList
//        examItemList.put("ExamItem", examItemsList);
//        hashMap.put("ExamItemList", examItemList);
//
//        hashMap.put("PatientInfor", patientInfo);
//
//        // 将数据封装到根节点
//        root.put("Root", hashMap);
//
//        // 使用Hutool将Map转换为XML字符串
//        String xmlRequest = XmlUtil.mapToXmlStr(root);
        String result = "1";
        log.info("调用pacs传递参数的值为: "+xmlRequest);
        Map<String, Object> map = XmlUtil.xmlToMap(result);
        if (map.get("Code").toString().equals("1")){
            for (TjProject project : projects) {