Commit 73cfb458 authored by cq990612's avatar cq990612

优化代码结构

parent 8fbef379
......@@ -40,7 +40,7 @@ public interface WorkTimeOrderMapper extends BaseMapper<WorkTimeOrder> {
int updateStatusById(@Param("reviewerId") Integer reviewerId, @Param("id") Integer id, @Param("reason") String reason);
List<WorkTimeOrder> queryByPage(@Param("status")List<Integer> status, @Param("projectId") Integer projectId, @Param("type") Integer type, @Param("deptId") Integer deptId);
List<WorkTimeOrder> queryByPage(@Param("status")List<Integer> status, @Param("projectIds") List<Integer> projectIds, @Param("types") List<Integer> types, @Param("deptId") Integer deptId);
/**
* 根据填报项目类型获取次数和工时汇总
......
......@@ -33,16 +33,17 @@
</collection>
</resultMap>
<resultMap id="workTimeAndCostCollect" type="cn.wisenergy.model.dto.WorkTimeAndCostCollect" >
<resultMap id="workTimeAndCostCollect" type="cn.wisenergy.model.dto.WorkTimeAndCostCollect">
<result property="type" column="type"/>
<collection property="deptProjectWorkTimeAndCosts" resultMap="deptProjectWorkTimeAndCosts" >
<collection property="deptProjectWorkTimeAndCosts" resultMap="deptProjectWorkTimeAndCosts">
</collection>
</resultMap>
<resultMap id="deptProjectWorkTimeAndCosts" type="cn.wisenergy.model.dto.DeptProjectWorkTimeAndCost">
<result property="deptId" column="dept_id"/>
<result property="deptName" column="dept_name"/>
<collection property="projectWorkTimeAndCostStatistics" ofType="cn.wisenergy.model.dto.ProjectWorkTimeAndCostStatistics">
<collection property="projectWorkTimeAndCostStatistics"
ofType="cn.wisenergy.model.dto.ProjectWorkTimeAndCostStatistics">
<result property="projectId" column="project_id"/>
<result property="projectName" column="project_name"/>
<result property="statisticsTime" column="statistics_time"/>
......@@ -158,21 +159,35 @@
FROM
<include refid="table"/>
<where>
<if test="null != projectId">
AND project_id = #{projectId}
</if>
<if test="null != status">
AND status in
<if test="null != projectIds and projectIds.size()>0">
AND project_id IN
<foreach collection="projectIds" item="projectId" open="(" close=")" separator=",">
#{projectId}
</foreach>
<if test=" null != status and status.size()>0">
AND status IN
<foreach collection="status" item="sta" open="(" close=")" separator=",">
#{sta}
</foreach>
</if>
<if test="null != type">
AND type = #{type}
</if>
<if test="null != type">
<if test="null != types and types.size()>0">
OR (type IN
<foreach collection="types" item="type" open="(" close=")" separator=",">
#{type}
</foreach>
<if test=" null != deptId ">
AND dept_id = #{deptId}
</if>
<if test=" null != status and status.size()>0">
AND status in
<foreach collection="status" item="sta" open="(" close=")" separator=",">
#{sta}
</foreach>
</if>
)
</if>
</where>
ORDER BY work_day DESC
</select>
......@@ -241,11 +256,13 @@
</where>
</select>
<select id="getWorkTimeAndCostCollect" resultMap="workTimeAndCostCollect" >
<select id="getWorkTimeAndCostCollect" resultMap="workTimeAndCostCollect">
SELECT t.type AS type, t.dept_id AS dept_id,dept_name,
t.project_id AS project_id ,IF (YEAR (work_day) = YEAR (NOW()), concat(YEAR (work_day),'年',MONTH (work_day),'月') , concat(YEAR(work_day), '年')) AS statistics_time ,SUM(t.work_time)/8 AS
t.project_id AS project_id ,IF (YEAR (work_day) = YEAR (NOW()), concat(YEAR (work_day),'年',MONTH (work_day),'月')
, concat(YEAR(work_day), '年')) AS statistics_time ,SUM(t.work_time)/8 AS
total_time, SUM(t.work_time * s.day_salary)/8 AS cost ,project_name
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 LEFT JOIN work_user_salary s ON s.user_id = t.user_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
LEFT JOIN work_user_salary s ON s.user_id = t.user_id
WHERE status IN (2,5) AND s.create_time &lt; t.work_day AND s.end_time > t.work_day
<if test="projectIds != null">
AND (t.project_id IN
......@@ -267,7 +284,8 @@
<if test="centreId != null">
AND centre_id = #{centreId}
</if>
group by t.type,t.dept_id, dept_name, t.project_id,p.project_name, if(YEAR (work_day) = YEAR(NOW()),',month(work_day)','')
group by t.type,t.dept_id, dept_name, t.project_id,p.project_name, if(YEAR (work_day) =
YEAR(NOW()),',month(work_day)','')
order by t.dept_id,work_day
</select>
......@@ -275,7 +293,8 @@
select distinct(work_day)
from
<include refid="table"/>
where year(#{date}) = year(work_day) AND month(#{date}) = month(work_day) AND user_id = #{userId} AND status != 3
where year(#{date}) = year(work_day) AND month(#{date}) = month(work_day) AND user_id = #{userId} AND status !=
3
</select>
<select id="geByMonth" resultType="cn.wisenergy.model.app.WorkTimeOrder">
......@@ -312,8 +331,16 @@
<select id="getUserProjectWorkTimeStatistics" resultMap="userWorkTimeStatisticsByProject">
SELECT <if test="isAll"> u.id AS user_id, u.`name` AS user_name,</if> <if test="!isAll">'合计' AS user_name ,</if> t.project_id AS project_id, t.type AS project_type, p.project_name AS project_name,
IF(t.is_overtime = 0, <if test="!isAll">0</if> <if test="isAll">null</if>, sum(t.work_time)) AS over_time, IF(t.is_overtime=1, <if test="!isAll">0</if> <if test="isAll">null</if>, sum(t.work_time)) AS normal_time
SELECT
<if test="isAll">u.id AS user_id, u.`name` AS user_name,</if>
<if test="!isAll">'合计' AS user_name ,</if>
t.project_id AS project_id, t.type AS project_type, p.project_name AS
project_name,
IF(t.is_overtime = 0,
<if test="!isAll">0</if>
<if test="isAll">null</if>, sum(t.work_time)) AS over_time, IF(t.is_overtime=1,
<if test="!isAll">0</if>
<if test="isAll">null</if>, sum(t.work_time)) AS normal_time
from work_time_order t left join work_project p on t.project_id = p.id join work_user u on t.user_id = u.id
where
t.status in (2,5) AND
......@@ -334,12 +361,13 @@
AND p.manager_id = #{managerId}
</if>
GROUP BY <if test="isAll"> u.id,u.`name`,</if>t.project_id,t.type,p.project_name, t.is_overtime
GROUP BY <if test="isAll">u.id,u.`name`,</if>t.project_id,t.type,p.project_name, t.is_overtime
</select>
<select id="selectCountByTypeAndStatus" resultType="cn.wisenergy.model.dto.MonthlyWorkingHoursStatistics">
select type AS projectType, count(1) AS approved
from <include refid="table"/>
from
<include refid="table"/>
where user_id = #{userId} and work_day >= #{firstDayOfMonth} AND `type` is not null AND status in
<foreach collection="status" open="(" close=")" separator="," item="s">
#{s}
......@@ -348,8 +376,15 @@
</select>
<select id="selectListByType" resultMap="userWorkTimeStatisticsByProject">
SELECT <if test="isAll"> u.id AS user_id, u.`name` AS user_name,</if> <if test="!isAll"> '合计' AS user_name,</if> t.type AS project_type,
IF(t.is_overtime = 0, <if test="!isAll">0</if> <if test="isAll">null</if>, sum(t.work_time)) AS over_time, IF(t.is_overtime=1, <if test="!isAll">0</if> <if test="isAll">null</if>, sum(t.work_time)) AS normal_time
SELECT
<if test="isAll">u.id AS user_id, u.`name` AS user_name,</if>
<if test="!isAll">'合计' AS user_name,</if>
t.type AS project_type,
IF(t.is_overtime = 0,
<if test="!isAll">0</if>
<if test="isAll">null</if>, sum(t.work_time)) AS over_time, IF(t.is_overtime=1,
<if test="!isAll">0</if>
<if test="isAll">null</if>, sum(t.work_time)) AS normal_time
from work_time_order t JOIN work_user u ON t.user_id = u.id
where
t.work_day &lt;= #{endDate} AND t.status IN (2, 5)
......
......@@ -260,7 +260,7 @@ public class WorkTimeOrderServiceImpl implements WorkTimeOrderService {
for (WorkTimeOrder dto : addList) {
if (null != workCollect && null != workCollect.getRejectTime()) {
Date rejectTime1 = workCollect.getRejectTime();
dto.setStatus(RE_SUBMIT);
//dto.setStatus(RE_SUBMIT);
Date rejectTime = DateUtil.convertStrToDate(DateUtil.convertDateToStr(rejectTime1, "yyyy-MM-dd"), "yyyy-MM-dd");
if (DateUtil.isThanDay(rejectTime, date, submitTime)) {
throw new BaseCustomException("627", "超过" + submitTime + "天的不能填报");
......@@ -822,20 +822,36 @@ public class WorkTimeOrderServiceImpl implements WorkTimeOrderService {
page = page == null ? 1 : page;
pageSize = pageSize == null ? 10 : pageSize;
List<WorkType> workTypes = workTypeService.getAll(1);
List<Integer> projectIds = new ArrayList<>();
List<Integer> types = new ArrayList<>();
if (null == projectId && null == type) {
List<ProjectManagerDto> projectManagerDto = getProjectManagerDto(user, workTypes);
projectId = projectManagerDto.get(0).getId();
type = projectManagerDto.get(0).getType();
if (!CollectionUtils.isEmpty(projectManagerDto)) {
projectManagerDto.forEach(project ->{
if (null != project.getId()) {
projectIds.add(project.getId());
} else {
types.add(project.getType());
}
} );
}
}else{
if (null != projectId) {
projectIds.add(projectId);
}
if (null != type) {
types.add(type);
}
}
Page<WorkTimeOrderDto> pageHelper = null;
List<WorkTimeOrder> workTimeOrders = null;
if (UserRoleLevelUtils.isManagerLevel(user.getId(), LevelEnum.EXAMINE.getLevelName())) {
pageHelper = PageHelper.startPage(page, pageSize);
Integer deptId = user.getDeptId();
workTimeOrders = workTimeOrderMapper.queryByPage(status, projectId, type, deptId);
workTimeOrders = workTimeOrderMapper.queryByPage(status, projectIds, types, deptId);
}
List<WorkTimeOrderDto> workTimeOrderDtos = new ArrayList<>();
List<WorkUser> workUsers = workUserMapper.selectList(new QueryWrapper<>());
List<WorkProject> workProjects = workProjectMapper.selectList(new QueryWrapper<>());
for (WorkTimeOrder workTimeOrder : workTimeOrders) {
......
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