diff --git a/src/main/java/com/saye/hospitalgd/controller/historyLog/HisBillLogController.java b/src/main/java/com/saye/hospitalgd/controller/historyLog/HisBillLogController.java index b649a56..81cf47b 100644 --- a/src/main/java/com/saye/hospitalgd/controller/historyLog/HisBillLogController.java +++ b/src/main/java/com/saye/hospitalgd/controller/historyLog/HisBillLogController.java @@ -5,6 +5,7 @@ import com.github.pagehelper.PageInfo; import com.saye.hospitalgd.commons.date.DateDUtil; import com.saye.hospitalgd.commons.string.StringDUtil; import com.saye.hospitalgd.scheduler.jobMethod.HISGetDataMethodByHY; +import com.saye.hospitalgd.scheduler.jobMethod.HISGetDataMethodByJH; import com.saye.hospitalgd.scheduler.jobMethod.HISGetDataMethodByWN; import com.saye.hospitalgd.scheduler.jobMethod.HISGetDataMethodByZL; import com.saye.hospitalgd.service.HisInterFaceConfigService; @@ -147,6 +148,8 @@ public class HisBillLogController { resultMap = new HISGetDataMethodByWN().getDate(quartz_id,quartz_name,trade_date,his_wsdl_id); }else if("3".equals(his_wsdl_id)){ resultMap = new HISGetDataMethodByHY().getDate(quartz_id,quartz_name,trade_date,his_wsdl_id); + }else if ("4".equals(his_wsdl_id)){ + resultMap = new HISGetDataMethodByJH().getDate(quartz_id,quartz_name,trade_date,his_wsdl_id); } errCode=StringDUtil.changeNullToEmpty(resultMap.get("errCode")); diff --git a/src/main/java/com/saye/hospitalgd/scheduler/job/HISGetData.java b/src/main/java/com/saye/hospitalgd/scheduler/job/HISGetData.java index 47f091e..e048531 100644 --- a/src/main/java/com/saye/hospitalgd/scheduler/job/HISGetData.java +++ b/src/main/java/com/saye/hospitalgd/scheduler/job/HISGetData.java @@ -3,6 +3,7 @@ package com.saye.hospitalgd.scheduler.job; import com.saye.hospitalgd.commons.getBean.GetBeanUtil; import com.saye.hospitalgd.commons.string.StringDUtil; import com.saye.hospitalgd.scheduler.jobMethod.HISGetDataMethodByHY; +import com.saye.hospitalgd.scheduler.jobMethod.HISGetDataMethodByJH; import com.saye.hospitalgd.scheduler.jobMethod.HISGetDataMethodByWN; import com.saye.hospitalgd.scheduler.jobMethod.HISGetDataMethodByZL; import com.saye.hospitalgd.service.system.ServiceParamsService; @@ -45,6 +46,8 @@ public class HISGetData implements Job { new HISGetDataMethodByWN().getDate(id,name,trade_date,his_wsdl_id); }else if ("3".equals(his_wsdl_id)) { new HISGetDataMethodByHY().getDate(id,name,trade_date,his_wsdl_id); + }else if ("4".equals(his_wsdl_id)){ + new HISGetDataMethodByJH().getDate(id,name,trade_date,his_wsdl_id); } System.out.println("/****************************定时任务["+name+"]执行结束*********************************/"); } diff --git a/src/main/java/com/saye/hospitalgd/scheduler/jobMethod/HISGetDataMethodByJH.java b/src/main/java/com/saye/hospitalgd/scheduler/jobMethod/HISGetDataMethodByJH.java new file mode 100644 index 0000000..c1bab9c --- /dev/null +++ b/src/main/java/com/saye/hospitalgd/scheduler/jobMethod/HISGetDataMethodByJH.java @@ -0,0 +1,347 @@ +package com.saye.hospitalgd.scheduler.jobMethod; + +import com.saye.hospitalgd.commons.date.DateDUtil; +import com.saye.hospitalgd.commons.getBean.GetBeanUtil; +import com.saye.hospitalgd.commons.log.LogUtil; +import com.saye.hospitalgd.commons.string.StringDUtil; +import com.saye.hospitalgd.model.Dicinfo; +import com.saye.hospitalgd.service.HisDetailService; +import com.saye.hospitalgd.service.HisInterFaceConfigService; +import com.saye.hospitalgd.service.OperatorService; +import com.saye.hospitalgd.service.historyLog.HisBillLogService; +import com.saye.hospitalgd.service.historyLog.impl.HisBillLogServiceImpl; +import com.saye.hospitalgd.service.impl.HisDetailServiceImpl; +import com.saye.hospitalgd.service.impl.HisInterFaceConfigServiceImpl; +import com.saye.hospitalgd.service.impl.OperatorServiceImpl; +import com.saye.hospitalgd.service.system.DicinfoService; +import com.saye.hospitalgd.service.system.ServiceParamsService; +import com.saye.hospitalgd.service.system.impl.DicinfoServiceImpl; +import com.saye.hospitalgd.service.system.impl.ServiceParamsServiceImpl; +import com.saye.hospitalgd.util.HisUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.math.BigDecimal; +import java.util.*; + +/** + * @author thuang + * @version 1.0 + * @description: His获取数据方法(嘉禾) + * @date 2021/9/30 13:41 + */ +public class HISGetDataMethodByJH { + + private static final Logger log = LoggerFactory.getLogger(HISGetDataMethodByJH.class); + + public HashMap getDate(String id, String name, String trade_date, String his_wsdl_id){ + HashMap responseMap=new HashMap<>(); + String errCode="0"; + String errMsg=""; + + HisBillLogService hisBillLogService = GetBeanUtil.getBean(HisBillLogServiceImpl.class); + HisDetailService hisDetailService = GetBeanUtil.getBean(HisDetailServiceImpl.class); + OperatorService operatorService = GetBeanUtil.getBean(OperatorServiceImpl.class); + DicinfoService dicinfoService = GetBeanUtil.getBean(DicinfoServiceImpl.class); + + ServiceParamsService serviceParamsService = GetBeanUtil.getBean(ServiceParamsServiceImpl.class); + + HisInterFaceConfigService hisInterFaceConfigService = GetBeanUtil.getBean(HisInterFaceConfigServiceImpl.class); + + try { + //查询需要用到的参数 + + //his接口地址 + List> hisConfigList = hisInterFaceConfigService.findConfigById(his_wsdl_id); + String his_wsdl = StringDUtil.changeNullToEmpty(hisConfigList.get(0).get("HIS_INTERFACE_WSDL")); + String code = StringDUtil.changeNullToEmpty(hisConfigList.get(0).get("CODE")); + + //现金支付方式 + List> serviceParams = serviceParamsService.findParamValByParamCode("cash_code"); + String cash_code = StringDUtil.changeNullToEmpty(serviceParams.get(0).get("PARAM_VAL")); + + //his端其他支付方式 也单独处理 因为里面没有唯一id 且都是支票记录 + String zhipiao="无"; + + //操作员号 + List> operators = operatorService.findAllOperator(new HashMap()); + //将操作员号用逗号连接 + String operatorsCodeStr=""; + for (int i = 0; i < operators.size(); i++) { + HashMap hashMap = operators.get(i); + operatorsCodeStr =operatorsCodeStr + StringDUtil.changeNullToEmpty(hashMap.get("HISOPERCODE")) + ","; + } + if (operatorsCodeStr.length()>0){ + operatorsCodeStr=operatorsCodeStr.substring(0,operatorsCodeStr.length()-1); + } + + //全部支付方式 + List pay_type = dicinfoService.findDicinfoTreeNodeList("PAY_TYPE"); + HashMap payTypeMap=new HashMap<>(); + for (Dicinfo dicinfo : pay_type) { + payTypeMap.put( dicinfo.getDicname(),dicinfo.getDicvalue()); + } + + //开始结束时间 + String startTime=""; + String endTime=""; +// if ("".equals(trade_date)) { +// Calendar calendar = Calendar.getInstance(); +// calendar.setTime(new Date()); +// calendar.add(Calendar.DATE, -1); +// Date time = calendar.getTime(); +// +// startTime = DateDUtil.DateToStr(DateDUtil.yyyy_MM_dd, time) + " 00:00:00"; +// endTime = DateDUtil.DateToStr(DateDUtil.yyyy_MM_dd, new Date()) + " 00:00:00"; +// trade_date=DateDUtil.DateToStr(DateDUtil.yyyy_MM_dd, time); +// }else { +// startTime = trade_date + " 00:00:00"; +// Date date = DateDUtil.strToDate(DateDUtil.yyyy_MM_dd, trade_date); +// Calendar calendar = Calendar.getInstance(); +// calendar.setTime(date); +// calendar.add(Calendar.DATE, 1); +// endTime = DateDUtil.DateToStr(DateDUtil.yyyy_MM_dd, calendar.getTime()) + " 00:00:00"; +// } + + //组织request + startTime="2024-08-06 15:33:12"; + endTime="2024-08-07 15:33:12"; + String requestStr=""; + requestStr="" + + " "+ operatorsCodeStr +"" + + " "+startTime+"" + + " "+endTime+"" + + ""; + + + //获取数据 + HisUtil hisUtil = new HisUtil(); + HashMap histData = hisUtil.getHisDataByHY(his_wsdl, code, requestStr); + errCode = histData.get("errCode"); + if (!"0".equals(errCode)){ + errMsg=histData.get("errMsg"); + }else { + String dataStr = histData.get("dataStr"); + + //分析数据,判断调用正确与否 + HashMap hisBillResult = hisUtil.managerDataStrByHY(dataStr); + errCode = StringDUtil.changeNullToEmpty(hisBillResult.get("errCode")); + if (!"0".equals(errCode)){ + errMsg=StringDUtil.changeNullToEmpty(hisBillResult.get("errMsg")); + }else { + List> hisBillList = (List>)hisBillResult.get("addList"); + + //存一份his原始的 + hisDetailService.insertHisBillOriginalHY(hisBillList,trade_date,his_wsdl_id); + + //将原始的转换成统一格式 + List> newAddList= new ArrayList<>(); + + List> cashList= new ArrayList<>(); + + List> zhipiaoList= new ArrayList<>(); + + for (int i = 0; i < hisBillList.size(); i++) { + HashMap hisBillHashMap = hisBillList.get(i); + + //先判断关键id是否为空 ,为空的这条记录就作废了,可能之后会有现金记录进入,此id仍为空,到时需要另加判断 + String powerTranID = StringDUtil.changeNullToEmpty(hisBillHashMap.get("powerTranID")); + if ("".equals(powerTranID)){ + continue; + } + + //数据类型 1-门诊 2-住院 无需修改 + String payMethod = StringDUtil.changeNullToEmpty(hisBillHashMap.get("visitzOrg")); + + //业务类型 0发病历1办卡2就诊卡充值3当日挂号-3 挂号退费4门诊缴费-4 单据退费5现场预约-5 预约退费6预约取号7住院缴费-7出院结算退费-77 预存作废退费 + String bizType = StringDUtil.changeNullToEmpty(hisBillHashMap.get("bizType")); + + String tradingStatus="1"; + //如果业务类型是负数 那就是退款记录 + int i1 = new BigDecimal(0).compareTo(new BigDecimal(bizType)); + if (i1>0){ + tradingStatus="2"; + } + + //支付方式 修改为字典表对应 + String payType = StringDUtil.changeNullToEmpty(hisBillHashMap.get("payType")); + + //交易时间 + String tradeTime = StringDUtil.changeNullToEmpty(hisBillHashMap.get("tradeTime")); + + //操作员 + String hisOperCode = StringDUtil.changeNullToEmpty(hisBillHashMap.get("hisOperCode")); + + //交易金额 + String amount = StringDUtil.changeNullToEmpty(hisBillHashMap.get("amount")); + + //说明 + String remarks = ""; + + //银商订单号 + String platformTransId = StringDUtil.changeNullToEmpty(hisBillHashMap.get("powerTranID")); + + //患者 ID + String patientId = StringDUtil.changeNullToEmpty(hisBillHashMap.get("patientID")); + + //患者姓名 + String patientName = StringDUtil.changeNullToEmpty(hisBillHashMap.get("patientName")); + + //交易日期 + String thistrade_date = StringDUtil.changeNullToEmpty(hisBillHashMap.get("trade_date")); + + //接口厂商 + HashMap addMap=new HashMap<>(); + addMap.put("payMethod",payMethod); + addMap.put("tradingStatus",tradingStatus); + addMap.put("bizType",bizType); + addMap.put("payType",payType); + addMap.put("tradeTime",tradeTime); + addMap.put("hisOperCode",hisOperCode); + addMap.put("amount",amount); + addMap.put("remarks",remarks); + addMap.put("platformTransId",platformTransId); + addMap.put("patientId",patientId); + addMap.put("patientName",patientName); + addMap.put("trade_date",thistrade_date); + addMap.put("his_wsdl_id",his_wsdl_id); + + //如果是现金记录先放进现金集合内 + if (cash_code.equals(payType)){ + cashList.add(addMap); + }else if (zhipiao.equals(payType)){ + zhipiaoList.add(addMap); + }else{ + newAddList.add(addMap); + } + } + + //循环现金记录 合并同操作员同交易日期 同类别的(门诊,住院) his获取,记录应该就是前一天的。 + HashMap> cashMap=new HashMap<>(); + for (int i = 0; i < cashList.size(); i++) { + HashMap hashMap = cashList.get(i); + + String hisOperCode = StringDUtil.changeNullToEmpty(hashMap.get("hisOperCode")); + String payMethod = StringDUtil.changeNullToEmpty(hashMap.get("payMethod")); + String amount = StringDUtil.changeNullToEmpty(hashMap.get("amount")); + + HashMap map = cashMap.get(hisOperCode+"_"+payMethod); + + if (map==null){ + HashMap addMap=new HashMap<>(); + addMap.put("payMethod",payMethod); + addMap.put("tradingStatus",""); + addMap.put("bizType",""); + addMap.put("payType",cash_code); + addMap.put("tradeTime",trade_date+" 00:00:00"); + addMap.put("hisOperCode",hisOperCode); + addMap.put("amount",amount); + addMap.put("remarks",""); + addMap.put("platformTransId",""); + addMap.put("patientId",""); + addMap.put("patientName",""); + addMap.put("trade_date",trade_date); + addMap.put("his_wsdl_id",his_wsdl_id); + + cashMap.put(hisOperCode+"_"+payMethod,addMap); + }else { + String oldAmount = StringDUtil.changeNullToEmpty(map.get("amount")); + String newAmount = new BigDecimal(oldAmount).add(new BigDecimal(amount)).toString(); + map.put("amount",newAmount); + } + } + + //循环map 把记录放入要添加的集合 + for (String key:cashMap.keySet()){ + newAddList.add(cashMap.get(key)); + } + + //循环支票的记录 和现金相同处理 + HashMap> zhipiaoMap=new HashMap<>(); + for (int i = 0; i < zhipiaoList.size(); i++) { + HashMap hashMap = zhipiaoList.get(i); + + String hisOperCode = StringDUtil.changeNullToEmpty(hashMap.get("hisOperCode")); + String payMethod = StringDUtil.changeNullToEmpty(hashMap.get("payMethod")); + String amount = StringDUtil.changeNullToEmpty(hashMap.get("amount")); + String payType = StringDUtil.changeNullToEmpty(hashMap.get("payType")); + + HashMap map = zhipiaoMap.get(hisOperCode+"_"+payMethod); + + if (map==null){ + HashMap addMap=new HashMap<>(); + addMap.put("payMethod",payMethod); + addMap.put("tradingStatus",""); + addMap.put("bizType",""); + addMap.put("payType",payType); + addMap.put("tradeTime",trade_date+" 00:00:00"); + addMap.put("hisOperCode",hisOperCode); + addMap.put("amount",amount); + addMap.put("remarks",""); + addMap.put("platformTransId",""); + addMap.put("patientId",""); + addMap.put("patientName",""); + addMap.put("trade_date",trade_date); + addMap.put("his_wsdl_id",his_wsdl_id); + + zhipiaoMap.put(hisOperCode+"_"+payMethod,addMap); + }else { + String oldAmount = StringDUtil.changeNullToEmpty(map.get("amount")); + String newAmount = new BigDecimal(oldAmount).add(new BigDecimal(amount)).toString(); + map.put("amount",newAmount); + } + } + + //循环map 把记录放入要添加的集合 + for (String key:zhipiaoMap.keySet()){ + newAddList.add(zhipiaoMap.get(key)); + } + + //存一份his针对要调整的字段修改的 + hisDetailService.insertHisBillList(newAddList,trade_date,his_wsdl_id); + } + } + }catch (Exception e){ + e.printStackTrace(); + errCode="999"; + errMsg="执行定时任务【"+name+"】出错,原因:"+e.getMessage(); + } + + //存储记录 + try { + HashMap addMap=new HashMap<>(); + addMap.put("trade_date",trade_date); + addMap.put("quartz_id",id); + addMap.put("quartz_name",name); + addMap.put("his_wsdl_id",his_wsdl_id); + + if ("0".equals(errCode)){ + addMap.put("is_ok","1"); + }else { + addMap.put("is_ok","0"); + } + + addMap.put("modify_time",DateDUtil.getCurrentDate(DateDUtil.yyyy_MM_dd_HH_mm_ss)); + hisBillLogService.insertHisbillGetinfo(addMap); + + }catch (Exception e){ + e.printStackTrace(); + errCode="999"; + errMsg="保存His获取的记录失败,原因"+e.getMessage(); + } + + if (!"0".equals(errCode)){ + try { + //记录日志 + LogUtil.error(this.getClass(), errMsg); + + }catch (Exception e){ + e.printStackTrace(); + } + } + + responseMap.put("errCode",errCode); + responseMap.put("errMsg",errMsg); + return responseMap; + } +} diff --git a/src/main/java/com/saye/hospitalgd/util/HisUtil.java b/src/main/java/com/saye/hospitalgd/util/HisUtil.java index 33b8617..945d2fd 100644 --- a/src/main/java/com/saye/hospitalgd/util/HisUtil.java +++ b/src/main/java/com/saye/hospitalgd/util/HisUtil.java @@ -534,10 +534,28 @@ public class HisUtil { Iterator callHisResponse = recordEless.elementIterator("MOP_PatHosPayDetailQueryResponse"); Element hisResponse = (Element) callHisResponse.next(); - Iterator callHisResult = hisResponse.elementIterator("MOP_PatHosPayDetailQueryResult"); - Element hisResult = (Element) callHisResult.next(); + // 根据新的XML结构,先获取第一个request元素 + Iterator callRequest = hisResponse.elementIterator("request"); + if (!callRequest.hasNext()) { + throw new RuntimeException("未找到request元素"); + } + Element requestElement = (Element) callRequest.next(); - String text = hisResult.getText(); + // 从第一个request元素中获取第二个request元素 + Iterator callSecondRequest = requestElement.elementIterator("request"); + if (!callSecondRequest.hasNext()) { + throw new RuntimeException("未找到第二个request元素"); + } + Element secondRequestElement = (Element) callSecondRequest.next(); + + // 第二个request元素本身就是OutPut_MOP_PatHosPayDetailQuery(通过xsi:type属性标识) + // 所以直接使用它,不需要再查找子元素 + Element hisResult = secondRequestElement; + + // 获取完整的XML内容,而不是文本内容 + String text = hisResult.asXML(); + + System.out.println("从HIS接口获取的XML数据: " + text); /*Iterator callOutXml = hisResponse.elementIterator("OutXml"); Element outXml = (Element)callOutXml.next(); @@ -545,7 +563,7 @@ public class HisUtil { */ resultMap.put("dataStr", text); } catch (Exception e) { - e.printStackTrace(); + log.error("调用his接口失败,原因", e); errCode = "999"; errMsg = "调用his接口失败,原因" + e.getMessage(); @@ -571,19 +589,56 @@ public class HisUtil { String errMsg = ""; try { + // 检查dataStr是否为空或null + if (dataStr == null || dataStr.trim().isEmpty()) { + errCode = "999"; + errMsg = "传入的XML数据为空"; + resultMap.put("errCode", errCode); + resultMap.put("errMsg", errMsg); + return resultMap; + } + dataStr = dataStr.replaceAll("<", "<"); dataStr = dataStr.replaceAll(">", ">"); - System.out.println(dataStr); + log.info("解析前的XML数据: {}", dataStr); + + // 检查XML是否完整 + if (!dataStr.trim().startsWith("<") || !dataStr.trim().endsWith(">")) { + errCode = "999"; + errMsg = "XML数据格式不完整"; + resultMap.put("errCode", errCode); + resultMap.put("errMsg", errMsg); + return resultMap; + } Document document2 = DocumentHelper.parseText(dataStr); Element rootElt2 = document2.getRootElement(); - Iterator iterator = rootElt2.elementIterator(); + log.info("XML根元素名称: {}", rootElt2.getName()); - Element returnresultElm = (Element) iterator.next(); - Element dataElm = (Element) iterator.next(); + // 由于getHisDataByHY已经预处理了XML,这里直接查找returnresult和data元素 + Element returnresultElm = rootElt2.element("returnresult"); + if (returnresultElm == null) { + errCode = "999"; + errMsg = "XML结构错误:没有找到returnresult元素"; + resultMap.put("errCode", errCode); + resultMap.put("errMsg", errMsg); + return resultMap; + } + + // 查找data元素(可能有多个) + List dataElements = rootElt2.elements("data"); + if (dataElements == null || dataElements.isEmpty()) { + errCode = "999"; + errMsg = "XML结构错误:没有找到data元素"; + resultMap.put("errCode", errCode); + resultMap.put("errMsg", errMsg); + return resultMap; + } + + log.info("找到data元素数量: {}", dataElements.size()); Iterator returncode = returnresultElm.elementIterator("returncode"); Iterator errormsg = returnresultElm.elementIterator("errormsg"); @@ -603,61 +658,94 @@ public class HisUtil { if ("1".equals(code)) { List> addList = new ArrayList<>(); - Iterator itemIterator = dataElm.elementIterator(); - - while (itemIterator.hasNext()) { + // 遍历所有data元素 + for (Element item : dataElements) { HashMap addMap = new HashMap<>(); - Element item = (Element) itemIterator.next(); //数据类型 1-门诊 2-住院 Element visitzOrgElm = item.element("VisitzOrg"); - String visitzOrg = visitzOrgElm.getText(); + String visitzOrg = visitzOrgElm != null ? visitzOrgElm.getText() : ""; //业务类型 Element bizTypeElm = item.element("BizType"); - String bizType = bizTypeElm.getText(); + String bizType = bizTypeElm != null ? bizTypeElm.getText() : ""; //支付方式 Element payTypeElm = item.element("PayType"); - String payType = payTypeElm.getText(); + String payType = payTypeElm != null ? payTypeElm.getText() : ""; //总金额 Element amountElm = item.element("Amount"); - String amount = amountElm.getText(); + String amount = amountElm != null ? amountElm.getText() : ""; //自费支付金额 Element zfAmountElm = item.element("ZFAmount"); - String zfAmount = zfAmountElm.getText(); + String zfAmount = zfAmountElm != null ? zfAmountElm.getText() : ""; //医保账户金额 Element ybzhAmountElm = item.element("YBZHAmount"); - String ybzhAmount = ybzhAmountElm.getText(); + String ybzhAmount = ybzhAmountElm != null ? ybzhAmountElm.getText() : ""; //医保统筹金额 Element ybtcAmountElm = item.element("YBTCAmount"); - String ybtcAmount = ybtcAmountElm.getText(); + String ybtcAmount = ybtcAmountElm != null ? ybtcAmountElm.getText() : ""; //收据号 - Element receiptNOElm = item.element("Receipt_no"); - String receiptNO = receiptNOElm.getText(); + Element receiptNOElm = item.element("ReceiptNO"); + String receiptNO = receiptNOElm != null ? receiptNOElm.getText() : ""; + + //发票号 + Element invNumElm = item.element("InvNum"); + String invNum = invNumElm != null ? invNumElm.getText() : ""; //患者 ID Element patientIDElm = item.element("PatientID"); - String patientID = patientIDElm.getText(); + String patientID = patientIDElm != null ? patientIDElm.getText() : ""; //患者姓名 Element patientNameElm = item.element("PatientName"); - String patientName = patientNameElm.getText(); + String patientName = patientNameElm != null ? patientNameElm.getText() : ""; + + //住院号 + Element inHosNumElm = item.element("InHosNum"); + String inHosNum = inHosNumElm != null ? inHosNumElm.getText() : ""; //交易时间 Element tradeTimeElm = item.element("TradeTime"); - String tradeTime = tradeTimeElm.getText(); + String tradeTime = tradeTimeElm != null ? tradeTimeElm.getText() : ""; //交易日期 String trade_date = ""; - if (tradeTime.length() > 10) { - //弘扬的日期格式为yyyyMMddHH:mm:ss 格式化日期为 yyyy-MM-dd HH:mm:ss - trade_date = DateDUtil.DateToStr(DateDUtil.yyyy_MM_dd, DateDUtil.strToDate(DateDUtil.yyyy_MM_dd_HH_mm_ss, tradeTime)); + if (tradeTime != null && tradeTime.length() > 10) { + try { + // 处理日期格式:将 yyyy/M/d H:m:s 转换为 yyyy-MM-dd HH:mm:ss + // 例如:2024/8/7 7:55:45 -> 2024-08-07 07:55:45 + String[] parts = tradeTime.split(" "); + if (parts.length == 2) { + String datePart = parts[0]; + String timePart = parts[1]; + + String[] dateComponents = datePart.split("/"); + if (dateComponents.length == 3) { + String year = dateComponents[0]; + String month = String.format("%02d", Integer.parseInt(dateComponents[1])); + String day = String.format("%02d", Integer.parseInt(dateComponents[2])); + + String[] timeComponents = timePart.split(":"); + if (timeComponents.length == 3) { + String hour = String.format("%02d", Integer.parseInt(timeComponents[0])); + String minute = String.format("%02d", Integer.parseInt(timeComponents[1])); + String second = timeComponents[2]; + + String formattedDateTime = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second; + trade_date = DateDUtil.DateToStr(DateDUtil.yyyy_MM_dd, DateDUtil.strToDate(DateDUtil.yyyy_MM_dd_HH_mm_ss, formattedDateTime)); + } + } + } + } catch (Exception e) { + System.out.println("日期解析失败: " + tradeTime + ", 错误: " + e.getMessage()); + trade_date = ""; + } } //HIS 业务时间 @@ -685,20 +773,27 @@ public class HisUtil { addMap.put("ybzhAmount", ybzhAmount); addMap.put("ybtcAmount", ybtcAmount); addMap.put("receiptNO", receiptNO); + addMap.put("invNum", invNum); addMap.put("patientID", patientID); addMap.put("patientName", patientName); + addMap.put("inHosNum", inHosNum); addMap.put("tradeTime", tradeTime); addMap.put("trade_date", trade_date); addMap.put("hisTime", hisTime); - addMap.put("hisOperNum", hisOperNum); + addMap.put("hisOperCode", hisOperNum); // 修改字段名以匹配HISGetDataMethodByJH中的使用 addMap.put("powerTranID", powerTranID); addList.add(addMap); } + + log.info("解析到的数据条数: {}", addList.size()); + if (addList.size() > 0) { + log.info("第一条数据示例: {}", addList.get(0)); + } resultMap.put("addList", addList); } } catch (Exception e) { - e.printStackTrace(); + log.error("his数据字符串中提取数据失败,原因:", e); errCode = "999"; errMsg = "his数据字符串中提取数据失败,原因:" + e.getMessage(); }