这个死财务提的莫名其妙的需求
This commit is contained in:
@@ -7,31 +7,31 @@
|
||||
<resultMap id="OaAttendanceRecordResult"
|
||||
type="com.ruoyi.oa.domain.vo.OaAttendanceRecordVo">
|
||||
<!-- ① 主键 -->
|
||||
<id property="recordId" column="record_id"/>
|
||||
<id property="recordId" column="record_id"/>
|
||||
<!-- ② 其他主字段 -->
|
||||
<result property="userId" column="user_id"/>
|
||||
<result property="userId" column="user_id"/>
|
||||
<result property="relationMonth" column="relation_month"/>
|
||||
<result property="calcTime" column="calc_time"/>
|
||||
<result property="nickName" column="nick_name"/>
|
||||
<result property="trips" column="trips"/>
|
||||
<result property="notNum" column="not_num"/>
|
||||
<result property="works" column="works"/>
|
||||
<result property="projectIds" column="project_ids"/>
|
||||
<result property="overNum" column="over_num"/>
|
||||
<result property="laborCost" column="labor_cost"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="calcTime" column="calc_time"/>
|
||||
<result property="nickName" column="nick_name"/>
|
||||
<result property="trips" column="trips"/>
|
||||
<result property="notNum" column="not_num"/>
|
||||
<result property="works" column="works"/>
|
||||
<result property="projectIds" column="project_ids"/>
|
||||
<result property="overNum" column="over_num"/>
|
||||
<result property="laborCost" column="labor_cost"/>
|
||||
<result property="remark" column="remark"/>
|
||||
|
||||
<!-- ③ ▶︎ 项目维度汇总列表 -->
|
||||
<collection property="projectList"
|
||||
ofType="com.ruoyi.oa.domain.vo.ProjectAttendanceSummaryVo"
|
||||
javaType="list">
|
||||
<result property="projectId" column="project_id"/>
|
||||
<result property="projectName" column="project_name"/>
|
||||
<result property="color" column="color"/>
|
||||
<result property="workTimes" column="work_times"/>
|
||||
<result property="hourWorkTimes" column="hour_work_times"/>
|
||||
<result property="overTime" column="over_time"/>
|
||||
<result property="tripDays" column="trip_days"/>
|
||||
<result property="projectId" column="project_id"/>
|
||||
<result property="projectName" column="project_name"/>
|
||||
<result property="color" column="color"/>
|
||||
<result property="workTimes" column="work_times"/>
|
||||
<result property="hourWorkTimes" column="hour_work_times"/>
|
||||
<result property="overTime" column="over_time"/>
|
||||
<result property="tripDays" column="trip_days"/>
|
||||
</collection>
|
||||
</resultMap>
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
r.relation_month,
|
||||
r.calc_time,
|
||||
r.nick_name,
|
||||
u.labor_cost,
|
||||
u.labor_cost,
|
||||
r.trips,
|
||||
r.not_num,
|
||||
r.works,
|
||||
@@ -72,7 +72,7 @@
|
||||
|
||||
LEFT JOIN (SELECT user_id,
|
||||
project_id,
|
||||
DATE_FORMAT(create_time, '%Y-%m') AS relation_month,
|
||||
DATE_FORMAT(create_time, '%Y-%m') AS relation_month,
|
||||
|
||||
COUNT(CASE WHEN project_id != 0 and project_id != 1 THEN 1 END) AS work_times,
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
GROUP BY user_id, project_id, relation_month) m
|
||||
ON m.user_id = r.user_id
|
||||
AND m.project_id = p.project_id
|
||||
AND m.relation_month =DATE_FORMAT( r.relation_month , '%Y-%m')
|
||||
AND m.relation_month = DATE_FORMAT(r.relation_month, '%Y-%m')
|
||||
|
||||
WHERE r.del_flag = 0
|
||||
AND r.record_id = #{recordId}
|
||||
@@ -117,9 +117,78 @@
|
||||
and DAY(calc_time) = DAY(#{date})
|
||||
and YEAR(relation_month) = YEAR(#{firstDay})
|
||||
and MONTH(relation_month) = month(#{firstDay})
|
||||
and del_flag = 0
|
||||
and del_flag = 0
|
||||
</select>
|
||||
|
||||
|
||||
<!-- 查询每个用户的出勤记录,包括合并好的 project_ids -->
|
||||
<select id="getAttendance" resultType="com.ruoyi.oa.domain.ProjectAttendance">
|
||||
SELECT
|
||||
oar.user_id,
|
||||
oar.nick_name,
|
||||
oar.relation_month,
|
||||
oar.project_ids
|
||||
FROM
|
||||
oa_attendance_record oar
|
||||
WHERE
|
||||
oar.user_id IN
|
||||
<foreach item="userId" collection="userIds" open="(" separator="," close=")">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND oar.del_flag = '0'
|
||||
AND YEAR(oar.relation_month) = YEAR(#{relationMonth})
|
||||
AND MONTH(oar.relation_month) = MONTH(#{relationMonth})
|
||||
</select>
|
||||
|
||||
<!-- 根据 project_id 获取项目名称 -->
|
||||
<select id="getProjectById" resultType="com.ruoyi.oa.domain.vo.SysOaProjectVo">
|
||||
SELECT project_name
|
||||
FROM sys_oa_project
|
||||
WHERE project_id = #{projectId}
|
||||
</select>
|
||||
|
||||
<!-- 根据 userId 和 project_id 获取出勤天数 -->
|
||||
<select id="getWorkDays" resultType="java.lang.Long">
|
||||
SELECT COALESCE(SUM(CASE
|
||||
WHEN (oas.day_length > 0 OR oas.hour > 0)
|
||||
AND (oas.project_id != 1 OR oas.project_id = 0)
|
||||
THEN 1
|
||||
ELSE 0 END), 0) AS work_days
|
||||
FROM sys_oa_attendance oas
|
||||
WHERE oas.user_id = #{userId}
|
||||
AND FIND_IN_SET(oas.project_id, #{projectIds}) > 0
|
||||
AND oas.del_flag = '0'
|
||||
AND oas.create_time BETWEEN
|
||||
DATE_FORMAT(#{relationMonth}, '%Y-%m-01')
|
||||
AND IF(#{calcTime} IS NOT NULL, #{calcTime}, NOW())
|
||||
</select>
|
||||
|
||||
<select id="selectProjectIds" resultType="java.lang.String">
|
||||
SELECT
|
||||
oar.project_ids
|
||||
FROM
|
||||
oa_attendance_record oar
|
||||
WHERE
|
||||
oar.user_id IN
|
||||
<foreach item="userId" collection="userIds" open="(" separator="," close=")">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND oar.del_flag = '0'
|
||||
AND YEAR(oar.relation_month) = YEAR(#{relationMonth})
|
||||
AND MONTH(oar.relation_month) = MONTH(#{relationMonth})
|
||||
AND (
|
||||
-- 如果 calcTime 不为空,查询 calcTime 对应的记录
|
||||
(#{calcTime} IS NOT NULL AND oar.calc_time = #{calcTime})
|
||||
OR
|
||||
-- 如果 calcTime 为空,查询该用户在该月的最新 calc_time
|
||||
(#{calcTime} IS NULL AND oar.calc_time =
|
||||
(SELECT MAX(oar2.calc_time)
|
||||
FROM oa_attendance_record oar2
|
||||
WHERE oar2.user_id = oar.user_id
|
||||
AND YEAR(oar2.calc_time) = YEAR(#{relationMonth})
|
||||
AND MONTH(oar2.calc_time) = MONTH(#{relationMonth}))
|
||||
)
|
||||
)
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -305,6 +305,27 @@
|
||||
GROUP BY m.month
|
||||
ORDER BY m.month DESC; -- 本月在前,上月在后
|
||||
</select>
|
||||
<select id="getWorkDaysByUserIdAndProjectId" resultType="java.lang.Long">
|
||||
SELECT
|
||||
COALESCE(SUM(CASE
|
||||
WHEN (day_length > 0 OR hour > 0)
|
||||
OR project_id = 0
|
||||
THEN 1 ELSE 0 END), 0) AS work_days
|
||||
FROM sys_oa_attendance oas
|
||||
WHERE oas.user_id = #{userId}
|
||||
AND oas.project_id = #{projectId}
|
||||
AND oas.del_flag = 0
|
||||
AND (
|
||||
<!-- 如果 calcTime 不为空,查询 calcTime 对应的出勤记录 -->
|
||||
(#{calcTime} IS NOT NULL AND #{calcTime} >= oas.create_time)
|
||||
<!-- 如果 calcTime 为空,查询整个 relationMonth -->
|
||||
OR (#{calcTime} IS NULL AND oas.create_time BETWEEN
|
||||
-- 提取relationMonth的年月部分并构造第一天
|
||||
DATE_FORMAT(#{relationMonth}, '%Y-%m-01')
|
||||
AND LAST_DAY(STR_TO_DATE(#{relationMonth}, '%Y-%m-%d'))
|
||||
)
|
||||
)
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user