Ver código fonte

Merge branch 'medicare' of liubing/wlyy2.0 into medicare

liubing 2 anos atrás
pai
commit
9c3a5d4967

+ 2 - 2
common/common-entity/src/main/java/com/yihu/jw/entity/hospital/healthCare/YlzMedicalRelationDO.java

@ -38,12 +38,12 @@ public class YlzMedicalRelationDO extends UuidIdentityEntity {
    private String hospitalizationQty;//本年度住院次数
    private Date date;//实际就诊日期
    private Date payDate;//费用发生日期(结算日期)
    private String relationCode;//关联code
    private String relationCode;//关联code  //药柜处方号
    private Integer del;//
    private String invoiceJj;//发票打印基金应支付
    private String invoiceXj;//发票打印现金应支付
    private String invoiceZh;//发票打印账户应支付
    private String logNo;//系统跟踪号   //处方号
    private String logNo;//系统跟踪号   //药柜挂号号
    private String orgCode;//医院编码
    private String regionCode;//参保地区划代码
    private String idcard;//证件号码

+ 2 - 2
svr/svr-base/src/main/java/com/yihu/jw/base/service/a3service/JwService.java

@ -214,7 +214,7 @@ public class JwService {
                    YlzMedicalMxDO medicalMxDO = ylzMedicalMxDOList.get(0);
                    JSONObject insurResultTmp = new JSONObject();
                    insurResultTmp.put("visitNo",ylzMedicalRelationDO.getRelationCode()); //院内挂号号
                    insurResultTmp.put("visitNo",ylzMedicalRelationDO.getLogNo()); //院内挂号号
                    insurResultTmp.put("insurSettleSort",medicalMxDO.getInsurSettleSort()); //医保结算序号
                    insurResultTmp.put("setl_msgid",medicalMxDO.getSetlMsgid()); //发送方报文ID
                    insurResultTmp.put("fee_msgid",medicalMxDO.getFeeMsgid()); //费用上传发送方报文ID
@ -345,7 +345,7 @@ public class JwService {
        insurVisitTmp.put("insutype","310");//险种类型【挂号时用的险种,医保目前以此为准】
        insurVisitTmp.put("mdtrt_id",ylzMedicalRelationDO.getHisSerial());//就诊ID  医保挂号接口返回
        insurVisitTmp.put("psn_no",ylzMedicalRelationDO.getPsnNo());//人员编号   医保人员基本信息获取接口返回
        insurVisitTmp.put("ipt_otp_no",ylzMedicalRelationDO.getRelationCode());//门诊号
        insurVisitTmp.put("ipt_otp_no",ylzMedicalRelationDO.getLogNo());//门诊号
        insurVisitTmp.put("exp_content","");//字段扩展【应需要解决转义字符反斜杠被过滤问题,否则要将里面的扩展节点独立字段出
        sql = " select dict_code,dict_value from wlyy_hospital_sys_dict where dict_name='insurVisitInfo' ";
        AnalogFlags = jdbcTemplate.queryForList(sql);

+ 254 - 244
svr/svr-base/src/main/java/com/yihu/jw/base/service/a3service/MedOrderService.java

@ -313,7 +313,7 @@ public class MedOrderService {
        settleTmp.put("needCharge",true);//是否需要医保结算
        settleTmp.put("needHisCharge",true);//是否需要医保结算
        settleTmp.put("medicalState",ylzMedicalRelationDO.getMedicalState());//结算方式
        settleTmp.put("RECIPE_NO",ylzMedicalRelationDO.getLogNo());
        settleTmp.put("RECIPE_NO",null==ylzMedicalRelationDO.getLogNo()?"":ylzMedicalRelationDO.getLogNo());//用挂号号关联,非处方号
        if (1==ylzMedicalRelationDO.getMedicalState()&&0.0==Double.valueOf(ylzMedicalRelationDO.getTotalAmount())){
            //费用为0的医保结算也需要当作自费处理
            settleTmp.put("medicalState",0);//结算方式
@ -427,7 +427,7 @@ public class MedOrderService {
                   }
                   inputDetail.put("mdtrt_cert_type",mdtrt_cert_type);
                   inputDetail.put("ipt_otp_no",ylzMedicalRelationDO.getRelationCode());
                   inputDetail.put("ipt_otp_no",ylzMedicalRelationDO.getLogNo());
                   inputDetail.put("atddr_no",ylzMedicalRelationDO.getAtddrNo());
                   inputDetail.put("dr_name",ylzMedicalRelationDO.getDrName());
                   inputDetail.put("dept_code",ylzMedicalRelationDO.getDeptCode());
@ -436,6 +436,7 @@ public class MedOrderService {
                   input.put("data",inputDetail);
                   dataDetail.put("input",input);
                   netData.put("msgid",ylzMedicalRelationDO.getVisitMsgid());//挂号发送方报文id
                   netData.put("insuplc_admdvs","");//参保地医保区划 前端替换
                   dataDetail.put("net_data",netData);
                   strinObj.put("func","fsi.terminal.register");
                   strinObj.put("data",dataDetail);
@ -580,6 +581,7 @@ public class MedOrderService {
                JSONObject netData = new JSONObject();
                netData.put("opter",ylzMedicalRelationDO.getOrgCode());
                netData.put("msgid",ylzMedicalMxDOSTmp.get(0).getSetlMsgid());//发送方结算报文id
                netData.put("insuplc_admdvs",ylzMedicalRelationDO.getRegionCode());//参保地医保区划
                netData.put("opmsgidter","123123");
                netData.put("fixmedins_code",strinObj.getString("outBizNo"));
                netData.put("opter_name","自助机");
@ -833,269 +835,277 @@ public class MedOrderService {
                        JSONArray jsonArray = array.getJSONArray(0);
                        if (jsonArray != null && jsonArray.size() != 0) {
                            for (int waitPayIndex=0;waitPayIndex<jsonArray.size();waitPayIndex++){
                                YlzMedicalRelationDO ylzMedicalRelationDO = null;
                                List<YlzMedicalIcdDO> icdDOList = new ArrayList<>();
                                List<YlzMedicalMxDO> mxDOList = new ArrayList<>();
                                JSONObject waitForPay = jsonArray.getJSONObject(waitPayIndex);
                                if (waitForPay!=null){
                                    JSONArray visitDetails = waitForPay.getJSONArray("VISIT_DETAIL");
                                    String prescription_code = "";//处方编码 费用明细中只有药品有处方编码,诊查费无
                                    String INSUR_VISIT_NO = "";//医保挂号流水号
                                    String deptCode = "";
                                    String deptName = "";
                                    String hisDeptCode = "";
                                    String hisDeptName = "";
                                    String collector = "";//收费人
                                    String presItemCount="";
                                    String APPLY_TIME="";//开单时间
                                    Date visitDate = null;
                                    String USER_NAME = "";
                                    BigDecimal totalAmount = new BigDecimal(0.00);
                                    BigDecimal ownPay = new BigDecimal(0.00);
                                    DecimalFormat amountDf = new DecimalFormat("0.00");
                                    String RATE_TYPE = "";//续方费用类别 1自费 2医保
                                    String SUM_COST =amountDf.format(Double.valueOf(waitForPay.getString("SUM_COST")));//医保支付下,sumCost=0 当作自费号处理
                                    String SUM_CHARGE =amountDf.format(Double.valueOf(waitForPay.getString("SUM_COST")));//待结算自付总费用
                                    BigDecimal INSUR_ITEM_PRICE = new BigDecimal(0);
                                    String visit_msgid = ""; //发送方报文ID【用于基线门诊挂号接口,自助机fsi.terminal.register接口】
                                    String visit_rush_msgid = ""; //发送方报文ID【用于基线门诊挂号撤销接口,自助机fsi.terminal.register.cancel接口】
                                    String VISIT_NO = ""; //门诊号【对应基线接口:ipt_otp_no】
                                    String med_type = "";//医疗类别
                                    String beginTime = "";//开始时间【挂号时间yyyy-MM-dd HH:mm:ss】
                                    String caty = "";//科别【挂号科别】
                                    String atddr_no = "";//就诊医生国家医保编码【对应基线接口:atddr_no】
                                    String dr_name = "";//科别【挂号科别】
                                    boolean newYlzRelation = false;//新的记录
                                    //所有订单总金额 用于二重验证
                                    BigDecimal hisAllTotalAmount = new BigDecimal(waitForPay.getString("SUM_COST"));
                                    BigDecimal allTotalAmount = new BigDecimal("0.00");
                                    if (visitDetails != null && visitDetails.size() != 0) {
                                        JSONObject visitDetail = visitDetails.getJSONObject(0);
                                        RATE_TYPE = visitDetail.getString("RATE_TYPE");//续方费用类别 1自费 2医保
                                        // 费别是医保时,医保挂号流水号空则需发起门诊挂号
                                        if (visitDetail.get("INSUR_VISIT_NO")==null&&"2".equals(RATE_TYPE)){//医保挂号流水号:
                                        for (int visitDetailIndex=0;visitDetailIndex<visitDetails.size();visitDetailIndex++){
                                            JSONObject visitDetail = visitDetails.getJSONObject(visitDetailIndex);
                                            YlzMedicalRelationDO ylzMedicalRelationDO = null;
                                            List<YlzMedicalIcdDO> icdDOList = new ArrayList<>();
                                            List<YlzMedicalMxDO> mxDOList = new ArrayList<>();
                                            String prescription_code = "";//处方编码 费用明细中只有药品有处方编码,诊查费无
                                            String INSUR_VISIT_NO = "";//医保挂号流水号
                                            String deptCode = "";
                                            String deptName = "";
                                            String hisDeptCode = "";
                                            String hisDeptName = "";
                                            String collector = "";//收费人
                                            String presItemCount="";
                                            String APPLY_TIME="";//开单时间
                                            Date visitDate = null;
                                            String USER_NAME = "";
                                            BigDecimal totalAmount = new BigDecimal(0.00);
                                            BigDecimal ownPay = new BigDecimal(0.00);
                                            String RATE_TYPE = "";//续方费用类别 1自费 2医保
                                            //医保支付下,sumCost=0 当作自费号处理
                                            //待结算自付总费用
                                            BigDecimal INSUR_ITEM_PRICE = new BigDecimal(0);
                                            String visit_msgid = ""; //发送方报文ID【用于基线门诊挂号接口,自助机fsi.terminal.register接口】
                                            String visit_rush_msgid = ""; //发送方报文ID【用于基线门诊挂号撤销接口,自助机fsi.terminal.register.cancel接口】
                                            String VISIT_NO = ""; //门诊号【对应基线接口:ipt_otp_no】
                                            String med_type = "";//医疗类别
                                            String beginTime = "";//开始时间【挂号时间yyyy-MM-dd HH:mm:ss】
                                            String caty = "";//科别【挂号科别】
                                            String atddr_no = "";//就诊医生国家医保编码【对应基线接口:atddr_no】
                                            String dr_name = "";//科别【挂号科别】
                                            boolean newYlzRelation = false;//新的记录
                                            RATE_TYPE = visitDetail.getString("RATE_TYPE");//续方费用类别 1自费 2医保
                                            // 费别是医保时,医保挂号流水号空则需发起门诊挂号
                                            if (visitDetail.get("INSUR_VISIT_NO")==null&&"2".equals(RATE_TYPE)){//医保挂号流水号:
                                        }
                                        if (visitDetail.get("INSUR_VISIT_NO")!=null){
                                            INSUR_VISIT_NO = visitDetail.getString("INSUR_VISIT_NO");
                                        }
                                        visitDate = visitDetail.getDate("begntime");
                                        USER_NAME = visitDetail.getString("USER_NAME");
                                        visit_msgid = visitDetail.getString("visit_msgid");
                                        VISIT_NO = visitDetail.getString("VISIT_NO");
                                        med_type = visitDetail.getString("med_type");
                                        caty = visitDetail.getString("caty");
                                        atddr_no = visitDetail.getString("VISIT_IDENTITY_CARD_NO");
                                        dr_name = visitDetail.getString("VISIT_OPERATOR_NAME");
                                        deptCode = visitDetail.getString("VISIT_DEPT");
                                        deptName = visitDetail.getString("VISIT_DEPT_NAME");
                                        //收费明细
                                        JSONArray SETTLE_DETAILS = visitDetail.getJSONArray("SETTLE_DETAIL");
                                        if (SETTLE_DETAILS!=null&&SETTLE_DETAILS.size()>0) {
                                            presItemCount = SETTLE_DETAILS.size()+"";
                                            JSONObject SETTLE_DETAIL_OBJ = SETTLE_DETAILS.getJSONObject(0);
                                            String RECIPE_NO = SETTLE_DETAIL_OBJ.getString("RECIPE_NO");
                                            if (StringUtils.isBlank(prescription_code)){
                                                prescription_code = RECIPE_NO;
                                            }
                                            ylzMedicalRelationDO = ylzMedicailRelationDao.findByLog_no(prescription_code);
                                            //新的记录
                                            if (null==ylzMedicalRelationDO){
                                                newYlzRelation = true;
                                                ylzMedicalRelationDO = new YlzMedicalRelationDO();
                                                ylzMedicalRelationDO.setDel(1);
                                                ylzMedicalRelationDO.setStatus(0);
                                                ylzMedicalRelationDO.setState(0);
                                                ylzMedicalRelationDO =  ylzMedicailRelationDao.save(ylzMedicalRelationDO);
                                                for (int j = 0; j < SETTLE_DETAILS.size(); j++) {
                                                    SETTLE_DETAIL_OBJ = SETTLE_DETAILS.getJSONObject(j);
                                                    YlzMedicalMxDO ylzMedicalMxDO = new YlzMedicalMxDO();
                                                    ylzMedicalMxDO.setMedicalId(ylzMedicalRelationDO.getId());//医保关联表id
                                                    ylzMedicalMxDO.setPrescriptionCode(prescription_code);//处方code
                                                    ylzMedicalMxDO.setHisDetailSn(SETTLE_DETAIL_OBJ.getString("feedetl_sn"));//his处方明细流水号
                                                    ylzMedicalMxDO.setItemCode(SETTLE_DETAIL_OBJ.getString("INSUR_ITEM_CODE"));//医保项目编码
                                                    ylzMedicalMxDO.setItemName(SETTLE_DETAIL_OBJ.getString("INSUR_ITEM_NAME"));//医保项目名称
                                                    ylzMedicalMxDO.setInvoiceType(SETTLE_DETAIL_OBJ.getString("INSUR_INVOICE_TYPE_CODE"));//发票项目类别
                                                    ylzMedicalMxDO.setSpecificationType(SETTLE_DETAIL_OBJ.getString("ITEM_SPEC"));//规格型号
                                                    ylzMedicalMxDO.setDosageForm(SETTLE_DETAIL_OBJ.getString("PHYSIC_FORM"));//剂型
                                                    ylzMedicalMxDO.setChargeUnit(SETTLE_DETAIL_OBJ.getString("ITEM_UNIT"));//单位
                                                    ylzMedicalMxDO.setChargeUnitName(SETTLE_DETAIL_OBJ.getString("ITEM_UNIT_NAME"));//单位名称
                                                    ylzMedicalMxDO.setPrice(null==SETTLE_DETAIL_OBJ.get("INSUR_ITEM_PRICE")?"0.0":SETTLE_DETAIL_OBJ.getString("INSUR_ITEM_PRICE"));//单价
                                                    ylzMedicalMxDO.setAmount(SETTLE_DETAIL_OBJ.getString("ITEM_QUANTITY"));//数量
                                                    ylzMedicalMxDO.setTotalMoney(amountDf.format(Double.valueOf(SETTLE_DETAIL_OBJ.getString("COST"))));//金额
                                                    totalAmount = totalAmount.add(new BigDecimal(SETTLE_DETAIL_OBJ.getString("COST")));
                                                    ownPay = ownPay.add(new BigDecimal(SETTLE_DETAIL_OBJ.getString("CHARGE")));
                                                    if (null!=SETTLE_DETAIL_OBJ.get("INSUR_ITEM_PRICE")){
                                                        INSUR_ITEM_PRICE = INSUR_ITEM_PRICE.add(new BigDecimal(SETTLE_DETAIL_OBJ.getString("INSUR_ITEM_PRICE")));
                                                    }
                                                    ylzMedicalMxDO.setSingleDose(SETTLE_DETAIL_OBJ.getString("PHYSIC_DOSE"));//每次用量
                                                    ylzMedicalMxDO.setUseFrequency(SETTLE_DETAIL_OBJ.getString("FREQUENCY"));//使用频率
                                                    ylzMedicalMxDO.setMedicalWay(SETTLE_DETAIL_OBJ.getString("PHYSIC_USAGE"));//给药途径
                                                    ylzMedicalMxDO.setPrescriptionDate(SETTLE_DETAIL_OBJ.getDate("prescription_date"));//处方日期
                                                    ylzMedicalMxDO.setMedicationDays(SETTLE_DETAIL_OBJ.getString("DAY_COUNT"));//执行天数
                                                    ylzMedicalMxDO.setDeptCode(SETTLE_DETAIL_OBJ.getString("APPLY_DEPT"));//科室编码
                                                    ylzMedicalMxDO.setDeptName(SETTLE_DETAIL_OBJ.getString("APPLY_DEPT_NAME"));//科室名称
                                                    ylzMedicalMxDO.setHisDeptCode(SETTLE_DETAIL_OBJ.getString("APPLY_DEPT"));//his内部科室编码
                                                    ylzMedicalMxDO.setHisDeptName(SETTLE_DETAIL_OBJ.getString("APPLY_DEPT_NAME"));//his内部科室名称
                                                    if (StringUtils.isBlank(hisDeptCode)){
                                                        hisDeptCode = SETTLE_DETAIL_OBJ.getString("APPLY_DEPT");
                                                    }
                                                    if (StringUtils.isBlank(APPLY_TIME)){
                                                        APPLY_TIME = SETTLE_DETAIL_OBJ.getString("APPLY_TIME");
                                                    }
                                                    if (StringUtils.isBlank(hisDeptName)){
                                                        hisDeptName = SETTLE_DETAIL_OBJ.getString("APPLY_DEPT_NAME");
                                            if (visitDetail.get("INSUR_VISIT_NO")!=null){
                                                INSUR_VISIT_NO = visitDetail.getString("INSUR_VISIT_NO");
                                            }
                                            visitDate = visitDetail.getDate("begntime");
                                            USER_NAME = visitDetail.getString("USER_NAME");
                                            visit_msgid = visitDetail.getString("visit_msgid");
                                            VISIT_NO = visitDetail.getString("VISIT_NO");
                                            med_type = visitDetail.getString("med_type");
                                            caty = visitDetail.getString("caty");
                                            atddr_no = visitDetail.getString("VISIT_IDENTITY_CARD_NO");
                                            dr_name = visitDetail.getString("VISIT_OPERATOR_NAME");
                                            deptCode = visitDetail.getString("VISIT_DEPT");
                                            deptName = visitDetail.getString("VISIT_DEPT_NAME");
                                            //收费明细
                                            JSONArray SETTLE_DETAILS = visitDetail.getJSONArray("SETTLE_DETAIL");
                                            if (SETTLE_DETAILS!=null&&SETTLE_DETAILS.size()>0) {
                                                presItemCount = SETTLE_DETAILS.size()+"";
                                                JSONObject SETTLE_DETAIL_OBJ = SETTLE_DETAILS.getJSONObject(0);
                                                String RECIPE_NO = SETTLE_DETAIL_OBJ.getString("RECIPE_NO");
                                                if (StringUtils.isBlank(prescription_code)){
                                                    prescription_code = RECIPE_NO;
                                                }
                                                ylzMedicalRelationDO = ylzMedicailRelationDao.findByLog_no(VISIT_NO);
                                                //新的记录
                                                if (null==ylzMedicalRelationDO){
                                                    newYlzRelation = true;
                                                    ylzMedicalRelationDO = new YlzMedicalRelationDO();
                                                    ylzMedicalRelationDO.setDel(1);
                                                    ylzMedicalRelationDO.setStatus(0);
                                                    ylzMedicalRelationDO.setState(0);
                                                    ylzMedicalRelationDO =  ylzMedicailRelationDao.save(ylzMedicalRelationDO);
                                                    for (int j = 0; j < SETTLE_DETAILS.size(); j++) {
                                                        SETTLE_DETAIL_OBJ = SETTLE_DETAILS.getJSONObject(j);
                                                        YlzMedicalMxDO ylzMedicalMxDO = new YlzMedicalMxDO();
                                                        ylzMedicalMxDO.setMedicalId(ylzMedicalRelationDO.getId());//医保关联表id
                                                        ylzMedicalMxDO.setPrescriptionCode(prescription_code);//处方code
                                                        ylzMedicalMxDO.setHisDetailSn(SETTLE_DETAIL_OBJ.getString("feedetl_sn"));//his处方明细流水号
                                                        ylzMedicalMxDO.setItemCode(SETTLE_DETAIL_OBJ.getString("INSUR_ITEM_CODE"));//医保项目编码
                                                        ylzMedicalMxDO.setItemName(SETTLE_DETAIL_OBJ.getString("INSUR_ITEM_NAME"));//医保项目名称
                                                        ylzMedicalMxDO.setInvoiceType(SETTLE_DETAIL_OBJ.getString("INSUR_INVOICE_TYPE_CODE"));//发票项目类别
                                                        ylzMedicalMxDO.setSpecificationType(SETTLE_DETAIL_OBJ.getString("ITEM_SPEC"));//规格型号
                                                        ylzMedicalMxDO.setDosageForm(SETTLE_DETAIL_OBJ.getString("PHYSIC_FORM"));//剂型
                                                        ylzMedicalMxDO.setChargeUnit(SETTLE_DETAIL_OBJ.getString("ITEM_UNIT"));//单位
                                                        ylzMedicalMxDO.setChargeUnitName(SETTLE_DETAIL_OBJ.getString("ITEM_UNIT_NAME"));//单位名称
                                                        ylzMedicalMxDO.setPrice(null==SETTLE_DETAIL_OBJ.get("INSUR_ITEM_PRICE")?"0.0":SETTLE_DETAIL_OBJ.getString("INSUR_ITEM_PRICE"));//单价
                                                        ylzMedicalMxDO.setAmount(SETTLE_DETAIL_OBJ.getString("ITEM_QUANTITY"));//数量
                                                        ylzMedicalMxDO.setTotalMoney(amountDf.format(Double.valueOf(SETTLE_DETAIL_OBJ.getString("COST"))));//金额
                                                        totalAmount = totalAmount.add(new BigDecimal(SETTLE_DETAIL_OBJ.getString("COST")));
                                                        ownPay = ownPay.add(new BigDecimal(SETTLE_DETAIL_OBJ.getString("CHARGE")));
                                                        if (null!=SETTLE_DETAIL_OBJ.get("INSUR_ITEM_PRICE")){
                                                            INSUR_ITEM_PRICE = INSUR_ITEM_PRICE.add(new BigDecimal(SETTLE_DETAIL_OBJ.getString("INSUR_ITEM_PRICE")));
                                                        }
                                                        ylzMedicalMxDO.setSingleDose(SETTLE_DETAIL_OBJ.getString("PHYSIC_DOSE"));//每次用量
                                                        ylzMedicalMxDO.setUseFrequency(SETTLE_DETAIL_OBJ.getString("FREQUENCY"));//使用频率
                                                        ylzMedicalMxDO.setMedicalWay(SETTLE_DETAIL_OBJ.getString("PHYSIC_USAGE"));//给药途径
                                                        ylzMedicalMxDO.setPrescriptionDate(SETTLE_DETAIL_OBJ.getDate("prescription_date"));//处方日期
                                                        ylzMedicalMxDO.setMedicationDays(SETTLE_DETAIL_OBJ.getString("DAY_COUNT"));//执行天数
                                                        ylzMedicalMxDO.setDeptCode(SETTLE_DETAIL_OBJ.getString("APPLY_DEPT"));//科室编码
                                                        ylzMedicalMxDO.setDeptName(SETTLE_DETAIL_OBJ.getString("APPLY_DEPT_NAME"));//科室名称
                                                        ylzMedicalMxDO.setHisDeptCode(SETTLE_DETAIL_OBJ.getString("APPLY_DEPT"));//his内部科室编码
                                                        ylzMedicalMxDO.setHisDeptName(SETTLE_DETAIL_OBJ.getString("APPLY_DEPT_NAME"));//his内部科室名称
                                                        if (StringUtils.isBlank(hisDeptCode)){
                                                            hisDeptCode = SETTLE_DETAIL_OBJ.getString("APPLY_DEPT");
                                                        }
                                                        if (StringUtils.isBlank(APPLY_TIME)){
                                                            APPLY_TIME = SETTLE_DETAIL_OBJ.getString("APPLY_TIME");
                                                        }
                                                        if (StringUtils.isBlank(hisDeptName)){
                                                            hisDeptName = SETTLE_DETAIL_OBJ.getString("APPLY_DEPT_NAME");
                                                        }
                                                        ylzMedicalMxDO.setMedicalPerName(SETTLE_DETAIL_OBJ.getString("APPLY_OPERATOR_NAME"));//医疗服务人员姓名  开单医生姓名
                                                        ylzMedicalMxDO.setMedicalPerId(SETTLE_DETAIL_OBJ.getString("APPLY_OPERATOR"));//医疗服务人员证件号码  开单医生编码
                                                        if (StringUtils.isBlank(collector)){
                                                            collector = SETTLE_DETAIL_OBJ.getString("APPLY_OPERATOR");
                                                        }
                                                        ylzMedicalMxDO.setLimitType(SETTLE_DETAIL_OBJ.getString("INSUR_FLAG"));//限制范围类别
                                                        ylzMedicalMxDO.setActgDate(SETTLE_DETAIL_OBJ.getDate("fee_ocur_time"));//记帐日期
                                                        ylzMedicalMxDO.setHisItemCode(SETTLE_DETAIL_OBJ.getString("ITEM_CODE"));//HIS院内项目编码
                                                        ylzMedicalMxDO.setHisItemName(SETTLE_DETAIL_OBJ.getString("ITEM_NAME"));//HIS院内项目名称
                                                        ylzMedicalMxDO.setClerkDays(SETTLE_DETAIL_OBJ.getDate("fee_ocur_time"));//记帐日期
                                                        ylzMedicalMxDO.setPrescriptionDate(visitDate);
                                                        ylzMedicalMxDO.setPeopleType(null);//医保服务人员类别 todo
                                                        ylzMedicalMxDO.setDel(1);
                                                        ylzMedicalMxDO.setCreateTime(new Date());
                                                        ylzMedicalMxDO.setSetlMsgid(SETTLE_DETAIL_OBJ.getString("setl_msgid"));
                                                        ylzMedicalMxDO.setFeeMsgid(SETTLE_DETAIL_OBJ.getString("fee_msgid"));
                                                        ylzMedicalMxDO.setInsurSettleSort(SETTLE_DETAIL_OBJ.getString("INSUR_SETTLE_SORT"));
                                                        ylzMedicalMxDO.setChrgBchno(SETTLE_DETAIL_OBJ.getString("chrg_bchno"));
                                                        ylzMedicalMxDO.setRxCircFlag(SETTLE_DETAIL_OBJ.getString("rx_circ_flag"));
                                                        ylzMedicalMxDO.setBilgDeptCodg(SETTLE_DETAIL_OBJ.getString("bilg_dept_codg"));
                                                        ylzMedicalMxDO.setBilgDeptName(SETTLE_DETAIL_OBJ.getString("bilg_dept_name"));
                                                        ylzMedicalMxDO.setBilgDrCodg(SETTLE_DETAIL_OBJ.getString("APPLY_OPERATOR"));
                                                        ylzMedicalMxDO.setBilgDrName(SETTLE_DETAIL_OBJ.getString("APPLY_OPERATOR_NAME"));
                                                        ylzMedicalMxDO.setHospApprFlag(SETTLE_DETAIL_OBJ.getString("hosp_appr_flag"));
                                                        ylzMedicalMxDO.setRxno(SETTLE_DETAIL_OBJ.getString("APPLY_NO"));
                                                        ylzMedicalMxDO.setPsnSetlway(SETTLE_DETAIL_OBJ.getString("psn_setlway"));
                                                        ylzMedicailMxDao.save(ylzMedicalMxDO);
                                                        mxDOList.add(ylzMedicalMxDO);
                                                    }
                                                    ylzMedicalMxDO.setMedicalPerName(SETTLE_DETAIL_OBJ.getString("APPLY_OPERATOR_NAME"));//医疗服务人员姓名  开单医生姓名
                                                    ylzMedicalMxDO.setMedicalPerId(SETTLE_DETAIL_OBJ.getString("APPLY_OPERATOR"));//医疗服务人员证件号码  开单医生编码
                                                    if (StringUtils.isBlank(collector)){
                                                        collector = SETTLE_DETAIL_OBJ.getString("APPLY_OPERATOR");
                                                }else {
                                                    List<YlzMedicalMxDO> ylzMedicalMxDOList = ylzMedicailMxDao.findByMedicalId(ylzMedicalRelationDO.getId());
                                                    mxDOList.addAll(ylzMedicalMxDOList);
                                                }
                                            }
                                            //诊断明细
                                            JSONArray DIAGNOSIS_DETAIL = visitDetail.getJSONArray("DIAGNOSIS_DETAIL");
                                            if (DIAGNOSIS_DETAIL!=null&&DIAGNOSIS_DETAIL.size()>0){
                                                if (!newYlzRelation){
                                                    List<YlzMedicalIcdDO> ylzMedicalIcdDOList = ylzMedicailIcdDao.findByMedicalId(ylzMedicalRelationDO.getId());
                                                    icdDOList.addAll(ylzMedicalIcdDOList);
                                                }else {
                                                    for (int j=0;j<DIAGNOSIS_DETAIL.size();j++){
                                                        JSONObject DIAGNOSIS_DETAIL_OBJ = DIAGNOSIS_DETAIL.getJSONObject(j);
                                                        YlzMedicalIcdDO ylzMedicalIcdDO = new YlzMedicalIcdDO();
                                                        ylzMedicalIcdDO.setMedicalId(ylzMedicalRelationDO.getId());//医保关联表id
                                                        ylzMedicalIcdDO.setDiseaseCodeIcd10(DIAGNOSIS_DETAIL_OBJ.getString("diag_code"));
                                                        ylzMedicalIcdDO.setDiseaseNameIcd10(DIAGNOSIS_DETAIL_OBJ.getString("diag_name"));
                                                        ylzMedicalIcdDO.setDiseaseType(DIAGNOSIS_DETAIL_OBJ.getString("diag_type"));//诊断或症状类型
                                                        ylzMedicalIcdDO.setDiseaseOrder(DIAGNOSIS_DETAIL_OBJ.getString("diag_srt_no"));//诊断或症状序号
                                                        ylzMedicalIcdDO.setCreateTime(new Date());
                                                        ylzMedicalIcdDO.setDiseMsgid(DIAGNOSIS_DETAIL_OBJ.getString("dise_msgid"));
                                                        ylzMedicalIcdDO.setDiagDept(DIAGNOSIS_DETAIL_OBJ.getString("diag_dept"));
                                                        ylzMedicalIcdDO.setDiseDorNo(DIAGNOSIS_DETAIL_OBJ.getString("dise_dor_no"));
                                                        ylzMedicalIcdDO.setDiseDorName(DIAGNOSIS_DETAIL_OBJ.getString("dise_dor_name"));
                                                        ylzMedicalIcdDO.setDiagTime(DIAGNOSIS_DETAIL_OBJ.getString("diag_time"));
                                                        ylzMedicalIcdDO.setDel(Integer.valueOf(DIAGNOSIS_DETAIL_OBJ.getString("vali_flag")));
                                                        ylzMedicailIcdDao.save(ylzMedicalIcdDO);
                                                        icdDOList.add(ylzMedicalIcdDO);
                                                    }
                                                    ylzMedicalMxDO.setLimitType(SETTLE_DETAIL_OBJ.getString("INSUR_FLAG"));//限制范围类别
                                                    ylzMedicalMxDO.setActgDate(SETTLE_DETAIL_OBJ.getDate("fee_ocur_time"));//记帐日期
                                                    ylzMedicalMxDO.setHisItemCode(SETTLE_DETAIL_OBJ.getString("ITEM_CODE"));//HIS院内项目编码
                                                    ylzMedicalMxDO.setHisItemName(SETTLE_DETAIL_OBJ.getString("ITEM_NAME"));//HIS院内项目名称
                                                    ylzMedicalMxDO.setClerkDays(SETTLE_DETAIL_OBJ.getDate("fee_ocur_time"));//记帐日期
                                                    ylzMedicalMxDO.setPrescriptionDate(visitDate);
                                                    ylzMedicalMxDO.setPeopleType(null);//医保服务人员类别 todo
                                                    ylzMedicalMxDO.setDel(1);
                                                    ylzMedicalMxDO.setCreateTime(new Date());
                                                    ylzMedicalMxDO.setSetlMsgid(SETTLE_DETAIL_OBJ.getString("setl_msgid"));
                                                    ylzMedicalMxDO.setFeeMsgid(SETTLE_DETAIL_OBJ.getString("fee_msgid"));
                                                    ylzMedicalMxDO.setInsurSettleSort(SETTLE_DETAIL_OBJ.getString("INSUR_SETTLE_SORT"));
                                                    ylzMedicalMxDO.setChrgBchno(SETTLE_DETAIL_OBJ.getString("chrg_bchno"));
                                                    ylzMedicalMxDO.setRxCircFlag(SETTLE_DETAIL_OBJ.getString("rx_circ_flag"));
                                                    ylzMedicalMxDO.setBilgDeptCodg(SETTLE_DETAIL_OBJ.getString("bilg_dept_codg"));
                                                    ylzMedicalMxDO.setBilgDeptName(SETTLE_DETAIL_OBJ.getString("bilg_dept_name"));
                                                    ylzMedicalMxDO.setBilgDrCodg(SETTLE_DETAIL_OBJ.getString("APPLY_OPERATOR"));
                                                    ylzMedicalMxDO.setBilgDrName(SETTLE_DETAIL_OBJ.getString("APPLY_OPERATOR_NAME"));
                                                    ylzMedicalMxDO.setHospApprFlag(SETTLE_DETAIL_OBJ.getString("hosp_appr_flag"));
                                                    ylzMedicalMxDO.setRxno(SETTLE_DETAIL_OBJ.getString("APPLY_NO"));
                                                    ylzMedicalMxDO.setPsnSetlway(SETTLE_DETAIL_OBJ.getString("psn_setlway"));
                                                    ylzMedicailMxDao.save(ylzMedicalMxDO);
                                                    mxDOList.add(ylzMedicalMxDO);
                                                }
                                            }else {
                                                List<YlzMedicalMxDO> ylzMedicalMxDOList = ylzMedicailMxDao.findByMedicalId(ylzMedicalRelationDO.getId());
                                                mxDOList.addAll(ylzMedicalMxDOList);
                                            }
                                        }
                                        //诊断明细
                                        JSONArray DIAGNOSIS_DETAIL = visitDetail.getJSONArray("DIAGNOSIS_DETAIL");
                                        if (DIAGNOSIS_DETAIL!=null&&DIAGNOSIS_DETAIL.size()>0){
                                            if (!newYlzRelation){
                                                List<YlzMedicalIcdDO> ylzMedicalIcdDOList = ylzMedicailIcdDao.findByMedicalId(ylzMedicalRelationDO.getId());
                                                icdDOList.addAll(ylzMedicalIcdDOList);
                                            }else {
                                                for (int j=0;j<DIAGNOSIS_DETAIL.size();j++){
                                                    JSONObject DIAGNOSIS_DETAIL_OBJ = DIAGNOSIS_DETAIL.getJSONObject(j);
                                                    YlzMedicalIcdDO ylzMedicalIcdDO = new YlzMedicalIcdDO();
                                                    ylzMedicalIcdDO.setMedicalId(ylzMedicalRelationDO.getId());//医保关联表id
                                                    ylzMedicalIcdDO.setDiseaseCodeIcd10(DIAGNOSIS_DETAIL_OBJ.getString("diag_code"));
                                                    ylzMedicalIcdDO.setDiseaseNameIcd10(DIAGNOSIS_DETAIL_OBJ.getString("diag_name"));
                                                    ylzMedicalIcdDO.setDiseaseType(DIAGNOSIS_DETAIL_OBJ.getString("diag_type"));//诊断或症状类型
                                                    ylzMedicalIcdDO.setDiseaseOrder(DIAGNOSIS_DETAIL_OBJ.getString("diag_srt_no"));//诊断或症状序号
                                                    ylzMedicalIcdDO.setCreateTime(new Date());
                                                    ylzMedicalIcdDO.setDiseMsgid(DIAGNOSIS_DETAIL_OBJ.getString("dise_msgid"));
                                                    ylzMedicalIcdDO.setDiagDept(DIAGNOSIS_DETAIL_OBJ.getString("diag_dept"));
                                                    ylzMedicalIcdDO.setDiseDorNo(DIAGNOSIS_DETAIL_OBJ.getString("dise_dor_no"));
                                                    ylzMedicalIcdDO.setDiseDorName(DIAGNOSIS_DETAIL_OBJ.getString("dise_dor_name"));
                                                    ylzMedicalIcdDO.setDiagTime(DIAGNOSIS_DETAIL_OBJ.getString("diag_time"));
                                                    ylzMedicalIcdDO.setDel(Integer.valueOf(DIAGNOSIS_DETAIL_OBJ.getString("vali_flag")));
                                                    ylzMedicailIcdDao.save(ylzMedicalIcdDO);
                                                    icdDOList.add(ylzMedicalIcdDO);
                                            if (newYlzRelation){
                                                ylzMedicalRelationDO.setLogNo(VISIT_NO);
                                                ylzMedicalRelationDO.setOrgCode(orgCode);
                                                ylzMedicalRelationDO.setRegionCode("350200");
                                                ylzMedicalRelationDO.setIdcard(null);
                                                ylzMedicalRelationDO.setName(USER_NAME);
                                                ylzMedicalRelationDO.setCertType("01");
                                                ylzMedicalRelationDO.setMedicalMode("10");
                                                ylzMedicalRelationDO.setMedicalType("11");
                                                ylzMedicalRelationDO.setCardNo(cardNo);
                                                ylzMedicalRelationDO.setHisSerial(INSUR_VISIT_NO);//医保挂号流水号
                                                ylzMedicalRelationDO.setHisSettleNo(INSUR_VISIT_NO);//his結算流水号
                                                ylzMedicalRelationDO.setDeptCode(deptCode);
                                                ylzMedicalRelationDO.setDeptName(deptName);
                                                ylzMedicalRelationDO.setHisDeptCode(hisDeptCode);
                                                ylzMedicalRelationDO.setHisDeptName(hisDeptName);
                                                ylzMedicalRelationDO.setCollector(collector);
                                                ylzMedicalRelationDO.setEmergencySign("0");
                                                ylzMedicalRelationDO.setTraumaSign("0");
                                                ylzMedicalRelationDO.setDate(visitDate);
                                                ylzMedicalRelationDO.setItemCount(mxDOList.size()+"");
                                                ylzMedicalRelationDO.setTotalAmount(amountDf.format(totalAmount));
                                                ylzMedicalRelationDO.setPreCharges("0");//预扣费金额
                                                ylzMedicalRelationDO.setDataSource("53");
                                                ylzMedicalRelationDO.setPreCount(presItemCount);//处方项目数
                                                ylzMedicalRelationDO.setDoctorLevel("02");
                                                ylzMedicalRelationDO.setRelationCode(prescription_code);
                                                ylzMedicalRelationDO.setCreateTime(new Date());
                                                ylzMedicalRelationDO.setMedicalPrice("0");
                                                ylzMedicalRelationDO.setMedicalState(0);
                                                if ("1".equals(RATE_TYPE)){
                                                    ylzMedicalRelationDO.setOwnPay(amountDf.format(totalAmount));//自费金额
                                                    ylzMedicalRelationDO.setPersonCash(amountDf.format(totalAmount));//自费金额
                                                    ylzMedicalRelationDO.setPersonAccount("0.0");
                                                }else {
                                                    ylzMedicalRelationDO.setOwnPay("0");//自费
                                                    ylzMedicalRelationDO.setPersonCash("0");
                                                    ylzMedicalRelationDO.setPersonAccount(amountDf.format(totalAmount));
                                                }
                                                ylzMedicalRelationDO.setMedicalPrice("0");
                                                ylzMedicalRelationDO.setMedicalState("1".equals(RATE_TYPE)?0:1);//0自费 1医保
                                                ylzMedicalRelationDO.setMedType(med_type);
                                                ylzMedicalRelationDO.setCaty(caty);
                                                ylzMedicalRelationDO.setApplyTime(APPLY_TIME);
                                                ylzMedicalRelationDO.setAtddrNo(atddr_no);
                                                ylzMedicalRelationDO.setDrName(dr_name);
                                                ylzMedicalRelationDO.setVisitMsgid(visit_msgid);
                                            }
                                        }
                                    }
                                    if (newYlzRelation){
                                        ylzMedicalRelationDO.setLogNo(prescription_code);
                                        ylzMedicalRelationDO.setOrgCode(orgCode);
                                        ylzMedicalRelationDO.setRegionCode("350200");
                                        ylzMedicalRelationDO.setIdcard(null);
                                        ylzMedicalRelationDO.setName(USER_NAME);
                                        ylzMedicalRelationDO.setCertType("01");
                                        ylzMedicalRelationDO.setMedicalMode("10");
                                        ylzMedicalRelationDO.setMedicalType("11");
                                        ylzMedicalRelationDO.setCardNo(cardNo);
                                        ylzMedicalRelationDO.setHisSerial(INSUR_VISIT_NO);//医保挂号流水号
                                        ylzMedicalRelationDO.setHisSettleNo(INSUR_VISIT_NO);//his結算流水号
                                        ylzMedicalRelationDO.setDeptCode(deptCode);
                                        ylzMedicalRelationDO.setDeptName(deptName);
                                        ylzMedicalRelationDO.setHisDeptCode(hisDeptCode);
                                        ylzMedicalRelationDO.setHisDeptName(hisDeptName);
                                        ylzMedicalRelationDO.setCollector(collector);
                                        ylzMedicalRelationDO.setEmergencySign("0");
                                        ylzMedicalRelationDO.setTraumaSign("0");
                                        ylzMedicalRelationDO.setDate(visitDate);
                                        ylzMedicalRelationDO.setItemCount(mxDOList.size()+"");
                                        ylzMedicalRelationDO.setTotalAmount(SUM_COST);
                                        ylzMedicalRelationDO.setPreCharges("0");//预扣费金额
                                        ylzMedicalRelationDO.setDataSource("53");
                                        ylzMedicalRelationDO.setPreCount(presItemCount);//处方项目数
                                        ylzMedicalRelationDO.setDoctorLevel("02");
                                        ylzMedicalRelationDO.setRelationCode(VISIT_NO);
                                        ylzMedicalRelationDO.setCreateTime(new Date());
                                        ylzMedicalRelationDO.setMedicalPrice("0");
                                        ylzMedicalRelationDO.setMedicalState(0);
                                        if ("1".equals(RATE_TYPE)){
                                            ylzMedicalRelationDO.setOwnPay(SUM_CHARGE);//自费金额
                                            ylzMedicalRelationDO.setPersonCash(SUM_CHARGE);//自费金额
                                            ylzMedicalRelationDO.setPersonAccount("0.0");
                                        }else {
                                            ylzMedicalRelationDO.setOwnPay("0");//自费
                                            ylzMedicalRelationDO.setPersonCash("0");
                                            ylzMedicalRelationDO.setPersonAccount(SUM_CHARGE);
                                        }
                                        ylzMedicalRelationDO.setMedicalPrice("0");
                                        ylzMedicalRelationDO.setMedicalState("1".equals(RATE_TYPE)?0:1);//0自费 1医保
                                        ylzMedicalRelationDO.setMedType(med_type);
                                        ylzMedicalRelationDO.setCaty(caty);
                                        ylzMedicalRelationDO.setApplyTime(APPLY_TIME);
                                        ylzMedicalRelationDO.setAtddrNo(atddr_no);
                                        ylzMedicalRelationDO.setDrName(dr_name);
                                        ylzMedicalRelationDO.setVisitMsgid(visit_msgid);
                                    }
                                    if (ylzMedicalRelationDO.getStatus()!=1){
                                        String balance =null;
                                        JSONObject balanceObj = jwService.getSickDispBalance(ylzMedicalRelationDO.getCardNo(),ylzMedicalRelationDO.getOrgCode());
                                        if (balanceObj.getString("status").equalsIgnoreCase("200")) {//i健康返回值
                                            JSONObject responseDataTmp = balanceObj.getJSONObject("data");
                                            String codeTMP = responseDataTmp.getString("CODE");//智业返回值 0失败 1成功
                                            if (codeTMP.equalsIgnoreCase("1")) {
                                                JSONArray byRefParaData = responseDataTmp.getJSONArray("byRefParaData");
                                                if (byRefParaData.size()>0){
                                                    balance = byRefParaData.getJSONObject(0).getString("dispBalance");
                                            if (ylzMedicalRelationDO.getStatus()!=1){
                                                String balance =null;
                                                JSONObject balanceObj = jwService.getSickDispBalance(ylzMedicalRelationDO.getCardNo(),ylzMedicalRelationDO.getOrgCode());
                                                if (balanceObj.getString("status").equalsIgnoreCase("200")) {//i健康返回值
                                                    JSONObject responseDataTmp = balanceObj.getJSONObject("data");
                                                    String codeTMP = responseDataTmp.getString("CODE");//智业返回值 0失败 1成功
                                                    if (codeTMP.equalsIgnoreCase("1")) {
                                                        JSONArray byRefParaData = responseDataTmp.getJSONArray("byRefParaData");
                                                        if (byRefParaData.size()>0){
                                                            balance = byRefParaData.getJSONObject(0).getString("dispBalance");
                                                        }
                                                    }
                                                }
                                                ylzMedicalRelationDO.setBalance(balance);//预缴金余额
                                            }
                                            if (1==ylzMedicalRelationDO.getMedicalState()&&0.0==Double.valueOf(ylzMedicalRelationDO.getTotalAmount())){
                                                //费用为0的医保结算也需要当作自费处理
                                                ylzMedicalRelationDO.setMedicalState(0);
                                            }
                                            BigDecimal b1 = new BigDecimal(ylzMedicalRelationDO.getPersonCash());//个人现金支付金额
                                            BigDecimal b2 = new BigDecimal(ylzMedicalRelationDO.getPersonAccount());//个人账户支付金额
                                            BigDecimal b3 = new BigDecimal(ylzMedicalRelationDO.getMedicalPrice());//医保基金总额
                                            Double totalPirce=b1.add(b2).add(b3).doubleValue();
                                            logger.info("总费用:"+totalPirce);
                                            if (totalPirce!=Double.parseDouble(ylzMedicalRelationDO.getTotalAmount())){
                                                throw new Exception("金额不对无法结算");
                                            }
                                            allTotalAmount = allTotalAmount.add(new BigDecimal(ylzMedicalRelationDO.getTotalAmount()));
                                            ylzMedicailRelationDao.save(ylzMedicalRelationDO);
                                            ylzMedicalRelationDO.setYlzMedicalIcdDOList(icdDOList);
                                            ylzMedicalRelationDO.setYlzMedicalMxDOList(mxDOList);
                                            result.add(ylzMedicalRelationDO);
                                        }
                                        ylzMedicalRelationDO.setBalance(balance);//预缴金余额
                                    }
                                    if (1==ylzMedicalRelationDO.getMedicalState()&&0.0==Double.valueOf(ylzMedicalRelationDO.getTotalAmount())){
                                        //费用为0的医保结算也需要当作自费处理
                                        ylzMedicalRelationDO.setMedicalState(0);
                                    }
                                    BigDecimal b1 = new BigDecimal(ylzMedicalRelationDO.getPersonCash());//个人现金支付金额
                                    BigDecimal b2 = new BigDecimal(ylzMedicalRelationDO.getPersonAccount());//个人账户支付金额
                                    BigDecimal b3 = new BigDecimal(ylzMedicalRelationDO.getMedicalPrice());//医保基金总额
                                    Double totalPirce=b1.add(b2).add(b3).doubleValue();
                                    logger.info("总费用:"+totalPirce);
                                    if (totalPirce!=Double.parseDouble(ylzMedicalRelationDO.getTotalAmount())){
                                    if (hisAllTotalAmount.compareTo(allTotalAmount)!=0){
                                        throw new Exception("金额不对无法结算");
                                    }
                                    ylzMedicailRelationDao.save(ylzMedicalRelationDO);
                                    ylzMedicalRelationDO.setYlzMedicalIcdDOList(icdDOList);
                                    ylzMedicalRelationDO.setYlzMedicalMxDOList(mxDOList);
                                    result.add(ylzMedicalRelationDO);
                                }
                            }
                        }