Ver código fonte

添加说明文档

wuyunfeng 1 ano atrás
pai
commit
265d9a1898

+ 221 - 0
nacos/conf/mysql-schema.sql

@@ -0,0 +1,221 @@
+/*
+ * Copyright 1999-2018 Alibaba Group Holding Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/******************************************/
+/*   数据库全名 = nacos_config   */
+/*   表名称 = config_info   */
+/******************************************/
+CREATE TABLE `config_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
+  `group_id` varchar(128) DEFAULT NULL,
+  `content` longtext NOT NULL COMMENT 'content',
+  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
+  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
+  `src_user` text COMMENT 'source user',
+  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
+  `app_name` varchar(128) DEFAULT NULL,
+  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
+  `c_desc` varchar(256) DEFAULT NULL,
+  `c_use` varchar(64) DEFAULT NULL,
+  `effect` varchar(64) DEFAULT NULL,
+  `type` varchar(64) DEFAULT NULL,
+  `c_schema` text,
+  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
+
+/******************************************/
+/*   数据库全名 = nacos_config   */
+/*   表名称 = config_info_aggr   */
+/******************************************/
+CREATE TABLE `config_info_aggr` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
+  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
+  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
+  `content` longtext NOT NULL COMMENT '内容',
+  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
+  `app_name` varchar(128) DEFAULT NULL,
+  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
+
+
+/******************************************/
+/*   数据库全名 = nacos_config   */
+/*   表名称 = config_info_beta   */
+/******************************************/
+CREATE TABLE `config_info_beta` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
+  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
+  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
+  `content` longtext NOT NULL COMMENT 'content',
+  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
+  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
+  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
+  `src_user` text COMMENT 'source user',
+  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
+  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
+  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
+
+/******************************************/
+/*   数据库全名 = nacos_config   */
+/*   表名称 = config_info_tag   */
+/******************************************/
+CREATE TABLE `config_info_tag` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
+  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
+  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
+  `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
+  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
+  `content` longtext NOT NULL COMMENT 'content',
+  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
+  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
+  `src_user` text COMMENT 'source user',
+  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
+
+/******************************************/
+/*   数据库全名 = nacos_config   */
+/*   表名称 = config_tags_relation   */
+/******************************************/
+CREATE TABLE `config_tags_relation` (
+  `id` bigint(20) NOT NULL COMMENT 'id',
+  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
+  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
+  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
+  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
+  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
+  `nid` bigint(20) NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY (`nid`),
+  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
+  KEY `idx_tenant_id` (`tenant_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
+
+/******************************************/
+/*   数据库全名 = nacos_config   */
+/*   表名称 = group_capacity   */
+/******************************************/
+CREATE TABLE `group_capacity` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
+  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
+  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
+  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
+  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
+  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
+  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
+  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uk_group_id` (`group_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
+
+/******************************************/
+/*   数据库全名 = nacos_config   */
+/*   表名称 = his_config_info   */
+/******************************************/
+CREATE TABLE `his_config_info` (
+  `id` bigint(20) unsigned NOT NULL,
+  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `data_id` varchar(255) NOT NULL,
+  `group_id` varchar(128) NOT NULL,
+  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
+  `content` longtext NOT NULL,
+  `md5` varchar(32) DEFAULT NULL,
+  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `src_user` text,
+  `src_ip` varchar(50) DEFAULT NULL,
+  `op_type` char(10) DEFAULT NULL,
+  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
+  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
+  PRIMARY KEY (`nid`),
+  KEY `idx_gmt_create` (`gmt_create`),
+  KEY `idx_gmt_modified` (`gmt_modified`),
+  KEY `idx_did` (`data_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
+
+
+/******************************************/
+/*   数据库全名 = nacos_config   */
+/*   表名称 = tenant_capacity   */
+/******************************************/
+CREATE TABLE `tenant_capacity` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
+  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
+  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
+  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
+  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
+  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
+  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
+  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
+
+
+CREATE TABLE `tenant_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `kp` varchar(128) NOT NULL COMMENT 'kp',
+  `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
+  `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
+  `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
+  `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
+  `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
+  `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
+  KEY `idx_tenant_id` (`tenant_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
+
+CREATE TABLE `users` (
+	`username` varchar(50) NOT NULL PRIMARY KEY,
+	`password` varchar(500) NOT NULL,
+	`enabled` boolean NOT NULL
+);
+
+CREATE TABLE `roles` (
+	`username` varchar(50) NOT NULL,
+	`role` varchar(50) NOT NULL,
+	UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
+);
+
+CREATE TABLE `permissions` (
+    `role` varchar(50) NOT NULL,
+    `resource` varchar(255) NOT NULL,
+    `action` varchar(8) NOT NULL,
+    UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
+);
+
+INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
+
+INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

+ 2 - 1
ncs-entrace-service/src/main/java/com/wdklian/ncs/ms/entrace/service/NursingMarkCategoryService.java

@@ -176,7 +176,8 @@ public class NursingMarkCategoryService {
                 }
             }
         }
-
+        //拷贝后应用
+        this.applyNurseConfig(-1);
         return JsonResponse.successResponse();
 
     }

