Commit 6192cdd3 authored by nie'hong's avatar nie'hong

完善工时统计

parent 2f051856
......@@ -22,4 +22,10 @@ public interface WorkProjectTimeCostMapper {
* @param map
*/
List<WorkTimeAndCostCollect> selectList(Map<String, Object> map);
/**
* 删除月份大于参数的统计数据
* @return
*/
int deleteStatisticsByQuarter(String date);
}
......@@ -29,24 +29,33 @@
</collection>
</resultMap>
<delete id="deleteStatisticsByQuarter">
delete
from work_project_time_cost
where statistics_start >= #{date}
</delete>
<insert id="statisticsTimeOrderByMonth">
INSERT into work_project_time_cost(project_id,statistics_start,statistics_end,total_time,cost)
INSERT into work_project_time_cost(project_id,user_id,is_overtime,statistics_start,statistics_end,total_time,cost)
SELECT
project_id,
min(work_day) AS statistics_start,
user_id,
is_overtime,
min(work_day),
max(work_day),
sum(work_time/8),
-- 加班和不加班成本结算不同
sum(if(is_overtime=0,work_time/8*s.day_salary,work_time/8*s.day_salary*1.5)) AS cost
sum(work_time/8*s.day_salary)
FROM
work_time_order t join work_user_salary s on t.user_id = s.user_id
WHERE status in (2,5) AND s.create_time &lt; work_day AND s.end_time>work_day AND
GROUP BY
project_id,
user_id,
is_overtime,
YEAR (work_day),
MONTH (work_day)
ON DUPLICATE key UPDATE statistics_end = VALUES(statistics_end),total_time = VALUES(total_time),cost= VALUES(cost)
ON DUPLICATE key UPDATE is_overtime = VALUES(is_overtime), statistics_end = VALUES(statistics_end),total_time = VALUES(total_time),cost= VALUES(cost)
</insert>
......
......@@ -229,10 +229,10 @@
</select>
<select id="getWorkTimeAndCostCollect" resultMap="workTimeAndCostCollect" >
SELECT CASE t.type WHEN 1 THEN "项目" WHEN 2 THEN "商机" WHEN 5 THEN "外部商务" WHEN 6 THEN "内部培训、技术准备、管理" WHEN 7 THEN "其他非项目/商机工作" END AS type,p.dept_id AS dept_id,
t.project_id AS project_id,MIN(t.work_day) AS first_time,MAX(t.work_day) AS last_time,ROUND(SUM(t.work_time)/8,2) AS
SELECT CASE t.type WHEN 1 THEN "项目" WHEN 2 THEN "商机" WHEN 3 THEN "请假" WHEN 4 THEN "调休" WHEN 5 THEN "外部商务" WHEN 6 THEN "内部培训、技术准备、管理" WHEN 7 THEN "其他非项目/商机工作" END AS type,t.dept_id AS dept_id,
t.project_id AS project_id ,MIN(t.work_day) AS first_time,MAX(t.work_day) AS last_time,ROUND(SUM(t.work_time)/8,2) AS
total_time,ROUND((SUM(t.work_time))/8*10,2) AS cost,dept_name AS dept_name,project_name
FROM work_time_order t LEFT JOIN work_project p ON t.project_id=p.id LEFT JOIN work_dept d ON p.dept_id=d.id
FROM work_time_order t LEFT JOIN work_project p ON t.project_id=p.id LEFT JOIN work_dept d ON t.dept_id=d.id
WHERE status IN (2,5)
<if test="projectIds != null">
AND (t.project_id IN
......
......@@ -312,7 +312,7 @@ public class StatisticsServiceImpl implements StatisticsService {
for (DeptProjectWorkTimeAndCost deptProjectWorkTimeAndCost : deptProjectWorkTimeAndCosts) {
List<ProjectWorkTimeAndCostStatistics> projectWorkTimeAndCostStatistics = deptProjectWorkTimeAndCost.getProjectWorkTimeAndCostStatistics();
for (ProjectWorkTimeAndCostStatistics projectWorkTimeAndCostStatistic : projectWorkTimeAndCostStatistics) {
typeTotalTime.add(projectWorkTimeAndCostStatistic.getTotalTime());
typeTotalTime = typeTotalTime.add(projectWorkTimeAndCostStatistic.getTotalTime());
}
}
}
......
package cn.wisenergy.web.config.auto;
import cn.wisenergy.common.utils.DateUtil;
import cn.wisenergy.mapper.WorkProjectTimeCostMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.transaction.annotation.Transactional;
import java.util.Calendar;
import java.util.Date;
/**
* @description: 自动统计每天统计一次,统计之前先删除近三个月的统计数据
* @author: nh
* @create: 2021-02-08 11:05
**/
@Slf4j
@Configuration
@EnableScheduling
public class AutoStatistics {
@Autowired
private WorkProjectTimeCostMapper workProjectTimeCostMapper;
@Transactional
@Scheduled(cron = "0 43 11 * * ?")
public void autoStatistics(){
log.info("AutoStatistics[]autoStatistics[]自动统计任务");
Date date = DateUtil.add(new Date(), Calendar.DAY_OF_MONTH, -3);
String firstDayOfMonth = DateUtil.convertDateToYMDStr(DateUtil.getFirstDayOfMonth(date));
workProjectTimeCostMapper.deleteStatisticsByQuarter(firstDayOfMonth);
workProjectTimeCostMapper.statisticsTimeOrderByMonth();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment