浏览代码

医院端医院编辑

zhoutg 3 年之前
父节点
当前提交
0eabaab192

+ 15 - 0
doc/003.20211009子医院映射/user_init.sql

@@ -0,0 +1,15 @@
+use `cdss`;
+
+INSERT INTO `cdss`.`sys_menu` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `order_no`, `remark`) VALUES ('20', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '子医院维护', '2', 'XTPZ-ZYYWH', '2', '');
+
+INSERT INTO `cdss`.`sys_menu_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `remark`) VALUES ('93', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '20', '96', '子医院维护-获取子医院信息');
+INSERT INTO `cdss`.`sys_menu_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `remark`) VALUES ('94', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '20', '97', '子医院维护-编辑子医院信息');
+
+INSERT INTO `cdss`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `type`, `remark`) VALUES ('96', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '子医院维护-获取子医院信息', 'FUNC000096', '/tran/hospitalInfo/getHospitalRelation', 'ALL', '子医院维护-获取子医院信息', '0', NULL);
+INSERT INTO `cdss`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `type`, `remark`) VALUES ('97', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '子医院维护-编辑子医院信息', 'FUNC000097', '/tran/hospitalInfo/saveHospitalRelation', 'ALL', '子医院维护-编辑子医院信息', '0', NULL);
+
+INSERT INTO `cdss`.`sys_role_menu` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ('20', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '20', NULL);
+
+INSERT INTO `cdss`.`sys_role_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('96', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '96', '子医院维护-获取子医院信息');
+INSERT INTO `cdss`.`sys_role_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('97', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '97', '子医院维护-编辑子医院信息');
+

+ 72 - 0
src/main/java/com/diagbot/dto/HospitalInfoGetDTO.java

@@ -0,0 +1,72 @@
+package com.diagbot.dto;
+
+import com.google.common.collect.Lists;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 医院信息表
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-08-06
+ */
+@Data
+public class HospitalInfoGetDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 医院名称
+     */
+    private String name;
+
+    /**
+     * 医院地址
+     */
+    private String address;
+
+    /**
+     * 医院名称拼音
+     */
+    private String spell;
+
+    /**
+     * 状态:0.禁用1.启用
+     */
+    private Integer status;
+
+    /**
+     * 是否对接(0-不对接,1-对接)
+     */
+    private Integer connect;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 子医院关联表
+     */
+    private List<HospitalRelationDTO> hospitalRelationDTOList = Lists.newLinkedList();
+}

+ 30 - 0
src/main/java/com/diagbot/dto/HospitalRelationDTO.java

@@ -0,0 +1,30 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 医院关联表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-08-06
+ */
+@Data
+public class HospitalRelationDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 子医院名称
+     */
+    private String name;
+
+    /**
+     * 子医院编码
+     */
+    private String code;
+
+}

+ 27 - 0
src/main/java/com/diagbot/dto/HospitalRelationErrorDTO.java

@@ -0,0 +1,27 @@
+package com.diagbot.dto;
+
+import com.diagbot.vo.HospitalRelationVO;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 医院关联表提示出错
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-08-06
+ */
+@Data
+public class HospitalRelationErrorDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    // 当前医院重复
+    private List<HospitalRelationVO> errorCurrent;
+
+    // 与其他医院重复
+    private List<HospitalRelationVO> errorOther;
+}

+ 3 - 1
src/main/java/com/diagbot/exception/ServiceErrorCode.java

