songxinlu пре 4 година
родитељ
комит
200b6a9b5a

+ 24 - 0
src/main/java/com/diagbot/dto/CheckUserDTO.java

@@ -0,0 +1,24 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 核查人员用户科室、姓名、角色输出类
+ * @Author:songxl
+ * @time: 2021/5/14 13:45
+ */
+@Getter
+@Setter
+public class CheckUserDTO {
+    //科室id
+    private String deptId;
+    //科室名称
+    private String deptName;
+    //医生id
+    private String doctorId;
+    //医生名称
+    private String doctorName;
+    //角色id
+    private int roleId;
+}

+ 104 - 66
src/main/java/com/diagbot/facade/MedCheckInfoFacade.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.CheckDeptDTO;
 import com.diagbot.dto.CheckJobDTO;
+import com.diagbot.dto.CheckUserDTO;
 import com.diagbot.dto.DeptCheckUserDTO;
 import com.diagbot.entity.BasDeptInfo;
 import com.diagbot.entity.BasDoctorInfo;
@@ -20,6 +21,7 @@ import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.MedCheckInfoServiceImpl;
 import com.diagbot.util.DateUtil;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.CheckJobPageVO;
@@ -27,6 +29,8 @@ import com.diagbot.vo.CheckJobVO;
 import com.diagbot.vo.CheckUserVO;
 import com.diagbot.vo.DistributionJobVO;
 import com.diagbot.vo.MedCheckInfoAddVO;
