Parcourir la source

Merge branch 'dev/20210625_v3.1_权限' into debug

rengb il y a 3 ans
Parent
commit
b305d7d6bb
24 fichiers modifiés avec 1589 ajouts et 95 suppressions
  1. 34 0
      common/src/main/java/com/lantone/common/vo/BlockLossTypeGatherVO.java
  2. 6 1
      daqe-center/src/main/java/com/lantone/daqe/client/OperationLogService.java
  3. 48 0
      daqe-center/src/main/java/com/lantone/daqe/dto/BlockLossTypeGatherDTO.java
  4. 237 72
      daqe-center/src/main/java/com/lantone/daqe/facade/BlockLossManagementFacade.java
  5. 18 1
      daqe-center/src/main/java/com/lantone/daqe/facade/RegularManagementFacade.java
  6. 54 0
      daqe-center/src/main/java/com/lantone/daqe/task/BlockLossDataCompareTask.java
  7. 9 0
      daqe-center/src/main/java/com/lantone/daqe/web/BlockLossManagementController.java
  8. 2 0
      daqe-center/src/main/java/com/lantone/daqe/web/DiseaseManagementController.java
  9. 2 0
      daqe-center/src/main/java/com/lantone/daqe/web/DrugManagementController.java
  10. 2 0
      daqe-center/src/main/java/com/lantone/daqe/web/OperationManagementController.java
  11. 4 0
      daqe-center/src/main/java/com/lantone/daqe/web/RegularManagementController.java
  12. 7 1
      daqe-center/src/main/resources/bootstrap.yml
  13. 389 0
      daqe-center/src/main/resources/upgrade/V1__daqe_init.sql
  14. 6 0
      dblayer-mbg/pom.xml
  15. 21 0
      dblayer-mbg/src/main/resources/application.yml
  16. 0 0
      report-service/src/main/resources/upgrade/V1__report_init.sql
  17. 4 5
      security-center/src/main/java/com/lantone/security/component/DictionaryHolder.java
  18. 4 5
      security-center/src/main/java/com/lantone/security/component/HospitalSetHolder.java
  19. 4 5
      security-center/src/main/java/com/lantone/security/component/ResourceRoleRulesHolder.java
  20. 4 5
      security-center/src/main/java/com/lantone/security/component/UserDataAuthHolder.java
  21. 13 0
      security-center/src/main/java/com/lantone/security/facade/LogManagementFacade.java
  22. 7 0
      security-center/src/main/java/com/lantone/security/web/LogManagementController.java
  23. 677 0
      security-center/src/main/resources/upgrade/V1__emrais_init.sql
  24. 37 0
      security-center/src/main/resources/upgrade/V2__emrais_新增站内信相关表.sql

+ 34 - 0
common/src/main/java/com/lantone/common/vo/BlockLossTypeGatherVO.java

@@ -0,0 +1,34 @@
+package com.lantone.common.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 丢失量分类汇总-接口入参
+ * @author: songxl
+ * @time: 2022/2/28 11:15
+ */
+@ApiModel(value = "丢失量分类汇总-接口入参")
+@Getter
+@Setter
+public class BlockLossTypeGatherVO implements Serializable {
+
+    private static final long serialVersionUID = -1684190802918443494L;
+
+    @ApiModelProperty(value = "开始日期")
+    private Date startDate;
+
+    @ApiModelProperty(value = "截止日期")
+    private Date endDate;
+
+
+    @ApiModelProperty(value = "操作url集合", hidden = true)
+    private List<String> operationUrls;
+
+}

+ 6 - 1
daqe-center/src/main/java/com/lantone/daqe/client/OperationLogService.java

@@ -2,7 +2,9 @@ package com.lantone.daqe.client;
 
 import com.lantone.common.api.CommonResult;
 import com.lantone.common.dto.GetOperationLogDTO;
+import com.lantone.common.vo.BlockLossTypeGatherVO;
 import com.lantone.common.vo.DataCompareVO;
+import io.swagger.models.auth.In;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -18,6 +20,9 @@ import java.util.List;
 public interface OperationLogService {
 
     @PostMapping("/logManage/getOperationLogs")
-    CommonResult<List<GetOperationLogDTO>> getOperationLog(@RequestBody DataCompareVO dataCompareVO);
+    CommonResult<List<GetOperationLogDTO>> getOperationLogs(@RequestBody DataCompareVO dataCompareVO);
+
+    @PostMapping("/logManage/getOperationLogNum")
+    CommonResult<Integer> getOperationLogNum(@RequestBody BlockLossTypeGatherVO blockLossTypeGatherVO);
 
 }

+ 48 - 0
daqe-center/src/main/java/com/lantone/daqe/dto/BlockLossTypeGatherDTO.java

@@ -0,0 +1,48 @@
+package com.lantone.daqe.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 丢失量分类汇总-接口出参
+ * @author: songxl
+ * @time: 2022/3/1 10:30
+ */
+@ApiModel(value = "丢失量分类汇总-接口出参")
+@Getter
+@Setter
+public class BlockLossTypeGatherDTO implements Serializable {
+
+
+    private static final long serialVersionUID = -4656915107891039438L;
+    @ApiModelProperty(value = "HIS数量")
+    private Integer hisNum;
+    @ApiModelProperty(value = "接口日志数量")
+    private Integer logNum;
+    @ApiModelProperty(value = "实际数量")
+    private Integer realNum;
+    @ApiModelProperty(value = "合计丢失数量")
+    private Integer allLossNum;
+    @ApiModelProperty(value = "外部丢失数量")
+    private Integer outLossNum;
+    @ApiModelProperty(value = "外部文书丢失数量")
+    private Integer outRecNum;
+    @ApiModelProperty(value = "外部病历号丢失数量")
+    private Integer outCodeNum;
+    @ApiModelProperty(value = "外部病案首页丢失数量")
+    private Integer outHomePageNum;
+    @ApiModelProperty(value = "内部丢失数量")
+    private Integer inLossNum;
+    @ApiModelProperty(value = "内部文书丢失数量")
+    private Integer inRecNum;
+    @ApiModelProperty(value = "内部病历号丢失数量")
+    private Integer inCodeNum;
+    @ApiModelProperty(value = "内部病案首页丢失数量")
+    private Integer inHomePageNum;
+
+
+}

+ 237 - 72
daqe-center/src/main/java/com/lantone/daqe/facade/BlockLossManagementFacade.java

@@ -11,7 +11,9 @@ import com.lantone.common.util.EntityUtil;
 import com.lantone.common.util.ListUtil;
 import com.lantone.common.util.StringUtil;
 import com.lantone.common.util.SysUserUtils;
+import com.lantone.common.vo.BlockLossTypeGatherVO;
 import com.lantone.daqe.client.OperationLogService;
+import com.lantone.daqe.dto.BlockLossTypeGatherDTO;
 import com.lantone.daqe.dto.GetBlockLossPageDTO;
 import com.lantone.common.dto.GetOperationLogDTO;
 import com.lantone.daqe.dto.HisMedicalRecordDTO;
@@ -20,6 +22,7 @@ import com.lantone.daqe.entity.BehospitalInfo;
 import com.lantone.daqe.entity.BlocklossResult;
 import com.lantone.daqe.entity.HomePage;
 import com.lantone.daqe.entity.MedicalRecord;
+import com.lantone.daqe.entity.MedicalRecordContent;
 import com.lantone.daqe.enums.LossStatusEnum;
 import com.lantone.daqe.enums.LossTypeEnum;
 import com.lantone.daqe.enums.LossWayEnum;
@@ -27,6 +30,7 @@ import com.lantone.daqe.facade.base.BehospitalInfoFacade;
 import com.lantone.daqe.facade.base.BlocklossResultFacade;
 import com.lantone.common.vo.DataCompareVO;
 import com.lantone.daqe.facade.base.HomePageFacade;
+import com.lantone.daqe.facade.base.MedicalRecordContentFacade;
 import com.lantone.daqe.facade.base.MedicalRecordFacade;
 import com.lantone.daqe.service.impl.BlocklossResultServiceImpl;
 import com.lantone.daqe.vo.GetBlockLossPageVO;
