瀏覽代碼

Merge remote-tracking branch 'origin/master'

lenovodn 2 年之前
父節點
當前提交
bbcc3f5291

+ 27 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/afterwaring/XCFYDataTransferService.java

@@ -111,8 +111,7 @@ public class XCFYDataTransferService {
             try {
                 localNamedParameterJdbcTemplate.batchUpdate(insertSql, batchArgs.toArray(new MapSqlParameterSource[batchArgs.size()]));
             }catch (Exception e){
-                log.error("insert sql:{}");
-                log.error("dataArr:{}", dataList);
+                getNonColumnMap(insertSql, dataList);
                 throw e;
             }
         }
@@ -120,6 +119,32 @@ public class XCFYDataTransferService {
     }
 
 
+
+    public List<String> getColumnArr(String sql){
+        int startIndx = sql.indexOf("(");
+        int endIndx = sql.indexOf(")");
+        String sqlCloumnStr = sql.substring(startIndx+1, endIndx);
+        String[] columnStrArr = sqlCloumnStr.split(Constant.SPLIT_STR);
+        List<String> columnList = new ArrayList<>();
+        for(String columnName : columnStrArr){
+            columnList.add(columnName.toUpperCase().trim());
+        }
+        return columnList;
+    }
+
+    public void getNonColumnMap(String sql, List<Map<String,Object>> dataList){
+        List<String> columnList = getColumnArr(sql);
+        for(Map<String,Object> dataMap : dataList){
+            for(String columnName : columnList){
+                if(!dataMap.containsKey(columnName)){
+                    log.error("columnName:{} errordata:{}", columnName, dataMap);
+                    break;
+                }
+            }
+        }
+    }
+
+
     /**
      * 同步对应hisid检查列表
      *

+ 2 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/entity/OutpatientSettlementDetails.java

@@ -33,9 +33,9 @@ public class OutpatientSettlementDetails implements Serializable {
     private static final long serialVersionUID = 1L;
 
 	/**主键*/
-	@TableId(type = IdType.ASSIGN_ID)
+	@TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "主键")
-    private java.lang.String id;
+    private java.lang.Integer id;
 	/**结算单据号;单据唯一识别码,也称交易码(HISID) */
 	@Excel(name = "结算单据号;单据唯一识别码,也称交易码(HISID) ", width = 15)
     @ApiModelProperty(value = "结算单据号;单据唯一识别码,也称交易码(HISID) ")

+ 2 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_master_admission_billJob.java

@@ -114,8 +114,6 @@ public class XCFYDatav_master_admission_billJob implements Job {
                 dataMap.put("PAY_METHOD", 1);
                 String hisId = dataMap.get("HISID").toString();
                 Integer count = transferHospSettleDetail(hisId);
-                String billDateStr = DateUtils.date2Str((Date) dataMap.get("BILL_DATE"), DateUtils.date_sdf.get());
-                redisTemplate.opsForHash().put(Constant.JOB_CONTINUE_PARAM, "MASTER_ADMISSION_BILL", billDateStr);
                 if (null == count || count <= 0) {
                     log.error("hisid:{} 未查询到住院结算清单", hisId);
                     return false;
@@ -199,6 +197,8 @@ public class XCFYDatav_master_admission_billJob implements Job {
             }
         });
         if (count <= 0) {
+            String billDateStr = DateUtils.date2Str(endBillDate, DateUtils.date_sdf.get());
+            redisTemplate.opsForHash().put(Constant.JOB_CONTINUE_PARAM, "MASTER_ADMISSION_BILL", billDateStr);
             log.error("V_MASTER_ADMISSION_BILL 未查询到大于住院billdate:{} 小于等于住院billdate:{} 的数据,停止同步", billDate, endBillDate);
             return;
         }

+ 97 - 92
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_outpatient_settle_billJob.java

