Parcourir la source

修复由状态字段变为出院的患者无法更新设备问题

wuyunfeng il y a 1 an
Parent
commit
cba5299f38

+ 17 - 3
ncs-system-service/src/main/java/com/wdklian/ncs/ms/system/service/impl/CustomerServiceImpl.java

@@ -218,7 +218,6 @@ public class CustomerServiceImpl extends SystemCRUDManagerImpl<CustomerDO> imple
             MemberDO member = null;
             List<CustomerCareMappingVO> customerCareMappingVOS = new ArrayList<>();
             if (customerDO != null) {
-
                 member = patientMemberWasIn.stream().filter(p -> p.getMemberId().equals(customerDO.getMemberId())).findFirst().orElse(null);
                 customerCareMappingVOS = patientWasInCareMapping.stream().filter(p -> p.getCustomerId().equals(customerDO.getId())).collect(Collectors.toList());
                 //患者已经在库中,需要判定此患者是否住院状态,如果是住院状态,要处理患者是否转床、转科室
@@ -239,9 +238,9 @@ public class CustomerServiceImpl extends SystemCRUDManagerImpl<CustomerDO> imple
             }
 
             CustomerDO customer = handleSinglePatient(patientInfo, part, bed, customerDO, member, roles, customerCareMappingVOS, patientWasIn);
-            if (customer != null&&customer.getStatus().equals(HospitaliseStatusEnum.HOSPITALIZED.value())) {
+            if (customer != null) { //只要同步成功就需要加入同步列表,给设备发送刷新消息,有可能患者状态已经改成了出院
                 //重要-- 把同步成功的患者加入到已入住列表中,防止同一批次患者有相同床位的,不加入无法判断出上一次已经入住了床位
-                if(patientWasIn.stream().noneMatch(p->p.getId().equals(customer.getId()))) {
+                if(customer.getStatus().equals(HospitaliseStatusEnum.HOSPITALIZED.value())&&patientWasIn.stream().noneMatch(p->p.getId().equals(customer.getId()))) {
                     patientWasIn.add(customer);
                 }
                 //把同步成功的患者加入返回列表
@@ -278,6 +277,12 @@ public class CustomerServiceImpl extends SystemCRUDManagerImpl<CustomerDO> imple
         if (customer == null) {
 
             if (member == null) {
+                if(StrUtil.isNotEmpty(patient.getMobile())) {
+                    MemberDO existMember = this.memberService.getMemberByMobile(patient.getMobile());
+                    if(existMember!=null){
+                        patient.setMobile(null);
+                    }
+                }
                 member = registerMemberDO(patient);
             } else {
                 updateMember(patient, member);
@@ -297,6 +302,12 @@ public class CustomerServiceImpl extends SystemCRUDManagerImpl<CustomerDO> imple
             if (member == null) { //防止customer 关联不对,或者删除了member记录
                 member = this.memberService.getMemberByMobile(patient.getKeyval());
                 if (member == null) {
+                    if(StrUtil.isNotEmpty(patient.getMobile())) {
+                        MemberDO existMember = this.memberService.getMemberByMobile(patient.getMobile());
+                        if(existMember!=null){
+                            patient.setMobile(null);
+                        }
+                    }
                     member = registerMemberDO(patient);
                     customer.setMemberId(member.getMemberId());
                     this.edit(customer, customer.getId());
@@ -535,6 +546,9 @@ public class CustomerServiceImpl extends SystemCRUDManagerImpl<CustomerDO> imple
 
     private void updateCustomer(PatientDO patient, ShopDO shop, FrameDO bed, CustomerDO customerDO) {
         String age = patient.getAge();
+        if(StrUtil.isEmpty(age)&&StrUtil.isNotEmpty(patient.getBirthday())){
+            age = cn.hutool.core.date.DateUtil.ageOfNow(patient.getBirthday())+"岁";
+        }
         Integer patientAge = StringHelper.fetchAge(age);
         customerDO.setAge(patientAge);
         if (StrUtil.isEmpty(patient.getAgeUnit())) { //没有传入年龄单位,尝试从年龄中获取

+ 17 - 1
ncs-system-service/src/main/java/com/wdklian/ncs/ms/system/service/impl/NurseConfigOptionServiceImpl.java

@@ -98,7 +98,6 @@ public class NurseConfigOptionServiceImpl extends SystemCRUDManagerImpl<NurseCon
 
             for (CustomerDO customerDO : partInHospitalCustomers) {
 
-
                 if (StrUtil.isEmpty(customerDO.getHisKeyval())||customerDO.getStatus().equals(HospitaliseStatusEnum.DISCHARGED.value())) { //患者不是从his对接过来的或者已经是出院状态,没必要匹配,跳过记录
                     continue;
                 }
@@ -150,6 +149,23 @@ public class NurseConfigOptionServiceImpl extends SystemCRUDManagerImpl<NurseCon
                         }
                         nurseChangeCustomers.add(customerDO);
                     }
+                    //校验是否有重复的护理项目,把重复的删除
+                    Map<Integer, List<NurseOptionCompareVO>> repeatNurseOption = nurseConfigs.stream().collect(Collectors.groupingBy(NurseOptionCompareVO::getOptionId)).entrySet().stream()
+                            .filter(entry -> entry.getValue().size() > 1)
+                            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+                    List<NurseOptionCompareVO> needRemoveRepeat = new ArrayList<>();
+                    if(!repeatNurseOption.isEmpty()){
+                        for (Map.Entry<Integer, List<NurseOptionCompareVO>> entry : repeatNurseOption.entrySet()) {
+                            if(removes.stream().noneMatch(p->p.getOptionId().equals(entry.getKey()))){
+                                List<NurseOptionCompareVO> value = entry.getValue();
+                                needRemoveRepeat.addAll(value.stream().skip(1).collect(Collectors.toList()));
+                            }
+                        }
+                    }
+
+                     if(!needRemoveRepeat.isEmpty()){
+                         removes.addAll(needRemoveRepeat);
+                     }
                     if (!removes.isEmpty()) { //需删除的护理参数
 //                        for (NurseOptionCompareVO remove : removes) {
 //

+ 5 - 1
third-party-gateway/src/main/java/com/wdklian/ncs/ms/tp/gateway/CorsResponseHeaderFilter.java

@@ -14,8 +14,11 @@ import java.util.ArrayList;
 @Component("corsResponseHeaderFilter")
 public class CorsResponseHeaderFilter implements GlobalFilter, Ordered {
 
+
+
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+
         return chain.filter(exchange).then(Mono.defer(() -> {
             exchange.getResponse().getHeaders().entrySet().stream()
                     .filter(kv -> (kv.getValue() != null && kv.getValue().size() > 1))
@@ -37,4 +40,5 @@ public class CorsResponseHeaderFilter implements GlobalFilter, Ordered {
         // 即待处理完响应体后接着处理响应头
         return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER + 1;
     }
-}
+}
+