+import com.google.common.collect.Lists;
+import org.apache.commons.collections4.ListUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -220,26 +224,15 @@ public class MedCheckInfoFacade extends MedCheckInfoServiceImpl {
         //院级监管人员
         else if(searchRoleIds.contains(6L)&&"1".equals(checkJobVO.getJobType()))
         {
-            //1.获取院级质控人员有哪些
-            //1.1获取院级质控人员角色id
-            Long roleId = sysRoleFacade.getOne(new QueryWrapper<SysRole>()
-                    .eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("name","院级质控人员")).getId();
-            //1.2获取院级质控人员该角色的用户id集合
-            List<Long> userIds = sysUserRoleFacade.list(new QueryWrapper<SysUserRole>()
+            //获取监管人员所在科室集合
+            List<String> deptIds = sysUserDeptFacade.list(new QueryWrapper<SysUserDept>()
                     .eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("role_id",roleId)
-            ).stream().map(SysUserRole::getUserId).collect(Collectors.toList());
-            if(userIds.isEmpty()){
-                //1.3获取该用户id集合的科室id集合
-                List<String> deptIds = sysUserDeptFacade.list(new QueryWrapper<SysUserDept>()
-                        .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .eq("hospital_id",hospitalId)
-                        .in("user_id",userIds)
-                ).stream().map(SysUserDept::getDeptId).collect(Collectors.toList());
-                if(deptIds!=null&&!deptIds.isEmpty()){
-                    checkJobVO.setDeptList(deptIds);
-                }
+                    .eq("hospital_id",hospitalId)
+                    .eq("user_id",principleId)
+            ).stream().map(SysUserDept::getDeptId).collect(Collectors.toList());
+            //分配除了监管人员以外其他科室的核查任务
+            if(deptIds!=null&&!deptIds.isEmpty()){
+                checkJobVO.setDeptList(deptIds);
             }
             return getCheckList(checkJobVO);
         }
@@ -380,37 +373,24 @@ public class MedCheckInfoFacade extends MedCheckInfoServiceImpl {
         Long roleId = sysRoleFacade.getOne(new QueryWrapper<SysRole>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("name","院级质控人员")).getId();
-        //1.2获取院级质控人员该角色的用户id集合
-        List<Long> userIds = sysUserRoleFacade.list(new QueryWrapper<SysUserRole>()
-                .eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("role_id",roleId)
-        ).stream().map(SysUserRole::getUserId).collect(Collectors.toList());
-        if(userIds.isEmpty()){return;}
-        //1.3获取该用户id集合的科室id集合
-        List<String> deptIds = sysUserDeptFacade.list(new QueryWrapper<SysUserDept>()
-                .eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("hospital_id",hospitalId)
-                .in("user_id",userIds)
-        ).stream().map(SysUserDept::getDeptId).collect(Collectors.toList());
-        if(deptIds.isEmpty()){return;}
-        //2.1获取质控人员的科室信息
-        List<BasDeptInfo> deptInfos = basDeptInfoFacade.list(new QueryWrapper<BasDeptInfo>()
-                .eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("hospital_id",hospitalId)
-                .in("dept_id",deptIds));
-        //2.2获取监管科室集合所有的医生信息
-        List<BasDoctorInfo> doctorInfos = basDoctorInfoFacade.list(new QueryWrapper<BasDoctorInfo>()
-                .eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("hospital_id",hospitalId)
-                .in("dept_id",deptIds));
+        CheckUserVO checkUserVOS = new CheckUserVO();
+        checkUserVOS.setRoleIds(Lists.newArrayList(roleId));
+        checkUserVOS.setDeptStations(Lists.newArrayList("住院"));
+        checkUserVOS.setUserId(principleId);
+        checkUserVOS.setRoleId(6L);
+        checkUserVOS.setHospitalId(hospitalId);
+        List<CheckUserDTO> checkUserDTOS = baseMapper.getCheckUser(checkUserVOS);
+        //2.1获取科室详情
+        Map<String,String> deptMap = checkUserDTOS.stream()
+                .collect(Collectors.toMap(CheckUserDTO::getDeptId,CheckUserDTO::getDeptName, (v1, v2) -> v2));
         //2.3获取所有医生信息的核查数
-        List<String> doctorIds = doctorInfos.stream().map(BasDoctorInfo::getDoctorId).collect(Collectors.toList());
+        List<String> doctorIds = checkUserDTOS.stream().map(CheckUserDTO::getDoctorId).collect(Collectors.toList());
         CheckUserVO checkUserVO = new CheckUserVO();
         checkUserVO.setJobType(1);
         checkUserVO.setUserList(doctorIds);
         //通过核查人员id获取核查人员的核查任务数
         List<DeptCheckUserDTO> userJobs = baseMapper.getJobNumByUserId(checkUserVO);
-        addCheckInfoMap(checkRoleMap,doctorInfos,userJobs,deptInfos,6);
+        addCheckInfoMaps(checkRoleMap,deptMap,userJobs,checkUserDTOS,6);
     }
     /**
      * @Author songxl
@@ -439,22 +419,24 @@ public class MedCheckInfoFacade extends MedCheckInfoServiceImpl {
         //3.判断这个人是否在质控科
         if(deptIds.contains(zkkDeptId))
         {
-            //4.1获取所有科室
-            List<BasDeptInfo> deptInfos = basDeptInfoFacade.list(new QueryWrapper<BasDeptInfo>()
-                    .eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("hospital_id",hospitalId));
-            //4.2获取所有医生信息
-            List<BasDoctorInfo> doctorInfos = basDoctorInfoFacade.list(new QueryWrapper<BasDoctorInfo>()
-                    .eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("hospital_id",hospitalId));
-            //4.3获取所有医生信息的核查数
-            List<String> doctorIds = doctorInfos.stream().map(BasDoctorInfo::getDoctorId).collect(Collectors.toList());
+            CheckUserVO checkUserVOS = new CheckUserVO();
+            checkUserVOS.setRoleIds(Lists.newArrayList(7L,8L,9L));
+            checkUserVOS.setDeptStations(Lists.newArrayList("住院","质管"));
+            checkUserVOS.setUserId(principleId);
+            checkUserVOS.setRoleId(5L);
+            checkUserVOS.setHospitalId(hospitalId);
+            List<CheckUserDTO> checkUserDTOS = baseMapper.getCheckUser(checkUserVOS);
+            //2.1获取科室详情
+            Map<String,String> deptMap = checkUserDTOS.stream()
+                    .collect(Collectors.toMap(CheckUserDTO::getDeptId,CheckUserDTO::getDeptName, (v1, v2) -> v2));
+            //2.3获取所有医生信息的核查数
+            List<String> doctorIds = checkUserDTOS.stream().map(CheckUserDTO::getDoctorId).collect(Collectors.toList());
             CheckUserVO checkUserVO = new CheckUserVO();
             checkUserVO.setJobType(2);
             checkUserVO.setUserList(doctorIds);
             //通过核查人员id获取核查人员的核查任务数
             List<DeptCheckUserDTO> userJobs = baseMapper.getJobNumByUserId(checkUserVO);
-            addCheckInfoMap(checkRoleMap,doctorInfos,userJobs,deptInfos,5);
+            addCheckInfoMaps(checkRoleMap,deptMap,userJobs,checkUserDTOS,5);
         }
 
     }
@@ -475,25 +457,81 @@ public class MedCheckInfoFacade extends MedCheckInfoServiceImpl {
                 .eq("user_id",principleId)
         ).stream().map(SysUserDept::getDeptId).collect(Collectors.toList());
         if(deptIds.isEmpty()){return;}
+        CheckUserVO checkUserVOS = new CheckUserVO();
+        checkUserVOS.setRoleIds(Lists.newArrayList(4L,7L));
+        checkUserVOS.setDeptIds(deptIds);
+        checkUserVOS.setDeptStations(Lists.newArrayList("住院"));
+        checkUserVOS.setHospitalId(hospitalId);
+        List<CheckUserDTO> checkUserDTOS = baseMapper.getCheckUser(checkUserVOS);
         //2.1获取科室详情
-        List<BasDeptInfo> deptInfos = basDeptInfoFacade.list(new QueryWrapper<BasDeptInfo>()
-                .eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("hospital_id",hospitalId)
-                .in("dept_id",deptIds));
-        //2.2获取监管科室集合所有的医生信息
-        List<BasDoctorInfo> doctorInfos = basDoctorInfoFacade.list(new QueryWrapper<BasDoctorInfo>()
-                .eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("hospital_id",hospitalId)
-                .in("dept_id",deptIds));
+        Map<String,String> deptMap = checkUserDTOS.stream()
+                .collect(Collectors.toMap(CheckUserDTO::getDeptId,CheckUserDTO::getDeptName, (v1, v2) -> v2));
         //2.3获取所有医生信息的核查数
-        List<String> doctorIds = doctorInfos.stream().map(BasDoctorInfo::getDoctorId).collect(Collectors.toList());
+        List<String> doctorIds = checkUserDTOS.stream().map(CheckUserDTO::getDoctorId).collect(Collectors.toList());
         CheckUserVO checkUserVO = new CheckUserVO();
         checkUserVO.setJobType(0);
         checkUserVO.setUserList(doctorIds);
         //通过核查人员id获取核查人员的核查任务数
         List<DeptCheckUserDTO> userJobs = baseMapper.getJobNumByUserId(checkUserVO);
-        addCheckInfoMap(checkRoleMap,doctorInfos,userJobs,deptInfos,4);
+        addCheckInfoMaps(checkRoleMap,deptMap,userJobs,checkUserDTOS,4);
+    }
+
+    /**
+     * @Author songxl
+     * @Description 拼装科室、核查人员、任务数对象
+     * @Date  2021/5/17
+     * @Param [checkRoleMap, doctorInfos, userJobs, deptInfos, roleId]
+     * @Return void
+     * @MethodName addCheckInfoMap
+     */
+    private void addCheckInfoMaps(Map<String, List<CheckDeptDTO>> checkRoleMap, Map<String, String> deptMap,
+                                  List<DeptCheckUserDTO> userJobs, List<CheckUserDTO> checkUserDTOS, int roleId) {
+        if(deptMap.isEmpty()||checkUserDTOS.isEmpty()){}
+        checkRoleMap.put(roleId+"",new ArrayList<CheckDeptDTO>());
+        //遍历科室
+        for(String deptId:deptMap.keySet())
+        {
+            //科室对象
+            CheckDeptDTO checkDeptDTO = new CheckDeptDTO();
+            checkDeptDTO.setDeptId(deptId);
+            checkDeptDTO.setDeptName(deptMap.get(deptId));
+            checkDeptDTO.setDeptcheckUsers(new ArrayList<DeptCheckUserDTO>());
+            //遍历医生
+            for(CheckUserDTO checkUserDTO:checkUserDTOS)
+            {
+                //同一科室
+                if(checkDeptDTO.getDeptId().equals(checkUserDTO.getDeptId()))
+                {
+                    DeptCheckUserDTO deptCheckUserDTO = new DeptCheckUserDTO();
+                    deptCheckUserDTO.setDeptId(checkUserDTO.getDeptId());
+                    deptCheckUserDTO.setDeptName(checkUserDTO.getDeptName());
+                    deptCheckUserDTO.setDoctorId(checkUserDTO.getDoctorId());
+                    deptCheckUserDTO.setDoctorName(checkUserDTO.getDoctorName());
+                    checkDeptDTO.getDeptcheckUsers().add(deptCheckUserDTO);
+                }
+            }
+            for(DeptCheckUserDTO deptCheckUserDTO:checkDeptDTO.getDeptcheckUsers())
+            {
+                //遍历数量
+                for(DeptCheckUserDTO jobNumDto:userJobs)
+                {
+                    //有这个人
+                    if(deptCheckUserDTO.getDoctorId().equals(jobNumDto.getDoctorId()))
+                    {
+                        deptCheckUserDTO.setJobNum(jobNumDto.getJobNum());
+                    }
+                    //没有这个人
+                    else
+                    {
+                        deptCheckUserDTO.setJobNum(0);
+                    }
+                }
+            }
+            checkRoleMap.get(roleId+"").add(checkDeptDTO);
+        }
     }
+
+
     /**
      * @Author songxl
      * @Description 拼装科室、核查人员、任务数对象

+ 2 - 2
src/main/java/com/diagbot/facade/MedCheckWorkFacade.java

@@ -266,8 +266,8 @@ public class MedCheckWorkFacade {
             }
         }
         //住院天数
-        if (null != checkWorkPageVO && null != checkWorkPageVO.getSDay() && null != checkWorkPageVO.getLDay()) {
-            if (checkWorkPageVO.getSDay() > checkWorkPageVO.getLDay()) {
+        if (null != checkWorkPageVO && null != checkWorkPageVO.getSmallDay() && null != checkWorkPageVO.getBigDay()) {
+            if (checkWorkPageVO.getSmallDay() > checkWorkPageVO.getBigDay()) {
                 throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "住院天数区间有误!");
             }
         }

+ 3 - 1
src/main/java/com/diagbot/mapper/MedCheckInfoMapper.java

@@ -2,6 +2,7 @@ package com.diagbot.mapper;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.CheckJobDTO;
+import com.diagbot.dto.CheckUserDTO;
 import com.diagbot.dto.CheckWorkDTO;
 import com.diagbot.dto.CheckedRecordListDTO;
 import com.diagbot.dto.DeptCheckUserDTO;
@@ -36,5 +37,6 @@ public interface MedCheckInfoMapper extends BaseMapper<MedCheckInfo> {
     int deleteBatchCodes(List<String> list);
 
     IPage<CheckedRecordListDTO> checkedRecordList(CheckedRecordListVO checkedRecordListVO);
-
+    //获取核查人员用户科室、姓名、角色
+    List<CheckUserDTO> getCheckUser(CheckUserVO checkUserVOS);
 }

+ 12 - 1
src/main/java/com/diagbot/vo/CheckUserVO.java

@@ -15,6 +15,17 @@ public class CheckUserVO {
     private Integer jobType;
     //核查用户id集合
     private List<String> userList;
-
+    //用户角色集合
+    private List<Long> roleIds;
+    //用户科室集合
+    private List<String> deptIds;
+    //医院
+    private Long hospitalId;
+    //科室类型集合
+    private List<String> deptStations;
+    //角色id
+    private  Long roleId;
+    //用户id
+    private  Long userId;
 
 }

+ 2 - 2
src/main/java/com/diagbot/vo/CheckWorkPageVO.java

@@ -91,13 +91,13 @@ public class CheckWorkPageVO extends Page implements Serializable {
      * 最小天数
      */
     @ApiModelProperty("最小天数")
-    private Integer sDay;
+    private Integer smallDay;
 
     /**
      * 最大天数
      */
     @ApiModelProperty("最大天数")
-    private Integer lDay;
+    private Integer bigDay;
 
     /**
      * 是否归档(0:未归档,1:已归档)

+ 45 - 6
src/main/resources/mapper/MedCheckInfoMapper.xml

@@ -25,6 +25,45 @@
         <result column="job_distribution_name" property="jobDistributionName" />
         <result column="job_distribution_time" property="jobDistributionTime" />
     </resultMap>
+    <!--获取核查人员用户科室、姓名、角色-->
+    <select id="getCheckUser" resultType="com.diagbot.dto.CheckUserDTO">
+        SELECT DISTINCT
+        a.id doctorId,
+        a.linkman doctorName,
+        c.dept_id deptId,
+        d.dept_name deptName,
+        b.role_id  roleId
+        from
+        sys_user a,sys_user_role b,sys_user_dept c ,bas_dept_info d
+        where a.id = b.user_id and a.is_deleted = "N" and b.is_deleted = "N" and c.is_deleted = "N" and a.id = c.user_id
+        and d.dept_id = c.dept_id and c.hospital_id = d.hospital_id
+        and c.hospital_id = #{hospitalId}
+        <if test="roleIds !=null and roleIds.size()!=0 and roleId ==null and userId ==null">
+            and b.role_id in
+            <foreach collection="roleIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="roleIds !=null and roleIds.size()!=0 and roleId !=null and userId !=null">
+            and (b.role_id in
+            <foreach collection="roleIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+             or (b.role_id =#{roleId} and  a.id = #{userId}))
+        </if>
+        <if test="deptIds !=null and deptIds.size()!=0">
+            and c.dept_id in
+            <foreach collection="deptIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="deptStations !=null and deptStations.size()!=0">
+            and d.station in
+            <foreach collection="deptStations" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </select>
     <!--通过核查人员id获取核查人员的核查任务数-->
     <select id="getJobNumByUserId" resultType="com.diagbot.dto.DeptCheckUserDTO">
         SELECT
@@ -94,7 +133,7 @@
                 <if test="name !=null and name != ''">
                     and a.`name` LIKE CONCAT('%',#{name},'%')
                 </if>
-                <if test="deptList !=null and jobType ==0">
+                <if test="deptList !=null and deptList.size()!=0 and jobType ==0">
                     and a.beh_dept_id in
                     <foreach collection="deptList" item="item" open="(" close=")" separator=",">
                         #{item}
@@ -201,7 +240,7 @@
             <![CDATA[ AND mbi.behospital_date < #{endDate}]]>
         </if>
         <if test="creatStatus != null and creatStatus == 1">
-            AND mci.job_create_time is not null
+            AND mci.job_create_time is not null and mci.check_type = 2
         </if>
         <if test="creatStatus != null and creatStatus == 0">
             AND mci.job_create_time is null
@@ -219,11 +258,11 @@
             </foreach>
         </if>
 
-        <if test="sDay != null">
-            <![CDATA[ AND mhp.behospital_day_num >= #{sDay}]]>
+        <if test="smallDay != null">
+            <![CDATA[ AND mhp.behospital_day_num >= #{smallDay}]]>
         </if>
-        <if test="lDay != null">
-            <![CDATA[ AND hp.behospital_day_num < #{lDay}]]>
+        <if test="bigDay != null">
+            <![CDATA[ AND mhp.behospital_day_num < #{bigDay}]]>
         </if>
         <if test="doctorName != null and doctorName != ''">
             AND mbi.doctor_name LIKE CONCAT( '%', #{doctorName}, '%' )