|
@@ -0,0 +1,99 @@
|
|
|
+package com.diagbot.facade;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.diagbot.dto.CheckedRecordListDTO;
|
|
|
+import com.diagbot.entity.MedQcresultDetail;
|
|
|
+import com.diagbot.entity.SysUserDept;
|
|
|
+import com.diagbot.entity.SysUserRole;
|
|
|
+import com.diagbot.enums.CheckJobTypeEnum;
|
|
|
+import com.diagbot.enums.CheckerRoleEnum;
|
|
|
+import com.diagbot.service.MedQcresultDetailService;
|
|
|
+import com.diagbot.util.ListUtil;
|
|
|
+import com.diagbot.util.SysUserUtils;
|
|
|
+import com.diagbot.vo.CheckedRecordListVO;
|
|
|
+import com.diagbot.vo.SysUserBaseVO;
|
|
|
+import com.google.common.collect.Lists;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @Description:
|
|
|
+ * @author: rengb
|
|
|
+ * @time: 2021/5/17 18:43
|
|
|
+ */
|
|
|
+@Component
|
|
|
+public class RecordCheckFacade {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ SysUserFacade sysUserFacade;
|
|
|
+ @Autowired
|
|
|
+ SysUserDeptFacade sysUserDeptFacade;
|
|
|
+ @Autowired
|
|
|
+ SysUserRoleFacade sysUserRoleFacade;
|
|
|
+ @Autowired
|
|
|
+ MedCheckInfoFacade medCheckInfoFacade;
|
|
|
+ @Autowired
|
|
|
+ MedQcresultDetailService medQcresultDetailService;
|
|
|
+
|
|
|
+ public IPage<CheckedRecordListDTO> checkedRecordList(CheckedRecordListVO checkedRecordListVO) {
|
|
|
+ Long hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
|
|
|
+ Long userId = Long.parseLong(SysUserUtils.getCurrentPrincipleID());
|
|
|
+ SysUserBaseVO sysUserBaseVO = new SysUserBaseVO();
|
|
|
+ sysUserBaseVO.setUserId(userId);
|
|
|
+ List<Long> roleIds = sysUserFacade.getUserRoles(sysUserBaseVO).getSelRoles().stream().map(i -> i.getId()).collect(Collectors.toList());
|
|
|
+ List<String> deptIds = sysUserFacade.getUserDepts(sysUserBaseVO).getSelDepts().stream().map(i -> i.getDeptId()).collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<Long> userIds = Lists.newArrayList();
|
|
|
+ roleIds.forEach(roleId -> {
|
|
|
+ if (roleId.intValue() == CheckerRoleEnum.HOSP_SUPERVISOR.getKey()
|
|
|
+ && (ListUtil.isEmpty(checkedRecordListVO.getCheckJobTypes()) || checkedRecordListVO.getCheckJobTypes().contains(CheckJobTypeEnum.HOSP_SUPERVISOR.getKey() + ""))) {
|
|
|
+ userIds.addAll(getUserIdsOfRoleId(hospitalId, null, CheckerRoleEnum.HOSP_GENERAL.getKey()));
|
|
|
+ } else if (roleId.intValue() == CheckerRoleEnum.QUAT_SUPERVISOR.getKey()
|
|
|
+ && (ListUtil.isEmpty(checkedRecordListVO.getCheckJobTypes()) || checkedRecordListVO.getCheckJobTypes().contains(CheckJobTypeEnum.QUAT_SUPERVISOR.getKey() + ""))) {
|
|
|
+ userIds.addAll(getUserIdsOfRoleId(hospitalId, deptIds, CheckerRoleEnum.QUAT_GENERAL.getKey()));
|
|
|
+ } else if (roleId.intValue() == CheckerRoleEnum.DEPT_SUPERVISOR.getKey()
|
|
|
+ && (ListUtil.isEmpty(checkedRecordListVO.getCheckJobTypes()) || checkedRecordListVO.getCheckJobTypes().contains(CheckJobTypeEnum.DEPT_SUPERVISOR.getKey() + ""))) {
|
|
|
+ userIds.addAll(getUserIdsOfRoleId(hospitalId, deptIds, CheckerRoleEnum.DEPT_GENERAL.getKey()));
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ checkedRecordListVO.setCurrentDeptIds(String.join(",", deptIds));
|
|
|
+ checkedRecordListVO.setCurrentGeneralUserIds(userIds);
|
|
|
+ IPage<CheckedRecordListDTO> iPage = medCheckInfoFacade.getBaseMapper().checkedRecordList(checkedRecordListVO);
|
|
|
+
|
|
|
+ if (ListUtil.isNotEmpty(iPage.getRecords())) {
|
|
|
+ List<String> behospitalCodes = iPage.getRecords().stream().map(i -> i.getBehospitalCode()).collect(Collectors.toList());
|
|
|
+ QueryWrapper<MedQcresultDetail> medQcresultDetailQueryWrapper = new QueryWrapper<>();
|
|
|
+ medQcresultDetailQueryWrapper.eq("hospital_id", hospitalId);
|
|
|
+ medQcresultDetailQueryWrapper.in("behospital_code", behospitalCodes);
|
|
|
+ medQcresultDetailQueryWrapper.select("behospital_code", "cases_entry_id");
|
|
|
+ Map<String, Long> behospitalCodeCasesMap = medQcresultDetailService.list(medQcresultDetailQueryWrapper).stream().collect(Collectors.groupingBy(MedQcresultDetail::getBehospitalCode, Collectors.counting()));
|
|
|
+ iPage.getRecords().forEach(i -> {
|
|
|
+ i.setCasesEntryNum(behospitalCodeCasesMap.get(i.getBehospitalCode()).intValue());
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ return iPage;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<Long> getUserIdsOfRoleId(Long hospitalId, List<String> deptIds, long roleId) {
|
|
|
+ QueryWrapper<SysUserDept> sysUserDeptQueryWrapper = new QueryWrapper<>();
|
|
|
+ sysUserDeptQueryWrapper.eq("hospital_id", hospitalId);
|
|
|
+ sysUserDeptQueryWrapper.in(ListUtil.isNotEmpty(deptIds), "dept_id", deptIds);
|
|
|
+ List<Long> userIds = sysUserDeptFacade.list(sysUserDeptQueryWrapper).stream().map(i -> i.getUserId()).collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (ListUtil.isEmpty(userIds)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ QueryWrapper<SysUserRole> sysUserRoleQueryWrapper = new QueryWrapper<>();
|
|
|
+ sysUserRoleQueryWrapper.in("user_id", userIds);
|
|
|
+ sysUserRoleQueryWrapper.eq("role_id", roleId);
|
|
|
+ return sysUserRoleFacade.list(sysUserRoleQueryWrapper).stream().map(i -> i.getUserId()).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+}
|