浏览代码

视图数据更新

0027005599 2 年之前
父节点
当前提交
a1ab1bec75
共有 19 个文件被更改,包括 325 次插入140 次删除
  1. 24 7
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/afterwaring/XCFYDataTransferService.java
  2. 17 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/CommonUtil.java
  3. 62 28
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDataV_MEDICAL_RECORD_HOMEPAGEJob.java
  4. 6 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDataV_OPERATIONJob.java
  5. 3 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDataV_OPERATIVE_ITEMSJob.java
  6. 3 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDataV_PRESCRIPTION_ORDERJob.java
  7. 74 14
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDataV_STAFF_INFOJob.java
  8. 2 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDataV_TREATMENT_ITEMSJob.java
  9. 3 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_check_listJob.java
  10. 3 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_diagnose_itemsJob.java
  11. 15 11
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_his_patientJob.java
  12. 3 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_hospitalizatio_settle_detailJob.java
  13. 33 11
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_master_admission_billJob.java
  14. 4 7
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_material_itemsJob.java
  15. 24 21
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_medical_insurance_drugsJob.java
  16. 42 28
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_outpatient_settle_billJob.java
  17. 3 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_outpatient_settle_detailsJob.java
  18. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/TransferDataCallFunction.java
  19. 3 3
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java

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

@@ -2,6 +2,7 @@ package org.jeecg.modules.medical.afterwaring;
 
 import cn.hutool.core.collection.CollectionUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.jeecg.common.util.dynamic.db.DynamicDBUtil;
 import org.jeecg.modules.medical.Constant;
 import org.jeecg.modules.medical.common.CommonUtil;
@@ -64,15 +65,20 @@ public class XCFYDataTransferService {
 
         List<MapSqlParameterSource> batchArgs = new ArrayList<>();
         for (Map<String, Object> dataMap : dataList) {
+            boolean continueFlag = true;
             try {
-                transferDataCallFunction.transferData(dataMap);
+                continueFlag = transferDataCallFunction.transferData(dataMap);
             } catch (Exception e) {
                 log.error(e.getMessage(), e);
             }
-            MapSqlParameterSource parameters = new MapSqlParameterSource(dataMap);
-            batchArgs.add(parameters);
+            if(StringUtils.isNotBlank(insertSql) && continueFlag) {
+                MapSqlParameterSource parameters = new MapSqlParameterSource(dataMap);
+                batchArgs.add(parameters);
+            }
+        }
+        if(StringUtils.isNotBlank(insertSql)) {
+            localNamedParameterJdbcTemplate.batchUpdate(insertSql, batchArgs.toArray(new MapSqlParameterSource[batchArgs.size()]));
         }
-        localNamedParameterJdbcTemplate.batchUpdate(insertSql, batchArgs.toArray(new MapSqlParameterSource[batchArgs.size()]));
         return dataList.size();
     }
 
