首页 任务完成时间

This commit is contained in:
1073413548 2024-09-11 16:52:32 +08:00
parent f85b6750de
commit 12c07f1e8a
9 changed files with 210 additions and 29 deletions

View File

@ -102,4 +102,13 @@ public interface CacheNames {
* 首页查询 * 首页查询
*/ */
String HOME_G = "home_queryG#60s"; String HOME_G = "home_queryG#60s";
/**
* 首页查询
*/
String HOME_H = "home_queryH#60s";
/**
* 首页查询
*/
String HOME_I = "home_queryI#60s";
} }

View File

@ -5,10 +5,7 @@ import cn.dev33.satoken.annotation.SaIgnore;
import com.pusong.business.domain.bo.PsSalaryBo; import com.pusong.business.domain.bo.PsSalaryBo;
import com.pusong.business.domain.vo.PsSalaryContractVo; import com.pusong.business.domain.vo.PsSalaryContractVo;
import com.pusong.business.domain.vo.PsSalaryVo; import com.pusong.business.domain.vo.PsSalaryVo;
import com.pusong.business.domain.vo.home.ChannelAmountVo; import com.pusong.business.domain.vo.home.*;
import com.pusong.business.domain.vo.home.MakeAmountVo;
import com.pusong.business.domain.vo.home.ReturnAmountVo;
import com.pusong.business.domain.vo.home.ReturnMoneyInfoVo;
import com.pusong.business.service.HomeService; import com.pusong.business.service.HomeService;
import com.pusong.business.service.IPsSalaryService; import com.pusong.business.service.IPsSalaryService;
import com.pusong.common.core.domain.R; import com.pusong.common.core.domain.R;
@ -23,6 +20,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
/** /**
* 员工提成提成 * 员工提成提成
* *
@ -70,5 +69,23 @@ public class HomeController extends BaseController {
return R.ok(homeService.byChannel(type)); return R.ok(homeService.byChannel(type));
} }
/**
* 首页大盘数据任务完成情况
* @param type 1本月 2上月 3本季度 4本年 5所有
* @return
*/
@GetMapping("/getTaskFinish")
public R<FinishTaskVo> getTaskFinish(@RequestParam() Integer type) {
return R.ok(homeService.getTaskList(type));
}
/**
* 首页大盘数据任务完成平均时间
* @param type 1本月 2上月 3本季度 4本年 5所有
* @return
*/
@GetMapping("/getTaskTime")
public R<Map<String,Object>> getTaskTime(@RequestParam() Integer type) {
return R.ok(homeService.getTaskTime(type));
}
} }

View File

@ -0,0 +1,44 @@
package com.pusong.business.domain.vo.home;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 任务完成情况vo
*/
@Data
public class FinishTaskVo {
/**
* 当前时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private Date currentDate = new Date();
/**
* 统计范围
*/
private String dateStr;
/**
* 任务总数
*/
private Long count;
/**
* 任务已完成总数
*/
private Long finishNum;
/**
* 任务完成率
*/
private String finishPre;
/**
* 任务未完成总数
*/
private Long unfinishNum;
/**
* 任务未完成率
*/
private String unfinishPre;
}

View File