@@ -18,7 +18,9 @@ public enum ServiceErrorCode implements ErrorCode {
     USER_UN_BIND_ERROR("10020006", "用户手机号未绑定无需解绑"),
     VERIFYCODE_ERROR("10020007", "图片验证码生成错误"),
     USER_EXIST("10020008", "该账号已注册"),
-    EMAIL_IS_NULL("10020009", "请输入邮箱");
+    EMAIL_IS_NULL("10020009", "请输入邮箱"),
+
+    NAME_CODE_ERROR("20020009", "操作失败,请检查【医院名称+医院编码】重复项");
 
     private String code;
     private String msg;

+ 141 - 1
src/main/java/com/diagbot/facade/HospitalInfoFacade.java

@@ -3,23 +3,37 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.diagbot.dto.HospitalInfoDTO;
+import com.diagbot.dto.HospitalInfoGetDTO;
+import com.diagbot.dto.HospitalRelationDTO;
+import com.diagbot.dto.HospitalRelationErrorDTO;
 import com.diagbot.entity.HospitalInfo;
+import com.diagbot.entity.TranHospitalRelation;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.StatusEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.service.TranHospitalRelationService;
 import com.diagbot.service.impl.HospitalInfoServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.SysUserUtils;
+import com.diagbot.util.UserUtils;
 import com.diagbot.vo.HospitalCheckVO;
+import com.diagbot.vo.HospitalInfoSaveVO;
 import com.diagbot.vo.HospitalInfoVO;
+import com.diagbot.vo.HospitalRelationVO;
 import com.diagbot.vo.HospitalSaveVO;
+import com.google.common.collect.Lists;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
-
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author wangfeng
@@ -29,6 +43,10 @@ import java.util.List;
 @Component
 public class HospitalInfoFacade extends HospitalInfoServiceImpl {
 
+    @Autowired
+    @Qualifier("tranHospitalRelationServiceImpl")
+    TranHospitalRelationService tranHospitalRelationService;
+
     /**
      * @param hospitalInfoVO
      * @return
@@ -114,4 +132,126 @@ public class HospitalInfoFacade extends HospitalInfoServiceImpl {
         data = BeanUtil.listCopyTo(list, HospitalInfoDTO.class);
         return data;
     }
+
+    /**
+     * 获取子医院信息
+     *
+     * @return
+     */
+    public HospitalInfoGetDTO getHospitalRelation() {
+        HospitalInfoGetDTO hospitalInfoGetDTO = new HospitalInfoGetDTO();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+
+        // 查询主表
+        HospitalInfo one = this.getOne(new QueryWrapper<HospitalInfo>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("id", hospitalId), false);
+        if (one == null) {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "数据不存在");
+        }
+        BeanUtil.copyProperties(one, hospitalInfoGetDTO);
+
+        // 查询关联表
+        List<TranHospitalRelation> relationList = tranHospitalRelationService.list(new QueryWrapper<TranHospitalRelation>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", hospitalId)
+        );
+        List<HospitalRelationDTO> hospitalRelationDTOList = BeanUtil.listCopyTo(relationList, HospitalRelationDTO.class);
+        hospitalInfoGetDTO.setHospitalRelationDTOList(hospitalRelationDTOList);
+        return hospitalInfoGetDTO;
+    }
+
+    /**
+     * 保存
+     *
+     * @param hospitalInfoSaveVO
+     * @return
+     */
+    public HospitalRelationErrorDTO saveHospitalRelation(HospitalInfoSaveVO hospitalInfoSaveVO) {
+        Long curHospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
+        // 查询主表
+        HospitalInfo one = this.getOne(new QueryWrapper<HospitalInfo>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("id", curHospitalId), false);
+        if (one == null) {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "数据不存在");
+        }
+
+        // 获取子医院
+        List<HospitalRelationVO> hospitalRelationVOList = hospitalInfoSaveVO.getHospitalRelationVOList();
+        // 校验子医院
+        HospitalRelationErrorDTO res = checkRelationHospital(hospitalRelationVOList, curHospitalId);
+        if (res != null) {
+            return res;
+        }
+
+        // 先删除子医院关联表
+        tranHospitalRelationService.remove(new QueryWrapper<TranHospitalRelation>().eq("hospital_id", curHospitalId));
+
+        // 插入子医院关联表
+        List<TranHospitalRelation> saveRelationList = Lists.newArrayList();
+        String userId = UserUtils.getCurrentPrincipleID();
+        Date now = DateUtil.now();
+        for (HospitalRelationVO hospitalRelationVO : hospitalRelationVOList) {
+            TranHospitalRelation tranHospitalRelation = new TranHospitalRelation();
+            BeanUtil.copyProperties(hospitalRelationVO, tranHospitalRelation);
+            tranHospitalRelation.setHospitalId(curHospitalId);
+            tranHospitalRelation.setCreator(userId);
+            tranHospitalRelation.setModifier(userId);
+            tranHospitalRelation.setGmtCreate(now);
+            tranHospitalRelation.setGmtModified(now);
+            saveRelationList.add(tranHospitalRelation);
+        }
+        if (ListUtil.isNotEmpty(saveRelationList)) {
+            tranHospitalRelationService.saveBatch(saveRelationList);
+        }
+        return null;
+    }
+
+    /**
+     * 校验子医院
+     *
+     * @param hospitalRelationVOList
+     * @param curHospitalId
+     * @return
+     */
+    public HospitalRelationErrorDTO checkRelationHospital(List<HospitalRelationVO> hospitalRelationVOList, Long curHospitalId) {
+        HospitalRelationErrorDTO res = new HospitalRelationErrorDTO();
+        if (ListUtil.isNotEmpty(hospitalRelationVOList)) {
+            // 校验name+code唯一性
+            List<TranHospitalRelation> tranHospitalRelationList = tranHospitalRelationService.list(new QueryWrapper<TranHospitalRelation>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+            );
+            Map<String, Long> relationMap = tranHospitalRelationList.stream().collect(Collectors.toMap(k -> k.getName() + "_" + k.getCode(), v -> v.getHospitalId(), (v1, v2) -> (v2), LinkedHashMap::new));
+            List<String> keyExist = Lists.newArrayList(); // 避免重复数据返回
+            List<String> keyAll = Lists.newArrayList(); // 当前医院所有key
+            List<HospitalRelationVO> errorOther = Lists.newArrayList(); // 与其他医院重复
+            List<HospitalRelationVO> errorCurrent = Lists.newArrayList(); // 当前医院重复
+
+            for (HospitalRelationVO hospitalRelationVO : hospitalRelationVOList) {
+                // 联合key
+                String unionKey = hospitalRelationVO.getName() + "_" + hospitalRelationVO.getCode();
+                // 判断当前医院重复
+                if (keyAll.contains(unionKey)) {
+                    errorCurrent.add(hospitalRelationVO);
+                } else {
+                    keyAll.add(unionKey);
+                }
+                // 判断与其他医院重复
+                Long hospitalId = relationMap.get(unionKey);
+                if (hospitalId != null && !hospitalId.equals(curHospitalId) && !keyExist.contains(unionKey)) {
+                    errorOther.add(hospitalRelationVO);
+                    keyExist.add(unionKey);
+                }
+            }
+
+            // 有错误,直接返回
+            if (ListUtil.isNotEmpty(errorOther) || ListUtil.isNotEmpty(errorCurrent)) {
+                res.setErrorOther(errorOther);
+                res.setErrorCurrent(errorCurrent);
+                return res;
+            }
+        }
+        return null;
+    }
 }

