|
|
@@ -1,20 +1,44 @@
|
|
|
package org.jeecg;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.jeecg.modules.medical.Constant;
|
|
|
import org.jeecg.modules.medical.entity.AfterwardsAudit;
|
|
|
import org.jeecg.modules.medical.entity.AfterwardsAuditDetail;
|
|
|
+import org.jeecg.modules.medical.entity.MedicalInsRuleInfo;
|
|
|
+import org.jeecg.modules.medical.entity.SttlMasterBill;
|
|
|
+import org.jeecg.modules.medical.entity.SttlMasterDetailBill;
|
|
|
import org.jeecg.modules.medical.job.AfterWaringLogTestJob;
|
|
|
+import org.jeecg.modules.medical.ruleengine.RuleEngine;
|
|
|
+import org.jeecg.modules.medical.ruleengine.SPELUtil;
|
|
|
import org.jeecg.modules.medical.service.IAfterwardsAuditDetailService;
|
|
|
import org.jeecg.modules.medical.service.IAfterwardsAuditService;
|
|
|
+import org.jeecg.modules.medical.service.IAfterwardsIncidentAuditDiagnoseService;
|
|
|
+import org.jeecg.modules.medical.service.IMedicalInsRuleInfoService;
|
|
|
+import org.jeecg.modules.medical.service.IMedicalInsRuleProjectDiagnoseService;
|
|
|
+import org.jeecg.modules.medical.service.IMedicalInsRuleProjectService;
|
|
|
+import org.jeecg.modules.medical.service.ISttlMasterBillService;
|
|
|
+import org.jeecg.modules.medical.service.ISttlMasterDetailBillService;
|
|
|
+import org.jeecg.modules.system.service.ISysDepartService;
|
|
|
+import org.jeecg.modules.system.service.ISysUserService;
|
|
|
import org.junit.Test;
|
|
|
import org.junit.runner.RunWith;
|
|
|
import org.quartz.JobExecutionException;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.boot.test.context.SpringBootTest;
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.test.context.junit4.SpringRunner;
|
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.util.*;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Random;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
|
/**
|
|
|
* @author soft01
|
|
|
@@ -23,7 +47,8 @@ import java.util.*;
|
|
|
* @parentProject medical-java
|
|
|
*/
|
|
|
@RunWith(SpringRunner.class)
|
|
|
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,classes = JeecgSystemApplication.class)
|
|
|
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = JeecgSystemApplication.class)
|
|
|
+@Slf4j
|
|
|
public class AfterwardsAuditDataTest {
|
|
|
|
|
|
List<Map<String, String>> doctorList = new ArrayList<>();
|
|
|
@@ -56,9 +81,30 @@ public class AfterwardsAuditDataTest {
|
|
|
@Autowired
|
|
|
private IAfterwardsAuditDetailService afterwardsAuditDetailService;
|
|
|
@Autowired
|
|
|
+ private IAfterwardsIncidentAuditDiagnoseService afterwardsIncidentAuditDiagnoseService;
|
|
|
+ @Autowired
|
|
|
private AfterWaringLogTestJob afterWaringLogTestJob;
|
|
|
+ @Autowired
|
|
|
+ ISysUserService sysUserService;
|
|
|
+ @Autowired
|
|
|
+ ISysDepartService sysDepartService;
|
|
|
+ @Autowired
|
|
|
+ ISttlMasterBillService sttlMasterBillService;
|
|
|
+ @Autowired
|
|
|
+ ISttlMasterDetailBillService sttlMasterDetailBillService;
|
|
|
+ @Autowired
|
|
|
+ IMedicalInsRuleProjectService medicalInsRuleProjectService;
|
|
|
+ @Autowired
|
|
|
+ IMedicalInsRuleProjectDiagnoseService medicalInsRuleProjectDiagnoseService;
|
|
|
+ @Autowired
|
|
|
+ RuleEngine ruleEngine;
|
|
|
+ @Autowired
|
|
|
+ IMedicalInsRuleInfoService medicalInsRuleInfoService;
|
|
|
+ @Autowired
|
|
|
+ RedisTemplate redisTemplate;
|
|
|
+
|
|
|
@Test
|
|
|
- public void testJob(){
|
|
|
+ public void testJob() {
|
|
|
try {
|
|
|
afterWaringLogTestJob.execute(null);
|
|
|
} catch (JobExecutionException e) {
|
|
|
@@ -66,6 +112,121 @@ public class AfterwardsAuditDataTest {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void insertAfterWordDetail() {
|
|
|
+ List<SttlMasterBill> sttlMasterBills = sttlMasterBillService.list();
|
|
|
+ List<AfterwardsAuditDetail> detailList = new ArrayList<>();
|
|
|
+ Map<String, Boolean> codeDataMap = new ConcurrentHashMap<>();
|
|
|
+ String[] sAr = {"1", "3"};
|
|
|
+ List<MedicalInsRuleInfo> medicalInsRuleInfoList = medicalInsRuleInfoService.lambdaQuery().in(MedicalInsRuleInfo::getTreatmentType, sAr).eq(MedicalInsRuleInfo::getState, Constant.EFF_STATE).list();
|
|
|
+ if (!CollectionUtil.isNotEmpty(medicalInsRuleInfoList)) {
|
|
|
+ log.error("规则配置表没有有效的规则");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ /*
|
|
|
+ * 根据规则id加载规则并初始化到redis里
|
|
|
+ * 后续提醒通过redis加载id,把id传入规则引擎,迅速调用对应规则
|
|
|
+ */
|
|
|
+// List<MedicalInsRuleInfo> midMedicalInsRuleInfoList = new ArrayList<>();
|
|
|
+ Map<Integer, MedicalInsRuleInfo> medicalMap = new HashMap<>();
|
|
|
+ for (MedicalInsRuleInfo medicalInsRuleInfo : medicalInsRuleInfoList) {
|
|
|
+ medicalMap.put(medicalInsRuleInfo.getId(), medicalInsRuleInfo);
|
|
|
+ }
|
|
|
+ for (SttlMasterBill sttlMasterBill : sttlMasterBills) {
|
|
|
+ AfterwardsAudit afterwardsAudit = afterwardsAuditService.lambdaQuery().eq(AfterwardsAudit::getPrescriptionNumber, sttlMasterBill.getJsdjh()).one();
|
|
|
+ if (null == afterwardsAudit) {
|
|
|
+ log.error("结算单据号找不到稽核单:{}", sttlMasterBill.getJsdjh());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<SttlMasterDetailBill> sttlMasterDetailBills = sttlMasterDetailBillService.lambdaQuery().eq(SttlMasterDetailBill::getJsdjh, sttlMasterBill.getJsdjh()).list();
|
|
|
+ if (CollectionUtil.isNotEmpty(sttlMasterBills)) {
|
|
|
+
|
|
|
+ for (SttlMasterDetailBill sttlMasterDetailBill : sttlMasterDetailBills) {
|
|
|
+
|
|
|
+ genData(sttlMasterDetailBill, codeDataMap, afterwardsAudit, medicalInsRuleInfoList, medicalMap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+// afterwardsAuditDetailService.saveBatch(detailList, 1000);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Async
|
|
|
+ public void genData(SttlMasterDetailBill sttlMasterDetailBill, Map<String, Boolean> codeDataMap, AfterwardsAudit afterwardsAudit, List<MedicalInsRuleInfo> medicalInsRuleInfoList, Map<Integer, MedicalInsRuleInfo> medicalMap) {
|
|
|
+ AfterwardsAuditDetail afterwardsAuditDetail = new AfterwardsAuditDetail();
|
|
|
+
|
|
|
+ String projectCode = sttlMasterDetailBill.getYbxmbm();
|
|
|
+// if (codeDataMap.containsKey(projectCode)) {
|
|
|
+// return;
|
|
|
+// }
|
|
|
+ if (StringUtils.isBlank(projectCode)) {
|
|
|
+ log.error("医保编码:{}", sttlMasterDetailBill);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.isNotBlank(projectCode)) {
|
|
|
+ Set<Integer> medicalRuleInfoIdSet = RuleEngine.itemCodeAndRuleIdMap.get(projectCode);
|
|
|
+ if (CollectionUtil.isEmpty(medicalRuleInfoIdSet)) {
|
|
|
+ log.info("医保编码未匹配到规则:{}", projectCode);
|
|
|
+ if(!codeDataMap.containsKey(projectCode)){
|
|
|
+ ruleEngine.genItemCodeAndRuleIdMapTest(projectCode, afterwardsAuditDetail, medicalInsRuleInfoList, medicalMap,codeDataMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ List<Integer> ruleIdList = new ArrayList<>(medicalRuleInfoIdSet);
|
|
|
+ Integer ruleId = ruleIdList.get(0);
|
|
|
+ MedicalInsRuleInfo medicalInsRuleInfo = medicalInsRuleInfoService.getById(ruleId);
|
|
|
+ afterwardsAuditDetail.setMedicalInsRuleInfoId(ruleId);
|
|
|
+// MedicalInsRuleInfo medicalInsRuleInfo = medicalMap.get(medicalInsRuleProject.getMedicalInsRuleInfoId());
|
|
|
+ afterwardsAuditDetail.setMedicalInsRuleInfoName(medicalInsRuleInfo.getRuleName());
|
|
|
+ afterwardsAuditDetail.setMedicalInsRuleInfoCode(medicalInsRuleInfo.getRuleCode());
|
|
|
+ Object desc = redisTemplate.opsForHash().get(Constant.PROJECT_VOLIDATION_DESC_KEY + ruleId, projectCode);
|
|
|
+ if (null != desc && StringUtils.isNotBlank(desc.toString())) {
|
|
|
+ afterwardsAuditDetail.setDescription(desc.toString());
|
|
|
+ } else {
|
|
|
+ afterwardsAuditDetail.setDescription(medicalInsRuleInfo.getDescription());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ String projectType = null;
|
|
|
+
|
|
|
+ if (projectCode.startsWith(Constant.CONSUMABLE_START_KEY)) {
|
|
|
+ projectType = "consumable";
|
|
|
+ } else if (projectCode.startsWith(Constant.RESTORATIVES_T_START_KEY) ||
|
|
|
+ projectCode.startsWith(Constant.RESTORATIVES_X_START_KEY) ||
|
|
|
+ projectCode.startsWith(Constant.RESTORATIVES_Z_START_KEY)) {
|
|
|
+ projectType = "medicine";
|
|
|
+ //耗材都是字母c开头, 药品是X或Z T, 医疗服务是数字开头
|
|
|
+ } else if (SPELUtil.isNumeric(projectCode)) {
|
|
|
+ projectType = "diagnoses";
|
|
|
+ }
|
|
|
+ afterwardsAuditDetail.setProjectType(projectType);
|
|
|
+ afterwardsAuditDetail.setAfterwardsAuditId(afterwardsAudit.getId());
|
|
|
+
|
|
|
+ afterwardsAuditDetail.setAmount(Double.parseDouble(sttlMasterDetailBill.get金额()));
|
|
|
+ afterwardsAuditDetail.setTreatmentType("hops");
|
|
|
+ afterwardsAuditDetail.setDoctorId(afterwardsAudit.getDoctorId());
|
|
|
+ afterwardsAuditDetail.setDoctorName(afterwardsAudit.getDoctorName());
|
|
|
+ afterwardsAuditDetail.setMedicalDeptCode(afterwardsAudit.getMedicalDeptCode());
|
|
|
+ afterwardsAuditDetail.setMedicalDeptName(afterwardsAudit.getMedicalDeptName());
|
|
|
+ afterwardsAuditDetail.setNoticeType("after");
|
|
|
+
|
|
|
+ afterwardsAuditDetail.setMedicalProjectCode(projectCode);
|
|
|
+ afterwardsAuditDetail.setMedicalProjectName(sttlMasterDetailBill.get医保项目名称());
|
|
|
+ afterwardsAuditDetail.setPatientId(afterwardsAudit.getPatientId());
|
|
|
+ afterwardsAuditDetail.setPatientName(afterwardsAudit.getPatientName());
|
|
|
+ afterwardsAuditDetail.setViolationLevel(0);
|
|
|
+ afterwardsAuditDetail.setProejctCode(projectCode);
|
|
|
+ afterwardsAuditDetail.setProejctName(sttlMasterDetailBill.get医保项目名称());
|
|
|
+ afterwardsAuditDetail.setCreateTime(new Date());
|
|
|
+ afterwardsAuditDetail.setQuantity(Integer.parseInt(sttlMasterDetailBill.get数量()));
|
|
|
+ afterwardsAuditDetail.setReminderLevel("1");
|
|
|
+// detailList.add(afterwardsAuditDetail);
|
|
|
+ afterwardsAuditDetailService.save(afterwardsAuditDetail);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
@Test
|
|
|
public void generateAfterwardsAuditData() {
|
|
|
|
|
|
@@ -115,8 +276,6 @@ public class AfterwardsAuditDataTest {
|
|
|
doctorItem10.put("doctorId", "1001207");
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
doctorList.add(doctorItem1);
|
|
|
doctorList.add(doctorItem2);
|
|
|
doctorList.add(doctorItem3);
|
|
|
@@ -165,11 +324,11 @@ public class AfterwardsAuditDataTest {
|
|
|
aad.setProjectType(PROJECTTYPE);
|
|
|
aad.setProejctCode(PROJECTCODE);
|
|
|
|
|
|
- aad.setQuantity(new BigDecimal("1"));
|
|
|
+ aad.setQuantity(1);
|
|
|
aad.setMedicalProjectCode("8001");
|
|
|
aad.setMedicalProjectName("1");
|
|
|
|
|
|
- aad.setAmount(BigDecimal.valueOf(AfterwardsAuditDataTest.getRandom()));
|
|
|
+ aad.setAmount(Double.valueOf(AfterwardsAuditDataTest.getRandom()));
|
|
|
|
|
|
aad.setCreateBy("admin");
|
|
|
aad.setCreateTime(new Date());
|