@@ -58,6 +62,8 @@ public class BlockLossManagementFacade {
     @Autowired
     private MedicalRecordFacade medicalRecordFacade;
     @Autowired
+    private MedicalRecordContentFacade medicalRecordContentFacade;
+    @Autowired
     private OperationLogService operationLogService;
 
 
@@ -80,6 +86,8 @@ public class BlockLossManagementFacade {
     public Boolean upBlockLossById(UpBlockLossByIdVO upBlockLossByIdVO) {
         BlocklossResult blocklossResult = new BlocklossResult();
         BeanUtils.copyProperties(upBlockLossByIdVO, blocklossResult);
+        blocklossResult.setModifier(SysUserUtils.getCurrentPrinciple());
+        blocklossResult.setGmtModified(DateUtil.now());
         return blocklossResultFacade.updateById(blocklossResult);
     }
 
@@ -97,8 +105,9 @@ public class BlockLossManagementFacade {
                 .le(dataCompareVO.getStartDate() != null, "gmt_create", dataCompareVO.getStartDate())
                 .eq("status", LossStatusEnum.IS_LOSS.getKey())
                 .eq("is_deleted", IsDeleteEnum.N.getKey()));
+        Map<String, List<BlocklossResult>> lossResultMap = null;
         if (ListUtil.isNotEmpty(lossResults)) {
-            Map<String, List<BlocklossResult>> lossResultMap = EntityUtil.makeEntityListMap(lossResults, "lossType");
+            lossResultMap = EntityUtil.makeEntityListMap(lossResults, "lossType");
             //更新以缺失数据的状态
             flag = upBlockLossStatus(lossResultMap);
         }
@@ -112,13 +121,13 @@ public class BlockLossManagementFacade {
         //获取操作记录数据
         //病历数据
         dataCompareVO.setOperationUrl("save/saveBehospitalCode");
-        List<GetOperationLogDTO> behospitalCodeLogs = getOperationLog(dataCompareVO);
+        List<GetOperationLogDTO> behospitalCodeLogs = getOperationLogs(dataCompareVO);
         //病案首页数据
         dataCompareVO.setOperationUrl("save/saveHomePages");
-        List<GetOperationLogDTO> homePageLogs = getOperationLog(dataCompareVO);
+        List<GetOperationLogDTO> homePageLogs = getOperationLogs(dataCompareVO);
         //文书数据
         dataCompareVO.setOperationUrl("save/saveRecs");
-        List<GetOperationLogDTO> recLogs = getOperationLog(dataCompareVO);
+        List<GetOperationLogDTO> recLogs = getOperationLogs(dataCompareVO);
 
         //获取库中数据
         //病历数据
@@ -147,6 +156,43 @@ public class BlockLossManagementFacade {
                 .eq("is_deleted", IsDeleteEnum.N.getKey()))
                 .stream().map(MedicalRecord::getRecId).collect(Collectors.toList());
 
+        //==已丢失 外部|内部 病历、文书、病案首页 id集合
+        //外部
+        List<String> outLossCodes = null;
+        List<String> outLossHomepages = null;
+        List<String> outLossRecs = null;
+        //内部
+        List<String> inLossCodes = null;
+        List<String> inLossHomepages = null;
+        List<String> inLossRecs = null;
+        if (ListUtil.isNotEmpty(lossResultMap.get(LossTypeEnum.REC_LOSS.getKey()))) {
+            Map<String, List<BlocklossResult>> lossWayRecMap = EntityUtil.makeEntityListMap(lossResultMap.get(LossTypeEnum.REC_LOSS.getKey()), "lossWay");
+            if (ListUtil.isNotEmpty(lossWayRecMap.get(LossWayEnum.OUT_LOSS))) {
+                outLossRecs = lossWayRecMap.get(LossWayEnum.OUT_LOSS).stream().map(BlocklossResult::getRecId).collect(Collectors.toList());
+            }
+            if (ListUtil.isNotEmpty(lossWayRecMap.get(LossWayEnum.IN_LOSS))) {
+                inLossRecs = lossWayRecMap.get(LossWayEnum.IN_LOSS).stream().map(BlocklossResult::getRecId).collect(Collectors.toList());
+            }
+        }
+        if (ListUtil.isNotEmpty(lossResultMap.get(LossTypeEnum.HOMEPAGE_LOSS.getKey()))) {
+            Map<String, List<BlocklossResult>> lossWayHomePageMap = EntityUtil.makeEntityListMap(lossResultMap.get(LossTypeEnum.HOMEPAGE_LOSS.getKey()), "lossWay");
+            if (ListUtil.isNotEmpty(lossWayHomePageMap.get(LossWayEnum.OUT_LOSS))) {
+                outLossHomepages = lossWayHomePageMap.get(LossWayEnum.OUT_LOSS).stream().map(BlocklossResult::getRecId).collect(Collectors.toList());
+            }
+            if (ListUtil.isNotEmpty(lossWayHomePageMap.get(LossWayEnum.IN_LOSS))) {
+                inLossHomepages = lossWayHomePageMap.get(LossWayEnum.IN_LOSS).stream().map(BlocklossResult::getRecId).collect(Collectors.toList());
+            }
+        }
+        if (ListUtil.isNotEmpty(lossResultMap.get(LossTypeEnum.CODE_LOSS.getKey()))) {
+            Map<String, List<BlocklossResult>> lossWayCodeMap = EntityUtil.makeEntityListMap(lossResultMap.get(LossTypeEnum.CODE_LOSS.getKey()), "lossWay");
+            if (ListUtil.isNotEmpty(lossWayCodeMap.get(LossWayEnum.OUT_LOSS))) {
+                outLossCodes = lossWayCodeMap.get(LossWayEnum.OUT_LOSS).stream().map(BlocklossResult::getRecId).collect(Collectors.toList());
+            }
+            if (ListUtil.isNotEmpty(lossWayCodeMap.get(LossWayEnum.IN_LOSS))) {
+                inLossCodes = lossWayCodeMap.get(LossWayEnum.IN_LOSS).stream().map(BlocklossResult::getRecId).collect(Collectors.toList());
+            }
+        }
+
 
         //=====2.2数据对比
         //his与log日志做对比
@@ -170,25 +216,26 @@ public class BlockLossManagementFacade {
             //外部丢失数据集合
             List<BlocklossResult> outInserts = new ArrayList<>();
             //文书数据对比
-            compareHisWithLog(recs, recLogs, "0", outInserts);
+            compareHisWithLog(recs, recLogs, "0", outInserts, outLossRecs);
             //病案首页数据对比
-            compareHisWithLog(medicalRecords, homePageLogs, "1", outInserts);
+            compareHisWithLog(medicalRecords, homePageLogs, "1", outInserts, outLossHomepages);
             //病历数据对比
-            compareHisWithLog(medicalRecords, behospitalCodeLogs, "2", outInserts);
+            compareHisWithLog(medicalRecords, behospitalCodeLogs, "2", outInserts, outLossCodes);
+
             flag = blocklossResultServiceImpl.saveBatch(outInserts);
         }
 
         //日志与入库数据对比
         //内部丢失数据集合
         List<BlocklossResult> inInserts = new ArrayList<>();
-        if (ListUtil.isNotEmpty(dataBaseRecIds)) {
-            compareLogWithLocal(recLogs, dataBaseRecIds, "0", inInserts);
+        if (ListUtil.isNotEmpty(recLogs)) {
+            compareLogWithLocal(recLogs, dataBaseRecIds, "0", inInserts, inLossRecs);
         }
-        if (ListUtil.isNotEmpty(dataBaseHomePageIds)) {
-            compareLogWithLocal(homePageLogs, dataBaseHomePageIds, "1", inInserts);
+        if (ListUtil.isNotEmpty(homePageLogs)) {
+            compareLogWithLocal(homePageLogs, dataBaseHomePageIds, "1", inInserts, inLossHomepages);
         }
-        if (ListUtil.isNotEmpty(dataBaseBehospitalCodes)) {
-            compareLogWithLocal(behospitalCodeLogs, dataBaseBehospitalCodes, "2", inInserts);
+        if (ListUtil.isNotEmpty(behospitalCodeLogs)) {
+            compareLogWithLocal(behospitalCodeLogs, dataBaseBehospitalCodes, "2", inInserts, inLossCodes);
         }
         if (ListUtil.isNotEmpty(inInserts)) {
             flag = blocklossResultServiceImpl.saveBatch(inInserts);
@@ -199,45 +246,70 @@ public class BlockLossManagementFacade {
     /**
      * 日志与入库数据对比
      *
-     * @param logs      日志记录
-     * @param dataBases 入库数据
-     * @param type      对比类型:0:文书丢失 1:病案首页丢失 2:患者信息丢失
-     * @param inInserts 内部丢失插入集合
+     * @param logs          日志记录
+     * @param dataBases     入库数据
+     * @param type          对比类型:0:文书丢失 1:病案首页丢失 2:患者信息丢失
+     * @param inInserts     内部丢失插入集合
+     * @param havingLossIds 已经插入的id集合
      * @Return void
      */
-    private void compareLogWithLocal(List<GetOperationLogDTO> logs, List<String> dataBases, String type, List<BlocklossResult> inInserts) {
+    private void compareLogWithLocal(List<GetOperationLogDTO> logs, List<String> dataBases, String type,
+                                     List<BlocklossResult> inInserts, List<String> havingLossIds) {
         switch (type) {
             case "0":
                 //文书丢失
                 logs.stream().forEach(rec -> {
                     //存在记录但是没有入库
                     if (!dataBases.contains(rec.getRecId())) {
-                        BlocklossResult blocklossResult = new BlocklossResult();
-                        blocklossResult.setBehospitalCode(rec.getBehospitalCode());
-                        blocklossResult.setRecId(rec.getRecId());
-                        blocklossResult.setRecTitle(rec.getRecTitle());
-                        blocklossResult.setLossWay(LossWayEnum.IN_LOSS.getKey());
-                        blocklossResult.setLossType(LossTypeEnum.REC_LOSS.getKey());
-                        //拼装病历数据块丢失明细其他信息
-                        assembleOtherBlocklossResult(blocklossResult);
-                        inInserts.add(blocklossResult);
+                        if (havingLossIds.contains(rec.getRecId())) {
+                            BlocklossResult blocklossResult = new BlocklossResult();
+                            blocklossResult.setBehospitalCode(rec.getBehospitalCode());
+                            blocklossResult.setRecId(rec.getRecId());
+                            blocklossResult.setRecTitle(rec.getRecTitle());
+                            blocklossResult.setLossWay(LossWayEnum.IN_LOSS.getKey());
+                            blocklossResult.setLossType(LossTypeEnum.REC_LOSS.getKey());
+                            //拼装病历数据块丢失明细其他信息
+                            assembleOtherBlocklossResult(blocklossResult);
+                            inInserts.add(blocklossResult);
+                        }
                     }
                 });
+                //判断只插入文书id的情况
+                List<String> havingRecIds = medicalRecordContentFacade.list(new QueryWrapper<MedicalRecordContent>()
+                        .select("rec_id")
+                        .in("rec_id", dataBases)).stream().map(MedicalRecordContent::getRecId).collect(Collectors.toList());
+                List<String> tempList = new ArrayList<>(dataBases);
+                tempList.removeAll(havingRecIds);
+                Map<String, GetOperationLogDTO> recMap = EntityUtil.makeEntityMap(logs, "recId");
+                tempList.stream().forEach(recId -> {
+                    BlocklossResult blocklossResult = new BlocklossResult();
+                    blocklossResult.setBehospitalCode(recMap.get(recId).getBehospitalCode());
+                    blocklossResult.setRecId(recId);
+                    blocklossResult.setRecTitle(recMap.get(recId).getRecTitle());
+                    blocklossResult.setLossWay(LossWayEnum.IN_LOSS.getKey());
+                    blocklossResult.setLossType(LossTypeEnum.REC_LOSS.getKey());
+                    blocklossResult.setLossCause("文书id插入成功,文书内容没有插入");
+                    //拼装病历数据块丢失明细其他信息
+                    assembleOtherBlocklossResult(blocklossResult);
+                    inInserts.add(blocklossResult);
+                });
                 break;
             case "1":
                 //病案首页丢失
                 logs.stream().forEach(homePages -> {
                     //存在记录但是没有入库
                     if (!dataBases.contains(homePages.getRecId())) {
-                        BlocklossResult blocklossResult = new BlocklossResult();
-                        blocklossResult.setBehospitalCode(homePages.getBehospitalCode());
-                        blocklossResult.setRecId(homePages.getHomePageId());
-                        blocklossResult.setRecTitle("病案首页丢失");
-                        blocklossResult.setLossWay(LossWayEnum.IN_LOSS.getKey());
-                        blocklossResult.setLossType(LossTypeEnum.HOMEPAGE_LOSS.getKey());
-                        //拼装病历数据块丢失明细其他信息
-                        assembleOtherBlocklossResult(blocklossResult);
-                        inInserts.add(blocklossResult);
+                        if (havingLossIds.contains(homePages.getRecId())) {
+                            BlocklossResult blocklossResult = new BlocklossResult();
+                            blocklossResult.setBehospitalCode(homePages.getBehospitalCode());
+                            blocklossResult.setRecId(homePages.getHomePageId());
+                            blocklossResult.setRecTitle("病案首页丢失");
+                            blocklossResult.setLossWay(LossWayEnum.IN_LOSS.getKey());
+                            blocklossResult.setLossType(LossTypeEnum.HOMEPAGE_LOSS.getKey());
+                            //拼装病历数据块丢失明细其他信息
+                            assembleOtherBlocklossResult(blocklossResult);
+                            inInserts.add(blocklossResult);
+                        }
                     }
                 });
                 break;
@@ -246,19 +318,22 @@ public class BlockLossManagementFacade {
                 logs.stream().forEach(beHehospitalInfo -> {
                     //存在记录但是没有入库
                     if (!dataBases.contains(beHehospitalInfo.getBehospitalCode())) {
-                        BlocklossResult blocklossResult = new BlocklossResult();
-                        blocklossResult.setBehospitalCode(beHehospitalInfo.getBehospitalCode());
-                        blocklossResult.setLossWay(LossWayEnum.IN_LOSS.getKey());
-                        blocklossResult.setLossType(LossTypeEnum.CODE_LOSS.getKey());
-                        //拼装病历数据块丢失明细其他信息
-                        assembleOtherBlocklossResult(blocklossResult);
-                        inInserts.add(blocklossResult);
+                        if (havingLossIds.contains(beHehospitalInfo.getBehospitalCode())) {
+                            BlocklossResult blocklossResult = new BlocklossResult();
+                            blocklossResult.setBehospitalCode(beHehospitalInfo.getBehospitalCode());
+                            blocklossResult.setLossWay(LossWayEnum.IN_LOSS.getKey());
+                            blocklossResult.setLossType(LossTypeEnum.CODE_LOSS.getKey());
+                            //拼装病历数据块丢失明细其他信息
+                            assembleOtherBlocklossResult(blocklossResult);
+                            inInserts.add(blocklossResult);
+                        }
                     }
                 });
                 break;
             default:
                 break;
         }
+
     }
 
     /**
@@ -347,24 +422,31 @@ public class BlockLossManagementFacade {
      * @param logs           日志数据
      * @param type           对比类型:0:文书丢失 1:病案首页丢失 2:患者信息丢失
      * @param outInserts     外部丢失插入集合
+     * @param havingLossIds  已经插入的id集合
      * @Return void
      */
-    private void compareHisWithLog(List<GetOperationLogDTO> medicalRecords, List<GetOperationLogDTO> logs, String type, List<BlocklossResult> outInserts) {
+    private void compareHisWithLog(List<GetOperationLogDTO> medicalRecords, List<GetOperationLogDTO> logs,
+                                   String type, List<BlocklossResult> outInserts, List<String> havingLossIds) {
         switch (type) {
             case "0":
                 List<String> recLogs = logs.stream().map(GetOperationLogDTO::getRecId).collect(Collectors.toList());
                 medicalRecords.stream().forEach(medicalRecord -> {
                     //文书不存在操作记录
-                    if (StringUtil.isNotEmpty(medicalRecord.getRecId()) && !recLogs.contains(medicalRecord.getRecId())) {
-                        BlocklossResult blocklossResult = new BlocklossResult();
-                        blocklossResult.setBehospitalCode(medicalRecord.getBehospitalCode());
-                        blocklossResult.setRecId(medicalRecord.getRecId());
-                        blocklossResult.setRecTitle(medicalRecord.getRecTitle());
-                        blocklossResult.setLossWay(LossWayEnum.OUT_LOSS.getKey());
-                        blocklossResult.setLossType(LossTypeEnum.REC_LOSS.getKey());
-                        //拼装病历数据块丢失明细其他信息
-                        assembleOtherBlocklossResult(blocklossResult);
-                        outInserts.add(blocklossResult);
+                    if (StringUtil.isNotEmpty(medicalRecord.getRecId())) {
+                        if (!recLogs.contains(medicalRecord.getRecId())) {
+                            //该记录没有插入
+                            if (ListUtil.isNotEmpty(havingLossIds) && !havingLossIds.contains(medicalRecord.getRecId())) {
+                                BlocklossResult blocklossResult = new BlocklossResult();
+                                blocklossResult.setBehospitalCode(medicalRecord.getBehospitalCode());
+                                blocklossResult.setRecId(medicalRecord.getRecId());
+                                blocklossResult.setRecTitle(medicalRecord.getRecTitle());
+                                blocklossResult.setLossWay(LossWayEnum.OUT_LOSS.getKey());
+                                blocklossResult.setLossType(LossTypeEnum.REC_LOSS.getKey());
+                                //拼装病历数据块丢失明细其他信息
+                                assembleOtherBlocklossResult(blocklossResult);
+                                outInserts.add(blocklossResult);
+                            }
+                        }
                     }
                 });
                 break;
@@ -373,15 +455,17 @@ public class BlockLossManagementFacade {
                 medicalRecords.stream().forEach(medicalRecord -> {
                     //病案首页不存在操作记录
                     if (StringUtil.isNotEmpty(medicalRecord.getHomePageId()) && !homepageLogs.contains(medicalRecord.getHomePageId())) {
-                        BlocklossResult blocklossResult = new BlocklossResult();
-                        blocklossResult.setBehospitalCode(medicalRecord.getBehospitalCode());
-                        blocklossResult.setRecId(medicalRecord.getHomePageId());
-                        blocklossResult.setRecTitle("病案首页丢失");
-                        blocklossResult.setLossWay(LossWayEnum.OUT_LOSS.getKey());
-                        blocklossResult.setLossType(LossTypeEnum.HOMEPAGE_LOSS.getKey());
-                        //拼装病历数据块丢失明细其他信息
-                        assembleOtherBlocklossResult(blocklossResult);
-                        outInserts.add(blocklossResult);
+                        if (ListUtil.isNotEmpty(havingLossIds) && !havingLossIds.contains(medicalRecord.getHomePageId())) {
+                            BlocklossResult blocklossResult = new BlocklossResult();
+                            blocklossResult.setBehospitalCode(medicalRecord.getBehospitalCode());
+                            blocklossResult.setRecId(medicalRecord.getHomePageId());
+                            blocklossResult.setRecTitle("病案首页丢失");
+                            blocklossResult.setLossWay(LossWayEnum.OUT_LOSS.getKey());
+                            blocklossResult.setLossType(LossTypeEnum.HOMEPAGE_LOSS.getKey());
+                            //拼装病历数据块丢失明细其他信息
+                            assembleOtherBlocklossResult(blocklossResult);
+                            outInserts.add(blocklossResult);
+                        }
                     }
                 });
                 break;
@@ -390,13 +474,15 @@ public class BlockLossManagementFacade {
                 medicalRecords.stream().forEach(medicalRecord -> {
                     //病历数据不存在操作记录
                     if (!behospitalCodeLogs.contains(medicalRecord.getBehospitalCode())) {
-                        BlocklossResult blocklossResult = new BlocklossResult();
-                        blocklossResult.setBehospitalCode(medicalRecord.getBehospitalCode());
-                        blocklossResult.setLossWay(LossWayEnum.OUT_LOSS.getKey());
-                        blocklossResult.setLossType(LossTypeEnum.CODE_LOSS.getKey());
-                        //拼装病历数据块丢失明细其他信息
-                        assembleOtherBlocklossResult(blocklossResult);
-                        outInserts.add(blocklossResult);
+                        if (ListUtil.isNotEmpty(havingLossIds) && !havingLossIds.contains(medicalRecord.getBehospitalCode())) {
+                            BlocklossResult blocklossResult = new BlocklossResult();
+                            blocklossResult.setBehospitalCode(medicalRecord.getBehospitalCode());
+                            blocklossResult.setLossWay(LossWayEnum.OUT_LOSS.getKey());
+                            blocklossResult.setLossType(LossTypeEnum.CODE_LOSS.getKey());
+                            //拼装病历数据块丢失明细其他信息
+                            assembleOtherBlocklossResult(blocklossResult);
+                            outInserts.add(blocklossResult);
+                        }
                     }
                 });
                 break;
@@ -426,8 +512,8 @@ public class BlockLossManagementFacade {
      * @param dataCompareVO
      * @Return java.util.List<com.lantone.common.dto.GetOperationLogDTO>
      */
-    private List<GetOperationLogDTO> getOperationLog(DataCompareVO dataCompareVO) {
-        return operationLogService.getOperationLog(dataCompareVO).getData();
+    private List<GetOperationLogDTO> getOperationLogs(DataCompareVO dataCompareVO) {
+        return operationLogService.getOperationLogs(dataCompareVO).getData();
     }
 
     /**
@@ -441,4 +527,83 @@ public class BlockLossManagementFacade {
 
         return new ArrayList<>();
     }
+
+    /**
+     * 丢失量分类汇总
+     *
+     * @param blockLossTypeGatherVO
+     * @Return com.lantone.daqe.dto.BlockLossTypeGatherDTO
+     */
+    public BlockLossTypeGatherDTO blockLossTypeGather(BlockLossTypeGatherVO blockLossTypeGatherVO) {
+        BlockLossTypeGatherDTO blockLossTypeGatherDTO = new BlockLossTypeGatherDTO();
+        //获取该时间段的日志数量
+        Integer logNum = operationLogService.getOperationLogNum(blockLossTypeGatherVO).getData();
+        blockLossTypeGatherDTO.setLogNum(logNum);
+        //获取该时间段的实际数量
+        Integer codeNum = behospitalInfoFacade.count(new QueryWrapper<BehospitalInfo>()
+                .eq("hospital_id", SysUserUtils.getCurrentHospitalId())
+                .ge(blockLossTypeGatherVO.getStartDate() != null, "gmt_create", blockLossTypeGatherVO.getStartDate())
+                .le(blockLossTypeGatherVO.getStartDate() != null, "gmt_create", blockLossTypeGatherVO.getStartDate()));
+        Integer homePageNum = homePageFacade.count(new QueryWrapper<HomePage>()
+                .eq("hospital_id", SysUserUtils.getCurrentHospitalId())
+                .ge(blockLossTypeGatherVO.getStartDate() != null, "gmt_create", blockLossTypeGatherVO.getStartDate())
+                .le(blockLossTypeGatherVO.getStartDate() != null, "gmt_create", blockLossTypeGatherVO.getStartDate()));
+        Integer recNum = medicalRecordFacade.count(new QueryWrapper<MedicalRecord>()
+                .eq("hospital_id", SysUserUtils.getCurrentHospitalId())
+                .ge(blockLossTypeGatherVO.getStartDate() != null, "gmt_create", blockLossTypeGatherVO.getStartDate())
+                .le(blockLossTypeGatherVO.getStartDate() != null, "gmt_create", blockLossTypeGatherVO.getStartDate()));
+        blockLossTypeGatherDTO.setRealNum(codeNum + homePageNum + recNum);
+        //获取该时间段的丢失数量
+        List<BlocklossResult> blocklossResults = blocklossResultFacade.list(new QueryWrapper<BlocklossResult>()
+                .eq("hospital_id", SysUserUtils.getCurrentHospitalId())
+                .eq("status", LossStatusEnum.IS_LOSS.getKey())
+                .ge(blockLossTypeGatherVO.getStartDate() != null, "gmt_create", blockLossTypeGatherVO.getStartDate())
+                .le(blockLossTypeGatherVO.getStartDate() != null, "gmt_create", blockLossTypeGatherVO.getStartDate()));
+        Integer allLossNum = blocklossResults.size();
+        blockLossTypeGatherDTO.setAllLossNum(allLossNum);
+        blockLossTypeGatherDTO.setHisNum(logNum + allLossNum);
+
+        Map<String, List<BlocklossResult>> lossWayMap = EntityUtil.makeEntityListMap(blocklossResults, "lossWay");
+        //外部丢失
+        if (lossWayMap.get(LossWayEnum.OUT_LOSS.getKey()) != null) {
+            Integer outLossNum = lossWayMap.get(LossWayEnum.OUT_LOSS.getKey()).size();
+            blockLossTypeGatherDTO.setOutLossNum(outLossNum);
+            if (lossWayMap.get(LossWayEnum.OUT_LOSS.getKey()) != null) {
+                Map<String, List<BlocklossResult>> outLossTypeMap = EntityUtil.makeEntityListMap(lossWayMap.get(LossWayEnum.OUT_LOSS.getKey()), "lossType");
+                if (outLossTypeMap.get(LossTypeEnum.REC_LOSS.getKey()) != null) {
+                    Integer outRecNum = outLossTypeMap.get(LossTypeEnum.REC_LOSS.getKey()).size();
+                    blockLossTypeGatherDTO.setOutRecNum(outRecNum);
+                }
+                if (outLossTypeMap.get(LossTypeEnum.CODE_LOSS.getKey()) != null) {
+                    Integer outCodeNum = outLossTypeMap.get(LossTypeEnum.CODE_LOSS.getKey()).size();
+                    blockLossTypeGatherDTO.setOutCodeNum(outCodeNum);
+                }
+                if (outLossTypeMap.get(LossTypeEnum.HOMEPAGE_LOSS.getKey()) != null) {
+                    Integer outHomePageNum = outLossTypeMap.get(LossTypeEnum.HOMEPAGE_LOSS.getKey()).size();
+                    blockLossTypeGatherDTO.setOutHomePageNum(outHomePageNum);
+                }
+            }
+        }
+        //内部丢失
+        if (lossWayMap.get(LossWayEnum.IN_LOSS.getKey()) != null) {
+            Integer inLossNum = lossWayMap.get(LossWayEnum.IN_LOSS.getKey()).size();
+            blockLossTypeGatherDTO.setInLossNum(inLossNum);
+            if (lossWayMap.get(LossWayEnum.IN_LOSS.getKey()) != null) {
+                Map<String, List<BlocklossResult>> inLossTypeMap = EntityUtil.makeEntityListMap(lossWayMap.get(LossWayEnum.IN_LOSS.getKey()), "lossType");
+                if (inLossTypeMap.get(LossTypeEnum.REC_LOSS.getKey()) != null) {
+                    Integer inRecNum = inLossTypeMap.get(LossTypeEnum.REC_LOSS.getKey()).size();
+                    blockLossTypeGatherDTO.setInRecNum(inRecNum);
+                }
+                if (inLossTypeMap.get(LossTypeEnum.CODE_LOSS.getKey()) != null) {
+                    Integer inCodeNum = inLossTypeMap.get(LossTypeEnum.CODE_LOSS.getKey()).size();
+                    blockLossTypeGatherDTO.setInCodeNum(inCodeNum);
+                }
+                if (inLossTypeMap.get(LossTypeEnum.HOMEPAGE_LOSS.getKey()) != null) {
+                    Integer inHomePageNum = inLossTypeMap.get(LossTypeEnum.HOMEPAGE_LOSS.getKey()).size();
+                    blockLossTypeGatherDTO.setInHomePageNum(inHomePageNum);
+                }
+            }
+        }
+        return blockLossTypeGatherDTO;
+    }
 }

+ 18 - 1
daqe-center/src/main/java/com/lantone/daqe/facade/RegularManagementFacade.java

@@ -8,7 +8,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.lantone.common.enums.IsDeleteEnum;
 import com.lantone.common.exception.Asserts;
 import com.lantone.common.util.BeanUtil;
+import com.lantone.common.util.DateUtil;
 import com.lantone.common.util.StringUtil;
+import com.lantone.common.util.SysUserUtils;
 import com.lantone.daqe.dto.GetRegularPageDTO;
 import com.lantone.daqe.entity.RegularInfo;
 import com.lantone.daqe.entity.RegularMapping;
@@ -76,6 +78,8 @@ public class RegularManagementFacade {
         if (regularInfoFacade.isExist(regularInfo)) {
             Asserts.fail("该正则式已存在!");
         }
+        regularInfo.setCreator(SysUserUtils.getCurrentPrinciple());
+        regularInfo.setGmtCreate(DateUtil.now());
         return regularInfoFacade.save(regularInfo);
     }
 
@@ -92,6 +96,8 @@ public class RegularManagementFacade {
         //修改正则式
         RegularInfo regularInfo = new RegularInfo();
         BeanUtil.copyProperties(upRegularByIdVO, regularInfo);
+        regularInfo.setModifier(SysUserUtils.getCurrentPrinciple());
+        regularInfo.setGmtModified(DateUtil.now());
         //修改表字段的正则式校验结果表中的正则式
         if (regularInfoFacade.updateById(regularInfo)) {
             return regularResultFacade.update(new UpdateWrapper<RegularResult>()
@@ -100,6 +106,8 @@ public class RegularManagementFacade {
                     .eq("is_deleted", IsDeleteEnum.N.getKey())
                     .set("regular_name", upRegularByIdVO.getName())
                     .set("regular_val", upRegularByIdVO.getVal())
+                    .set("modifier", SysUserUtils.getCurrentPrinciple())
+                    .set("gmt_modified", DateUtil.now())
                     .set("regular_des", upRegularByIdVO.getDescription()));
         }
         return false;
@@ -131,17 +139,26 @@ public class RegularManagementFacade {
         if (regularInfoFacade.getById(id) == null) {
             Asserts.fail("该正则式不存在!");
         }
-        if (regularInfoFacade.removeById(id)) {
+        RegularInfo regularInfo = new RegularInfo();
+        regularInfo.setId(id);
+        regularInfo.setModifier(SysUserUtils.getCurrentPrinciple());
+        regularInfo.setGmtModified(DateUtil.now());
+        regularInfo.setIsDeleted(IsDeleteEnum.Y.getKey());
+        if (regularInfoFacade.updateById(regularInfo)) {
             //删除表字段的实际值与正则式关联关系
             if (regularMappingFacade.update(new UpdateWrapper<RegularMapping>()
                     .eq("regular_id", id)
                     .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .set("modifier", SysUserUtils.getCurrentPrinciple())
+                    .set("gmt_modified", DateUtil.now())
                     .set("is_deleted", IsDeleteEnum.Y.getKey()))) {
                 //删除表字段的正则式校验结果表中的正则式
                 return regularResultFacade.update(new UpdateWrapper<RegularResult>()
                         .eq(hospitalId != null, "hospital_id", hospitalId)
                         .eq("regular_id", id)
                         .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .set("modifier", SysUserUtils.getCurrentPrinciple())
+                        .set("gmt_modified", DateUtil.now())
                         .set("is_deleted", IsDeleteEnum.Y.getKey()));
             }
 

+ 54 - 0
daqe-center/src/main/java/com/lantone/daqe/task/BlockLossDataCompareTask.java

@@ -0,0 +1,54 @@
+package com.lantone.daqe.task;
+
+import com.lantone.common.util.DateUtil;
+import com.lantone.common.vo.DataCompareVO;
+import com.lantone.daqe.facade.BlockLossManagementFacade;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.Trigger;
+import org.springframework.scheduling.TriggerContext;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.Date;
+
+@Configuration      //1.主要用于标记配置类,兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+@Slf4j
+public class BlockLossDataCompareTask implements SchedulingConfigurer {
+
+    @Autowired
+    private BlockLossManagementFacade blockLossManagementFacade;
+    @Value("${blockloss.compare.cron}")
+    private String cron = "0 0 1 * * ?";
+    @Value("${blockloss.compare.use}")
+    private String isUsed = "false";
+
+    /**
+     * 执行定时任务.
+     */
+    @Override
+    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+        taskRegistrar.addTriggerTask(new Runnable() {
+            @Override
+            public void run() {
+                if(Boolean.parseBoolean(isUsed)){
+                    DataCompareVO dataCompareVO = new DataCompareVO();
+                    dataCompareVO.setStartDate(DateUtil.addDate(DateUtil.now(),-1));
+                    dataCompareVO.setEndDate(DateUtil.now());
+                    blockLossManagementFacade.dataCompare(dataCompareVO);
+                }
+            }
+        }, new Trigger() {
+            @Override
+            public Date nextExecutionTime(TriggerContext triggerContext) {
+                CronTrigger trigger = new CronTrigger(cron);
+                return trigger.nextExecutionTime(triggerContext);
+            }
+        });
+    }
+}

+ 9 - 0
daqe-center/src/main/java/com/lantone/daqe/web/BlockLossManagementController.java

@@ -2,6 +2,8 @@ package com.lantone.daqe.web;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.lantone.common.api.CommonResult;
+import com.lantone.common.vo.BlockLossTypeGatherVO;
+import com.lantone.daqe.dto.BlockLossTypeGatherDTO;
 import com.lantone.daqe.dto.GetBlockLossPageDTO;
 import com.lantone.daqe.dto.UpBlockLossByIdVO;
 import com.lantone.daqe.facade.BlockLossManagementFacade;
@@ -39,6 +41,7 @@ public class BlockLossManagementController {
 
     @ApiOperation(value = "通过id修改病历数据块丢失明细 [by:songxl]", notes = "通过id修改病历数据块丢失明细")
     @PostMapping("/upBlockLossById")
+    @Transactional
     public CommonResult<Boolean> upBlockLossById(@RequestBody @Valid UpBlockLossByIdVO upBlockLossByIdVO) {
         return CommonResult.success(blockLossManagementFacade.upBlockLossById(upBlockLossByIdVO));
     }
@@ -50,4 +53,10 @@ public class BlockLossManagementController {
         return CommonResult.success(blockLossManagementFacade.dataCompare(dataCompareVO));
     }
 
+
+    @ApiOperation(value = "丢失量分类汇总 [by:songxl]", notes = "丢失量分类汇总")
+    @PostMapping("/blockLossTypeGather")
+    public CommonResult<BlockLossTypeGatherDTO> blockLossTypeGather(@RequestBody @Valid BlockLossTypeGatherVO blockLossTypeGatherVO) {
+        return CommonResult.success(blockLossManagementFacade.blockLossTypeGather(blockLossTypeGatherVO));
+    }
 }

+ 2 - 0
daqe-center/src/main/java/com/lantone/daqe/web/DiseaseManagementController.java

@@ -16,6 +16,7 @@ import com.lantone.daqe.vo.UpDiseaseByIdVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -77,6 +78,7 @@ public class DiseaseManagementController {
 
     @ApiOperation(value = "医院诊断标准词匹配信息导入 [by:songxl]", notes = "医院诊断标准词匹配信息导入")
     @PostMapping("/importDisease")
+    @Transactional
     public void importDisease(HttpServletResponse response, @RequestParam("file") MultipartFile file) {
         diseaseManagementFacade.importDisease(response, file);
     }

+ 2 - 0
daqe-center/src/main/java/com/lantone/daqe/web/DrugManagementController.java

@@ -16,6 +16,7 @@ import com.lantone.daqe.vo.UpDrugByIdVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -71,6 +72,7 @@ public class DrugManagementController {
 
     @ApiOperation(value = "药品匹配信息导入 [by:songxl]", notes = "药品匹配信息导入")
     @PostMapping("/importDrug")
+    @Transactional
     public void importDrug(HttpServletResponse response, @RequestParam("file") MultipartFile file) {
         drugManagementFacade.importDrug(response, file);
     }

+ 2 - 0
daqe-center/src/main/java/com/lantone/daqe/web/OperationManagementController.java

@@ -16,6 +16,7 @@ import com.lantone.daqe.vo.UpOperationByIdVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -71,6 +72,7 @@ public class OperationManagementController {
 
     @ApiOperation(value = "医院手术标准词匹配信息导入 [by:songxl]", notes = "医院手术标准词匹配信息导入")
     @PostMapping("/importOperation")
+    @Transactional
     public void importOperation(HttpServletResponse response, @RequestParam("file") MultipartFile file) {
         operationManagementFacade.importOperation(response, file);
     }

+ 4 - 0
daqe-center/src/main/java/com/lantone/daqe/web/RegularManagementController.java

@@ -12,6 +12,7 @@ import com.lantone.daqe.vo.UpRegularByIdVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -40,18 +41,21 @@ public class RegularManagementController {
 
     @ApiOperation(value = "新增正则式 [by:songxl]", notes = "新增正则式")
     @PostMapping("/addRegular")
+    @Transactional
     public CommonResult<Boolean> addRegular(@RequestBody @Valid AddRegularVO addRegularVO) {
         return CommonResult.success(regularManagementFacade.addRegular(addRegularVO));
     }
 
     @ApiOperation(value = "通过id修改正则式 [by:songxl]", notes = "通过id修改正则式")
     @PostMapping("/upRegularById")
+    @Transactional
     public CommonResult<Boolean> upRegularById(@RequestBody @Valid UpRegularByIdVO upRegularByIdVO) {
         return CommonResult.success(regularManagementFacade.upRegularById(upRegularByIdVO));
     }
 
     @ApiOperation(value = "通过id删除正则式 [by:songxl]", notes = "通过id删除正则式")
     @PostMapping("/delRegularById")
+    @Transactional
     public CommonResult<Boolean> delRegularById(@RequestBody @Valid DelRegularByIdVO delRegularByIdVO) {
         return CommonResult.success(regularManagementFacade.delRegularById(delRegularByIdVO));
     }

+ 7 - 1
daqe-center/src/main/resources/bootstrap.yml

@@ -54,4 +54,10 @@ mybatis-plus:
 
 swagger.title: 数据及质量保障中心
 swagger.des: 数据及质量保障中心—相关接口文档
-swagger.version: 0.0.1-SNAPSHOT
+swagger.version: 0.0.1-SNAPSHOT
+
+#数据比对定时器
+blockloss:
+  compare:
+    cron: 0 0 1 * * ?
+    use: true

+ 389 - 0
daqe-center/src/main/resources/upgrade/V1__daqe_init.sql

@@ -0,0 +1,389 @@
+-- ----------------------------
+-- Table structure for dc_column_info
+-- ----------------------------
+DROP TABLE IF EXISTS `dc_column_info`;
+CREATE TABLE `dc_column_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `table_cname` varchar(32) NOT NULL COMMENT '表中文名',
+  `table_ename` varchar(32) NOT NULL COMMENT '表英文名',
+  `column_cname` varchar(32) NOT NULL COMMENT '字段中文名',
+  `column_ename` varchar(32) NOT NULL COMMENT '字段英文名',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uniq_table_column_name` (`table_ename`,`column_ename`) USING BTREE COMMENT '字段table_ename和字段column_ename的值组合必须全表唯一'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数据库表中的列信息记录表';
+
+-- ----------------------------
+-- Table structure for dc_column_result
+-- ----------------------------
+DROP TABLE IF EXISTS `dc_column_result`;
+CREATE TABLE `dc_column_result` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '组织机构ID',
+  `behospital_code` varchar(32) NOT NULL COMMENT '病人住院序号',
+  `hospital_data_code` varchar(128) NOT NULL COMMENT '医院数据编号',
+  `hosptial_datatmp_code` varchar(32) DEFAULT NULL COMMENT '医院病历文书模板编号/非文书模块编号',
+  `hosptial_datatmp_name` varchar(32) DEFAULT NULL COMMENT '医院病历文书模板名称/非文书模块名称',
+  `mode_id` bigint(20) NOT NULL COMMENT '标准数据模块ID',
+  `mode_name` varchar(32) NOT NULL COMMENT '标准数据模块名称',
+  `column_id` bigint(20) NOT NULL COMMENT '数据库表中的列信息记录ID',
+  `table_cname` varchar(32) NOT NULL COMMENT '表中文名',
+  `table_ename` varchar(32) NOT NULL COMMENT '表英文名',
+  `column_cname` varchar(32) NOT NULL COMMENT '字段中文名',
+  `column_ename` varchar(32) NOT NULL COMMENT '字段英文名',
+  `table_id` bigint(20) NOT NULL COMMENT '校验字段所在表的表记录ID',
+  `table_val` varchar(32) DEFAULT NULL COMMENT '表字段的值',
+  `type` varchar(2) NOT NULL COMMENT '字段问题类型,1-数据缺失,2-非标准值,3-正则校验失败',
+  `result_id` bigint(20) NOT NULL COMMENT '校验结果表记录ID,如:表字段的非空校验结果表、表字段的正则式校验结果表、表字段的标准值校验结果表',
+  `is_solved` varchar(2) NOT NULL DEFAULT '0' COMMENT '是否已解决,0:未解决,1:已解决。机器通过比对,若数据问题已解决,则更新为已解决。',
+  `solve_time` datetime DEFAULT NULL COMMENT '最近一次机器比对时间',
+  `is_audited` varchar(2) NOT NULL DEFAULT '0' COMMENT '是否通过了人工核查,0:未通过,1:已通过。对于未解决的问题数据,人工进行干预,确认其是否通过校验。',
+  `audit_time` datetime DEFAULT NULL COMMENT '最近一次人工核查时间',
+  `description` varchar(512) DEFAULT NULL COMMENT '描述',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uniq_type_result_id` (`type`,`result_id`) USING BTREE COMMENT '字段type和字段result_id的值组合必须全表唯一'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表字段的实际值问题校验结果汇总表';
+
+-- ----------------------------
+-- Table structure for dc_column_verify
+-- ----------------------------
+DROP TABLE IF EXISTS `dc_column_verify`;
+CREATE TABLE `dc_column_verify` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `column_id` bigint(20) NOT NULL COMMENT '数据库表中的列信息记录ID',
+  `table_cname` varchar(32) NOT NULL COMMENT '表中文名',
+  `table_ename` varchar(32) NOT NULL COMMENT '表英文名',
+  `column_cname` varchar(32) NOT NULL COMMENT '字段中文名',
+  `column_ename` varchar(32) NOT NULL COMMENT '字段英文名',
+  `type` varchar(2) NOT NULL DEFAULT '0' COMMENT '校验类型,0:未知,1:数据缺失,2:标准值,3:正则',
+  `verify_id` bigint(20) NOT NULL COMMENT '校验表记录ID,如:表字段的非空校验维护表、表字段的实际值与正则式关联表、表字段的标准值校验维护表',
+  `verify_val` varchar(32) NOT NULL COMMENT '校验表值',
+  `description` varchar(512) DEFAULT NULL COMMENT '描述',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uniq_type_verify_id` (`type`,`verify_id`) USING BTREE COMMENT '字段type和字段verify_id的值组合必须全表唯一'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表字段的实际值问题校验维护汇总表';
+
+-- ----------------------------
+-- Table structure for dc_nonnull_info
+-- ----------------------------
+DROP TABLE IF EXISTS `dc_nonnull_info`;
+CREATE TABLE `dc_nonnull_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `column_id` bigint(20) NOT NULL COMMENT '数据库表中的列信息记录ID',
+  `is_required` varchar(2) NOT NULL DEFAULT '1' COMMENT '是否必填,0:否,1:是',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uniq_column_id` (`column_id`) USING BTREE COMMENT '字段column_id的值必须全表唯一'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表字段的非空校验维护表';
+
+-- ----------------------------
+-- Table structure for dc_nonnull_result
+-- ----------------------------
+DROP TABLE IF EXISTS `dc_nonnull_result`;
+CREATE TABLE `dc_nonnull_result` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '组织机构ID',
+  `behospital_code` varchar(32) NOT NULL COMMENT '病人住院序号',
+  `hospital_data_code` varchar(128) NOT NULL COMMENT '医院数据编号',
+  `hosptial_datatmp_code` varchar(32) DEFAULT NULL COMMENT '医院病历文书模板编号/非文书模块编号',
+  `hosptial_datatmp_name` varchar(32) DEFAULT NULL COMMENT '医院病历文书模板名称/非文书模块名称',
+  `mode_id` bigint(20) NOT NULL COMMENT '标准数据模块ID',
+  `mode_name` varchar(32) NOT NULL COMMENT '标准数据模块名称',
+  `column_id` bigint(20) NOT NULL COMMENT '数据库表中的列信息记录ID',
+  `table_cname` varchar(32) NOT NULL COMMENT '表中文名',
+  `table_ename` varchar(32) NOT NULL COMMENT '表英文名',
+  `column_cname` varchar(32) NOT NULL COMMENT '字段中文名',
+  `column_ename` varchar(32) NOT NULL COMMENT '字段英文名',
+  `table_id` bigint(20) NOT NULL COMMENT '校验字段所在表的表记录ID',
+  `table_val` varchar(32) DEFAULT NULL COMMENT '表字段的值',
+  `is_solved` varchar(2) NOT NULL DEFAULT '0' COMMENT '是否已解决,0:未解决,1:已解决。机器通过比对,若数据问题已解决,则更新为已解决。',
+  `solve_time` datetime DEFAULT NULL COMMENT '最近一次机器比对时间',
+  `is_audited` varchar(2) NOT NULL DEFAULT '0' COMMENT '是否通过了人工核查,0:未通过,1:已通过。对于未解决的问题数据,人工进行干预,确认其是否通过校验。',
+  `audit_time` datetime DEFAULT NULL COMMENT '最近一次人工核查时间',
+  `description` varchar(512) DEFAULT NULL COMMENT '描述',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uniq_column_table_id` (`column_id`,`table_id`) USING BTREE COMMENT '字段column_id和字段table_id的值组合必须全表唯一,即:在当前表中,某个表的某条记录的某个字段值只能有一条校验记录。'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表字段的非空校验结果表';
+
+-- ----------------------------
+-- Table structure for dc_regular_info
+-- ----------------------------
+DROP TABLE IF EXISTS `dc_regular_info`;
+CREATE TABLE `dc_regular_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `name` varchar(32) NOT NULL COMMENT '正则式名称',
+  `val` varchar(256) NOT NULL COMMENT '正则式值',
+  `description` varchar(512) NOT NULL COMMENT '描述',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uniq_name` (`name`) USING BTREE COMMENT '字段name的值必须全表唯一'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='正则式维护表';
+
+-- ----------------------------
+-- Table structure for dc_regular_mapping
+-- ----------------------------
+DROP TABLE IF EXISTS `dc_regular_mapping`;
+CREATE TABLE `dc_regular_mapping` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `column_id` bigint(20) NOT NULL COMMENT '数据库表中的列信息记录ID',
+  `regular_id` bigint(20) NOT NULL COMMENT '正则式ID',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uniq_column_regular_id` (`column_id`,`regular_id`) USING BTREE COMMENT '字段column_id和字段regular_id的值组合必须全表唯一'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表字段的实际值与正则式关联表';
+
+-- ----------------------------
+-- Table structure for dc_regular_result
+-- ----------------------------
+DROP TABLE IF EXISTS `dc_regular_result`;
+CREATE TABLE `dc_regular_result` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '组织机构ID',
+  `behospital_code` varchar(32) NOT NULL COMMENT '病人住院序号',
+  `hospital_data_code` varchar(128) NOT NULL COMMENT '医院数据编号',
+  `hosptial_datatmp_code` varchar(32) DEFAULT NULL COMMENT '医院病历文书模板编号/非文书模块编号',
+  `hosptial_datatmp_name` varchar(32) DEFAULT NULL COMMENT '医院病历文书模板名称/非文书模块名称',
+  `mode_id` bigint(20) NOT NULL COMMENT '标准数据模块ID',
+  `mode_name` varchar(32) NOT NULL COMMENT '标准数据模块名称',
+  `column_id` bigint(20) NOT NULL COMMENT '数据库表中的列信息记录ID',
+  `table_cname` varchar(32) NOT NULL COMMENT '表中文名',
+  `table_ename` varchar(32) NOT NULL COMMENT '表英文名',
+  `column_cname` varchar(32) NOT NULL COMMENT '字段中文名',
+  `column_ename` varchar(32) NOT NULL COMMENT '字段英文名',
+  `regular_id` bigint(20) NOT NULL COMMENT '正则式ID',
+  `regular_name` varchar(32) NOT NULL COMMENT '正则式名称',
+  `regular_val` varchar(256) NOT NULL COMMENT '正则式值',
+  `regular_des` varchar(512) NOT NULL COMMENT '正则式描述',
+  `table_id` bigint(20) NOT NULL COMMENT '校验字段所在表的表记录ID',
+  `table_val` varchar(32) DEFAULT NULL COMMENT '表字段的值',
+  `is_solved` varchar(2) NOT NULL DEFAULT '0' COMMENT '是否已解决,0:未解决,1:已解决。机器通过比对,若数据问题已解决,则更新为已解决。',
+  `solve_time` datetime DEFAULT NULL COMMENT '最近一次机器比对时间',
+  `is_audited` varchar(2) NOT NULL DEFAULT '0' COMMENT '是否通过了人工核查,0:未通过,1:已通过。对于未解决的问题数据,人工进行干预,确认其是否通过校验。',
+  `audit_time` datetime DEFAULT NULL COMMENT '最近一次人工核查时间',
+  `description` varchar(512) DEFAULT NULL COMMENT '描述',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uniq_column_table_id` (`column_id`,`table_id`) USING BTREE COMMENT '字段column_id和字段table_id的值组合必须全表唯一,即:在当前表中,某个表的某条记录的某个字段值只能有一条校验记录。'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表字段的正则式校验结果表';
+
+-- ----------------------------
+-- Table structure for dc_standardvalue_info
+-- ----------------------------
+DROP TABLE IF EXISTS `dc_standardvalue_info`;
+CREATE TABLE `dc_standardvalue_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `column_id` bigint(20) NOT NULL COMMENT '数据库表中的列信息记录ID',
+  `val` varchar(32) NOT NULL COMMENT '表字段的标准值',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uniq_column_id_val` (`column_id`,`val`) USING BTREE COMMENT '字段column_id和字段val的值组合必须全表唯一'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表字段的标准值校验维护表';
+
+-- ----------------------------
+-- Table structure for dc_standardvalue_mapping
+-- ----------------------------
+DROP TABLE IF EXISTS `dc_standardvalue_mapping`;
+CREATE TABLE `dc_standardvalue_mapping` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `standardvalue_id` bigint(20) NOT NULL COMMENT '表字段的标准值校验ID',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '组织机构ID',
+  `hospital_val` varchar(32) NOT NULL COMMENT '表字段的实际值',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uniq_hos_standval` (`standardvalue_id`,`hospital_id`,`hospital_val`) USING BTREE COMMENT '字段standardvalue_id、字段hospital_id和字段hospital_val的值组合必须全表唯一'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表字段的实际值与标准值映射表';
+
+-- ----------------------------
+-- Table structure for dc_standardvalue_result
+-- ----------------------------
+DROP TABLE IF EXISTS `dc_standardvalue_result`;
+CREATE TABLE `dc_standardvalue_result` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '组织机构ID',
+  `behospital_code` varchar(32) NOT NULL COMMENT '病人住院序号',
+  `hospital_data_code` varchar(128) NOT NULL COMMENT '医院数据编号',
+  `hosptial_datatmp_code` varchar(32) DEFAULT NULL COMMENT '医院病历文书模板编号/非文书模块编号',
+  `hosptial_datatmp_name` varchar(32) DEFAULT NULL COMMENT '医院病历文书模板名称/非文书模块名称',
+  `mode_id` bigint(20) NOT NULL COMMENT '标准数据模块ID',
+  `mode_name` varchar(32) NOT NULL COMMENT '标准数据模块名称',
+  `column_id` bigint(20) NOT NULL COMMENT '数据库表中的列信息记录ID',
+  `table_cname` varchar(32) NOT NULL COMMENT '表中文名',
+  `table_ename` varchar(32) NOT NULL COMMENT '表英文名',
+  `column_cname` varchar(32) NOT NULL COMMENT '字段中文名',
+  `column_ename` varchar(32) NOT NULL COMMENT '字段英文名',
+  `mappings` varchar(512) NOT NULL COMMENT '映射对汇总,逗号隔开,比如:标准A-医院A,标准B-医院B。医院未映射的采用标准A-无。',
+  `table_id` bigint(20) NOT NULL COMMENT '校验字段所在表的表记录ID',
+  `table_val` varchar(32) DEFAULT NULL COMMENT '表字段的值',
+  `is_solved` varchar(2) NOT NULL DEFAULT '0' COMMENT '是否已解决,0:未解决,1:已解决。机器通过比对,若数据问题已解决,则更新为已解决。',
+  `solve_time` datetime DEFAULT NULL COMMENT '最近一次机器比对时间',
+  `is_audited` varchar(2) NOT NULL DEFAULT '0' COMMENT '是否通过了人工核查,0:未通过,1:已通过。对于未解决的问题数据,人工进行干预,确认其是否通过校验。',
+  `audit_time` datetime DEFAULT NULL COMMENT '最近一次人工核查时间',
+  `description` varchar(512) DEFAULT NULL COMMENT '描述',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uniq_column_table_id` (`column_id`,`table_id`) USING BTREE COMMENT '字段column_id和字段table_id的值组合必须全表唯一,即:在当前表中,某个表的某条记录的某个字段值只能有一条校验记录。'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表字段的标准值校验结果表';
+
+-- ----------------------------
+-- Table structure for hos_disease_info
+-- ----------------------------
+DROP TABLE IF EXISTS `hos_disease_info`;
+CREATE TABLE `hos_disease_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '组织机构ID',
+  `code` varchar(32) DEFAULT NULL COMMENT '医院诊断代码',
+  `name` varchar(32) DEFAULT NULL COMMENT '医院诊断名称',
+  `icd10` varchar(32) DEFAULT NULL COMMENT '医院诊断ICD-10编码',
+  `standard` varchar(512) DEFAULT NULL COMMENT '标准词,规范:标准词名称_特性1名称:特性1值_特性2名称:特性2值',
+  `synonym` varchar(512) DEFAULT NULL COMMENT '同义词',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='医院诊断信息表';
+
+-- ----------------------------
+-- Table structure for hos_drug_info
+-- ----------------------------
+DROP TABLE IF EXISTS `hos_drug_info`;
+CREATE TABLE `hos_drug_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '组织机构ID',
+  `code` varchar(32) DEFAULT NULL COMMENT '医院药品代码',
+  `name` varchar(32) DEFAULT NULL COMMENT '医院药品名称',
+  `approval_num` varchar(256) DEFAULT NULL COMMENT '国药准字',
+  `standard` varchar(512) DEFAULT NULL COMMENT '标准词,规范:标准词名称_特性1名称:特性1值_特性2名称:特性2值',
+  `synonym` varchar(512) DEFAULT NULL COMMENT '同义词',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='医院药品信息表';
+
+-- ----------------------------
+-- Table structure for hos_official_capacity
+-- ----------------------------
+DROP TABLE IF EXISTS `hos_official_capacity`;
+CREATE TABLE `hos_official_capacity` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '组织机构ID',
+  `name` varchar(32) DEFAULT NULL COMMENT '职务/职称名称',
+  `type` varchar(2) NOT NULL DEFAULT '0' COMMENT '类型:0:未知,1:职务,2职称',
+  `change_time` datetime DEFAULT NULL COMMENT '职位/职称变更时间',
+  `doctor_code` varchar(32) DEFAULT NULL COMMENT '医生代码',
+  `doctor_name` varchar(32) DEFAULT NULL COMMENT '医生名称',
+  `dept_name` varchar(32) DEFAULT NULL COMMENT '科室名称',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='医院职位职称信息表';
+
+-- ----------------------------
+-- Table structure for hos_operation_info
+-- ----------------------------
+DROP TABLE IF EXISTS `hos_operation_info`;
+CREATE TABLE `hos_operation_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '组织机构ID',
+  `code` varchar(32) DEFAULT NULL COMMENT '医院手术代码',
+  `name` varchar(32) DEFAULT NULL COMMENT '医院手术名称',
+  `standard` varchar(512) DEFAULT NULL COMMENT '标准词,规范:标准词名称_特性1名称:特性1值_特性2名称:特性2值',
+  `synonym` varchar(512) DEFAULT NULL COMMENT '同义词',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='医院手术信息表';
+
+-- ----------------------------
+-- Table structure for hos_record_template
+-- ----------------------------
+DROP TABLE IF EXISTS `hos_record_template`;
+CREATE TABLE `hos_record_template` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '组织机构ID',
+  `code` varchar(32) DEFAULT NULL COMMENT '模板代码',
+  `name` varchar(32) DEFAULT NULL COMMENT '模板名称',
+  `content` longtext COMMENT '模板内容',
+  `type` varchar(2) NOT NULL DEFAULT '0' COMMENT '模板类型,0:未知,1:html,2:xml',
+  `parent_code` varchar(32) DEFAULT NULL COMMENT '父模板代码',
+  `parent_name` varchar(32) DEFAULT NULL COMMENT '父模板名称',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='医院病历文书模板信息表';

+ 6 - 0
dblayer-mbg/pom.xml

@@ -40,6 +40,12 @@
             <artifactId>freemarker</artifactId>
             <optional>true</optional>
         </dependency>
+
+        <!--Flyway相关依赖-->
+        <dependency>
+            <groupId>org.flywaydb</groupId>
+            <artifactId>flyway-core</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 21 - 0
dblayer-mbg/src/main/resources/application.yml

@@ -46,6 +46,27 @@ spring:
         reset-enable: false
         login-username: root
         login-password: root
+  flyway:
+    # 启用Flyway功能
+    enabled: true
+    # 禁用Flyway的clean命令,使用clean命令会删除schema下的所有表
+    clean-disabled: true
+    # 设置Flyway的SQL脚本路径
+    locations: classpath:upgrade
+    # 设置版本信息控制表名称,默认flyway_schema_history
+    table: flyway_schema_history
+    # 在执行migrate命令时需要有flyway_schema_history表,通过baseline命令可以生成该表
+    baseline-on-migrate: true
+    # 指定baseline版本号,低于该版本的SQL脚本在migrate是不会执行
+    baseline-version: 0
+    # 设置字符编码
+    encoding: UTF-8
+    # 不允许不按顺序迁移
+    out-of-order: false
+    # 设置Flyway管控的schema,不设置的话为datasourcel.url中指定的schema
+    #schemas: flyway
+    # 执行migrate时开启校验
+    validate-on-migrate: true
 
 mybatis-plus:
   mapper-locations: classpath*:/mapper/**/*Mapper.xml

+ 0 - 0
report-service/src/main/resources/upgrade/V1__report_init.sql


+ 4 - 5
security-center/src/main/java/com/lantone/security/component/DictionaryHolder.java

@@ -2,17 +2,16 @@ package com.lantone.security.component;
 
 import com.lantone.security.facade.base.DictionaryInfoFacade;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
 import org.springframework.stereotype.Component;
 
-import javax.annotation.PostConstruct;
-
 /**
  * @Description: 系统字典信息操作组件
  * @author: rengb
  * @time: 2021/1/5 18:27
  */
 @Component
-public class DictionaryHolder {
+public class DictionaryHolder implements CommandLineRunner {
 
     @Autowired
     private DictionaryInfoFacade dictionaryInfoFacade;
@@ -20,8 +19,8 @@ public class DictionaryHolder {
     /**
      * 预加载所有系统字典信息
      */
-    @PostConstruct
-    public void initDicMap() {
+    @Override
+    public void run(String... args) throws Exception {
         dictionaryInfoFacade.initDicMap();
     }
 

+ 4 - 5
security-center/src/main/java/com/lantone/security/component/HospitalSetHolder.java

@@ -2,17 +2,16 @@ package com.lantone.security.component;
 
 import com.lantone.security.facade.base.HospitalSetFacade;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
 import org.springframework.stereotype.Component;
 
-import javax.annotation.PostConstruct;
-
 /**
  * @Description: 组织机构参数配置信息操作组件
  * @author: rengb
  * @time: 2021/1/5 18:27
  */
 @Component
-public class HospitalSetHolder {
+public class HospitalSetHolder implements CommandLineRunner {
 
     @Autowired
     private HospitalSetFacade hospitalSetFacade;
@@ -20,8 +19,8 @@ public class HospitalSetHolder {
     /**
      * 预加载所有组织机构参数配置信息
      */
-    @PostConstruct
-    public void initHospitalSetMap() {
+    @Override
+    public void run(String... args) throws Exception {
         hospitalSetFacade.initHospitalSetMap();
     }
 

+ 4 - 5
security-center/src/main/java/com/lantone/security/component/ResourceRoleRulesHolder.java

@@ -2,17 +2,16 @@ package com.lantone.security.component;
 
 import com.lantone.security.facade.base.ResourceFacade;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
 import org.springframework.stereotype.Component;
 
-import javax.annotation.PostConstruct;
-
 /**
  * @Description: 资源与角色访问对应关系操作组件
  * @author: rengb
  * @time: 2021/1/5 18:27
  */
 @Component
-public class ResourceRoleRulesHolder {
+public class ResourceRoleRulesHolder implements CommandLineRunner {
 
     @Autowired
     private ResourceFacade resourceFacade;
@@ -20,8 +19,8 @@ public class ResourceRoleRulesHolder {
     /**
      * 预加载所有资源与角色访问对应关系
      */
-    @PostConstruct
-    public void initResourceRolesMap() {
+    @Override
+    public void run(String... args) throws Exception {
         resourceFacade.initResourceRolesMap();
     }
 

+ 4 - 5
security-center/src/main/java/com/lantone/security/component/UserDataAuthHolder.java

@@ -2,17 +2,16 @@ package com.lantone.security.component;
 
 import com.lantone.security.facade.base.DataAuthFacade;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
 import org.springframework.stereotype.Component;
 
-import javax.annotation.PostConstruct;
-
 /**
  * @Description: 用户的数据权限操作组件
  * @author: rengb
  * @time: 2021/1/5 18:27
  */
 @Component
-public class UserDataAuthHolder {
+public class UserDataAuthHolder implements CommandLineRunner {
 
     @Autowired
     private DataAuthFacade dataAuthFacade;
@@ -20,8 +19,8 @@ public class UserDataAuthHolder {
     /**
      * 预加载所有用户的数据权限
      */
-    @PostConstruct
-    public void initUserDataAuth() {
+    @Override
+    public void run(String... args) throws Exception {
         dataAuthFacade.initUserDataAuth();
     }
 

+ 13 - 0
security-center/src/main/java/com/lantone/security/facade/LogManagementFacade.java

@@ -9,6 +9,7 @@ import com.lantone.common.dto.LoginLogDTO;
 import com.lantone.common.dto.OperationLogDTO;
 import com.lantone.common.util.ListUtil;
 import com.lantone.common.util.StringUtil;
+import com.lantone.common.vo.BlockLossTypeGatherVO;
 import com.lantone.common.vo.DataCompareVO;
 import com.lantone.security.vo.GetAbnormalLogVO;
 import com.lantone.security.vo.GetAbnormalWayAndIpVO;
@@ -156,4 +157,16 @@ public class LogManagementFacade {
         return out;
     }
 
+    /**
+     * 获取该时间段的日志数量
+     *
+     * @param blockLossTypeGatherVO
+     * @Return java.lang.Integer
+     */
+    public Integer getOperationLogNum(BlockLossTypeGatherVO blockLossTypeGatherVO) {
+        return operationLogFacade.count(new QueryWrapper<OperationLog>()
+                .ge(blockLossTypeGatherVO.getStartDate() != null, "gmt_create", blockLossTypeGatherVO.getStartDate())
+                .le(blockLossTypeGatherVO.getStartDate() != null, "gmt_create", blockLossTypeGatherVO.getStartDate())
+                .in("operation_url", blockLossTypeGatherVO.getOperationUrls()));
+    }
 }

+ 7 - 0
security-center/src/main/java/com/lantone/security/web/LogManagementController.java

@@ -6,6 +6,7 @@ import com.lantone.common.dto.AbnormalLogDTO;
 import com.lantone.common.dto.GetOperationLogDTO;
 import com.lantone.common.dto.LoginLogDTO;
 import com.lantone.common.dto.OperationLogDTO;
+import com.lantone.common.vo.BlockLossTypeGatherVO;
 import com.lantone.common.vo.DataCompareVO;
 import com.lantone.security.vo.GetAbnormalLogVO;
 import com.lantone.security.vo.GetAbnormalWayAndIpVO;
@@ -102,4 +103,10 @@ public class LogManagementController {
         return CommonResult.success(logManagementFacade.getOperationLogs(dataCompareVO));
     }
 
+    @ApiOperation(value = "获取该时间段的日志数量[by:songxl]")
+    @PostMapping("/getOperationLogNum")
+    public CommonResult<Integer> getOperationLogNum(@RequestBody BlockLossTypeGatherVO blockLossTypeGatherVO) {
+        return CommonResult.success(logManagementFacade.getOperationLogNum(blockLossTypeGatherVO));
+    }
+
 }

+ 677 - 0
security-center/src/main/resources/upgrade/V1__emrais_init.sql

@@ -0,0 +1,677 @@
+-- ----------------------------
+-- Table structure for sys_abnormal_log
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_abnormal_log`;
+CREATE TABLE `sys_abnormal_log` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `operation_id` bigint(20) DEFAULT NULL COMMENT '操作人用户ID',
+  `operation_name` varchar(64) DEFAULT NULL COMMENT '操作人用户名',
+  `operation_method` varchar(256) NOT NULL COMMENT '操作方法',
+  `operation_way` varchar(32) NOT NULL COMMENT '操作请求方式',
+  `operation_url` varchar(256) NOT NULL COMMENT '操作url',
+  `operation_param` longtext COMMENT '操作参数',
+  `operation_ip` bigint(10) unsigned NOT NULL DEFAULT '0' COMMENT 'ip地址',
+  `operation_agent` varchar(256) DEFAULT NULL COMMENT '代理信息',
+  `operation_error_info` longtext COMMENT '操作异常信息',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统异常日志表';
+
+-- ----------------------------
+-- Table structure for sys_data_auth
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_data_auth`;
+CREATE TABLE `sys_data_auth` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `name` varchar(32) NOT NULL COMMENT '数据权限名称',
+  `status` char(1) NOT NULL DEFAULT '1' COMMENT '状态 0:禁用,1:启用',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数据权限表';
+
+-- ----------------------------
+-- Table structure for sys_data_auth_detail
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_data_auth_detail`;
+CREATE TABLE `sys_data_auth_detail` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `software_data_auth_id` bigint(20) NOT NULL COMMENT '系统服务与数据权限关联',
+  `data_type` int(2) NOT NULL COMMENT '数据范围类型::1:全部组织,2:全部科室,3:全部科室除本科室外,4:本科室,5:本医疗组,6:本人,7:自定义',
+  `detail_type` int(2) DEFAULT NULL COMMENT 'detail_id的类型 1:detail_id为医院   2:为科室 3:为医生id',
+  `detail_id` bigint(11) DEFAULT NULL COMMENT '医院、科室、医生id',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数据权限详情表';
+
+-- ----------------------------
+-- Table structure for sys_dept
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_dept`;
+CREATE TABLE `sys_dept` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL COMMENT '组织机构ID',
+  `code` varchar(32) DEFAULT '' COMMENT '科室代码',
+  `name` varchar(32) NOT NULL COMMENT '科室名称',
+  `liaison` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系人',
+  `mobile_phone` varchar(11) DEFAULT NULL COMMENT '手机号',
+  `type` varchar(32) DEFAULT NULL COMMENT '类别',
+  `spell` varchar(64) DEFAULT NULL COMMENT '首字母拼音',
+  `station` varchar(64) DEFAULT NULL COMMENT '区域类别',
+  `status` char(1) NOT NULL DEFAULT '1' COMMENT '状态 0:禁用,1:启用',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='科室表';
+
+-- ----------------------------
+-- Table structure for sys_dept_doctor
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_dept_doctor`;
+CREATE TABLE `sys_dept_doctor` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `dept_id` bigint(20) NOT NULL COMMENT '科室ID',
+  `doctor_id` bigint(20) NOT NULL COMMENT '医生ID',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='科室与医生关联表';
+
+-- ----------------------------
+-- Table structure for sys_dept_medoup
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_dept_medoup`;
+CREATE TABLE `sys_dept_medoup` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `dept_id` bigint(20) NOT NULL COMMENT '科室ID',
+  `medoup_id` bigint(20) NOT NULL COMMENT '医疗组ID',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='科室与医疗组关联表';
+
+-- ----------------------------
+-- Table structure for sys_dept_user
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_dept_user`;
+CREATE TABLE `sys_dept_user` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
+  `dept_id` bigint(20) NOT NULL COMMENT '科室ID',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='科室与用户关联表';
+
+-- ----------------------------
+-- Table structure for sys_dictionary_info
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_dictionary_info`;
+CREATE TABLE `sys_dictionary_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `group_type` varchar(8) NOT NULL DEFAULT '0' COMMENT '分组(值自定义)',
+  `name` varchar(32) NOT NULL DEFAULT '' COMMENT '内容',
+  `val` varchar(512) NOT NULL DEFAULT '' COMMENT '值',
+  `status` char(1) NOT NULL DEFAULT '1' COMMENT '状态 0:禁用,1:启用',
+  `return_type` char(1) NOT NULL DEFAULT '1' COMMENT '返回类型(0: 都返回,1:后台维护返回 2:界面返回)',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `RETURN_GROUP_TYPE_NAME_INDEX` (`return_type`,`group_type`,`name`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统字典表';
+
+-- ----------------------------
+-- Table structure for sys_doctor
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_doctor`;
+CREATE TABLE `sys_doctor` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `code` varchar(32) NOT NULL COMMENT '医生代码',
+  `name` varchar(32) NOT NULL COMMENT '医生名称',
+  `mobilePhone` varchar(11) DEFAULT NULL COMMENT '手机号',
+  `professor` varchar(64) DEFAULT NULL COMMENT '职称',
+  `occup` varchar(2) NOT NULL DEFAULT '0' COMMENT '职业医师资格(0:无,1:有)',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='医生表';
+
+-- ----------------------------
+-- Table structure for sys_hospital
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_hospital`;
+CREATE TABLE `sys_hospital` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `parent_id` bigint(20) DEFAULT NULL COMMENT '父级组织机构id',
+  `code` varchar(32) DEFAULT NULL COMMENT '组织机构代码',
+  `name` varchar(32) NOT NULL COMMENT '组织机构名称',
+  `region` varchar(255) DEFAULT NULL COMMENT '归属区域',
+  `type` varchar(2) NOT NULL COMMENT '组织机构类型(0:AI病案质控平台 1:集团医院 2:医共 3:医联 4:医院)',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `status` char(1) NOT NULL DEFAULT '1' COMMENT '状态 0:禁用,1:启用',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='组织机构表';
+
+-- ----------------------------
+-- Table structure for sys_hospital_set
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_hospital_set`;
+CREATE TABLE `sys_hospital_set` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL COMMENT '组织机构ID',
+  `hospital_name` varchar(32) DEFAULT NULL COMMENT '组织机构name',
+  `code` varchar(32) NOT NULL DEFAULT '' COMMENT '参数配置代码',
+  `name` varchar(32) NOT NULL DEFAULT '' COMMENT '参数配置名称',
+  `val` varchar(512) NOT NULL DEFAULT '' COMMENT '参数配置值',
+  `status` char(1) DEFAULT '1' COMMENT '状态 0:禁用,1:启用',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `HOSPITAL_ID_CODE_NAME_INDEX` (`hospital_id`,`code`,`name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='组织机构参数配置表';
+
+-- ----------------------------
+-- Table structure for sys_hospital_user
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_hospital_user`;
+CREATE TABLE `sys_hospital_user` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL COMMENT '组织机构ID',
+  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='组织机构与用户关联表';
+
+-- ----------------------------
+-- Table structure for sys_login_log
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_login_log`;
+CREATE TABLE `sys_login_log` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `login_id` bigint(20) NOT NULL COMMENT '登录用户ID',
+  `login_name` varchar(64) NOT NULL COMMENT '登录用户名',
+  `login_date` datetime NOT NULL COMMENT '登录日期',
+  `login_ip` bigint(10) unsigned NOT NULL DEFAULT '0' COMMENT '登录ip',
+  `login_address` varchar(64) DEFAULT NULL COMMENT '登录ip地址',
+  `login_browser` varchar(64) DEFAULT NULL COMMENT '浏览器',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统登录日志表';
+
+-- ----------------------------
+-- Table structure for sys_medoup
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_medoup`;
+CREATE TABLE `sys_medoup` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `code` varchar(32) NOT NULL COMMENT '医疗组代码',
+  `name` varchar(32) NOT NULL COMMENT '医疗组名称',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='医疗组表';
+
+-- ----------------------------
+-- Table structure for sys_medoup_doctor
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_medoup_doctor`;
+CREATE TABLE `sys_medoup_doctor` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `medoup_id` bigint(20) NOT NULL COMMENT '医疗组ID',
+  `doctor_id` bigint(20) NOT NULL COMMENT '医生ID',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='医疗组与医生关联表';
+
+-- ----------------------------
+-- Table structure for sys_menu
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_menu`;
+CREATE TABLE `sys_menu` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `parent_id` bigint(20) NOT NULL COMMENT '父级功能菜单ID',
+  `name` varchar(32) NOT NULL COMMENT '功能菜单名称',
+  `type` varchar(2) NOT NULL COMMENT '类型:0:目录,1菜单,2按钮,3:功能',
+  `code` varchar(32) DEFAULT NULL COMMENT '页面路由',
+  `icon` varchar(128) DEFAULT NULL COMMENT '图标',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `menu_describe` varchar(1024) DEFAULT NULL COMMENT '描述',
+  `status` char(1) NOT NULL DEFAULT '1' COMMENT '状态 0:禁用,1:启用',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='功能菜单表';
+
+-- ----------------------------
+-- Table structure for sys_menu_resource
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_menu_resource`;
+CREATE TABLE `sys_menu_resource` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `menu_id` bigint(20) NOT NULL COMMENT '功能菜单ID',
+  `resource_id` bigint(20) NOT NULL COMMENT 'URL资源ID',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='功能菜单与URL资源关联表';
+
+-- ----------------------------
+-- Table structure for sys_operation_log
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_operation_log`;
+CREATE TABLE `sys_operation_log` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `operation_id` bigint(20) DEFAULT NULL COMMENT '操作人用户ID',
+  `operation_name` varchar(64) DEFAULT NULL COMMENT '操作人用户名',
+  `operation_date` datetime NOT NULL COMMENT '操作日期',
+  `operation_record` varchar(256) DEFAULT NULL COMMENT '操作记录',
+  `operation_ip` bigint(10) unsigned NOT NULL DEFAULT '0' COMMENT 'ip地址',
+  `operation_address` varchar(64) DEFAULT NULL COMMENT '操作地址',
+  `operation_method` varchar(256) NOT NULL COMMENT '操作方法',
+  `operation_way` varchar(32) NOT NULL COMMENT '操作请求方式',
+  `operation_url` varchar(256) NOT NULL COMMENT '操作url',
+  `operation_param` longtext COMMENT '操作参数',
+  `json_result` longtext COMMENT '返回参数',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统操作日志表';
+
+-- ----------------------------
+-- Table structure for sys_region
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_region`;
+CREATE TABLE `sys_region` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL COMMENT '组织机构ID',
+  `hospital_name` varchar(30) DEFAULT NULL COMMENT '医院名称',
+  `code` varchar(32) DEFAULT NULL COMMENT '病区代码',
+  `name` varchar(32) NOT NULL COMMENT '病区名称',
+  `spell` varchar(64) DEFAULT NULL COMMENT '首字母拼音',
+  `liaison` varchar(20) DEFAULT NULL COMMENT '联系人',
+  `phone_number` varchar(20) DEFAULT NULL COMMENT '手机号码',
+  `station` varchar(64) DEFAULT NULL COMMENT '区域类别',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `status` char(1) NOT NULL DEFAULT '1' COMMENT '状态 0:禁用,1:启用',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='病区表';
+
+-- ----------------------------
+-- Table structure for sys_region_dept
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_region_dept`;
+CREATE TABLE `sys_region_dept` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL COMMENT '组织机构ID',
+  `region_id` bigint(20) NOT NULL COMMENT '病区ID',
+  `dept_id` bigint(20) NOT NULL COMMENT '科室ID',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='病区与科室关联表';
+
+-- ----------------------------
+-- Table structure for sys_resource
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_resource`;
+CREATE TABLE `sys_resource` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `name` varchar(32) DEFAULT NULL COMMENT 'URL资源名称',
+  `url` varchar(64) NOT NULL COMMENT '页面路由',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `describe` varchar(1024) DEFAULT NULL COMMENT '描述',
+  `status` char(1) NOT NULL DEFAULT '1' COMMENT '状态 0:禁用,1:启用',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `URL_INDEX` (`url`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='URL资源表';
+
+-- ----------------------------
+-- Table structure for sys_role
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role`;
+CREATE TABLE `sys_role` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL COMMENT '组织机构ID',
+  `name` varchar(32) DEFAULT NULL COMMENT '角色名称',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `status` char(1) NOT NULL DEFAULT '1' COMMENT '状态 0:禁用,1:启用',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色表';
+
+-- ----------------------------
+-- Table structure for sys_role_software
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role_software`;
+CREATE TABLE `sys_role_software` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `role_id` bigint(20) NOT NULL COMMENT '角色ID',
+  `software_id` bigint(20) NOT NULL COMMENT '系统服务ID',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色与系统服务关联表';
+
+-- ----------------------------
+-- Table structure for sys_role_software_data_auth
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role_software_data_auth`;
+CREATE TABLE `sys_role_software_data_auth` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `role_id` bigint(20) NOT NULL COMMENT '角色ID',
+  `software_data_auth_id` bigint(20) NOT NULL COMMENT '系统服务与数据权限关联ID',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色与系统服务与数据权限关联表';
+
+-- ----------------------------
+-- Table structure for sys_role_software_menu
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role_software_menu`;
+CREATE TABLE `sys_role_software_menu` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `role_id` bigint(20) NOT NULL COMMENT '角色ID',
+  `software_menu_id` bigint(20) NOT NULL COMMENT '系统服务与功能菜单关联ID',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色与系统服务与功能菜单关联表';
+
+-- ----------------------------
+-- Table structure for sys_role_software_resource
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role_software_resource`;
+CREATE TABLE `sys_role_software_resource` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `role_id` bigint(20) NOT NULL COMMENT '角色ID',
+  `software_resource_id` bigint(20) NOT NULL COMMENT '系统服务与URL资源关联ID',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色与系统服务与URL资源关联表';
+
+-- ----------------------------
+-- Table structure for sys_software
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_software`;
+CREATE TABLE `sys_software` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `name` varchar(32) NOT NULL COMMENT '系统服务名称',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `status` char(1) NOT NULL DEFAULT '1' COMMENT '状态 0:禁用,1:启用',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统服务表';
+
+-- ----------------------------
+-- Table structure for sys_software_data_auth
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_software_data_auth`;
+CREATE TABLE `sys_software_data_auth` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `software_id` bigint(20) NOT NULL COMMENT '系统服务ID',
+  `data_auth_id` bigint(20) NOT NULL COMMENT '数据权限ID',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统服务与数据权限关联表';
+
+-- ----------------------------
+-- Table structure for sys_software_menu
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_software_menu`;
+CREATE TABLE `sys_software_menu` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `software_id` bigint(20) NOT NULL COMMENT '系统服务ID',
+  `menu_id` bigint(20) NOT NULL COMMENT '功能菜单ID',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `software_menu_id` (`software_id`,`menu_id`) USING BTREE COMMENT '服务和菜单的对应关系唯一'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统服务与功能菜单关联表';
+
+-- ----------------------------
+-- Table structure for sys_software_resource
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_software_resource`;
+CREATE TABLE `sys_software_resource` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `software_id` bigint(20) NOT NULL COMMENT '系统服务ID',
+  `resource_id` bigint(20) NOT NULL COMMENT 'URL资源ID',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统服务与URL资源关联表';
+
+-- ----------------------------
+-- Table structure for sys_user
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_user`;
+CREATE TABLE `sys_user` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `doctor_id` bigint(11) DEFAULT NULL COMMENT '医生id',
+  `username` varchar(64) NOT NULL COMMENT '用户名',
+  `password` varchar(128) NOT NULL COMMENT '密码',
+  `name` varchar(64) DEFAULT NULL COMMENT '姓名',
+  `sex` int(2) DEFAULT NULL COMMENT '性别',
+  `mobile_phone` varchar(11) DEFAULT NULL COMMENT '手机号',
+  `idcard` varchar(32) DEFAULT NULL COMMENT '身份证号',
+  `title_id` varchar(32) DEFAULT NULL COMMENT '职称编号',
+  `job_no` varchar(32) DEFAULT NULL COMMENT '工号,对应的是医生表的code',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `status` char(1) NOT NULL DEFAULT '1' COMMENT '状态 0:禁用,1:启用',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `username` (`username`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
+
+-- ----------------------------
+-- Table structure for sys_user_role
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_user_role`;
+CREATE TABLE `sys_user_role` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
+  `role_id` bigint(20) NOT NULL COMMENT '角色ID',
+  `order_no` varchar(8) DEFAULT NULL COMMENT '排序',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户与角色关联表';
+
+-- ----------------------------
+-- Function structure for getChildList
+-- ----------------------------
+DROP FUNCTION IF EXISTS `getChildList`;
+DELIMITER ;;
+CREATE DEFINER=`root`@`%` FUNCTION `getChildList`(hospitalId LONG) RETURNS varchar(1000) CHARSET utf8
+BEGIN
+       DECLARE pTemp VARCHAR(1000);
+       DECLARE cTemp VARCHAR(1000);
+
+       SET pTemp = '$';
+       SET cTemp =cast(hospitalId as CHAR);
+
+       WHILE cTemp is not null DO
+         SET pTemp = concat(pTemp,',',cTemp);
+         SELECT group_concat(id) INTO cTemp FROM sys_hospital
+         WHERE FIND_IN_SET(parent_id,cTemp)>0;
+       END WHILE;
+       RETURN pTemp;
+     END
+;;
+DELIMITER ;
+
+-- ----------------------------
+-- Function structure for getChildMenu
+-- ----------------------------
+DROP FUNCTION IF EXISTS `getChildMenu`;
+DELIMITER ;;
+CREATE DEFINER=`root`@`%` FUNCTION `getChildMenu`(mendId LONG) RETURNS varchar(1000) CHARSET utf8
+BEGIN
+       DECLARE pTemp VARCHAR(1000);
+       DECLARE cTemp VARCHAR(1000);
+
+       SET pTemp = '$';
+       SET cTemp =cast(mendId as CHAR);
+
+       WHILE cTemp is not null DO
+         SET pTemp = concat(pTemp,',',cTemp);
+         SELECT group_concat(id) INTO cTemp FROM sys_menu
+         WHERE FIND_IN_SET(parent_id,cTemp)>0;
+       END WHILE;
+       RETURN pTemp;
+     END
+;;
+DELIMITER ;

+ 37 - 0
security-center/src/main/resources/upgrade/V2__emrais_新增站内信相关表.sql

@@ -0,0 +1,37 @@
+-- ----------------------------
+-- Table structure for sys_notice
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_notice`;
+CREATE TABLE `sys_notice` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `title` varchar(512) NOT NULL COMMENT '标题',
+  `type` char(1) NOT NULL COMMENT '通知类型 0:公告,1:其他',
+  `content` varchar(1024) DEFAULT NULL COMMENT '内容',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `creatorName` varchar(32) DEFAULT NULL COMMENT '创建者姓名',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='通知详情表';
+
+-- ----------------------------
+-- Table structure for sys_notice_user
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_notice_user`;
+CREATE TABLE `sys_notice_user` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) DEFAULT NULL COMMENT '组织id',
+  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
+  `notice_id` bigint(20) NOT NULL COMMENT '通知ID',
+  `status` char(1) NOT NULL DEFAULT '0' COMMENT '状态 0:未读,1:已读',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户通知关系表';