@@ -52,15 +52,15 @@ public class XCFYDatav_outpatient_settle_billJob implements Job {
     @Autowired
     IOutpatientSettlementDetailsService outpatientSettlementDetailsService;
 
-    String insertSql = "INSERT INTO outpatient_settle_bill (id, hisid, visit_no, recipe_no, pay_method, " +
-            "bmi_area_id, bmi_area_name, hospital_id, hospital_name, p_level_yy, benefit_type, " +
-            "admission_dept_id, admission_dept_name, doctor_id, doctor_name, refund_falge, " +
-            "fee_ocur_time, bill_date, refund_date, patient_id, patient_name, patient_gender, " +
-            "patient_birthday, patient_age, visit_time, benefit_group_id, claim_type, if_local_flag, " +
-            "admission_disease_id, admission_disease_name,yb_admission_disease_id, yb_admission_disease_name, medfee_sumamt, fulamt_ownpay_amt, " +
-            "overlmt_selfpay, preselfpay_amt, inscp_scp_amt, act_pay_dedc, hifp_pay, pool_prop_selfpay, " +
-            "cvlserv_pay, hifes_pay, hifmi_pay, hifob_pay, maf_pay, oth_pay, fund_pay_sumamt, " +
-            "create_time, create_by, patient_age_days) VALUES (:ID,:HISID,:VISIT_NO,:RECIPE_NO,:PAY_METHOD,:BMI_AREA_ID," +
+    String insertSql = "INSERT INTO OUTPATIENT_SETTLE_BILL (ID, HISID, VISIT_NO, RECIPE_NO, PAY_METHOD, " +
+            "BMI_AREA_ID, BMI_AREA_NAME, HOSPITAL_ID, HOSPITAL_NAME, P_LEVEL_YY, BENEFIT_TYPE, " +
+            "ADMISSION_DEPT_ID, ADMISSION_DEPT_NAME, DOCTOR_ID, DOCTOR_NAME, REFUND_FALGE, " +
+            "FEE_OCUR_TIME, BILL_DATE, REFUND_DATE, PATIENT_ID, PATIENT_NAME, PATIENT_GENDER, " +
+            "PATIENT_BIRTHDAY, PATIENT_AGE, VISIT_TIME, BENEFIT_GROUP_ID, CLAIM_TYPE, IF_LOCAL_FLAG, " +
+            "ADMISSION_DISEASE_ID, ADMISSION_DISEASE_NAME,YB_ADMISSION_DISEASE_ID, YB_ADMISSION_DISEASE_NAME, MEDFEE_SUMAMT, FULAMT_OWNPAY_AMT, " +
+            "OVERLMT_SELFPAY, PRESELFPAY_AMT, INSCP_SCP_AMT, ACT_PAY_DEDC, HIFP_PAY, POOL_PROP_SELFPAY, " +
+            "CVLSERV_PAY, HIFES_PAY, HIFMI_PAY, HIFOB_PAY, MAF_PAY, OTH_PAY, FUND_PAY_SUMAMT, " +
+            "CREATE_TIME, CREATE_BY, PATIENT_AGE_DAYS) VALUES (:ID,:HISID,:VISIT_NO,:RECIPE_NO,:PAY_METHOD,:BMI_AREA_ID," +
             ":BMI_AREA_NAME,:HOSPITAL_ID,:HOSPITAL_NAME,:P_LEVEL_YY,:BENEFIT_TYPE,:ADMISSION_DEPT_ID," +
             ":ADMISSION_DEPT_NAME,:DOCTOR_ID,:DOCTOR_NAME,:REFUND_FLAG,:FEE_OCUR_TIME,:BILL_DATE," +
             ":REFUND_DATE,:PATIENT_ID,:PATIENT_NAME,:PATIENT_GENDER,:PATIENT_BIRTHDAY,:PATIENT_AGE," +
@@ -70,110 +70,113 @@ public class XCFYDatav_outpatient_settle_billJob implements Job {
             ":HIFOB_PAY,:MAF_PAY,:OTH_PAY,:FUND_PAY_SUMAMT,:CREATE_TIME,:CREATE_BY,:PATIENT_AGE_DAYS)";
 
 
-    String insertDetailSql = "INSERT INTO outpatient_settlement_details (id, hisid, visit_no, patient_id, hospital_id, " +
+    String insertDetailSql = "INSERT INTO outpatient_settlement_details (hisid, visit_no, patient_id, hospital_id, " +
             "usage_date, item_id, item_name, item_id_hosp, item_name_hosp, drug_spec, dosage_form, package_unit," +
             " unit_price, num, cost, use_day, categories_items, bmi_convered_amount, bmi_pay_amount, " +
             "individual_payment_amount, amount_refusal, amount_reason, expense_category, change_class, " +
-            "refund_falge, refund_date, p_category, create_time, create_by, p_type_pct) " +
-            "VALUES (:ID,:HISID,:VISIT_NO,:PATIENT_ID,:HOSPITAL_ID,:USAGE_DATE,:ITEM_ID," +
+            "refund_falge, refund_date, p_category, create_time, create_by, p_type_pct,ADMISSION_DEPT_ID,ADMISSION_DEPT_NAME) " +
+            "VALUES (:HISID,:VISIT_NO,:PATIENT_ID,:HOSPITAL_ID,:USAGE_DATE,:ITEM_ID," +
             ":ITEM_NAME,:ITEM_ID_HOSP,:ITEM_NAME_HOSP,:DRUG_SPEC,:DOSAGE_FORM,:PACKAGE_UNIT," +
             ":UNIT_PRICE,:NUM,:COST,:USE_DAY,:CATEGORIES_ITEMS,:BMI_CONVERED_AMOUNT,:BMI_PAY_AMOUNT," +
             ":INDIVIDUAL_PAYMENT_AMOUNT,:AMOUNT_REFUSAL,:AMOUNT_REASON,:EXPENSE_CATEGORY,:CHANGE_CLASS," +
-            ":REFUND_FALGE,:REFUND_DATE,:P_CATEGORY,:CREATE_TIME,:CREATE_BY,:P_TYPE_PCT)";
+            ":REFUND_FALGE,:REFUND_DATE,:P_CATEGORY,:CREATE_TIME,:CREATE_BY,:P_TYPE_PCT,:ADMISSION_DEPT_ID,:ADMISSION_DEPT_NAME)";
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
-        String sql = "SELECT A.*, ROWNUM RN FROM (SELECT * FROM V_YBKF_OUTPATIENT_SETTLE_BILL where  hisid is not null and pay_method!='自费' and if_local_flag!='非医保' %s order by bill_date asc) A WHERE ROWNUM <=1000";
+        String sql = "SELECT * FROM V_YBKF_OUTPATIENT_SETTLE_BILL where  hisid is not null and pay_method!='自费' and if_local_flag!='非医保' and BILL_DATE<=:END_BILL_DATE %s order by bill_date asc";
         Date endBillDate = DateUtil.yesterday();
         endBillDate = DateUtil.endOfDay(endBillDate);
-        while (true) {
-            String whereSql = "";
-            Date billDate = getBillDate();
-            log.info("开始同步V_YBKF_OUTPATIENT_SETTLE_BILL数据,获取上个同步开始结算日期:{} 结束日期:{}", billDate, endBillDate);
-            Map<String, Object> paramMap = new HashMap<>();
-            if (null != billDate) {
-                whereSql = " and BILL_DATE>:BILL_DATE";
-                paramMap.put("BILL_DATE", billDate);
-            }
-            paramMap.put("END_BILL_DATE", endBillDate);
-            String querySql = String.format(sql, whereSql);
-            Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
-                @Override
-                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
-                    dataMap.put("PAY_METHOD", 1);
-                    String billDateStr = DateUtils.date2Str((Date) dataMap.get("BILL_DATE"), DateUtils.date_sdf.get());
-                    redisTemplate.opsForHash().put(Constant.JOB_CONTINUE_PARAM, "OUTPATIENT_SETTLE_BILL", billDateStr);
-                    String hisId = dataMap.get("HISID").toString();
-                    Integer count = getDetailByHisId(hisId);
-                    if (null == count || count <= 0) {
-                        log.error("hisid:{} 未查询到门诊结算清单", hisId);
-                        return false;
-                    }
-                    outpatientSettleBillService.lambdaUpdate().eq(OutpatientSettleBill::getHisid, hisId).remove();
-
-                    dataMap.put("CREATE_BY", "auto");
-                    dataMap.put("CREATE_TIME", new Date());
-                    Object diagCode = dataMap.get("ADMISSION_DISEASE_ID");
-                    if (null != diagCode && StringUtils.isNotBlank(diagCode.toString())) {
-                        String[] ybDiagCode = CommonUtil.getMedicalCodeAndName(diagCode.toString());
-                        if (null != ybDiagCode) {
-                            dataMap.put("YB_ADMISSION_DISEASE_ID", ybDiagCode[0]);
-                            dataMap.put("YB_ADMISSION_DISEASE_NAME", ybDiagCode[1]);
-                        } else {
-                            dataMap.put("YB_ADMISSION_DISEASE_ID", diagCode);
-                            dataMap.put("YB_ADMISSION_DISEASE_NAME", dataMap.get("ADMISSION_DISEASE_NAME"));
-                        }
+
+        String whereSql = "";
+        Date billDate = getBillDate();
+        log.info("开始同步V_YBKF_OUTPATIENT_SETTLE_BILL数据,获取上个同步开始结算日期:{} 结束日期:{}", billDate, endBillDate);
+        Map<String, Object> paramMap = new HashMap<>();
+        if (null != billDate) {
+            whereSql = " and BILL_DATE>:BILL_DATE";
+            paramMap.put("BILL_DATE", billDate);
+        }
+        paramMap.put("END_BILL_DATE", endBillDate);
+        String querySql = String.format(sql, whereSql);
+        Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
+            @Override
+            public Boolean transferData(Map<String, Object> dataMap) throws Exception {
+                dataMap.put("PAY_METHOD", 1);
+                Object diagCode = dataMap.get("ADMISSION_DISEASE_ID");
+                if (null != diagCode && StringUtils.isNotBlank(diagCode.toString())) {
+                    String[] ybDiagCode = CommonUtil.getMedicalCodeAndName(diagCode.toString());
+                    if (null != ybDiagCode) {
+                        dataMap.put("YB_ADMISSION_DISEASE_ID", ybDiagCode[0]);
+                        dataMap.put("YB_ADMISSION_DISEASE_NAME", ybDiagCode[1]);
                     } else {
-                        dataMap.put("YB_ADMISSION_DISEASE_ID", null);
-                        dataMap.put("YB_ADMISSION_DISEASE_NAME", null);
-                        dataMap.put("ADMISSION_DISEASE_ID", null);
-                        dataMap.put("ADMISSION_DISEASE_NAME", null);
+                        dataMap.put("YB_ADMISSION_DISEASE_ID", diagCode);
+                        dataMap.put("YB_ADMISSION_DISEASE_NAME", dataMap.get("ADMISSION_DISEASE_NAME"));
                     }
-                    Object patientAge = dataMap.get("PATIENT_AGE");
-                    if (patientAge == null) {
-                        patientAge = "0天";
-                    }
-                    Integer days = DateTimeUtil.getDayByAgeStr(patientAge.toString());
-                    Object visitTime = dataMap.get("VISIT_TIME");
-                    Object patientBirthday = dataMap.get("PATIENT_BIRTHDAY");
-                    Long ageDays = 0l;
-                    if (null != patientBirthday && days <= 0) {
-                        Date patientBirthDayDate = (Date) patientBirthday;
-
-                        if (null != visitTime) {
-                            Date visitTimeDate = (Date) visitTime;
-                            ageDays = DateUtil.betweenDay(patientBirthDayDate, visitTimeDate, false);
-                        } else {
-                            ageDays = DateUtil.betweenDay(patientBirthDayDate, new Date(), false);
-                        }
-                        dataMap.put("PATIENT_AGE_DAYS", ageDays.doubleValue());
+                } else {
+                    dataMap.put("YB_ADMISSION_DISEASE_ID", "");
+                    dataMap.put("YB_ADMISSION_DISEASE_NAME", "");
+                    dataMap.put("ADMISSION_DISEASE_ID", "");
+                    dataMap.put("ADMISSION_DISEASE_NAME", "");
+                }
+                String hisId = dataMap.get("HISID").toString();
+                String admission_dept_name = dataMap.get("ADMISSION_DEPT_NAME").toString();
+                String admission_dept_id = dataMap.get("ADMISSION_DEPT_ID").toString();
+                Integer count = getDetailByHisId(hisId, admission_dept_id, admission_dept_name);
+                if (null == count || count <= 0) {
+                    log.error("hisid:{} 未查询到门诊结算清单", hisId);
+                    return false;
+                }
+                outpatientSettleBillService.lambdaUpdate().eq(OutpatientSettleBill::getHisid, hisId).remove();
+
+                dataMap.put("CREATE_BY", "auto");
+                dataMap.put("CREATE_TIME", new Date());
+
+                Object patientAge = dataMap.get("PATIENT_AGE");
+                if (patientAge == null) {
+                    patientAge = "0天";
+                }
+                Integer days = DateTimeUtil.getDayByAgeStr(patientAge.toString());
+                Object visitTime = dataMap.get("VISIT_TIME");
+                Object patientBirthday = dataMap.get("PATIENT_BIRTHDAY");
+                Long ageDays = 0l;
+                if (null != patientBirthday && days <= 0) {
+                    Date patientBirthDayDate = (Date) patientBirthday;
+
+                    if (null != visitTime) {
+                        Date visitTimeDate = (Date) visitTime;
+                        ageDays = DateUtil.betweenDay(patientBirthDayDate, visitTimeDate, false);
                     } else {
-                        dataMap.put("PATIENT_AGE_DAYS", days.doubleValue());
+                        ageDays = DateUtil.betweenDay(patientBirthDayDate, new Date(), false);
                     }
-                    Object patientGender = dataMap.get("PATIENT_GENDER");
-                    dataMap.put("PATIENT_GENDER", CommonUtil.getMedicalSex(patientGender));
-                    dataMap.put("STATE", Constant.WATING);
-                    xcfyDataTransferService.transferCheckList(hisId);
-                    String visitNo = dataMap.get("VISIT_NO").toString();
-                    xcfyDataTransferService.transferOperation(visitNo);
-                    xcfyDataTransferService.transferPrescriptionOrder(visitNo);
-                    return true;
+                    dataMap.put("PATIENT_AGE_DAYS", ageDays.doubleValue());
+                } else {
+                    dataMap.put("PATIENT_AGE_DAYS", days.doubleValue());
                 }
-            }, new TransferDataCallFunction() {
-                @Override
-                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
-                    return true;
-                }
-            });
-            if (count <= 0) {
-                log.error("V_YBKF_OUTPATIENT_SETTLE_BILL 未查询到大于住院billdate:{} 小于等于住院billdate:{} 的数据,停止同步", billDate, endBillDate);
-                return;
+                Object patientGender = dataMap.get("PATIENT_GENDER");
+                dataMap.put("PATIENT_GENDER", CommonUtil.getMedicalSex(patientGender));
+                dataMap.put("STATE", Constant.WATING);
+                xcfyDataTransferService.transferCheckList(hisId);
+                String visitNo = dataMap.get("VISIT_NO").toString();
+                xcfyDataTransferService.transferOperation(visitNo);
+                xcfyDataTransferService.transferPrescriptionOrder(visitNo);
+                return true;
+            }
+        }, new TransferDataCallFunction() {
+            @Override
+            public Boolean transferData(Map<String, Object> dataMap) throws Exception {
+                return true;
             }
+        });
+        if (count <= 0) {
+            String billDateStr = DateUtils.date2Str(endBillDate, DateUtils.date_sdf.get());
+            redisTemplate.opsForHash().put(Constant.JOB_CONTINUE_PARAM, "OUTPATIENT_SETTLE_BILL", billDateStr);
+            log.error("V_YBKF_OUTPATIENT_SETTLE_BILL 未查询到大于住院billdate:{} 小于等于住院billdate:{} 的数据,停止同步", billDate, endBillDate);
+            return;
         }
 
+
     }
 
