ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -13,6 +13,7 @@
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.enums.PreachFormEnum;
import com.ruoyi.common.enums.SendStateEnum;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.DtoConversionUtils;
@@ -20,9 +21,12 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.utils.reflect.ReflectUtils;
import com.ruoyi.quartz.service.ICollectHISService;
import com.ruoyi.quartz.task.RyTask;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserDeptService;
import com.smartor.domain.*;
import com.smartor.domain.VO.HeLibraryCountVO;
import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO;
import com.smartor.domain.VO.ServiceSubtaskVO;
import com.smartor.domain.entity.ServiceSubtaskEntity;
@@ -77,6 +81,12 @@
    @Autowired
    private ISysConfigService configService;
    @Autowired
    private RyTask ryTask;
    @Autowired
    private ICollectHISService collectHISService;
    @Value("${spring.profiles.active}")
    private String active;
@@ -119,16 +129,6 @@
        // 直接从已有聚合结果推算total,避免去掉分页后再全量查一遍大表
        long total = 0L;
        try {
//                 * wzx: 未执行数量
//                    * ysf: 已随访数量
//                    * fssb: 发送失败数量
//                    * yfs: 已发送数量
//                    * dsf: 待随访数量
//            long wzx = map.get("wzx") != null ? ((Number) map.get("wzx")).longValue() : 0L;
//            long ysf = map.get("ysf") != null ? ((Number) map.get("ysf")).longValue() : 0L;
//            long dsf = map.get("dsf") != null ? ((Number) map.get("dsf")).longValue() : 0L;
//            long fssb = map.get("fssb") != null ? ((Number) map.get("fssb")).longValue() : 0L;
            total = map.get("total") != null ? ((Number) map.get("total")).longValue() : 0L;
        } catch (Exception e) {
@@ -185,7 +185,7 @@
                if (ObjectUtils.isNotEmpty(oldCondition) && isSameCondition(oldCondition, serviceSubtaskEntity)) {
                    redisFlag = true;
                    map = redisMap;
                    redisCache.setCacheObject(userId + "patItemCount", map, 120, TimeUnit.MINUTES);
                    redisCache.setCacheObject(userId + "patItemCount", map, 60, TimeUnit.MINUTES);
                }
            }
            if (!redisFlag) {
@@ -231,6 +231,10 @@
            for (ServiceSubtaskExport serviceSubtaskExport : serviceSubtaskExports) {
                String pf = PreachFormEnum.getDescByCode(serviceSubtaskExport.getPreachform());
                serviceSubtaskExport.setPreachform(pf);
                if(serviceSubtaskExport.getSendstate() != null) {
                    String stName = SendStateEnum.getDescByCode("" + serviceSubtaskExport.getSendstate());
                    serviceSubtaskExport.setStName(stName);
                }
                //计算出院天数
                if (!Objects.isNull(serviceSubtaskExport.getEndtime())) {
@@ -252,13 +256,12 @@
    //@PreAuthorize("@ss.hasPermi('system:taskcall:list')")
    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
    @PostMapping("/patItemByCondition")
    public TableDataInfo patItemByCondition(@RequestBody ServiceSubtaskVO serviceSubtaskVO) {
    public Map<String, Object> patItemByCondition(@RequestBody ServiceSubtaskVO serviceSubtaskVO) {
        List<ServiceSubtask> serviceSubtaskList = null;
        ServiceSubtaskEntity serviceSubtaskEntity = DtoConversionUtils.sourceToTarget(serviceSubtaskVO, ServiceSubtaskEntity.class);
        serviceSubtaskEntity.setContinueContent(ObjectUtils.isNotEmpty(serviceSubtaskVO.getContinueContent()) ? serviceSubtaskVO.getContinueContent().toString() : null);
        if (serviceSubtaskEntity != null) {
            PageUtils.startPageByPost(serviceSubtaskEntity.getPageNum(), serviceSubtaskEntity.getPageSize());
            serviceSubtaskEntity.setPageNum(PageUtils.getOffset(serviceSubtaskEntity.getPageNum(), serviceSubtaskEntity.getPageSize()));
            serviceSubtaskList = serviceSubtaskService.patItem2(serviceSubtaskEntity);
        }
        for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
@@ -283,7 +286,7 @@
                serviceSubtaskService.patItem2(serviceSubtaskEntity);
            }
        });
        return getDataTable2(total, list);
        return getDataTable3(total, list);
    }
    /**
@@ -403,6 +406,7 @@
        ivrTaskVO.setCreateBy(user.getNickName());
        ivrTaskVO.setUpdateBy(user.getNickName());
        ivrTaskVO.setOrgid(user.getOrgid());
        ivrTaskVO.setCampusid(user.getCampusid());
        return success(serviceSubtaskService.insertOrUpdateTask(ivrTaskVO));
    }
@@ -414,12 +418,21 @@
        return toAjax(serviceSubtaskService.updateServiceSubtask(serviceSubtask));
    }
    @ApiOperation("修改子任务模板")
    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
    @PostMapping("/updateTemplate")
    public AjaxResult updateTemplate(@RequestBody ServiceSubtaskTemplateVO serviceSubtaskTemplateVO) {
        serviceSubtaskTemplateVO.setUpdateBy(getLoginUser().getUser().getNickName());
        return toAjax(serviceSubtaskService.updateTemplate(serviceSubtaskTemplateVO));
    }
    @ApiOperation("新增子任务")
    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
    @PostMapping("/addSubTask")
    public AjaxResult addSubTask(@RequestBody ServiceSubtask serviceSubtask) {
        SysUser user = getLoginUser().getUser();
        if (ObjectUtils.isNotEmpty(user)) serviceSubtask.setOrgid(user.getOrgid());
        if (ObjectUtils.isNotEmpty(user)) serviceSubtask.setCampusid(user.getCampusid());
        return toAjax(serviceSubtaskService.insertServiceSubtask(serviceSubtask));
    }
@@ -429,6 +442,7 @@
    public AjaxResult addSubTaskAgain(@RequestBody ServiceSubtask serviceSubtask) {
        SysUser user = getLoginUser().getUser();
        if (ObjectUtils.isNotEmpty(user)) serviceSubtask.setOrgid(user.getOrgid());
        if (ObjectUtils.isNotEmpty(user)) serviceSubtask.setCampusid(user.getCampusid());
        return success(serviceSubtaskService.addSubTaskAgain(serviceSubtask));
    }
@@ -525,17 +539,23 @@
    @ApiOperation("获取随访统计比例")
    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
    @PostMapping("/getSfStatistics")
    public AjaxResult getSfStatistics(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) {
    public Map<String, Object> getSfStatistics(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) {
        if (CollectionUtils.isEmpty(serviceSubtaskCountReq.getServiceType())) {
            return error("服务类型不能为空");
        }
        Integer offset = PageUtils.getOffset(serviceSubtaskCountReq.getPageNum(), serviceSubtaskCountReq.getPageSize());
        serviceSubtaskCountReq.setPageNum(offset);
        String followUpCountStyle = configService.selectConfigByKey("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
        if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
            serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
        } else {
            serviceSubtaskCountReq.setFollowUpCountStyle("1");
        }
        return success(serviceSubtaskService.getSfStatistics(serviceSubtaskCountReq));
        serviceSubtaskCountReq.setPageNum(null);
        serviceSubtaskCountReq.setPageSize(null);
        List<ServiceSubtaskStatistic> sfStatistics = serviceSubtaskService.getSfStatistics(serviceSubtaskCountReq);
        return getDataTable4(CollectionUtils.isEmpty(sfStatistics) ? sfStatistics.size() : 0, serviceSubtaskService.getSfStatistics(serviceSubtaskCountReq));
    }
    /**
@@ -598,7 +618,63 @@
        return success(serviceSubtaskService.getSfStatisticsJoydetails(serviceSubtaskCountReq));
    }
    /**
     * 获取随访统计超链接
     * dischargeCountInfo
     * followUpNeededAllInfo - sendstate != 4 (1,2,3,5,6,7)
     * nonFollowUpInfo - sendstate = 4
     * needFollowUpInfo - visitCount = 1 && sendstate != 4
     * pendingFollowUpInfo - visitCount = 1 && sendstate = 2
     * followUpSuccessInfo - visitCount = 1 && sendstate = 6
     * followUpFailInfo - visitCount = 1 && (sendstate = 5 || sendstate = 7)
     * manualInfo - visitCount = 1 && currentPreachForm = "1"
     * voiceInfo - visitCount = 1 && currentPreachForm = "3"
     * smsInfo - visitCount = 1 && currentPreachForm = "4"
     * wechatInfo - visitCount = 1 && currentPreachForm = "5"
     * abnormalInfo - visitCount = 1 && excep = "1"
     * needFollowUpAgainInfo - visitCount > 1 && sendstate != 4
     * pendingFollowUpAgainInfo -  visitCount > 1 && sendstate = 2
     * followUpSuccessAgainInfo - visitCount > 1 && sendstate =6
     * followUpFailAgainInfo - visitCount > 1 && (sendstate = 5 || sendstate = 7)
     * manualAgainInfo - visitCount > 1 && currentPreachForm = "1"
     * voiceAgainInfo - visitCount > 1 && currentPreachForm = "3"
     * smsAgainInfo - visitCount > 1 && currentPreachForm = "4"
     * wechatAgainInfo -  visitCount > 1 && currentPreachForm = "5"
     * abnormalAgainInfo- visitCount > 1 && excep = "1"
     * taskSituation1Info - taskSituation = 1
     * taskSituation2Info - taskSituation = 2
     * taskSituation3Info - taskSituation = 3
     * taskSituation4Info - taskSituation = 4
     * taskSituation5Info - taskSituation = 5
     * taskSituation6Info - taskSituation = 7
     * filterCountList - taskSituation = 6 && sendstate = 4
     *
     */
    @ApiOperation("获取随访统计超链接")
    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
    @PostMapping("/getSfStatisticsHyperlink")
    public AjaxResult getSfStatisticsHyperlink(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) {
        LoginUser loginUser = getLoginUser();
        String orgid = loginUser.getUser().getOrgid();
        String configKey = serviceSubtaskCountReq.getConfigKey();
        if (StringUtils.isNotEmpty(configKey)) {
            String configValue = configService.selectConfigByKey(configKey, orgid);
            serviceSubtaskCountReq.setConfigValue(configValue);
            if (StringUtils.isEmpty(configValue)) {
                String logInfo = "getSfStatisticsCount-参数 " + configKey + " 未配置, 请配置好后重试";
                log.error(logInfo);
                return error(logInfo);
            }
        }
        String followUpCountStyle = configService.selectConfigByKey("followUpCountStyle", orgid);
        if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
            serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
        } else {
            serviceSubtaskCountReq.setFollowUpCountStyle("1");
        }
        return success(serviceSubtaskService.getSfStatisticsHyperlink(serviceSubtaskCountReq));
    }
    /**
     * 延续护理统计
@@ -617,9 +693,6 @@
        }
        return success(serviceSubtaskService.getContinueNurseCount(serviceSubtaskCotinueCountVO));
    }
    /**
@@ -646,7 +719,8 @@
            log.error(logInfo);
            return error(logInfo);
        }
        return success(serviceSubtaskService.getSfStatisticsScript(serviceSubtaskCountReq));
        List<ServiceSubtaskStatistic> serviceSubtaskStatistics = serviceSubtaskService.getSfStatisticsScript(serviceSubtaskCountReq);
        return success(serviceSubtaskStatistics);
    }
    @ApiOperation("获取随访分类统计明细详情")
@@ -738,5 +812,21 @@
        return map;
    }
    @ApiOperation("获取当前用户宣教数量统计")
    @PostMapping("/gethelibraryCount")
    public Map<String, Object> getHeLibraryCount(@RequestBody HeLibraryCountVO heLibraryCountVO) {
        log.info("获取当前用户宣教数量统计的入参为:{}", heLibraryCountVO);
        return serviceSubtaskService.getHeLibraryCount(heLibraryCountVO);
    }
    @PostMapping("/test")
    public void test() {
        ryTask.dealOutHospInfo();
    }
    @PostMapping("/syncMedInhospForShiyi")
    public void syncMedInhospForShiyi(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime) {
        collectHISService.syncMedInhosp(startTime, endTime);
    }
}