+ 61 - 0
src/main/java/com/diagbot/vo/HospitalInfoSaveVO.java

@@ -0,0 +1,61 @@
+package com.diagbot.vo;
+
+import com.google.common.collect.Lists;
+import lombok.Data;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 医院信息表
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-08-06
+ */
+@Data
+public class HospitalInfoSaveVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    // /**
+    //  * 主键
+    //  */
+    // private Long id;
+
+    // /**
+    //  * 医院名称
+    //  */
+    // @NotBlank(message = "医院名称不能为空")
+    // private String name;
+    //
+    // /**
+    //  * 医院地址
+    //  */
+    // private String address;
+    //
+    // /**
+    //  * 医院名称拼音
+    //  */
+    // private String spell;
+    //
+    // /**
+    //  * 状态:0.禁用1.启用
+    //  */
+    // private Integer status;
+    //
+    // /**
+    //  * 是否对接(0-不对接,1-对接)
+    //  */
+    // private Integer connect;
+    //
+    // /**
+    //  * 备注
+    //  */
+    // private String remark;
+
+    /**
+     * 子医院关联表
+     */
+    private List<HospitalRelationVO> hospitalRelationVOList = Lists.newLinkedList();
+}

+ 32 - 0
src/main/java/com/diagbot/vo/HospitalRelationVO.java

@@ -0,0 +1,32 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 医院关联表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-08-06
+ */
+@Data
+public class HospitalRelationVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 子医院名称
+     */
+    @NotBlank(message = "子医院名称不能为空")
+    private String name;
+
+    /**
+     * 子医院编码
+     */
+    @NotBlank(message = "子医院编码不能为空")
+    private String code;
+
+}

+ 26 - 0
src/main/java/com/diagbot/web/HospitalInfoController.java

@@ -3,10 +3,14 @@ package com.diagbot.web;
 
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.HospitalInfoDTO;
+import com.diagbot.dto.HospitalInfoGetDTO;
+import com.diagbot.dto.HospitalRelationErrorDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.HospitalInfo;
+import com.diagbot.exception.ServiceErrorCode;
 import com.diagbot.facade.HospitalInfoFacade;
 import com.diagbot.vo.HospitalCheckVO;
+import com.diagbot.vo.HospitalInfoSaveVO;
 import com.diagbot.vo.HospitalInfoVO;
 import com.diagbot.vo.HospitalSaveVO;
 import io.swagger.annotations.Api;
@@ -90,4 +94,26 @@ public class HospitalInfoController {
         List<HospitalInfoDTO> data = hospitalInfoFacade.getAllEnableHospitalInfo();
         return RespDTO.onSuc(data);
     }
+
+    @ApiOperation(value = "获取子医院信息[by:zhoutg]",
+            notes = "")
+    @PostMapping("/getHospitalRelation")
+    @SysLogger("getHospitalRelation")
+    public RespDTO<HospitalInfoGetDTO> getHospitalRelation() {
+        return RespDTO.onSuc(hospitalInfoFacade.getHospitalRelation());
+    }
+
+    @ApiOperation(value = "编辑子医院信息[by:zhoutg]", notes = "")
+    @PostMapping("/saveHospitalRelation")
+    @SysLogger("saveHospitalRelation")
+    @Transactional
+    public RespDTO<HospitalRelationErrorDTO> saveHospitalRelation(@RequestBody @Valid HospitalInfoSaveVO hospitalInfoSaveVO) {
+        HospitalRelationErrorDTO errorData = hospitalInfoFacade.saveHospitalRelation(hospitalInfoSaveVO);
+        if (errorData != null) {
+            return RespDTO.onSucBoth(ServiceErrorCode.NAME_CODE_ERROR.getCode(),
+                    "操作失败,请检查【医院名称+医院编码】重复项",
+                    errorData);
+        }
+        return RespDTO.onSuc(errorData);
+    }
 }