首页 任务完成时间

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_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.vo.PsSalaryContractVo;
import com.pusong.business.domain.vo.PsSalaryVo;
import com.pusong.business.domain.vo.home.ChannelAmountVo;
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.domain.vo.home.*;
import com.pusong.business.service.HomeService;
import com.pusong.business.service.IPsSalaryService;
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.RestController;
import java.util.Map;
/**
* 员工提成提成
*
@ -70,5 +69,23 @@ public class HomeController extends BaseController {
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> queryInvoiceTaskPageList(@Param("page") Page<PsTaskMain> page, @Param(Constants.WRAPPER) Wrapper<PsTaskMain> queryWrapper);
@DataPermission({
@DataColumn(key = "deptName", value = "appo.create_dept"),
@DataColumn(key = "userName", value = "appo.executor")

View File

@ -1,9 +1,8 @@
package com.pusong.business.service;
import com.pusong.business.domain.vo.home.ChannelAmountVo;
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.domain.vo.home.*;
import java.util.Map;
/**
* 首页相关接口
@ -20,4 +19,17 @@ public interface HomeService {
* @return
*/
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;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pusong.business.domain.PsContractInfo;
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.enums.CommonStatusEnum;
import com.pusong.business.enums.ContractStatusEnum;
import com.pusong.business.enums.PayStatusEnum;
import com.pusong.business.enums.TaskStatusEnum;
import com.pusong.business.mapper.PsContractInfoMapper;
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.common.core.constant.CacheNames;
import com.pusong.system.domain.bo.SysDictDataBo;
@ -37,6 +44,8 @@ public class HomeServiceImpl implements HomeService {
private final PsContractInfoMapper psContractInfoMapper;
private final PsContractPayMapper payMapper;
private final PsTaskMainMapper taskMainMapper;
private final PsTaskAppointMapper taskAppointMapper;
private final ISysDictDataService dictDataService;
@ -256,4 +265,78 @@ public class HomeServiceImpl implements HomeService {
res.cellPer();
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){
appointList = taskAppointMapper.selectList(Wrappers.<PsTaskAppoint>lambdaQuery()
.eq(PsTaskAppoint::getContractCode, contractCode)
.ne(PsTaskAppoint::getAppointStatus,AppointStatusEnum.CANCEL.getCode())
.eq(PsTaskAppoint::getTaskId, task.getId()));
}

View File

@ -95,7 +95,12 @@ public class PsTaskServiceImpl implements IPsTaskService {
*/
public TableDataInfo<PsTaskMainVo> queryPageList(PsTaskQueryBo bo, PageQuery pageQuery){
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()) {
if(vo.getStartDate() != null){
vo.setNumOfDat(DateUtils.calWorkDate(vo.getStartDate(),new Date()));
@ -139,7 +144,8 @@ public class PsTaskServiceImpl implements IPsTaskService {
* @param 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();
if(CollectionUtils.isEmpty(list)){return planVo;}
list.forEach(item->{

View File

@ -14,8 +14,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<select id="queryTaskPageList" resultMap="taskMainResult">
<sql id="queryTask">
select main.id,
main.task_type,
main.start_date,
@ -40,24 +39,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
cus.custom_name cus_custom_name ,
cus.custom_mobile cus_custom_mobile,
(select pta.id from ps_task_appoint pta where pta.task_id=main.id and pta.appoint_type=1 and pta.appoint_status != '50' and pta.del_flag = '0' order by id desc limit 0,1) as inAppo,
(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,
(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 cpay where cpay.business_type =2 )
) > 0 THEN '半款' ELSE '全款' END) as pay_stauts_desc,
(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,
(select GROUP_CONCAT(business.business_type SEPARATOR ',')
from ps_contract_business business where business.contract_code = con.contract_code and business.del_flag = '0') as business_type_name
(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,
(CASE WHEN (con.contract_amount -
(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 and cpay.contract_code = main.contract_code )
) > 0 THEN '半款' ELSE '全款' END) as pay_stauts_desc,
(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,
(select GROUP_CONCAT(business.business_type SEPARATOR ',')
from ps_contract_business business where business.contract_code = con.contract_code and business.del_flag = '0') as business_type_name
from ps_task_main main
left join ps_contract_info con on main.contract_code = con.contract_code
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 sys_user usr on con.custom_manager = usr.user_id
left join ps_contract_info con on main.contract_code = con.contract_code
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 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}
</select>
<select id="queryChildTaskPageList" resultMap="taskMainResult">
select
main.task_type,
@ -83,8 +88,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
cus.custom_name cus_custom_name ,
cus.custom_mobile cus_custom_mobile,
(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 cpay where cpay.business_type =2 )
(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 and cpay.contract_code = main.contract_code )
) > 0 THEN '半款' ELSE '全款' END) as pay_stauts_desc,
appo.executor as executors,
appo.appoint_status,