+ 5 - 6
ncs-open-service/src/main/java/com/wdklian/ncs/ms/open/service/impl/PatientServiceImpl.java

@@ -2,10 +2,8 @@ package com.wdklian.ncs.ms.open.service.impl;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson2.JSON;
 import com.wdklian.ncs.ms.common.entity.open.dos.PatientDO;
 import com.wdklian.ncs.ms.common.entity.open.vos.PatientDataVO;
-import com.wdklian.ncs.ms.common.entity.open.vos.VChartPaitentQuantityVO;
 import com.wdklian.ncs.ms.common.entity.system.dos.CustomerDO;
 import com.wdklian.ncs.ms.framework.database.annotation.Table;
 import com.wdklian.ncs.ms.framework.exception.ServiceException;
@@ -16,11 +14,12 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
 import java.util.stream.Collectors;
 
-import static java.util.stream.Collectors.toList;
-
 /**
  * @author wuyunfeng
  * 2023-11-11 17:19
@@ -141,7 +140,7 @@ public class PatientServiceImpl extends OpenPlateformCRUDServiceImpl<PatientDO>
             throw new ServiceException("不存在的患者!");
         } else {
             patient.setStatus("1");
-            if(StrUtil.isNotEmpty(patient.getOutdate())){
+            if(StrUtil.isEmpty(patient.getOutdate())){
                 patient.setOutdate(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
             }
             this.daoSupport.insertOrUpdate(PatientDO.class.getAnnotation(Table.class).name(), patient);

+ 1 - 1
ncs-open-service/src/main/resources/bootstrap.yml

@@ -22,7 +22,7 @@ spring:
     name: open-service
   mvc:
     pathmatch:
- #     matching-strategy: ant_path_matcher
+      matching-strategy: ant_path_matcher
 #  rabbitmq:
 #    host: localhost
 #    port: 5672

+ 86 - 0
ncs-system-service/src/main/java/com/wdklian/ncs/ms/system/common/StringHelper.java

@@ -0,0 +1,86 @@
+package com.wdklian.ncs.ms.system.common;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.util.StrUtil;
+import com.wdklian.ncs.ms.framework.util.DateUtil;
+import com.wdklian.ncs.ms.framework.util.StringUtil;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author wuyunfeng
+ * 2024-01-29 14:10
+ * ${description}
+ */
+public class StringHelper {
+
+    public static Long parseDate(String date) {
+        if (StrUtil.isNotEmpty(date)) {
+            if (StringUtil.isDateTime(date)) {
+                try {
+                    DateTime localDate = cn.hutool.core.date.DateUtil.parse(date);
+//                Date dateOflocalDate = Date.from(localDate.atStartOfDay().toInstant(ZoneOffset.UTC));
+                    return DateUtil.getDateline(cn.hutool.core.date.DateUtil.format(localDate,"yyyy-MM-dd"));
+                }catch (Exception e){
+                    return DateUtil.getDateline();
+                }
+
+            } else {
+                return DateUtil.getDateline();
+            }
+
+        } else {
+            return DateUtil.getDateline();
+        }
+    }
+
+
+    //提取年龄,很多系统的年龄表述不仅仅是岁月天,有几岁几个月,几月几天等等。在遇到此类表述时,把第一个数字取出来作为age的值,剩下的作为age_unit的值
+    public static Integer fetchAge(String age) {
+        if (StrUtil.isEmpty(age)) {
+            return 0;
+        } else {
+            String pattern = "^\\d+";
+            Pattern regex = Pattern.compile(pattern);
+            Matcher matcher = regex.matcher(age);
+            if (matcher.find()) {
+                return Integer.parseInt(matcher.group());
+            } else {
+                return 0;
+            }
+        }
+    }
+
+    public static String fetchAgeUint(String age) {
+        if (!StringUtil.isNumber(age)) {
+            String pattern = "^\\d+";
+            Pattern regex = Pattern.compile(pattern);
+            Matcher matcher = regex.matcher(age);
+            if (matcher.find()) {
+                return age.replaceFirst("^\\d+", "");
+            } else {
+                return age;
+            }
+        } else {
+            return "";
+        }
+    }
+
+
+    public static Integer parseSex(String sex) {
+        switch (sex) {
+            case "0":
+            case "女":
+                return 0;
+            case "1":
+            case "男":
+                return 1;
+            case "2":
+            case "未知":
+                return 3;
+            default:
+                return 3;
+        }
+    }
+}

+ 9 - 6
ncs-system-service/src/main/java/com/wdklian/ncs/ms/system/service/impl/ClerkServiceImpl.java

