月计划天数按当月最后所在的组织决定

This commit is contained in:
fl 2025-02-12 10:59:17 +08:00
parent de8a9f61aa
commit 960d9cd6f1
3 changed files with 42 additions and 44 deletions

View File

@ -54,7 +54,7 @@ public interface AttSourceDataDao {
* 查询月考勤情况
* @return list bean
*/
List<AttMonthReportBean> selectAttMonthReport(@Param("pushDate")String pushDate,@Param("attRuleDate")String attRuleDate);
List<AttMonthReportBean> selectAttMonthReport(@Param("pushDate")String pushDate);
/**
* 新增月报表

View File

@ -1161,21 +1161,7 @@ public class AttTasks {
List<AttDayReportBean> dayReportList = attSourceDataDao.selectAttDayReport(pushDate, pushType);
//日报表新增
attSourceDataDao.insertAttDayReport(dayReportList);
String attRuleDate;
//月报表查询
if (pushType == 2) {
//历史数据查询
//如果是当月将最新时间将最新时间存进去如果是之前月将之前月的最后一天存进去
// 当前日期时间
LocalDateTime now = LocalDateTime.now();
// 调用方法获取目标日期
LocalDate targetDate = getTargetDate(now);
attRuleDate = targetDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}else{
//如果更新当天数据查询
attRuleDate = DateUtil.today();
}
List<AttMonthReportBean> monthReportList = attSourceDataDao.selectAttMonthReport(pushDate,attRuleDate);
List<AttMonthReportBean> monthReportList = attSourceDataDao.selectAttMonthReport(pushDate);
//人员对应出月出勤天数
monthReportList.forEach(c ->
groupList.stream()

View File

@ -204,35 +204,47 @@
</select>
<!--att_setting_history 的处理是为了获取当月最后一天在哪个考勤规则,去计算他的当月考勤天数 -->
<select id="selectAttMonthReport" resultType="com.bonus.system.att.entity.AttMonthReportBean">
select g.org_id,
v.user_id,
su.user_name,
so.org_name,
g.group_id,
DATE_FORMAT(att_current_day, '%Y-%m') as attCurrentMonth,
IFNULL( sum( IF ( toWorkAttStatus = 1, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 1, 0.5, 0 )), 0 ) AS normalNum,
IFNULL( sum( IF ( toWorkAttStatus = 2, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 2, 0.5, 0 )), 0 ) AS lateNum,
IFNULL( sum( IF ( toWorkAttStatus = 3, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 3, 0.5, 0 )), 0 ) AS skippingNum,
IFNULL( sum( IF ( toWorkAttStatus = 4, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 4, 0.5, 0 )), 0 ) AS earlyNum,
IFNULL( sum( IF ( toWorkAttStatus = 5, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 5, 0.5, 0 )), 0 ) AS restNum,
sum(
IF
( toWorkAttStatus IN ( SELECT dict_value FROM sys_dict_data WHERE dict_type = 'att_status' AND is_leave = '1' ), 0.5, 0 ))+ sum(
IF
( offWorkAttStatus IN ( SELECT dict_value FROM sys_dict_data WHERE dict_type = 'att_status' AND is_leave = '1' ), 0.5, 0 )) AS leaveNum,
IFNULL( sum( IF ( toWorkAttStatus = 7, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 7, 0.5, 0 )), 0 ) AS outNum,
IFNULL( sum( IF ( toWorkAttStatus = 8, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 8, 0.5, 0 )), 0 ) AS einErrorNum,
IFNULL( sum( IF ( toWorkAttStatus = 9, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 9, 0.5, 0 )), 0 ) AS addressErrorNum,
IFNULL( sum( IF ( toWorkAttStatus = 10, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 10, 0.5, 0 )), 0 ) AS businessTripNum
from v_att_update_data v
left join sys_user su on su.user_id = v.user_id
left join att_setting_history g
on g.user_id = v.user_id and g.current_day = #{attRuleDate}
left join sys_organization so on so.id = g.org_id
where DATE_FORMAT(att_current_day, '%Y-%m') = DATE_FORMAT(#{pushDate}, '%Y-%m')
and g.group_id is not null
GROUP BY DATE_FORMAT(att_current_day, '%Y-%m'), v.user_id
SELECT
g.org_id,
v.user_id,
su.user_name,
so.org_name,
g.group_id,
DATE_FORMAT( att_current_day, '%Y-%m' ) AS attCurrentMonth,
IFNULL( sum( IF ( toWorkAttStatus = 1, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 1, 0.5, 0 )), 0 ) AS normalNum,
IFNULL( sum( IF ( toWorkAttStatus = 2, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 2, 0.5, 0 )), 0 ) AS lateNum,
IFNULL( sum( IF ( toWorkAttStatus = 3, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 3, 0.5, 0 )), 0 ) AS skippingNum,
IFNULL( sum( IF ( toWorkAttStatus = 4, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 4, 0.5, 0 )), 0 ) AS earlyNum,
IFNULL( sum( IF ( toWorkAttStatus = 5, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 5, 0.5, 0 )), 0 ) AS restNum,
sum(
IF
( toWorkAttStatus IN ( SELECT dict_value FROM sys_dict_data WHERE dict_type = 'att_status' AND is_leave = '1' ), 0.5, 0 ))+ sum(
IF
( offWorkAttStatus IN ( SELECT dict_value FROM sys_dict_data WHERE dict_type = 'att_status' AND is_leave = '1' ), 0.5, 0 )) AS leaveNum,
IFNULL( sum( IF ( toWorkAttStatus = 7, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 7, 0.5, 0 )), 0 ) AS outNum,
IFNULL( sum( IF ( toWorkAttStatus = 8, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 8, 0.5, 0 )), 0 ) AS einErrorNum,
IFNULL( sum( IF ( toWorkAttStatus = 9, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 9, 0.5, 0 )), 0 ) AS addressErrorNum,
IFNULL( sum( IF ( toWorkAttStatus = 10, 0.5, 0 )), 0 ) + IFNULL( sum( IF ( offWorkAttStatus = 10, 0.5, 0 )), 0 ) AS businessTripNum
FROM
v_att_update_data v
LEFT JOIN sys_user su ON su.user_id = v.user_id
LEFT JOIN (
SELECT
*
FROM
( SELECT DISTINCT * FROM att_setting_history WHERE DATE_FORMAT( current_day, '%Y-%m' ) = DATE_FORMAT(#{pushDate}, '%Y-%m' ) ORDER BY current_day DESC ) a
GROUP BY
user_id
) g ON g.user_id = v.user_id
LEFT JOIN sys_organization so ON so.id = g.org_id
WHERE
DATE_FORMAT( att_current_day, '%Y-%m' ) = DATE_FORMAT(#{pushDate}, '%Y-%m' )
AND g.group_id IS NOT NULL
GROUP BY
DATE_FORMAT( att_current_day, '%Y-%m' ),
v.user_id
</select>
<select id="selectHolidayByMonth" resultType="com.bonus.system.att.entity.Holiday">