@@ -90,11 +96,12 @@ public class XCFYDataTransferService {
         paramMap.put("HISID", hsdId);
         Integer count = transferDataList(querySql, checkListInsertSql, paramMap, new TransferDataCallFunction() {
             @Override
-            public void transferData(Map<String, Object> dataMap) throws Exception {
+            public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                 dataMap.put("CREATE_BY", "auto");
                 dataMap.put("CREATE_TIME", new Date());
                 Object patientGender = dataMap.get("GENDER");
                 dataMap.put("GENDER", CommonUtil.getMedicalSex(patientGender));
+                return true;
             }
         });
         log.info("结束同步v_check_list数据,获取HISID:{} 条数:{}", hsdId, count);
@@ -115,9 +122,10 @@ public class XCFYDataTransferService {
 
         Integer count = transferDataList(querySql, prescriptionOrderInsertSql, paramMap, new TransferDataCallFunction() {
             @Override
-            public void transferData(Map<String, Object> dataMap) throws Exception {
+            public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                 dataMap.put("CREATE_BY", "auto");
                 dataMap.put("CREATE_TIME", new Date());
+                return true;
             }
         });
         log.info("结束同步V_PRESCRIPTION_ORDER数据,获取住院号:{} 条数:{}", vistNo, count);
@@ -133,9 +141,18 @@ public class XCFYDataTransferService {
         paramMap.put("VISIT_NO", visitNo);
         Integer count = transferDataList(querySql, operationInsertSql, paramMap, new TransferDataCallFunction() {
             @Override
-            public void transferData(Map<String, Object> dataMap) throws Exception {
+            public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                 dataMap.put("CREATE_BY", "auto");
                 dataMap.put("CREATE_TIME", new Date());
+                String treatmentTypeSrc = dataMap.get("TRETMENT_TYPE").toString();
+                if("住院".equals(treatmentTypeSrc)){
+                    dataMap.put("TRETMENT_TYPE","1");
+                }else if("门诊".equals(treatmentTypeSrc)){
+                    dataMap.put("TRETMENT_TYPE","2");
+                }
+                Object patientGender = dataMap.get("PATIENT_GENDER");
+                dataMap.put("PATIENT_GENDER", CommonUtil.getMedicalSex(patientGender));
+                return true;
             }
         });
         log.info("结束同步V_OPERATION数据,获取住院号/门诊号:{} 条数:{}", visitNo, count);

+ 17 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/CommonUtil.java

@@ -10,6 +10,7 @@ import org.springframework.data.redis.core.RedisTemplate;
 import java.time.LocalDate;
 import java.time.Period;
 import java.util.Date;
+import java.util.Map;
 
 @Slf4j
 public class CommonUtil {
@@ -109,6 +110,22 @@ public class CommonUtil {
         return "9";
     }
 
+
+    public static void setDockerLevel(Map<String,Object> dataMap){
+        Object doctorLevelName = dataMap.get("DOCTOR_LEVEL");
+        if(null != doctorLevelName){
+            String doctorLevel = "1";
+            if("医师".equals(doctorLevelName)){
+                doctorLevel = "1";
+            }else if("主治医师".equals(doctorLevelName)){
+                doctorLevel = "2";
+            }else if("副主任医师".equals(doctorLevelName)){
+                doctorLevel = "3";
+            }
+            dataMap.put("DOCTOR_LEVEL", doctorLevel);
+        }
+    }
+
     public static void main(String[] args) {
 //        String day = "2023-11-09 19:10:11";
         Long day = 1607475808000l;

+ 62 - 28
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDataV_MEDICAL_RECORD_HOMEPAGEJob.java

@@ -1,11 +1,17 @@
 package org.jeecg.modules.medical.job;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.common.system.vo.DictModel;
 import org.jeecg.modules.medical.afterwaring.XCFYDataTransferService;
+import org.jeecg.modules.medical.common.CommonUtil;
 import org.jeecg.modules.medical.entity.HospitalizatioSettleDetail;
 import org.jeecg.modules.medical.ruleengine.TransferDataCallFunction;
 import org.jeecg.modules.medical.service.IHospitalizatioSettleDetailService;
+import org.jeecg.modules.system.service.ISysDictService;
+import org.jeecg.modules.utils.DateTimeUtil;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
@@ -29,44 +35,72 @@ public class XCFYDataV_MEDICAL_RECORD_HOMEPAGEJob implements Job {
     XCFYDataTransferService xcfyDataTransferService;
     @Autowired
     JdbcTemplate jdbcTemplate;
+    @Autowired
+    ISysDictService sysDictService;
 
-    String insertSql = "INSERT INTO medical_record_homepage (id, bridge_id, zyh, hospital_id, patient_name, patient_id, social_card_id, patient_address, patient_company, icd10_code_basy, icd10_name_basy, icd10_name_describe, special_remarks, disease_id1, disease_name1, icd9_code_basy, icd9_name_basy, icd9_code1, icd9_name1, nb_weight, nb_admission_weight, bm_hours, icu_flag, icu_hours, main_con_desc, treatment_process, pathological_findings, discharge_condition, discharge_order, death_date, death_diagnosis, death_cause, admission_plan, disease_his, past_his, personal_his, auxiliary_inspection, assist_lab_test_results, auxiliary_imaging_ex_results, discharge_status, create_time, create_by) " +
-            "VALUES (:ID,:BRIDGE_ID,:ZYH,:HOSPITAL_ID,:PATIENT_NAME,:PATIENT_ID,:SOCIAL_CARD_ID,:PATIENT_ADDRESS,:PATIENT_COMPANY,:ICD10_CODE_BASY,:ICD10_NAME_BASY,:ICD10_NAME_DESCRIBE,:SPECIAL_REMARKS,:DISEASE_ID1,:DISEASE_NAME1,:ICD9_CODE_BASY,:ICD9_NAME_BASY,:ICD9_CODE1,:ICD9_NAME1,:NB_WEIGHT,:NB_ADMISSION_WEIGHT,:BM_HOURS,:ICU_FLAG,:ICU_HOURS,:MAIN_CON_DESC,:TREATMENT_PROCESS,:PATHOLOGICAL_FINDINGS,:DISCHARGE_CONDITION,:DISCHARGE_ORDER,:DEATH_DATE,:DEATH_DIAGNOSIS,:DEATH_CAUSE,:ADMISSION_PLAN,:DISEASE_HIS,:PAST_HIS,:PERSONAL_HIS,:AUXILIARY_INSPECTION,:ASSIST_LAB_TEST_RESULTS,:AUXILIARY_IMAGING_EX_RESULTS,:DISCHARGE_STATUS,:CREATE_TIME,:CREATE_BY)";
+    String recordHomePageInsertSql = "INSERT INTO medical_record_homepage (bridge_id, zyh, hospital_id, patient_name, patient_id, social_card_id, patient_address, patient_company, icd10_code_basy, icd10_name_basy, icd10_name_describe, special_remarks, disease_id1, disease_name1, icd9_code_basy, icd9_name_basy, icd9_code1, icd9_name1, nb_weight, nb_admission_weight, bm_hours, icu_flag, icu_hours, main_con_desc, treatment_process, pathological_findings, discharge_condition, discharge_order, death_date, death_diagnosis, death_cause, admission_plan, disease_his, past_his, personal_his, auxiliary_inspection, assist_lab_test_results, auxiliary_imaging_ex_results, discharge_status, create_time, create_by) " +
+            "VALUES (:BRIDGE_ID,:ZYH,:HOSPITAL_ID,:PATIENT_NAME,:PATIENT_ID,:SOCIAL_CARD_ID,:PATIENT_ADDRESS,:PATIENT_COMPANY,:ICD10_CODE_BASY,:ICD10_NAME_BASY,:ICD10_NAME_DESCRIBE,:SPECIAL_REMARKS,:DISEASE_ID1,:DISEASE_NAME1,:ICD9_CODE_BASY,:ICD9_NAME_BASY,:ICD9_CODE1,:ICD9_NAME1,:NB_WEIGHT,:NB_ADMISSION_WEIGHT,:BM_HOURS,:ICU_FLAG,:ICU_HOURS,:MAIN_CON_DESC,:TREATMENT_PROCESS,:PATHOLOGICAL_FINDINGS,:DISCHARGE_CONDITION,:DISCHARGE_ORDER,:DEATH_DATE,:DEATH_DIAGNOSIS,:DEATH_CAUSE,:ADMISSION_PLAN,:DISEASE_HIS,:PAST_HIS,:PERSONAL_HIS,:AUXILIARY_INSPECTION,:ASSIST_LAB_TEST_RESULTS,:AUXILIARY_IMAGING_EX_RESULTS,:DISCHARGE_STATUS,:CREATE_TIME,:CREATE_BY)";
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
-        String sql = "select * from V_MEDICAL_RECORD_HOMEPAGE where rownum<1000 %s";
-        while(true) {
-            log.info("开始同步V_MEDICAL_RECORD_HOMEPAGE数据");
-            String whereSql = "";
-            Long hsdId = getLastId();
-            log.info("开始同步V_MEDICAL_RECORD_HOMEPAGE数据,获取上个同步记录访问最大主键ID:{}", hsdId);
-            Map<String,Object> paramMap = new HashMap<>();
-            if(null != hsdId && hsdId>0){
-                whereSql = "and ID>:ID";
-                paramMap.put("ID", hsdId);
-            }
+        List<DictModel> dictModelList = sysDictService.getDictItems("discharge_method");
+        Map<String,String> dischargeMethodMap = new HashMap<>();
+        for(DictModel dictModel : dictModelList){
+            dischargeMethodMap.put(dictModel.getText(), dictModel.getValue());
+        }
 
+        transferHomePage(dischargeMethodMap);
+    }
 
-            String querySql = String.format(sql, whereSql);
-            Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
-                @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
-                    dataMap.put("CREATE_BY", "auto");
-                    dataMap.put("CREATE_TIME", new Date());
-                }
-            });
-            if(count<=0){
-                log.info("V_MEDICAL_RECORD_HOMEPAGE 大于ID:{} 没有的数据,停止同步", hsdId);
-                return;
+    public void transferHomePage(Map<String,String> dischargeMethodMap){
+        String querySql = "select * from V_MASTER_ADMISSION_BILL where hisid is not null and to_char(bill_date,'yyyy-MM-dd')=to_char(sysdate-10,'yyyy-MM-dd') ";
+        Date endBillDate = DateUtil.offsetDay(new Date(), -10);
+        log.info("开始10天前master_admission_bill数据,获取同步日期:{}", endBillDate);
+        Map<String, Object> paramMap = new HashMap<>();
+        Integer count = xcfyDataTransferService.transferDataList(querySql, null, paramMap, new TransferDataCallFunction() {
+            @Override
+            public Boolean transferData(Map<String, Object> dataMap) throws Exception {
+
+                String zyh = dataMap.get("ZYH").toString();
+                transferMedicalRecordHomePage(zyh, dischargeMethodMap);
+                return true;
             }
+        });
+        if (count <= 0) {
+            log.error("V_MASTER_ADMISSION_BILL 未查询到等于住院billdate:{}  的数据,停止同步", endBillDate);
+            return;
         }
-
     }
 
-    public Long getLastId(){
-        Long id = jdbcTemplate.queryForObject("select max(id) as id from medical_record_homepage", Long.class);
-        return id;
+    public Integer transferMedicalRecordHomePage(String zyh,Map<String,String> dischargeMethodMap) {
+        String querySql = "select * from V_MEDICAL_RECORD_HOMEPAGE where ZYH=:ZYH";
+
+        log.info("开始同步V_MEDICAL_RECORD_HOMEPAGE数据,获取zyh:{}", zyh);
+        Map<String, Object> paramMap = new HashMap<>();
+
+        paramMap.put("ZYH", zyh);
+        Integer count = xcfyDataTransferService.transferDataList(querySql, recordHomePageInsertSql, paramMap, new TransferDataCallFunction() {
+            @Override
+            public Boolean transferData(Map<String, Object> dataMap) throws Exception {
+                dataMap.put("CREATE_BY", "auto");
+                dataMap.put("CREATE_TIME", new Date());
+                //视图枚举:'1','医嘱离院','2','医嘱转院','3','医嘱转社区卫生服务机构/乡镇卫生院','4','非医嘱离院','5','死亡','其他'
+
+                // 医保控费枚举:1医嘱离院
+                //2医嘱转院
+                //3医嘱转社区卫生服务机构/乡镇卫生院
+                //4非医嘱离院
+                //5死亡
+                //9其他
+                String dischargeStatus = dataMap.getOrDefault("DISCHARGE_STATUS","其他").toString();
+                if(dischargeMethodMap.containsKey(dischargeStatus)){
+                    dataMap.put("DISCHARGE_STATUS", dischargeMethodMap.get(dischargeStatus));
+                }
+                return true;
+            }
+        });
+        log.info("结束同步V_MEDICAL_RECORD_HOMEPAGE数据,获取zyh:{} 条数:{}", zyh, count);
+        return count;
     }
 
 }

+ 6 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDataV_OPERATIONJob.java

@@ -3,6 +3,7 @@ package org.jeecg.modules.medical.job;
 import cn.hutool.core.collection.CollectionUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.modules.medical.afterwaring.XCFYDataTransferService;
+import org.jeecg.modules.medical.common.CommonUtil;
 import org.jeecg.modules.medical.entity.HospitalizatioSettleDetail;
 import org.jeecg.modules.medical.ruleengine.TransferDataCallFunction;
 import org.jeecg.modules.medical.service.IHospitalizatioSettleDetailService;
@@ -20,6 +21,7 @@ import java.util.Map;
 /**
  * 住院手术信息,增量同步
  * 每小时同步一次
+ * 在对应的结算主单中同步停掉
  */
 @Slf4j
 public class XCFYDataV_OPERATIONJob implements Job {
@@ -58,12 +60,15 @@ public class XCFYDataV_OPERATIONJob implements Job {
 
             Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
                 @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                     dataMap.put("CREATE_BY", "auto");
                     if(!dataMap.containsKey("HISID")){
                         dataMap.put("HISID", null);
                     }
                     dataMap.put("CREATE_TIME", new Date());
+                    Object patientGender = dataMap.get("PATIENT_GENDER");
+                    dataMap.put("PATIENT_GENDER", CommonUtil.getMedicalSex(patientGender));
+                    return true;
                 }
             });
             if(count<=0){

+ 3 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDataV_OPERATIVE_ITEMSJob.java

@@ -43,9 +43,11 @@ public class XCFYDataV_OPERATIVE_ITEMSJob implements Job {
             String queyrSql = String.format(sql, endRows, startRows);
             Integer count = xcfyDataTransferService.transferDataList(queyrSql, insertSql, paramMap, new TransferDataCallFunction() {
                 @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                     dataMap.put("CREATE_BY", "auto");
                     dataMap.put("CREATE_TIME", new Date());
+                    return true;
+
                 }
             });
             if (count <= 0) {

+ 3 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDataV_PRESCRIPTION_ORDERJob.java

@@ -16,6 +16,7 @@ import java.util.Map;
 /**
  * 处方医嘱
  * 一个小时执行一次
+ * 终止执行,在主单中关联执行
  */
 @Slf4j
 public class XCFYDataV_PRESCRIPTION_ORDERJob implements Job {
@@ -55,9 +56,10 @@ public class XCFYDataV_PRESCRIPTION_ORDERJob implements Job {
             String querySql = String.format(sql, whereSql);
             Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
                 @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                     dataMap.put("CREATE_BY", "auto");
                     dataMap.put("CREATE_TIME", new Date());
+                    return true;
                 }
             });
             if (count <= 0) {

+ 74 - 14
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDataV_STAFF_INFOJob.java

@@ -1,16 +1,28 @@
 package org.jeecg.modules.medical.job;
 
+import cn.hutool.core.collection.CollectionUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.util.PasswordUtil;
+import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.medical.afterwaring.XCFYDataTransferService;
+import org.jeecg.modules.medical.common.CommonUtil;
 import org.jeecg.modules.medical.ruleengine.TransferDataCallFunction;
+import org.jeecg.modules.system.entity.SysDepart;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysDepartService;
+import org.jeecg.modules.system.service.ISysUserService;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.jdbc.core.JdbcTemplate;
 
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -24,6 +36,13 @@ public class XCFYDataV_STAFF_INFOJob implements Job {
     XCFYDataTransferService xcfyDataTransferService;
     @Autowired
     JdbcTemplate jdbcTemplate;
+    @Autowired
+    ISysUserService sysUserService;
+    @Autowired
+    ISysDepartService sysDepartService;
+    @Autowired
+    RedisTemplate redisTemplate;
+
 
     String insertSql = "INSERT INTO staff_info (DEPT_CODE, DEPT_NAME,DOCTOR_ID, DOCTOR_NAME, SEX, BIRTH_DATE, " +
             "DUTY_NAME, DOCTOR_LEVEL) VALUES (:DEPT_CODE,:DEPT_NAME,:DOCTOR_ID,:DOCTOR_NAME,:SEX,:BIRTH_DATE," +
@@ -34,36 +53,77 @@ public class XCFYDataV_STAFF_INFOJob implements Job {
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
-        String sql = "select * from V_STAFF_INFO where rownum<1000 %s";
+//        ORG_ID,STAFF_CODE,WORK_CODE,STAFE_NAME,STAFE_SEY,STAFE_BIRTHDA,IDENTITY_CARD_NO,MOBI_PHON,ADMIN_DEE,BOWIN_DEDT_WAR,LOGIN_USER,TECH_TITLE
+        String querySql = "select ORG_ID,STAFF_CODE as DOCTOR_ID,WORK_CODE,STAFE_NAME as DOCTOR_NAME,STAFE_SEY as SEX,STAFE_BIRTHDAY as BIRTH_DATE,IDENTITY_CARD_NO," +
+                "MOBI_PHONE,ADMIN_DEPT as DEPT_CODE,ADMIN_DEDT_NAME as DEPT_NAME,LOGIN_USER,TECH_TITLE as DOCTOR_LEVEL from V_STAFF_INFO ";
         while (true) {
             log.info("开始同步V_STAFF_INFO数据");
-            String whereSql = "";
-            Long hsdId = getLastId();
-            log.info("开始同步V_STAFF_INFO数据,获取上个同步记录访问最大doctor_ID:{}", hsdId);
             Map<String, Object> paramMap = new HashMap<>();
-            if (null != hsdId && hsdId > 0) {
-                whereSql = "and DOCTOR_ID>:DOCTOR_ID";
-                paramMap.put("DOCTOR_ID", hsdId);
-            }
-            String querySql = String.format(sql, whereSql);
             Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
                 @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                     dataMap.put("CREATE_BY", "auto");
                     dataMap.put("CREATE_TIME", new Date());
+                    CommonUtil.setDockerLevel(dataMap);
+                    addUser(dataMap);
+                    return true;
                 }
             });
             if (count <= 0) {
-                log.info("V_STAFF_INFO 大于医生ID:{} 没有的数据,停止同步", hsdId);
+                log.info("V_STAFF_INFO 没有的数据,停止同步");
                 return;
             }
         }
 
     }
 
-    public Long getLastId() {
-        Long id = jdbcTemplate.queryForObject("select max(doctor_id) as id from STAFF_INFO", Long.class);
-        return id;
+
+    public void addUser(Map<String, Object> dataMap) {
+        SysUser user = new SysUser();
+        user.setPassword("123456");
+        user.setUsername(dataMap.get("DOCTOR_ID").toString());
+        user.setRealname(dataMap.get("DOCTOR_NAME").toString());
+        user.setDoctorLevel(dataMap.getOrDefault("DOCTOR_LEVEL", "").toString());
+        user.setCreateTime(new Date());//设置创建时间
+        String salt = oConvertUtils.randomGen(8);
+        user.setSalt(salt);
+        String passwordEncode = PasswordUtil.encrypt(user.getUsername(), user.getPassword(), salt);
+        user.setPassword(passwordEncode);
+        user.setStatus(1);
+        user.setDelFlag(CommonConstant.DEL_FLAG_0);
+        //用户表字段org_code不能在这里设置他的值
+        user.setOrgCode(null);
+        SysDepart sysDepart = addDepart(dataMap.getOrDefault("DEPT_CODE", "").toString(), dataMap.getOrDefault("DEPT_NAME", "").toString());
+        // 保存用户走一个service 保证事务
+//        String selectedDeparts = dataMap.getOrDefault("DEPT_CODE", "").toString();
+
+        sysUserService.saveUser(user, "", sysDepart.getId(), "");
+
+    }
+
+    public SysDepart addDepart(String departName, String departCode) {
+        if (StringUtils.isNotBlank(departCode)) {
+            List<SysDepart> oldSysDepart = sysDepartService.lambdaQuery().eq(SysDepart::getMedicalDeptCode, departCode).list();
+            SysDepart sysDepart = new SysDepart();
+            if (CollectionUtil.isNotEmpty(oldSysDepart)) {
+                return oldSysDepart.get(0);
+            }
+
+//            sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0 + "");
+//            Long orgCode = redisTemplate.opsForValue().increment("SYS_DEPART_ORG_CODE");
+//            sysDepart.setOrgCode("B"+orgCode.toString());
+            sysDepart.setMedicalDeptCode(departCode);
+            sysDepart.setDepartName(departName);
+            sysDepart.setDepartOrder(0);
+            sysDepart.setOrgType("1");
+            sysDepart.setOrgCategory("1");
+            sysDepart.setCreateTime(new Date());
+            sysDepart.setIzLeaf(1);
+            sysDepart.setTenantId(0);
+            sysDepartService.saveDepartData(sysDepart, "admin");
+            return sysDepart;
+        }
+        return null;
     }
 
 }

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

@@ -46,9 +46,10 @@ public class XCFYDataV_TREATMENT_ITEMSJob implements Job {
             String querySql = String.format(sql, startRows, endRows);
             Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
                 @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                     dataMap.put("CREATE_BY", "auto");
                     dataMap.put("CREATE_TIME", new Date());
+                    return true;
                 }
             });
             if (count <= 0) {

+ 3 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_check_listJob.java

@@ -19,6 +19,7 @@ import java.util.Map;
 /**
  * 检查检验表
  * 每个小时执行一次
+ * 停掉,在对应的结算主单中同步
  */
 @Slf4j
 public class XCFYDatav_check_listJob implements Job {
@@ -46,9 +47,10 @@ public class XCFYDatav_check_listJob implements Job {
             String querySql = String.format(sql, whereSql);
             Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
                 @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                     dataMap.put("CREATE_BY", "auto");
                     dataMap.put("CREATE_TIME", new Date());
+                    return true;
                 }
             });
             if (count <= 0) {

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

@@ -31,7 +31,7 @@ public class XCFYDatav_diagnose_itemsJob implements Job {
             ":DIAGNOSE_NAME,:MEDICAL_DIAGNOSE_CODE,:MEDICAL_DIAGNOSE_NAME,:STATE,:CREATE_BY,:CREATE_TIME) on duplicate key update " +
             "MEDICAL_DIAGNOSE_CODE = :MEDICAL_DIAGNOSE_CODE," +
             "MEDICAL_DIAGNOSE_NAME = :MEDICAL_DIAGNOSE_NAME," +
-            "DIAGNOSE_NAME = :DIAGNOSE_NAME,CREATE_TIME=:CREATE_TIME";
+            "DIAGNOSE_NAME = :DIAGNOSE_NAME,CREATE_TIME=:CREATE_TIME,CREATE_BY=:CREATE_BY";
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
@@ -44,10 +44,11 @@ public class XCFYDatav_diagnose_itemsJob implements Job {
             String querySql = String.format(sql, endRows, startRows);
             Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
                 @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                     dataMap.put("CREATE_BY", "auto");
                     dataMap.put("CREATE_TIME", new Date());
                     dataMap.put("STATE", Constant.EFF_STATE);
+                    return true;
                 }
             });
             if (count <= 0) {

+ 15 - 11
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_his_patientJob.java

@@ -1,7 +1,9 @@
 package org.jeecg.modules.medical.job;
 
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.jeecg.modules.medical.afterwaring.XCFYDataTransferService;
+import org.jeecg.modules.medical.common.CommonUtil;
 import org.jeecg.modules.medical.ruleengine.TransferDataCallFunction;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
@@ -25,31 +27,33 @@ public class XCFYDatav_his_patientJob implements Job {
     @Autowired
     JdbcTemplate jdbcTemplate;
 
-    String insertSql = "INSERT INTO his_patient (id, patient_no, gender, patient_name, id_type, id_no, birth_weight, " +
-            "birthday, create_by, create_time) VALUES (:ID,:PATIENT_NO,:GENDER,:PATIENT_NAME,:ID_TYPE,:ID_NO," +
+    String insertSql = "INSERT INTO his_patient (patient_no, gender, patient_name, id_type, id_no, birth_weight, " +
+            "birthday, create_by, create_time) VALUES (:PATIENT_NO,:GENDER,:PATIENT_NAME,:ID_TYPE,:ID_NO," +
             ":BIRTH_WEIGHT,:BIRTHDAY,:CREATE_BY,:CREATE_TIME)";
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         String sql = "select * from v_his_patient where rownum<1000 %s";
         while (true) {
-            log.info("开始同步v_his_patient数据");
             String whereSql = "";
-            Long id = getLastId();
-            log.info("开始同步v_his_patient数据,获取上个同步记录访问最大主键ID:{}", id);
+            String id = getLastId();
+            log.info("开始同步v_his_patient数据,获取上个同步记录访问最大的病人编码:{}", id);
             Map<String, Object> paramMap = new HashMap<>();
-            if (null != id && id > 0) {
-                whereSql = "and ID>:ID";
-                paramMap.put("ID", id);
+            if (StringUtils.isNotBlank(id)) {
+                whereSql = "AND PATIENT_NO>:PATIENT_NO";
+                paramMap.put("PATIENT_NO", id);
             }
 
             String querySql = String.format(sql, whereSql);
 
             Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
                 @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                     dataMap.put("CREATE_BY", "auto");
                     dataMap.put("CREATE_TIME", new Date());
+                    Object patientGender = dataMap.get("GENDER");
+                    dataMap.put("GENDER", CommonUtil.getMedicalSex(patientGender));
+                    return true;
                 }
             });
             if (count <= 0) {
@@ -60,9 +64,9 @@ public class XCFYDatav_his_patientJob implements Job {
 
     }
 
-    public Long getLastId() {
+    public String getLastId() {
 
-        Long id = jdbcTemplate.queryForObject("select max(id) as id from his_patient", Long.class);
+        String id = jdbcTemplate.queryForObject("select max(patient_no) as id from his_patient", String.class);
         return id;
     }
 

+ 3 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_hospitalizatio_settle_detailJob.java

@@ -24,6 +24,7 @@ import java.util.Map;
 /**
  * 住院结算明细
  * 每个小时执行一次
+ * 停掉,在对应的结算主单中同步
  */
 @Slf4j
 public class XCFYDatav_hospitalizatio_settle_detailJob implements Job {
@@ -66,7 +67,7 @@ public class XCFYDatav_hospitalizatio_settle_detailJob implements Job {
             String querySql = String.format(sql, whereSql);
             Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
                 @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                     dataMap.put("CREATE_BY", "auto");
                     dataMap.put("CREATE_TIME", new Date());
                     String itemIDHosp = dataMap.getOrDefault("ITEM_ID_HOSP", "").toString();
@@ -87,6 +88,7 @@ public class XCFYDatav_hospitalizatio_settle_detailJob implements Job {
                     if(StringUtils.isNotBlank(pCategory)){
                         dataMap.put("CATEGORIES_ITEMS", cateGoriesMap.getOrDefault(categoriesItems, categoriesItems));
                     }
+                    return  true;
                 }
             });
             if (count <= 0) {

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

@@ -74,9 +74,14 @@ public class XCFYDatav_master_admission_billJob implements Job {
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
-        String sql = "select * from V_MASTER_ADMISSION_BILL where hisid is not null and bill_date<=:END_BILL_DATE %s and rownum<=1000 ";
+        String sql = "select * from V_MASTER_ADMISSION_BILL where hisid is not null and pay_method!='自费' and bill_date<=:END_BILL_DATE %s and rownum<=1000 order by bill_date asc";
         Date endBillDate = DateUtil.yesterday();
         endBillDate = DateUtil.endOfDay(endBillDate);
+        List<DictModel> dictModelList = sysDictService.getDictItems("discharge_method");
+        Map<String,String> dischargeMethodMap = new HashMap<>();
+        for(DictModel dictModel : dictModelList){
+            dischargeMethodMap.put(dictModel.getText(), dictModel.getValue());
+        }
         while (true) {
             String whereSql = "";
             Date billDate = getBillDate();
@@ -90,7 +95,13 @@ public class XCFYDatav_master_admission_billJob implements Job {
             String querySql = String.format(sql, whereSql);
             Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
                 @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
+                    String hisId = dataMap.get("HISID").toString();
+                    Integer count = transferHospSettleDetail(hisId);
+                    if (null == count || count <= 0) {
+                        log.error("hisid:{} 未查询到住院结算清单", hisId);
+                        return false;
+                    }
                     String diagCode = dataMap.getOrDefault("ADMISSION_DISEASE_ID", "").toString();
                     if (StringUtils.isNotBlank(diagCode)) {
                         String[] ybDiagCode = CommonUtil.getMedicalCodeAndName(diagCode);
@@ -134,16 +145,13 @@ public class XCFYDatav_master_admission_billJob implements Job {
                     dataMap.put("CREATE_TIME", new Date());
                     Object patientGender = dataMap.get("PATIENT_GENDER");
                     dataMap.put("PATIENT_GENDER", CommonUtil.getMedicalSex(patientGender));
-                    String hisId = dataMap.get("HISID").toString();
-                    Integer count = transferHospSettleDetail(hisId);
-                    if (null == count || count <= 0) {
-                        return;
-                    }
+
                     xcfyDataTransferService.transferCheckList(hisId);
                     String zyh = dataMap.get("ZYH").toString();
                     xcfyDataTransferService.transferPrescriptionOrder(zyh);
-                    transferMedicalRecordHomePage(zyh);
+//                    transferMedicalRecordHomePage(zyh, dischargeMethodMap);
                     xcfyDataTransferService.transferOperation(zyh);
+                    return true;
                 }
             });
             if (count <= 0) {
@@ -176,7 +184,7 @@ public class XCFYDatav_master_admission_billJob implements Job {
             String querySql = String.format(sql, whereSql);
             Integer count = xcfyDataTransferService.transferDataList(querySql, hosSeDetailInsertSql, paramMap, new TransferDataCallFunction() {
                 @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                     dataMap.put("CREATE_BY", "auto");
                     dataMap.put("CREATE_TIME", new Date());
                     String itemIDHosp = dataMap.getOrDefault("ITEM_ID_HOSP", "").toString();
@@ -205,6 +213,7 @@ public class XCFYDatav_master_admission_billJob implements Job {
                     }
                     //甲类
                     dataMap.put("P_TYPE", "01");
+                    return true;
                 }
             });
             log.info("结束同步v_hospitalizatio_settle_detail数据,HISID:{} 条数:{}", hisId, count);
@@ -215,7 +224,7 @@ public class XCFYDatav_master_admission_billJob implements Job {
         return 0;
     }
 
-    public Integer transferMedicalRecordHomePage(String zyh) {
+    public Integer transferMedicalRecordHomePage(String zyh,Map<String,String> dischargeMethodMap) {
         String querySql = "select * from V_MEDICAL_RECORD_HOMEPAGE where ZYH=:ZYH";
 
         log.info("开始同步V_MEDICAL_RECORD_HOMEPAGE数据,获取zyh:{}", zyh);
@@ -224,9 +233,22 @@ public class XCFYDatav_master_admission_billJob implements Job {
         paramMap.put("ZYH", zyh);
         Integer count = xcfyDataTransferService.transferDataList(querySql, recordHomePageInsertSql, paramMap, new TransferDataCallFunction() {
             @Override
-            public void transferData(Map<String, Object> dataMap) throws Exception {
+            public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                 dataMap.put("CREATE_BY", "auto");
                 dataMap.put("CREATE_TIME", new Date());
+                //视图枚举:'1','医嘱离院','2','医嘱转院','3','医嘱转社区卫生服务机构/乡镇卫生院','4','非医嘱离院','5','死亡','其他'
+
+                // 医保控费枚举:1医嘱离院
+                //2医嘱转院
+                //3医嘱转社区卫生服务机构/乡镇卫生院
+                //4非医嘱离院
+                //5死亡
+                //9其他
+                String dischargeStatus = dataMap.getOrDefault("DISCHARGE_STATUS","其他").toString();
+                if(dischargeMethodMap.containsKey(dischargeStatus)){
+                    dataMap.put("DISCHARGE_STATUS", dischargeMethodMap.get(dischargeStatus));
+                }
+                return true;
             }
         });
         log.info("结束同步V_MEDICAL_RECORD_HOMEPAGE数据,获取zyh:{} 条数:{}", zyh, count);

+ 4 - 7
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_material_itemsJob.java

@@ -28,9 +28,9 @@ public class XCFYDatav_material_itemsJob implements Job {
 
     String insertSql = "INSERT INTO material_items (item_id, item_name, item_id_hosp, item_name_hosp, item_connotation, excluded_medical, p_category, p_type_pct, remarks, celling_price, tertiary_hosp_price, two_hosp_price, create_time, update_by, update_time, create_by, one_hosp_price, reg_spe, company_name, consumable_material, one_category, two_category, three_category) " +
             "VALUES (:ITEM_ID,:ITEM_NAME,:ITEM_ID_HOSP,:ITEM_NAME_HOSP,:ITEM_CONNOTATION,:EXCLUDED_MEDICAL,:P_CATEGORY,:P_TYPE_PCT,:REMARKS,:CELLING_PRICE,:TERTIARY_HOSP_PRICE,:TWO_HOSP_PRICE,:CREATE_TIME,:CREATE_BY,:ONE_HOSP_PRICE,:REG_SPE,:COMPANY_NAME,:CONSUMABLE_MATERIAL,:ONE_CATEGORY,:TWO_CATEGORY,:THREE_CATEGORY) on duplicate key update " +
-            "ITEM_ID = :ITEM_ID," +
+            "ITEM_ID = :ITEM_ID,CELLING_PRICE=:CELLING_PRICE," +
             "ITEM_NAME = :ITEM_NAME," +
-            "ITEM_NAME_HOSP = :ITEM_NAME_HOSP,CREATE_TIME=:CREATE_TIME";
+            "ITEM_NAME_HOSP = :ITEM_NAME_HOSP,CREATE_TIME=:CREATE_TIME,CREATE_BY=:CREATE_BY";
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
@@ -43,9 +43,10 @@ public class XCFYDatav_material_itemsJob implements Job {
             String querySql = String.format(sql, endRows, startRows);
             Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
                 @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                     dataMap.put("CREATE_BY", "auto");
                     dataMap.put("CREATE_TIME", new Date());
+                    return true;
                 }
             });
             if (count <= 0) {
@@ -60,8 +61,4 @@ public class XCFYDatav_material_itemsJob implements Job {
     }
 
 
-//    @Async("commonTaskAsyncPool")
-//    public void statictisRuleByRuleEngine(MedicalInsRuleInfo medicalInsRuleInfo) {
-//        ruleEngine.runStatictisEngine(new HashMap<>(), medicalInsRuleInfo);
-//    }
 }

+ 24 - 21
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_medical_insurance_drugsJob.java

@@ -1,8 +1,11 @@
 package org.jeecg.modules.medical.job;
 
 import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.system.vo.DictModel;
+import org.jeecg.modules.medical.Constant;
 import org.jeecg.modules.medical.afterwaring.XCFYDataTransferService;
 import org.jeecg.modules.medical.ruleengine.TransferDataCallFunction;
+import org.jeecg.modules.system.service.ISysDictService;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
@@ -11,6 +14,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
 
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -25,44 +29,43 @@ public class XCFYDatav_medical_insurance_drugsJob implements Job {
     @Autowired
     JdbcTemplate jdbcTemplate;
 
+
     String insertSql = "INSERT INTO medical_insurance_drugs (id, medicine_code, medicine_name, item_id_hosp, item_name_hosp, item_type, dosage_form, drug_spec, medication_method, drug_use_total, percentage_payment, p_type_pct, p_category, remarks, price, single_dose_number, celling_price, tertiary_hosp_price, two_hosp_price, one_hosp_price, create_time, create_by, retirement_price) " +
-            "VALUES (:ID,:MEDICINE_CODE,:MEDICINE_NAME,:ITEM_ID_HOSP,:ITEM_NAME_HOSP,:ITEM_TYPE,:DOSAGE_FORM,:DRUG_SPEC,:MEDICATION_METHOD,:DRUG_USE_TOTAL,:PERCENTAGE_PAYMENT,:P_TYPE_PCT,:P_CATEGORY,:REMARKS,:PRICE,:SINGLE_DOSE_NUMBER,:CELLING_PRICE,:TERTIARY_HOSP_PRICE,:TWO_HOSP_PRICE,:ONE_HOSP_PRICE,:CREATE_TIME,:CREATE_BY,:RETIREMENT_PRICE)";
+            "VALUES (:ID,:MEDICINE_CODE,:MEDICINE_NAME,:ITEM_ID_HOSP,:ITEM_NAME_HOSP,:ITEM_TYPE,:DOSAGE_FORM,:DRUG_SPEC,:MEDICATION_METHOD,:DRUG_USE_TOTAL,:PERCENTAGE_PAYMENT,:P_TYPE_PCT,:P_CATEGORY,:REMARKS,:PRICE,:SINGLE_DOSE_NUMBER,:CELLING_PRICE,:TERTIARY_HOSP_PRICE,:TWO_HOSP_PRICE,:ONE_HOSP_PRICE,:CREATE_TIME,:CREATE_BY,:RETIREMENT_PRICE)  on duplicate key update " +
+            "MEDICINE_CODE = :MEDICINE_CODE,CELLING_PRICE=:CELLING_PRICE," +
+            "MEDICINE_NAME = :MEDICINE_NAME,PRICE=:PRICE," +
+            "ITEM_NAME_HOSP = :ITEM_NAME_HOSP,CREATE_TIME=:CREATE_TIME,CREATE_BY=:CREATE_BY";
+
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
-        String sql = "select * from V_MEDICAL_INSURANCE_DRUGS where rownum<1000 %s";
+
+        Integer startRows = 0;
+        Integer endRows = 1000;
+        String sql = "SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM V_MEDICAL_INSURANCE_DRUGS) A WHERE ROWNUM < %s) WHERE RN >= %s";
         while (true) {
-            log.info("开始同步v_medical_insurance_drugs数据");
-            String whereSql = "";
-            Long hsdId = getLastId();
-            log.info("开始同步v_medical_insurance_drugs数据,获取上个同步记录访问最大主键ID:{}", hsdId);
+            log.info("开始同步V_MEDICAL_INSURANCE_DRUGS数据 startRows:{} endRows:{}", startRows, endRows);
             Map<String, Object> paramMap = new HashMap<>();
-            if (null != hsdId && hsdId > 0) {
-                whereSql = "and ID>:ID";
-                paramMap.put("ID", hsdId);
-            }
-
-            String querySql = String.format(sql, whereSql);
-
+            String querySql = String.format(sql, endRows, startRows);
 
             Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
                 @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                     dataMap.put("CREATE_BY", "auto");
                     dataMap.put("CREATE_TIME", new Date());
+                    dataMap.put("STATE", Constant.EFF_STATE);
+                    return true;
+
                 }
             });
             if (count <= 0) {
-                log.info("v_medical_insurance_drugs 大于ID:{} 没有的数据,停止同步", hsdId);
+                log.info("V_MEDICAL_INSURANCE_DRUGS 开始rownum:{} 结束rownum:{} 没有的数据,停止同步", startRows, endRows);
                 return;
             }
-        }
+            startRows = endRows;
+            endRows = endRows + 1000;
 
-    }
-
-    public Long getLastId() {
-        Long id = jdbcTemplate.queryForObject("select max(id) as id from medical_insurance_drugs", Long.class);
-        return id;
+        }
     }
 
 

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

@@ -9,6 +9,7 @@ import org.jeecg.modules.medical.afterwaring.XCFYDataTransferService;
 import org.jeecg.modules.medical.common.CommonUtil;
 import org.jeecg.modules.medical.ruleengine.TransferDataCallFunction;
 import org.jeecg.modules.system.service.ISysDictService;
+import org.jeecg.modules.utils.DateTimeUtil;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
@@ -65,21 +66,29 @@ public class XCFYDatav_outpatient_settle_billJob implements Job {
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
-        String sql = "select * from V_OUTPATIENT_SETTLE_BILL where hisid is not null and rownum<1000 %s ";
+        String sql = "select * from V_OUTPATIENT_SETTLE_BILL where hisid is not null and pay_method!='自费' and bill_date<=:END_BILL_DATE %s and rownum<=1000 order by bill_date asc";
+        Date endBillDate = DateUtil.yesterday();
+        endBillDate = DateUtil.endOfDay(endBillDate);
         while (true) {
-            log.info("开始同步v_outpatient_settle_bill数据");
             String whereSql = "";
-            Long hsdId = getLastId();
-            log.info("开始同步v_outpatient_settle_bill数据,获取上个同步记录访问最大主键ID:{}", hsdId);
+            Date billDate = getBillDate();
+            log.info("开始同步v_outpatient_settle_bill数据,获取上个同步开始结算日期:{} 结束日期:{}", billDate, endBillDate);
             Map<String, Object> paramMap = new HashMap<>();
-            if (null != hsdId && hsdId > 0) {
-                whereSql = "and ID>:ID";
-                paramMap.put("ID", hsdId);
+            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 void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
+                    String hisId = dataMap.get("HISID").toString();
+                    Integer count = getDetailByHisId(hisId);
+                    if (null == count || count <= 0) {
+                        log.error("hisid:{} 未查询到门诊结算清单", hisId);
+                        return false;
+                    }
                     dataMap.put("CREATE_BY", "auto");
                     dataMap.put("CREATE_TIME", new Date());
                     String diagCode = dataMap.getOrDefault("ADMISSION_DISEASE_ID", "").toString();
@@ -90,11 +99,12 @@ public class XCFYDatav_outpatient_settle_billJob implements Job {
                             dataMap.put("YB_ADMISSION_DISEASE_NAME", ybDiagCode[1]);
                         }
                     }
-                    Object patientAge = dataMap.get("PATIENT_AGE");
+                    Object patientAge = dataMap.getOrDefault("PATIENT_AGE", "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){
+                    if(null != patientBirthday && days<=0){
                         Date patientBirthDayDate = (Date) patientBirthday;
 
                         if(null != visitTime){
@@ -105,28 +115,27 @@ public class XCFYDatav_outpatient_settle_billJob implements Job {
                         }
                         dataMap.put("PATIENT_AGE_DAYS", ageDays.doubleValue());
                     }else{
-                        if(null != patientAge){
-                            try {
-                                Double patientAgeDouble = Double.parseDouble(patientAge.toString());
-                                Double patientAgeDays = patientAgeDouble * 365;
-                                dataMap.put("PATIENT_AGE_DAYS", patientAgeDays);
-                            }catch (Exception e){
-                                log.error(e.getMessage(), e);
-                            }
-                        }
+                        dataMap.put("PATIENT_AGE_DAYS", days.doubleValue());
                     }
-
+                    Object patientGender = dataMap.get("PATIENT_GENDER");
+                    dataMap.put("PATIENT_GENDER", CommonUtil.getMedicalSex(patientGender));
+
+                    xcfyDataTransferService.transferCheckList(hisId);
+                    String zyh = dataMap.get("ZYH").toString();
+                    xcfyDataTransferService.transferOperation(zyh);
+                    xcfyDataTransferService.transferPrescriptionOrder(zyh);
+                    return true;
                 }
             });
             if (count <= 0) {
-                log.info("v_outpatient_settle_bill 大于ID:{} 没有的数据,停止同步", hsdId);
+                log.error("v_outpatient_settle_bill 未查询到大于住院billdate:{} 小于等于住院billdate:{} 的数据,停止同步", billDate, endBillDate);
                 return;
             }
         }
 
     }
 
-    public void getDetailByHisId(String hisId) {
+    public Integer getDetailByHisId(String hisId) {
         String sql = "select * from V_OUTPATIENT_SETTLE_DETAILS where hisid=:HISID";
         List<DictModel> cateGoriesList = sysDictService.getDictItems(Constant.DICT_CATEGORIES_ITEMS_KEY);
         Map<String, String> cateGoriesMap = new HashMap<>();
@@ -135,9 +144,9 @@ public class XCFYDatav_outpatient_settle_billJob implements Job {
         }
         Map<String, Object> paramMap = new HashMap<>();
         paramMap.put("HISID", hisId);
-        xcfyDataTransferService.transferDataList(sql, insertDetailSql, paramMap, new TransferDataCallFunction() {
+        Integer count = xcfyDataTransferService.transferDataList(sql, insertDetailSql, paramMap, new TransferDataCallFunction() {
             @Override
-            public void transferData(Map<String, Object> dataMap) throws Exception {
+            public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                 dataMap.put("CREATE_BY", "auto");
                 dataMap.put("CREATE_TIME", new Date());
                 String itemIDHosp = dataMap.getOrDefault("ITEM_ID_HOSP", "").toString();
@@ -152,22 +161,27 @@ public class XCFYDatav_outpatient_settle_billJob implements Job {
                 String pCategory = dataMap.getOrDefault("P_CATEGORY", "").toString();
                 if(StringUtils.isNotBlank(pCategory)){
                     dataMap.put("P_CATEGORY", cateGoriesMap.getOrDefault(pCategory, pCategory));
+                }else{
+                    //甲类01
+                    dataMap.put("P_CATEGORY", "01");
                 }
 
                 String categoriesItems = dataMap.getOrDefault("CATEGORIES_ITEMS", "").toString();
                 if(StringUtils.isNotBlank(pCategory)) {
                     dataMap.put("CATEGORIES_ITEMS", cateGoriesMap.getOrDefault(categoriesItems, categoriesItems));
                 }
+                return true;
             }
         });
-
+        log.info("结束同步V_OUTPATIENT_SETTLE_DETAILS数据,HISID:{} 条数:{}", hisId, count);
+        return count;
 
 
     }
 
-    public Long getLastId() {
-        Long id = jdbcTemplate.queryForObject("select max(id) as id from outpatient_settlement_bill", Long.class);
-        return id;
+    public Date getBillDate() {
+        Date billDate = jdbcTemplate.queryForObject("select max(BILL_DATE) as id from outpatient_settlement_bill", Date.class);
+        return billDate;
     }
 
 

+ 3 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/XCFYDatav_outpatient_settle_detailsJob.java

@@ -22,6 +22,7 @@ import java.util.Map;
 /**
  * 门诊结算明细 增量同步
  * 执行频率:每天执行24次,每小时执行一次
+ * 停止执行,在主单中关联采集
  */
 @Slf4j
 public class XCFYDatav_outpatient_settle_detailsJob implements Job {
@@ -66,7 +67,7 @@ public class XCFYDatav_outpatient_settle_detailsJob implements Job {
             String querySql = String.format(sql, whereSql);
             Integer count = xcfyDataTransferService.transferDataList(querySql, insertSql, paramMap, new TransferDataCallFunction() {
                 @Override
-                public void transferData(Map<String, Object> dataMap) throws Exception {
+                public Boolean transferData(Map<String, Object> dataMap) throws Exception {
                     dataMap.put("CREATE_BY", "auto");
                     dataMap.put("CREATE_TIME", new Date());
                     String itemIDHosp = dataMap.getOrDefault("ITEM_ID_HOSP", "").toString();
@@ -87,6 +88,7 @@ public class XCFYDatav_outpatient_settle_detailsJob implements Job {
                     if(StringUtils.isNotBlank(pCategory)) {
                         dataMap.put("CATEGORIES_ITEMS", cateGoriesMap.getOrDefault(categoriesItems, categoriesItems));
                     }
+                    return true;
                 }
             });
             if (count <= 0) {

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/TransferDataCallFunction.java

@@ -9,5 +9,5 @@ import java.util.Map;
 @FunctionalInterface
 @SuppressWarnings("PMD")
 public interface TransferDataCallFunction {
-    void transferData(Map<String,Object> dataMap) throws Exception;
+    Boolean transferData(Map<String,Object> dataMap) throws Exception;
 }

+ 3 - 3
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java

@@ -645,9 +645,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 		}
 
 		//触发入职流程
-		LoginUser userInfo=new LoginUser();
-		BeanUtils.copyProperties(user,userInfo);
-		LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+//		LoginUser userInfo=new LoginUser();
+//		BeanUtils.copyProperties(user,userInfo);
+//		LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 	}
 
 	@Override