@@ -14,6 +14,7 @@ import com.wdklian.ncs.ms.feignclient.open.EmployeeFeignClient;
 import com.wdklian.ncs.ms.framework.database.annotation.Table;
 import com.wdklian.ncs.ms.framework.util.DateUtil;
 import com.wdklian.ncs.ms.framework.util.StringUtil;
+import com.wdklian.ncs.ms.system.common.StringHelper;
 import com.wdklian.ncs.ms.system.service.iservice.ClerkService;
 import com.wdklian.ncs.ms.system.service.iservice.MemberService;
 import com.wdklian.ncs.ms.system.service.iservice.RoleService;
@@ -120,7 +121,7 @@ public class ClerkServiceImpl extends SystemCRUDManagerImpl<ClerkDO> implements
                 member = new MemberDO();
             }
             member.setTrueName(employee.getName());
-            member.setSex(Integer.parseInt(StrUtil.isEmpty(employee.getSex()) ? "1" : employee.getSex()));
+            member.setSex(StringHelper.parseSex(employee.getSex()));
             member.setUnionId(ObjectId.next());
             if (StrUtil.isEmpty(member.getUname())) { //用户名为空,设置为中文姓名拼音+主键
                 member.setUname(StringUtil.getPingYin(employee.getName()) + employee.getKeyval().trim());
@@ -130,7 +131,7 @@ public class ClerkServiceImpl extends SystemCRUDManagerImpl<ClerkDO> implements
             member.setPassNo(employee.getPassNo());
             member.setMidentity(employee.getIdNo());
             if (StrUtil.isNotEmpty(employee.getBirthday())) {
-                member.setBirthday(DateUtil.getDateline(employee.getBirthday()));
+                member.setBirthday(StringHelper.parseDate(employee.getBirthday()));
             }
             if (member.getMemberId() == null) {
                 log.info("注册职员:" + member.toString() + ",employeeInfoDTO:" + employee.toString());
@@ -157,11 +158,11 @@ public class ClerkServiceImpl extends SystemCRUDManagerImpl<ClerkDO> implements
         } else {
             member = this.memberService.getModel(clerk.getMemberId());
             if (employeeChanged(employee, clerk, member)) { //his系统职员信息发生变化时,更新
-                member.setSex(Integer.parseInt(StrUtil.isEmpty(employee.getSex()) ? "1" : employee.getSex()));
+                member.setSex(StringHelper.parseSex(employee.getSex()));
                 member.setMobile(employee.getMobile());
                 member.setNickname(employee.getName());
                 if (StrUtil.isNotEmpty(employee.getBirthday())) {
-                    member.setBirthday(DateUtil.getDateline(employee.getBirthday()));
+                    member.setBirthday(StringHelper.parseDate(employee.getBirthday()));
                 }
                 this.memberService.edit(member, member.getMemberId());
                 clerk.setClerkName(member.getNickname());
@@ -272,9 +273,11 @@ public class ClerkServiceImpl extends SystemCRUDManagerImpl<ClerkDO> implements
     private boolean employeeChanged(EmployeeDO employee, ClerkDO clerk, MemberDO member) {
         return !(Objects.equals(employee.getName(), member.getTrueName()) &&
                 Objects.equals(employee.getMobile(), member.getMobile()) &&
-                Objects.equals(Integer.parseInt(StrUtil.isEmpty(employee.getSex()) ? "0" : employee.getSex()), member.getSex()) &&
-                Objects.equals(DateUtil.getDateline(StrUtil.isEmpty(employee.getBirthday()) ? "1987-01-23" : employee.getBirthday()), member.getBirthday()) &&
+                Objects.equals(StringHelper.parseSex(employee.getSex()), member.getSex()) &&
+                Objects.equals(StringHelper.parseDate(employee.getBirthday()), member.getBirthday()) &&
                 Objects.equals(employee.getPartKeyval().trim(), clerk.getHisPartKeyval().trim()));
     }
 
+
+
 }

+ 9 - 75
ncs-system-service/src/main/java/com/wdklian/ncs/ms/system/service/impl/CustomerServiceImpl.java

@@ -1,7 +1,6 @@
 package com.wdklian.ncs.ms.system.service.impl;
 
 
-import cn.hutool.core.date.DateTime;
 import cn.hutool.core.lang.ObjectId;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -23,6 +22,7 @@ import com.wdklian.ncs.ms.framework.exception.ServiceException;
 import com.wdklian.ncs.ms.framework.util.BeanUtil;
 import com.wdklian.ncs.ms.framework.util.DateUtil;
 import com.wdklian.ncs.ms.framework.util.StringUtil;
+import com.wdklian.ncs.ms.system.common.StringHelper;
 import com.wdklian.ncs.ms.system.service.iservice.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.ListUtils;
@@ -36,8 +36,6 @@ import javax.annotation.Resource;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -302,7 +300,7 @@ public class CustomerServiceImpl extends SystemCRUDManagerImpl<CustomerDO> imple
         member = new MemberDO();
         member.setUnionId(ObjectId.next());
         member.setUname(StringUtil.getPingYin(patient.getName()) + patient.getKeyval());
-        member.setBirthday(parseDate(patient.getBirthday()));
+        member.setBirthday(StringHelper.parseDate(patient.getBirthday()));
         member = updateMember(patient, member);
         member = this.memberService.register(member);
         return member;
@@ -396,7 +394,7 @@ public class CustomerServiceImpl extends SystemCRUDManagerImpl<CustomerDO> imple
         if (StrUtil.isNotEmpty(patient.getStatus()) && Integer.parseInt(patient.getStatus()) == (HospitaliseStatusEnum.DISCHARGED.value()) && customer != null) {
             customer.setStatus(HospitaliseStatusEnum.DISCHARGED.value());
             this.edit(customer, customer.getId());
-            this.deviceService.updateMemberId(customer.getFrameId(), DeviceTypeEnum.DIGIT_BED_DEVICE.value(), 0);
+            this.deviceService.updateMemberId(customer.getFrameId(), new int[]{DeviceTypeEnum.DIGIT_BED_DEVICE.value(),DeviceTypeEnum.RS485_DOOR_DEVICE.value(),DeviceTypeEnum.SIMULATE_BED_DEVICE.value()}, 0);
             return customer;
         }
 
@@ -419,7 +417,7 @@ public class CustomerServiceImpl extends SystemCRUDManagerImpl<CustomerDO> imple
                 Boolean changed = updateCustomerCareCharge(ObjectUtil.defaultIfNull(customerDO, customer), clerkDOS, customerCareMapping);
                 if (changed) {
                     customerDO = ObjectUtil.defaultIfNull(customerDO, customer);
-                    this.deviceService.updateMemberId(customerDO.getFrameId(), DeviceTypeEnum.DIGIT_BED_DEVICE.value(), customerDO.getMemberId());
+                    this.deviceService.updateMemberId(customerDO.getFrameId(), new int[]{DeviceTypeEnum.DIGIT_BED_DEVICE.value(),DeviceTypeEnum.RS485_DOOR_DEVICE.value(),DeviceTypeEnum.SIMULATE_BED_DEVICE.value()}, customerDO.getMemberId());
                 }
             }
             return customerDO;
@@ -475,7 +473,7 @@ public class CustomerServiceImpl extends SystemCRUDManagerImpl<CustomerDO> imple
 
 
     private MemberDO updateMember(PatientDO patient, MemberDO memberDO) {
-        memberDO.setSex(parseSex(patient.getSex()));
+        memberDO.setSex(StringHelper.parseSex(patient.getSex()));
         memberDO.setMobile(patient.getKeyval());
         memberDO.setTrueName(patient.getName());
         memberDO.setNickname(patient.getName());
@@ -484,10 +482,10 @@ public class CustomerServiceImpl extends SystemCRUDManagerImpl<CustomerDO> imple
 
     private CustomerDO updateCustomer(PatientDO patient, ShopDO shop, FrameDO bed, CustomerDO customerDO) {
         String age = patient.getAge().toString();
-        Integer patientAge = fetchAge(age);
+        Integer patientAge = StringHelper.fetchAge(age);
         customerDO.setAge(patientAge);
         if (StrUtil.isEmpty(patient.getAgeUnit())) { //没有传入年龄单位,尝试从年龄中获取
-            String au = fetchAgeUint(age);
+            String au = StringHelper.fetchAgeUint(age);
             if (StrUtil.isEmpty(au)) {
                 customerDO.setAgeUnit("岁");
             } else {
@@ -526,9 +524,9 @@ public class CustomerServiceImpl extends SystemCRUDManagerImpl<CustomerDO> imple
                 //系统显示患者出院,而调用该方法比对时,用户肯定是在院的。此时需要把用户重新设置为住院
                 customerDO.getStatus().equals(HospitaliseStatusEnum.HOSPITALIZED.value()) &&
 //                Objects.equals(customerDO.getStatus().toString(),patientInfoDTO.getStatus())&&
-                Objects.equals(customerDO.getAge(), fetchAge(patient.getAge().toString())) && //年龄是否有变化
+                Objects.equals(customerDO.getAge(), StringHelper.fetchAge(patient.getAge().toString())) && //年龄是否有变化
 //                Objects.equals(customerDO.getAgeUnit(), patientInfoDTO.getAgeUnit()) &&
-                Objects.equals(memberDO.getSex(), parseSex(patient.getSex())));
+                Objects.equals(memberDO.getSex(), StringHelper.parseSex(patient.getSex())));
 
         if (!i) {
             int b = 1;
@@ -565,74 +563,10 @@ public class CustomerServiceImpl extends SystemCRUDManagerImpl<CustomerDO> imple
     }
 
 
-    private Integer parseSex(String sex) {
-        switch (sex) {
-            case "0":
-            case "女":
-                return 0;
-            case "1":
-            case "男":
-                return 1;
-            case "2":
-            case "未知":
-                return 3;
-            default:
-                return 3;
-        }
-    }
 
 
-    private Long parseDate(String date) {
-        if (StrUtil.isNotEmpty(date)) {
-            if (StringUtil.isDateTime(date)) {
-                try {
-                    DateTime localDate = cn.hutool.core.date.DateUtil.parse(date);
-//                Date dateOflocalDate = Date.from(localDate.atStartOfDay().toInstant(ZoneOffset.UTC));
-                    return DateUtil.getDateline(cn.hutool.core.date.DateUtil.format(localDate,"yyyy-MM-dd"));
-                }catch (Exception e){
-                    return DateUtil.getDateline();
-                }
 
-            } else {
-                return DateUtil.getDateline();
-            }
 
-        } else {
-            return DateUtil.getDateline();
-        }
-    }
-
-
-    //提取年龄,很多系统的年龄表述不仅仅是岁月天,有几岁几个月,几月几天等等。在遇到此类表述时,把第一个数字取出来作为age的值,剩下的作为age_unit的值
-    private Integer fetchAge(String age) {
-        if (StrUtil.isEmpty(age)) {
-            return 0;
-        } else {
-            String pattern = "^\\d+";
-            Pattern regex = Pattern.compile(pattern);
-            Matcher matcher = regex.matcher(age);
-            if (matcher.find()) {
-                return Integer.parseInt(matcher.group());
-            } else {
-                return 0;
-            }
-        }
-    }
-
-    private String fetchAgeUint(String age) {
-        if (!StringUtil.isNumber(age)) {
-            String pattern = "^\\d+";
-            Pattern regex = Pattern.compile(pattern);
-            Matcher matcher = regex.matcher(age);
-            if (matcher.find()) {
-                return age.replaceFirst("^\\d+", "");
-            } else {
-                return age;
-            }
-        } else {
-            return "";
-        }
-    }
 
 
     @Override

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

@@ -60,9 +60,9 @@ public class DeviceServiceImpl extends SystemCRUDManagerImpl<DeviceDO> implement
     }
 
     @Override
-    public void updateMemberId(Integer frameId, int deviceType, int memberId) {
-        String sql = "update "+DeviceDO.class.getAnnotation(Table.class).name()+" set member_id =? where frame_id=? and device_type=?";
-        this.daoSupport.execute(sql,memberId,frameId,deviceType);
+    public void updateMemberId(Integer frameId, int[] deviceType, int memberId) {
+        String sql = "update "+DeviceDO.class.getAnnotation(Table.class).name()+" set member_id =? where frame_id=? and find_in_set(device_type,?)";
+        this.daoSupport.execute(sql,memberId,frameId,StrUtil.join(",",deviceType));
     }
 
 

+ 1 - 1
ncs-system-service/src/main/java/com/wdklian/ncs/ms/system/service/iservice/DeviceService.java

@@ -18,6 +18,6 @@ public interface DeviceService extends CRUDBaseManager<DeviceDO> {
 
     void deviceRefreshMQ(List<CustomerDO> changeCustomers, List<Integer> boardChangePartIds);
 
-    void updateMemberId(Integer frameId, int value, int i);
+    void updateMemberId(Integer frameId, int[] value, int i);
 }
 

+ 35 - 0
readme.md

@@ -0,0 +1,35 @@
+## HIS对接平台微服务工程
+
+### alibaba nacos 
+- 使用nacos 作为服务注册中心和配置中心
+- 搭建nacos 服务时,nacos文件夹下的 mysql-schema.sql为nacos运行数据库mysql版本,在安装之前需创建数据库并执行文件
+- docker 部署nacos 单机版,把nacos/conf/application.properties 映射到容器中的配置文件。注意修改配置文件中的mysql连接ip 用户名密码和数据库名称
+```
+docker run -d -it  -v /Volumes/mac/projects/ncs-ms/nacos/conf/application.properties:/home/nacos/conf/application.properties  -p 8848:8848 -p 9848:9848  --restart=always --name nacos nacos/nacos-server:v2.2.0
+```
+
+### ncs-open-service
+- 第三方数据存储微服务,提供对数据库wdkl_open_plateform操作的访问接口,最先启动的微服务,不依赖其他任何服务
+- 不管以何种方式接入数据,数据都将保存在wdkl_open_plateform数据库中,同时有关医嘱的配置规则也保存在该数据库中
+- wdkl_open_plateform 数据库创建语句在 sql文件夹下
+
+### ncs-system-service 
+- 提供对wdkl_ncs数据库操作的访问接口。
+- 依赖于ncs-open-service,通过接口调用获取职员数据,科室数据,患者数据,医嘱数据等。最终反馈到呼叫系统数据的变化
+
+### ncs-entrace-service
+- 数据对接的统一入口。无论是对方直接调用我方接口,还是我方调用对方接口获得数据,都应该从此服务接入数据。
+- 此服务作为消费微服务,在上层处理ncs-open-service和ncs-system-service 之间的数据逻辑。
+
+
+### third-part-gateway 
+- 微服务网关,提供通过服务名+path方式访问微服务接口,同时配置路由到ncs.system的接口访问。主要是open ui需要登录访问system接口
+
+### ncs-ms-feign 
+- openfeign 客户统一管理工程
+
+### third-part-wn-hl7
+- 益阳中心医院卫宁数据平台对接工程。解析HL7协议数据,存储在wdkl_open_plateform库,同时处理到呼叫系统
+
+### third-part-zldata
+- 南充妇儒医院,重庆中联数据推送处理工程。

+ 213 - 0
sql/wdkl_open_plateform.sql

@@ -0,0 +1,213 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : localmysql
+ Source Server Type    : MySQL
+ Source Server Version : 50732
+ Source Host           : localhost:3306
+ Source Schema         : wdkl_open_plateform
+
+ Target Server Type    : MySQL
+ Target Server Version : 50732
+ File Encoding         : 65001
+
+ Date: 21/01/2024 15:16:45
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for advice_ref_board_item
+-- ----------------------------
+DROP TABLE IF EXISTS `advice_ref_board_item`;
+CREATE TABLE `advice_ref_board_item` (
+  `id` int(16) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `board_item_name_md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '看板条目名称md5',
+  `advice_content_md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '医嘱名称md5',
+  `part_id` int(16) DEFAULT NULL COMMENT '科室Id',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPACT COMMENT='医嘱条目手动设置关联看板项目';
+
+-- ----------------------------
+-- Table structure for advice_ref_nursing_mark_option
+-- ----------------------------
+DROP TABLE IF EXISTS `advice_ref_nursing_mark_option`;
+CREATE TABLE `advice_ref_nursing_mark_option` (
+  `id` int(16) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `nurse_option_name_md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '床头屏护理项目名称md5',
+  `advice_content_md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '医嘱名称md5',
+  `nurse_category_name_md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '床头屏护理项目分类名称MD5',
+  `part_id` int(16) DEFAULT NULL COMMENT '科室id',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPACT COMMENT='医嘱手动关联护理项目';
+
+-- ----------------------------
+-- Table structure for advice_unique_content
+-- ----------------------------
+DROP TABLE IF EXISTS `advice_unique_content`;
+CREATE TABLE `advice_unique_content` (
+  `content_md5` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '内容md5',
+  `advice_content` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '医嘱内容',
+  PRIMARY KEY (`content_md5`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=COMPACT COMMENT='医嘱内容不重条目,用来选择医嘱匹配';
+
+-- ----------------------------
+-- Table structure for board_item_config
+-- ----------------------------
+DROP TABLE IF EXISTS `board_item_config`;
+CREATE TABLE `board_item_config` (
+  `id` int(16) NOT NULL AUTO_INCREMENT,
+  `item_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '项目名称,科室内唯一',
+  `item_group` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '项目分组',
+  `item_name_md5` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '项目名称md5',
+  `for_part_id` int(16) DEFAULT NULL COMMENT '指定科室id',
+  `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '项目说明',
+  `contains_keywords` text COLLATE utf8mb4_unicode_ci COMMENT '项目匹配关键字JSON数组',
+  `copy_from` int(16) DEFAULT NULL COMMENT '拷贝源Id',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPACT COMMENT='看板项目设置';
+
+-- ----------------------------
+-- Table structure for department
+-- ----------------------------
+DROP TABLE IF EXISTS `department`;
+CREATE TABLE `department` (
+  `keyval` varchar(50) COLLATE utf8_bin NOT NULL,
+  `name` varchar(50) COLLATE utf8_bin DEFAULT NULL,
+  `summary` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+  `tel` varchar(20) COLLATE utf8_bin DEFAULT NULL,
+  PRIMARY KEY (`keyval`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=COMPACT COMMENT='His系统的科室数据';
+
+-- ----------------------------
+-- Table structure for doctor_advice
+-- ----------------------------
+DROP TABLE IF EXISTS `doctor_advice`;
+CREATE TABLE `doctor_advice` (
+  `his_key` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'his主键',
+  `advice_content` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '医嘱内容',
+  `state` tinyint(1) DEFAULT NULL COMMENT '医嘱状态(1、有效,0、无效)',
+  `patient_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'his患者主键',
+  `patient_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '呼叫系统患者主键',
+  `customer_bed_no` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '患者床位号',
+  `his_part_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'his患者科室主键',
+  `content_md5` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '内容加密字符串(作为内容唯一标记)',
+  `advice_time` datetime DEFAULT NULL COMMENT '医嘱时间',
+  `sync_state` tinyint(1) DEFAULT NULL COMMENT '同步状态,datax同步数据时,先设置此字段为0,同步语句中设置此字段为1,由此字段判断源数据库是否已删除记录',
+  PRIMARY KEY (`his_key`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPACT COMMENT='His系统医嘱';
+
+-- ----------------------------
+-- Table structure for employee
+-- ----------------------------
+DROP TABLE IF EXISTS `employee`;
+CREATE TABLE `employee` (
+  `keyval` varchar(50) COLLATE utf8_bin NOT NULL,
+  `part_keyval` varchar(50) COLLATE utf8_bin DEFAULT NULL,
+  `pass_no` varchar(20) COLLATE utf8_bin DEFAULT NULL,
+  `name` varchar(20) COLLATE utf8_bin DEFAULT NULL,
+  `type` varchar(10) COLLATE utf8_bin DEFAULT NULL,
+  `sex` varchar(10) COLLATE utf8_bin DEFAULT NULL,
+  `birthday` varchar(20) COLLATE utf8_bin DEFAULT NULL,
+  `id_no` varchar(20) COLLATE utf8_bin DEFAULT NULL,
+  `head_pic` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+  `mobile` varchar(15) COLLATE utf8_bin DEFAULT NULL,
+  PRIMARY KEY (`keyval`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=COMPACT COMMENT='His系统的职员数据';
+
+-- ----------------------------
+-- Table structure for manual_input_board_item_confing
+-- ----------------------------
+DROP TABLE IF EXISTS `manual_input_board_item_confing`;
+CREATE TABLE `manual_input_board_item_confing` (
+  `id` int(10) NOT NULL AUTO_INCREMENT,
+  `item_name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '手工输入看板项目名称',
+  `item_name_md5` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '名称Md5',
+  `remark` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '说明',
+  `for_part_id` int(10) DEFAULT NULL COMMENT '所属科室,-1为所有科室',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=COMPACT;
+
+-- ----------------------------
+-- Table structure for nursing_mark_category_config
+-- ----------------------------
+DROP TABLE IF EXISTS `nursing_mark_category_config`;
+CREATE TABLE `nursing_mark_category_config` (
+  `id` int(16) NOT NULL AUTO_INCREMENT,
+  `category_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '护理分类名称,科室内必须唯一',
+  `index_no` int(2) DEFAULT NULL COMMENT '显示排序',
+  `critical` bit(1) DEFAULT NULL COMMENT '是否关键项目(主机标记该项目)',
+  `for_part_id` int(16) DEFAULT NULL COMMENT '-1为默认模版,需要科室确定是否使用',
+  `name_md5` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'md5加密分类名称字符串',
+  `default_color` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '默认背景色',
+  `bool_manual` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否为手动选择类目',
+  `copy_from` int(16) DEFAULT NULL COMMENT '拷贝源记录Id',
+  `bool_auto` bit(1) NOT NULL DEFAULT b'0' COMMENT '根据匹配内容自动生成子项目',
+  `match_condition` text COLLATE utf8mb4_unicode_ci COMMENT '匹配规则JSON数组',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=295 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPACT COMMENT='床头分机上的护理项目分类';
+
+-- ----------------------------
+-- Table structure for nursing_mark_option_config
+-- ----------------------------
+DROP TABLE IF EXISTS `nursing_mark_option_config`;
+CREATE TABLE `nursing_mark_option_config` (
+  `id` int(16) NOT NULL AUTO_INCREMENT,
+  `item_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '项目名称,科室内必须唯一',
+  `category_id` int(16) DEFAULT NULL COMMENT '分类名称',
+  `item_name_md5` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '项目名称md5',
+  `category_name_md5` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '分类名称md5',
+  `color` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '项目颜色',
+  `for_part_id` int(16) DEFAULT NULL COMMENT '指定科室Id',
+  `index_no` int(3) DEFAULT NULL COMMENT '显示顺序',
+  `contains_keywords` text COLLATE utf8mb4_unicode_ci COMMENT '自动匹配包含的关键字数组',
+  `copy_from` int(16) DEFAULT NULL COMMENT '拷贝源Id',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=245 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPACT COMMENT='护理参数选择项目';
+
+-- ----------------------------
+-- Table structure for part_temp_beds
+-- ----------------------------
+DROP TABLE IF EXISTS `part_temp_beds`;
+CREATE TABLE `part_temp_beds` (
+  `id` int(16) NOT NULL AUTO_INCREMENT,
+  `bed_no` varchar(30) COLLATE utf8_bin DEFAULT NULL COMMENT '床位号',
+  `device_type` int(16) DEFAULT NULL COMMENT '床位设备类型',
+  `eth_mac` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '设备mac地址',
+  `part_id` int(16) DEFAULT NULL COMMENT '科室id',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=COMPACT COMMENT='科室加床号设置,由护士站输入,确定床号为无呼叫设备的加床床位';
+
+-- ----------------------------
+-- Table structure for patient
+-- ----------------------------
+DROP TABLE IF EXISTS `patient`;
+CREATE TABLE `patient` (
+  `keyval` varchar(50) COLLATE utf8_bin NOT NULL,
+  `part_keyval` varchar(50) COLLATE utf8_bin DEFAULT NULL,
+  `card_no` varchar(50) COLLATE utf8_bin DEFAULT NULL,
+  `bed_no` varchar(50) COLLATE utf8_bin DEFAULT NULL,
+  `name` varchar(50) COLLATE utf8_bin DEFAULT NULL,
+  `sex` char(1) COLLATE utf8_bin DEFAULT NULL,
+  `age` varchar(50) COLLATE utf8_bin DEFAULT NULL,
+  `age_unit` varchar(50) COLLATE utf8_bin DEFAULT NULL,
+  `birthday` varchar(20) COLLATE utf8_bin DEFAULT NULL,
+  `id_no` varchar(20) COLLATE utf8_bin DEFAULT NULL,
+  `address` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+  `mobile` varchar(15) COLLATE utf8_bin DEFAULT NULL,
+  `indate` varchar(20) COLLATE utf8_bin DEFAULT NULL,
+  `baby_name` varchar(20) COLLATE utf8_bin DEFAULT NULL,
+  `baby_sex` char(1) COLLATE utf8_bin DEFAULT NULL,
+  `baby_birthday` varchar(20) COLLATE utf8_bin DEFAULT NULL,
+  `doctor_keyval` varchar(20) COLLATE utf8_bin DEFAULT NULL,
+  `nurse_keyval` varchar(20) COLLATE utf8_bin DEFAULT NULL,
+  `status` char(1) COLLATE utf8_bin DEFAULT NULL COMMENT '0-住院,1-出院',
+  `outdate` varchar(20) COLLATE utf8_bin DEFAULT NULL,
+  `illness_description` text COLLATE utf8_bin,
+  `part_id` int(10) DEFAULT NULL COMMENT '呼叫系统科室Id,此Id有值,说明同步到呼叫系统中的customer表.无值则未同步',
+  `sync_state` tinyint(1) DEFAULT NULL COMMENT '同步状态,datax同步数据时,先设置此字段为0,同步语句中设置此字段为1,由此字段判断源数据库是否已删除记录',
+  PRIMARY KEY (`keyval`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=COMPACT COMMENT='His患者数据,同步过来后用来统计';
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 9 - 9
third-part-wn-hl7/src/main/resources/bootstrap.yml

@@ -37,11 +37,11 @@ server:
 logging:
   config: classpath:logback-wn.xml
   level:
-    com.wdklian.ncs.ms.feignclient.*: debug
-ribbon:
-  MaxAutoRetries: 2
-  MaxAutoRetriesNextServer: 3
-  OkToRetryOnAllOperations: false
+    com.wdklian.ncs.ms.feignclient.*: debug #开启open-feign调用日志
+#ribbon:
+#  MaxAutoRetries: 2
+#  MaxAutoRetriesNextServer: 3
+#  OkToRetryOnAllOperations: false
 
 
 graylog:
@@ -52,7 +52,7 @@ feign:
   client:
     config:
       default:
-        retryer: com.wdklian.ncs.ms.retryer.MyRetryer #超时重试
-        ConnectTimeOut: 10000
-        ReadTimeOut: 10000
-        loggerLevel: FULL
+        retryer: com.wdklian.ncs.ms.retryer.MyRetryer #超时重试配置
+        ConnectTimeOut: 10000  #open-feign连接超时时长
+        ReadTimeOut: 10000 #open-feign读超时时长
+        loggerLevel: FULL #必须设置为FULL才会打印open-fegin请求日志

+ 4 - 3
third-part-zldata/src/main/java/com/wdklian/ncs/ms/zldata/service/ZLDataHandle.java

@@ -2,7 +2,6 @@ package com.wdklian.ncs.ms.zldata.service;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.wdklian.ncs.ms.common.entity.open.dos.DepartmentDO;
 import com.wdklian.ncs.ms.common.entity.open.dos.DoctorAdviceDO;
@@ -141,7 +140,9 @@ public class ZLDataHandle {
     private void handlePatientOut(JSONObject data) { //患者出院
         JSONObject patientInfo = JSONObject.from(data.getByPath("$.input.pat_info"));
         String patientId = StrUtil.emptyToDefault(patientInfo.getString("pid"), null);//患者id
-        this.entracePatientFeignClient.patientOut(patientId);
+        if(StrUtil.isNotEmpty(patientId)) {
+            this.entracePatientFeignClient.patientOut(patientId);
+        }
     }
 
 
@@ -232,7 +233,7 @@ public class ZLDataHandle {
             doctorAdviceDOS.add(doctorAdviceDO);
         }
         if (StrUtil.isNotEmpty(patConditon)) {
-            DoctorAdviceDO doctorAdviceDO = new DoctorAdviceDO("PC-" + patientId, patConditon, "1", patientId, patientName, bedNo, wardId, null, DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
+            DoctorAdviceDO doctorAdviceDO = new DoctorAdviceDO("PC-" + patientId, "病情—"+patConditon, "1", patientId, patientName, bedNo, wardId, null, DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
             doctorAdviceDOS.add(doctorAdviceDO);
         }
         if (StrUtil.isNotEmpty(dsctplanName)) {