-    public Integer getDetailByHisId(String hisId) {
+    public Integer getDetailByHisId(String hisId,String admission_dept_id,String admission_dept_name) {
         String sql = "select * from V_YBKF_OUTPATIENT_SETTLE_DEL where hisid=:HISID and item_id is not null";
         Map<String, String> cateGoriesMap = CommonUtil.getCategoriesItemsMap();
         Map<String, Object> paramMap = new HashMap<>();
@@ -183,6 +186,8 @@ public class XCFYDatav_outpatient_settle_billJob implements Job {
             public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                 dataMap.put("CREATE_BY", "auto");
                 dataMap.put("CREATE_TIME", new Date());
+                dataMap.put("ADMISSION_DEPT_ID", admission_dept_id);
+                dataMap.put("ADMISSION_DEPT_NAME", admission_dept_name);
                 String itemIDHosp = dataMap.getOrDefault("ITEM_ID_HOSP", "").toString();
                 String itemId = dataMap.getOrDefault("ITEM_ID", "").toString();
                 if (StringUtils.isNotBlank(itemIDHosp) && StringUtils.isBlank(itemId)) {

+ 3 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/FactorEnchangeFactory.java

@@ -305,6 +305,7 @@ public class FactorEnchangeFactory {
         afterwardsAuditDetail.setHisid(afterwardsAudit.getHisid());
         afterwardsAuditDetail.setDoctorLevel(itemMap.get(SystemEventAttrConstant.HIS_DOCTOR_LEVEL).toString());
         Object medicalPrice = itemMap.get(SystemEventAttrConstant.MEDICAL_INS_PRICE);
+        log.info("事后工单id:{} 医保规则库单价:{} ", afterwardsAudit.getId(), medicalPrice);
         if(null != medicalPrice){
             Double doubleMedicalPrice = (Double) medicalPrice;
             if(doubleMedicalPrice>0) {
@@ -315,8 +316,10 @@ public class FactorEnchangeFactory {
                 } else if (doubleSubAmount < 0) {
                     afterwardsAuditDetail.setErrorRelativelyFewAmt(new BigDecimal(doubleSubAmount));
                 }
+                log.info("医保规则库单价:{} his金额:{} 结果金额:{}", medicalPrice, hisAmount, doubleSubAmount);
             }
         }
+
         return afterwardsAuditDetail;
     }
 

File diff suppressed because it is too large
+ 1 - 1
jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/TestMain.java


Some files were not shown because too many files changed in this diff