@ -26,6 +26,10 @@ public interface PsTaskMainMapper extends BaseMapper<PsTaskMain> {
}) })
Page<PsTaskMainVo> queryTaskPageList(@Param("page") Page<PsTaskMain> page, @Param(Constants.WRAPPER) Wrapper<PsTaskMain> queryWrapper); Page<PsTaskMainVo> queryTaskPageList(@Param("page") Page<PsTaskMain> page, @Param(Constants.WRAPPER) Wrapper<PsTaskMain> queryWrapper);
Page<PsTaskMainVo> queryInvoiceTaskPageList(@Param("page") Page<PsTaskMain> page, @Param(Constants.WRAPPER) Wrapper<PsTaskMain> queryWrapper);
@DataPermission({ @DataPermission({
@DataColumn(key = "deptName", value = "appo.create_dept"), @DataColumn(key = "deptName", value = "appo.create_dept"),
@DataColumn(key = "userName", value = "appo.executor") @DataColumn(key = "userName", value = "appo.executor")

View File

@ -1,9 +1,8 @@
package com.pusong.business.service; package com.pusong.business.service;
import com.pusong.business.domain.vo.home.ChannelAmountVo; import com.pusong.business.domain.vo.home.*;
import com.pusong.business.domain.vo.home.MakeAmountVo;
import com.pusong.business.domain.vo.home.ReturnAmountVo; import java.util.Map;
import com.pusong.business.domain.vo.home.ReturnMoneyInfoVo;
/** /**
* 首页相关接口 * 首页相关接口
@ -20,4 +19,17 @@ public interface HomeService {
* @return * @return
*/ */
ChannelAmountVo byChannel(Integer type); ChannelAmountVo byChannel(Integer type);
/**
* 首页大盘数据任务完成率
* @param type
* @return
*/
FinishTaskVo getTaskList(Integer type);
/**
* 首页大盘数据任务完成时间
* @param type
* @return
*/
Map<String,Object> getTaskTime(Integer type);
} }

View File

@ -1,16 +1,23 @@
package com.pusong.business.service.impl; package com.pusong.business.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pusong.business.domain.PsContractInfo; import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsContractPay; import com.pusong.business.domain.PsContractPay;
import com.pusong.business.domain.PsTaskAppoint;
import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.domain.vo.home.*; import com.pusong.business.domain.vo.home.*;
import com.pusong.business.enums.CommonStatusEnum; import com.pusong.business.enums.CommonStatusEnum;
import com.pusong.business.enums.ContractStatusEnum; import com.pusong.business.enums.ContractStatusEnum;
import com.pusong.business.enums.PayStatusEnum; import com.pusong.business.enums.PayStatusEnum;
import com.pusong.business.enums.TaskStatusEnum;
import com.pusong.business.mapper.PsContractInfoMapper; import com.pusong.business.mapper.PsContractInfoMapper;
import com.pusong.business.mapper.PsContractPayMapper; import com.pusong.business.mapper.PsContractPayMapper;
import com.pusong.business.mapper.PsTaskAppointMapper;
import com.pusong.business.mapper.PsTaskMainMapper;
import com.pusong.business.service.HomeService; import com.pusong.business.service.HomeService;
import com.pusong.common.core.constant.CacheNames; import com.pusong.common.core.constant.CacheNames;
import com.pusong.system.domain.bo.SysDictDataBo; import com.pusong.system.domain.bo.SysDictDataBo;
@ -37,6 +44,8 @@ public class HomeServiceImpl implements HomeService {
private final PsContractInfoMapper psContractInfoMapper; private final PsContractInfoMapper psContractInfoMapper;
private final PsContractPayMapper payMapper; private final PsContractPayMapper payMapper;
private final PsTaskMainMapper taskMainMapper;
private final PsTaskAppointMapper taskAppointMapper;
private final ISysDictDataService dictDataService; private final ISysDictDataService dictDataService;
@ -256,4 +265,78 @@ public class HomeServiceImpl implements HomeService {
res.cellPer(); res.cellPer();
return res; return res;
} }
/**
* 首页大盘数据任务完成率
* @param type
* @return
*/
@Cacheable(cacheNames = CacheNames.HOME_H, key = "#type")
public FinishTaskVo getTaskList(Integer type){
Map<String, Object> mapParam = this.getDate(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate");
String date = (String)mapParam.get("date");
LambdaQueryWrapper<PsTaskMain> wq = Wrappers.<PsTaskMain>lambdaQuery().ne(PsTaskMain::getTaskStatus, TaskStatusEnum.CANCEL.getCode())
.ge(startDate != null,PsTaskMain::getCreateTime,startDate)
.le(endDate != null,PsTaskMain::getCreateTime,endDate);
//任务的总数
Long count = taskMainMapper.selectCount(wq);
wq.eq(PsTaskMain::getTaskStatus, TaskStatusEnum.FINISH.getCode());
//完成任务的总数
Long finishCount = taskMainMapper.selectCount(wq);
FinishTaskVo finishTaskVo = new FinishTaskVo();
finishTaskVo.setDateStr(date);
finishTaskVo.setFinishNum(finishCount);
finishTaskVo.setCount(count);
finishTaskVo.setUnfinishNum(count-finishCount);
finishTaskVo.setFinishPre(new BigDecimal(finishCount).divide(new BigDecimal(count),4,RoundingMode.HALF_UP).multiply(new BigDecimal("100")).toPlainString());
finishTaskVo.setUnfinishPre(new BigDecimal(finishTaskVo.getUnfinishNum()).divide(new BigDecimal(count),4,RoundingMode.HALF_UP).multiply(new BigDecimal("100")).toPlainString());
return finishTaskVo;
}
/**
* 首页大盘数据任务完成时间
* @param type
* @return
*/
@Cacheable(cacheNames = CacheNames.HOME_I, key = "#type")
public Map<String,Object> getTaskTime(Integer type){
Map<String, Object> mapParam = this.getDate(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate");
String date = (String)mapParam.get("date");
//返回map
Map<String,Object> map = new HashMap<>();
//查范围内创建并且范围内完成的数据
List<Map<String, Object>> allList = taskMainMapper.selectMaps(Wrappers.<PsTaskMain>query().select("round(AVG(TIMESTAMPDIFF(day, create_time, finish_date) )) avg")
.eq("task_status", TaskStatusEnum.FINISH.getCode())
.ge(startDate != null, "create_time", startDate).le(endDate != null, "create_time", endDate)
.ge(startDate != null, "finish_date", startDate).le(endDate != null, "finish_date", endDate));
List<Map<String, Object>> appointList = taskAppointMapper.selectMaps(Wrappers.<PsTaskAppoint>query().select("appoint_type","round(AVG(TIMESTAMPDIFF(day, create_time, finish_date) )) avg")
.eq("appoint_status", TaskStatusEnum.AppointStatusEnum.FINISH.getCode())
.ge(startDate != null, "create_time", startDate).le(endDate != null, "create_time", endDate)
.ge(startDate != null, "finish_date", startDate).le(endDate != null, "finish_date", endDate)
.groupBy("appoint_type"));
map.put("taskAvg",allList.get(0).get("avg"));//任务平均天数
map.put("inAvg",0);//内勤
map.put("outAvg",0);//外勤
map.put("secAvg",0);//特勤
for(Map<String, Object> appointMap : appointList){
if(StringUtils.equals("1",appointMap.get("appoint_type").toString())){
appointMap.put("inAvg",appointMap.get("avg"));
}else if(StringUtils.equals("2",appointMap.get("appoint_type").toString())){
appointMap.put("outAvg",appointMap.get("avg"));
}else if(StringUtils.equals("3",appointMap.get("appoint_type").toString())){
appointMap.put("secAvg",appointMap.get("avg"));
}
}
return map;
}
} }

View File

@ -521,6 +521,7 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
if(task!=null){ if(task!=null){
appointList = taskAppointMapper.selectList(Wrappers.<PsTaskAppoint>lambdaQuery() appointList = taskAppointMapper.selectList(Wrappers.<PsTaskAppoint>lambdaQuery()
.eq(PsTaskAppoint::getContractCode, contractCode) .eq(PsTaskAppoint::getContractCode, contractCode)
.ne(PsTaskAppoint::getAppointStatus,AppointStatusEnum.CANCEL.getCode())
.eq(PsTaskAppoint::getTaskId, task.getId())); .eq(PsTaskAppoint::getTaskId, task.getId()));
} }

View File

@ -95,7 +95,12 @@ public class PsTaskServiceImpl implements IPsTaskService {
*/ */
public TableDataInfo<PsTaskMainVo> queryPageList(PsTaskQueryBo bo, PageQuery pageQuery){ public TableDataInfo<PsTaskMainVo> queryPageList(PsTaskQueryBo bo, PageQuery pageQuery){
QueryWrapper<PsTaskMain> lqw = buildQueryWrapper(bo); QueryWrapper<PsTaskMain> lqw = buildQueryWrapper(bo);
Page<PsTaskMainVo> page = baseMapper.queryTaskPageList(pageQuery.build(), lqw); Page<PsTaskMainVo> page;
if(StringUtils.equals(TaskTypeEnum.INVOICE.getCode(),bo.getType())){//发票任务无需数据权限
page = baseMapper.queryInvoiceTaskPageList(pageQuery.build(), lqw);
}else{
page = baseMapper.queryTaskPageList(pageQuery.build(), lqw);
}
for (PsTaskMainVo vo : page.getRecords()) { for (PsTaskMainVo vo : page.getRecords()) {
if(vo.getStartDate() != null){ if(vo.getStartDate() != null){
vo.setNumOfDat(DateUtils.calWorkDate(vo.getStartDate(),new Date())); vo.setNumOfDat(DateUtils.calWorkDate(vo.getStartDate(),new Date()));
@ -139,7 +144,8 @@ public class PsTaskServiceImpl implements IPsTaskService {
* @param id 任务主表主键 * @param id 任务主表主键
*/ */
public TaskPlanVo plan(Long id){ public TaskPlanVo plan(Long id){
List<PsTaskAppoint> list = appointMapper.selectList(Wrappers.<PsTaskAppoint>lambdaQuery().eq(PsTaskAppoint::getTaskId, id).eq(PsTaskAppoint::getDelFlag,"0")); List<PsTaskAppoint> list = appointMapper.selectList(Wrappers.<PsTaskAppoint>lambdaQuery().eq(PsTaskAppoint::getTaskId, id)
.ne(PsTaskAppoint::getAppointStatus,AppointStatusEnum.CANCEL.getCode()).eq(PsTaskAppoint::getDelFlag,"0"));
TaskPlanVo planVo = new TaskPlanVo(); TaskPlanVo planVo = new TaskPlanVo();
if(CollectionUtils.isEmpty(list)){return planVo;} if(CollectionUtils.isEmpty(list)){return planVo;}
list.forEach(item->{ list.forEach(item->{

View File

@ -14,8 +14,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<sql id="queryTask">
<select id="queryTaskPageList" resultMap="taskMainResult">
select main.id, select main.id,
main.task_type, main.task_type,
main.start_date, main.start_date,
@ -43,8 +42,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
(select pta.id from ps_task_appoint pta where pta.task_id=main.id and pta.appoint_type=2 and pta.appoint_status != '50' and pta.del_flag = '0' order by id desc limit 0,1) as outAppo, (select pta.id from ps_task_appoint pta where pta.task_id=main.id and pta.appoint_type=2 and pta.appoint_status != '50' and pta.del_flag = '0' order by id desc limit 0,1) as outAppo,
(select pta.id from ps_task_appoint pta where pta.task_id=main.id and pta.appoint_type=3 and pta.appoint_status != '50' and pta.del_flag = '0' order by id desc limit 0,1) as secAppo, (select pta.id from ps_task_appoint pta where pta.task_id=main.id and pta.appoint_type=3 and pta.appoint_status != '50' and pta.del_flag = '0' order by id desc limit 0,1) as secAppo,
(CASE WHEN (con.contract_amount - (CASE WHEN (con.contract_amount -
(select IFNULL(sum(money),0) from ps_contract_pay pay where pay.business_type =1 ) + (select IFNULL(sum(money),0) from ps_contract_pay pay where pay.business_type =1 and pay.contract_code = main.contract_code and pay.pay_status = '1' ) +
(select IFNULL(sum(money),0) from ps_contract_pay cpay where cpay.business_type =2 ) (select IFNULL(sum(money),0) from ps_contract_pay cpay where cpay.business_type =2 and cpay.contract_code = main.contract_code )
) > 0 THEN '半款' ELSE '全款' END) as pay_stauts_desc, ) > 0 THEN '半款' ELSE '全款' END) as pay_stauts_desc,
(select GROUP_CONCAT(appoint.executor SEPARATOR ',') (select GROUP_CONCAT(appoint.executor SEPARATOR ',')
from ps_task_appoint appoint where appoint.task_id = main.id and appoint.appoint_status != '50' and appoint.del_flag = '0') as executors, from ps_task_appoint appoint where appoint.task_id = main.id and appoint.appoint_status != '50' and appoint.del_flag = '0') as executors,
@ -55,9 +54,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join ps_company_info com on con.company_id = com.id left join ps_company_info com on con.company_id = com.id
left join ps_custom_info cus on con.custom_id = cus.id left join ps_custom_info cus on con.custom_id = cus.id
left join sys_user usr on con.custom_manager = usr.user_id left join sys_user usr on con.custom_manager = usr.user_id
</sql>
<select id="queryTaskPageList" resultMap="taskMainResult">
<include refid="queryTask"/>
${ew.getCustomSqlSegment}
</select>
<select id="queryInvoiceTaskPageList" resultMap="taskMainResult">
<include refid="queryTask"/>
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<select id="queryChildTaskPageList" resultMap="taskMainResult"> <select id="queryChildTaskPageList" resultMap="taskMainResult">
select select
main.task_type, main.task_type,
@ -83,8 +88,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
cus.custom_name cus_custom_name , cus.custom_name cus_custom_name ,
cus.custom_mobile cus_custom_mobile, cus.custom_mobile cus_custom_mobile,
(CASE WHEN (con.contract_amount - (CASE WHEN (con.contract_amount -
(select IFNULL(sum(money),0) from ps_contract_pay pay where pay.business_type =1 ) + (select IFNULL(sum(money),0) from ps_contract_pay pay where pay.business_type =1 and pay.contract_code = main.contract_code and pay.pay_status = '1' ) +
(select IFNULL(sum(money),0) from ps_contract_pay cpay where cpay.business_type =2 ) (select IFNULL(sum(money),0) from ps_contract_pay cpay where cpay.business_type =2 and cpay.contract_code = main.contract_code )
) > 0 THEN '半款' ELSE '全款' END) as pay_stauts_desc, ) > 0 THEN '半款' ELSE '全款' END) as pay_stauts_desc,
appo.executor as executors, appo.executor as executors,
appo.appoint_status, appo.appoint_status,