陈昶聿
2 天以前 933846091c0b8f06158fcab23cfa0b59e8514f9b
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -302,8 +302,7 @@
    public AjaxResult querySubtaskList(@RequestBody ServiceSubtaskVO serviceSubtaskVO) {
        ServiceSubtaskEntity serviceSubtaskEntity = DtoConversionUtils.sourceToTarget(serviceSubtaskVO, ServiceSubtaskEntity.class);
        serviceSubtaskEntity.setContinueContent(ObjectUtils.isNotEmpty(serviceSubtaskVO.getContinueContent()) ? serviceSubtaskVO.getContinueContent().toString() : null);
        PageUtils.startPageByPost(serviceSubtaskEntity.getPageNum(), serviceSubtaskEntity.getPageSize());
        serviceSubtaskService.selectServiceSubtaskList(serviceSubtaskEntity);
        // 该 SQL 已内置 limit ${pageSize} OFFSET ${pageNum},不再走 PageHelper,避免两套分页叠加产生两个 LIMIT
        return success(serviceSubtaskService.selectServiceSubtaskList(serviceSubtaskEntity));
    }
@@ -317,8 +316,8 @@
    public TableDataInfo querySubtaskListAgain(@RequestBody ServiceSubtaskVO serviceSubtaskVO) {
        ServiceSubtaskEntity serviceSubtaskEntity = DtoConversionUtils.sourceToTarget(serviceSubtaskVO, ServiceSubtaskEntity.class);
        serviceSubtaskEntity.setContinueContent(ObjectUtils.isNotEmpty(serviceSubtaskVO.getContinueContent()) ? serviceSubtaskVO.getContinueContent().toString() : null);
        // 该 SQL 未内置 limit,使用 PageHelper 分页;只调用一次,getDataTable 可基于 Page 取到正确 total
        PageUtils.startPageByPost(serviceSubtaskEntity.getPageNum(), serviceSubtaskEntity.getPageSize());
        serviceSubtaskService.selectServiceSubtaskListAgain(serviceSubtaskEntity);
        return getDataTable(serviceSubtaskService.selectServiceSubtaskListAgain(serviceSubtaskEntity));
    }
@@ -709,6 +708,7 @@
     * taskSituation4Info - taskSituation = 4
     * taskSituation5Info - taskSituation = 5
     * taskSituation6Info - taskSituation = 7
     * manuallyCalledInfo - isManuallyCalled = 1L
     * filterCountList - taskSituation = 6 && sendstate = 4
     *
     */
@@ -832,50 +832,54 @@
    }
    /**
     * 统计任务各种状态的数量(优化版)
     * 统计任务各种状态的数量(优化版)-【随访工作台】
     *
     * @param soonTimeoutHours 即将超时时间(小时),默认 48
     * @return Map<String, Object> 包含各状态统计数据
     * pendingVisitCount: 当前登录人截止今日待随访总量
     * failedVisitCount: 当前登录人随访任务失败总量
     * abnormalVisitVount: 当前登录人随访任务异常总量
     * allVisitCount: 当前登录人随访任务总量
     * soonTimeoutCount: 当前登录人即将超时数量(超时截止时间在 soonTimeoutHours 小时内)
     */
    @ApiOperation("获取当前用户随访数量统计")
    @PostMapping("/getCurrentUserServiceSubtaskCount")
    public Map<String, Object> getCurrentUserServiceSubtaskCount() {
        Map<String, Object> map = new HashMap<>();
        SysUser sysUser = SecurityUtils.getLoginUser().getUser();
        SysUserDept sysUserDept = new SysUserDept();
        sysUserDept.setUserId(sysUser.getUserId());
        sysUserDept.setOrgid(sysUser.getOrgid());
        sysUserDept.setCampusid(sysUser.getCampusid());
        sysUserDept.setDeptType("1");
        List<Map<String, Object>> deptCodesMap = sysUser.getBelongDepts();
        List<Map<String, Object>> wardCodesMap = sysUser.getBelongWards();
        List<String> deptCodes = deptCodesMap.stream()
                        .map(item -> item.get("deptCode"))
                        .filter(obj -> obj != null) // 剔除null
                        .map(Object::toString)
                        .collect(Collectors.toList());
        List<String> wardCodes = wardCodesMap.stream()
    public Map<String, Object> getCurrentUserServiceSubtaskCount(
            @RequestParam(value = "soonTimeoutHours", required = false, defaultValue = "48") Integer soonTimeoutHours) {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        if (loginUser == null || loginUser.getUser() == null) {
            return new HashMap<>();
        }
        SysUser sysUser = loginUser.getUser();
        List<String> deptCodes = CollectionUtils.emptyIfNull(sysUser.getBelongDepts()).stream()
                .map(item -> item.get("deptCode"))
                .filter(Objects::nonNull) // 剔除null
                .map(Object::toString)
                .collect(Collectors.toList());
        List<String> wardCodes = CollectionUtils.emptyIfNull(sysUser.getBelongWards()).stream()
                .map(item -> item.get("districtCode"))
                .filter(obj -> obj != null) // 剔除null
                .filter(Objects::nonNull) // 剔除null
                .map(Object::toString)
                .collect(Collectors.toList());
        ServiceSubtaskEntity entity = new ServiceSubtaskEntity();
        entity.setOrgid(sysUser.getOrgid());
        entity.setLeaveldeptcodes(deptCodes);
        entity.setLeavehospitaldistrictcodes(wardCodes);
        if (ObjectUtils.isNotEmpty(sysUser)) {
            if (!("admin").equals(sysUser.getUserName())) {
                if (CollectionUtils.isNotEmpty(deptCodes) && CollectionUtils.isNotEmpty(wardCodes)) {
                    map = serviceSubtaskService.getCurrentUserServiceSubtaskCount(entity);
                }
            } else {
                map = serviceSubtaskService.getCurrentUserServiceSubtaskCount(entity);
            }
        entity.setSoonTimeoutHours(soonTimeoutHours);
        // admin 查看全院;非 admin 只要配置了科室或病区任一维度即可查询(SQL 中为 OR 关系)
        boolean isAdmin = "admin".equals(sysUser.getUserName());
        if (isAdmin || CollectionUtils.isNotEmpty(deptCodes) || CollectionUtils.isNotEmpty(wardCodes)) {
            return serviceSubtaskService.getCurrentUserServiceSubtaskCount(entity);
        }
        return map;
        // 非 admin 且未配置任何科室/病区权限时,返回默认 0 值,避免前端取不到 key
        Map<String, Object> empty = new HashMap<>();
        empty.put("pendingVisitCount", 0);
        empty.put("failedVisitCount", 0);
        empty.put("abnormalVisitCount", 0);
        empty.put("warnningVisitCount", 0);
        empty.put("allVisitCount", 0);
        empty.put("soonTimeoutCount", 0);
        return empty;
    }
    @ApiOperation("获取当前用户宣教数量统计")
@@ -904,6 +908,17 @@
    }
    /**
     * 手动发送问卷模板的微信功能
     *
     * @param subid
     * @return
     */
    @GetMapping(value = "/weChatSubTask/{subid}")
    public Map<String, Object> weChatSubTask(@PathVariable("subid") Long subid) {
        return serviceSubtaskService.weChatSubTask(subid);
    }
    /**
     * 跳转中间页
     *
     * @param taskId