gz_att/bonus-modules/bonus-system/src/main/resources/mapper/att/AttSourceDataMapper.xml

504 lines
22 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bonus.system.att.dao.AttSourceDataDao">
<insert id="insertAttSourceData">
<foreach collection="list" item="params" separator=";">
replace into att_source_data(name, id_number, org_id, org_name, att_current_day,
att_current_time, att_type, att_address, province, att_lon, att_lat, data_source, remark)
values (#{params.name}, #{params.idNumber}, #{params.orgId}, #{params.orgName},
#{params.attCurrentDay}, #{params.attCurrentTime}, #{params.attType},
#{params.attAddress}, #{province}, #{params.attLon}, #{params.attLat}, #{params.dataSource},
#{params.remark})
</foreach>
</insert>
<insert id="insertAttData">
insert into att_data(user_id, org_id, att_current_day, att_status, att_type)
values (#{userId}, #{orgId}, #{attCurrentDay}, #{attStatus}, #{attType})
</insert>
<insert id="insertAttDayReport">
<foreach collection="list" item="params" separator=";">
replace into att_day_report(att_current_day, org_id, normal_num, late_num, early_num, skipping_num,
leave_num, address_error_num, ein_error_num, rest_num, out_num)
values (#{params.attCurrentDay}, #{params.orgId}, #{params.normalNum}, #{params.lateNum},
#{params.earlyNum}, #{params.skippingNum}, #{params.leaveNum},
#{params.addressErrorNum}, #{params.einErrorNum}, #{params.restNum}, #{params.outNum})
</foreach>
</insert>
<insert id="insertAttMonthReport">
<foreach collection="list" item="params" separator=";">
insert into att_month_report(user_id, name, org_id, org_name, att_current_month,
required_days, normal_num, late_num, early_num, skipping_num,
leave_num, address_error_num, ein_error_num, rest_num, out_num, business_trip_num)
values (#{params.userId}, #{params.userName}, #{params.orgId}, #{params.orgName},
#{params.attCurrentMonth}, #{params.requiredDays}, #{params.normalNum}, #{params.lateNum},
#{params.earlyNum}, #{params.skippingNum}, #{params.leaveNum},
#{params.addressErrorNum}, #{params.einErrorNum}, #{params.restNum}, #{params.outNum},
#{params.businessTripNum})
</foreach>
</insert>
<insert id="insertHoliday">
insert into sys_holiday(date, name, type)
values (#{date}, #{name}, #{type})
</insert>
<insert id="insertAttUpdateData">
insert into att_data_update(user_id, org_id, att_current_day, att_status, att_type)
values (#{userId}, #{orgId}, #{attCurrentDay}, #{attStatus}, #{attType})
</insert>
<insert id="insertWorkAbnormal">
<foreach collection="list" item="item" separator=";">
replace into att_work_abnormal(user_id, user_name,org_id, att_current_day,att_current_time, att_address)
values (#{item.userId}, #{item.name},#{item.orgId}, #{item.attCurrentDay}, #{item.attCurrentTime},
#{item.attAddress})
</foreach>
</insert>
<insert id="insertAttSettingHistoryData">
replace into att_setting_history(user_id, group_id, current_day) values
<foreach collection="list" item="item" separator=",">
(#{item.userId},#{item.groupId},#{item.currentDay})
</foreach>
</insert>
<insert id="insertAttDataList">
insert into att_data(user_id, att_current_day, att_status, att_type)
values
<foreach collection="list" item="item" separator=",">
(#{item.userId}, #{item.attCurrentDay}, #{item.attStatus}, #{item.attType})
</foreach>
;
insert into att_data_update(user_id, att_current_day, att_status, att_type)
values
<foreach collection="list" item="item" separator=",">
(#{item.userId}, #{item.attCurrentDay}, #{item.attStatus}, #{item.attType})
</foreach>
;
</insert>
<update id="updateAttStatusData">
<foreach collection="list" item="params" separator=";">
update att_data set att_current_time = #{params.attCurrentTime},
att_address = #{params.attAddress}, province = #{params.province}, att_lon = #{params.attLon}, att_lat =
#{params.attLat},
data_source = #{params.dataSource},
error_remake = #{params.remark},
att_status = CASE
WHEN att_status in (SELECT dict_value
FROM sys_dict_data
where dict_type = 'att_status' and (is_leave = '1' or is_leave = '2') ) THEN att_status
ELSE #{params.attStatus}
END
where user_id = #{params.userId}
AND att_current_day = #{params.attCurrentDay} and att_type = #{params.attType};
update att_data_update set att_current_time = #{params.attCurrentTime},
att_address = #{params.attAddress}, province = #{params.province}, att_lon = #{params.attLon}, att_lat =
#{params.attLat},
data_source = #{params.dataSource},
error_remake = #{params.remark},
att_status = CASE
WHEN att_status in (SELECT dict_value
FROM sys_dict_data
where dict_type = 'att_status' and (is_leave = '1' or is_leave = '2')) THEN att_status
ELSE #{params.attStatus}
END
where is_update = 0 and user_id = #{params.userId}
and att_current_day = #{params.attCurrentDay} and att_type = #{params.attType}
</foreach>
</update>
<update id="updateAttData">
update att_data set att_status = #{v.attStatus},org_id = #{v.orgId}
where user_id = #{v.userId} and att_current_day = #{v.attCurrentDay} and att_type = #{v.attType}
<if test='type == "1"'>
and att_status = 0
</if>
</update>
<update id="updateAttUpdateData">
update att_data_update set att_status = #{v.attStatus},org_id = #{v.orgId}
where is_update = 0 and user_id = #{v.userId}
and att_current_day = #{v.attCurrentDay} and att_type = #{v.attType}
<if test='type == "1"'>
and att_status = 0
</if>
</update>
<update id="updateAttDataList">
<foreach collection="list" item="v" separator=";">
update att_data set att_status = #{v.attStatus}
where user_id = #{v.userId} and att_current_day = #{v.attCurrentDay}
<if test='v.attType != null and v.attType != ""'>
and att_type = #{v.attType}
</if>
</foreach>
</update>
<update id="updateAttDataUpdateList">
<foreach collection="list" item="v" separator=";">
update att_data_update set att_status = #{v.attStatus}
where is_update = 0 and user_id = #{v.userId}
and att_current_day = #{v.attCurrentDay}
<if test='v.attType != null and v.attType != ""'>
and att_type = #{v.attType}
</if>
</foreach>
</update>
<delete id="updateHisData">
delete
from att_source_data
where att_current_day = #{date}
and data_source != 3;
update att_data
set att_current_time = null,
att_status = 0,
att_address = null,
att_lon = null,
att_lat = null
where att_current_day = #{date};
update att_data_update
set att_current_time = null,
att_status = 0,
att_address = null,
att_lon = null,
att_lat = null
where att_current_day = #{date};
</delete>
<delete id="delHisData">
delete
from att_source_data
where att_current_day = #{date}
and data_source != 3;
delete
from att_data
where att_current_day = #{date};
delete
from att_data_update
where att_current_day = #{date};
</delete>
<delete id="deleteAttMonthReport">
delete
from att_month_report
where att_current_month = DATE_FORMAT(#{pushDate}, '%Y-%m')
</delete>
<select id="getQsyAttendances" resultType="com.bonus.system.att.entity.AttSourceDataBean">
select name,
id_number,
'0' as orgId,
'0' as orgName,
attendance_date as attCurrentDay,
attendance_time as attCurrentTime,
CASE attendance_type WHEN '上班' THEN 1 ELSE 2 END as attType,
'0' as attAddress,
lon as attLon,
lat as attLat,
'1' as dataSource
from gz_cloud.fc_sup_attendance sup
where sup.attendance_date = #{pushDate}
and is_wechat != 1
</select>
<!-- -->
<select id="getAllPerson" resultType="com.bonus.system.att.entity.AttDataBean">
select su.user_id, agpr.org_id, agpr.group_id, '1' as attType, '0' as attStatus
from sys_user su
left join att_setting_history agpr on agpr.user_id = su.user_id and agpr.current_day = #{pushDate}
where su.is_active = 1
and agpr.org_id is not null
union
select su.user_id, agpr.org_id, agpr.group_id, '2' as attType, '0' as attStatus
from sys_user su
left join att_setting_history agpr on agpr.user_id = su.user_id and agpr.current_day = #{pushDate}
where su.is_active = 1
and agpr.org_id is not null
</select>
<select id="selectAttDayReport" resultType="com.bonus.system.att.entity.AttDayReportBean">
select att_current_day,
org_id,
IFNULL(sum(toWorkAttStatus = 1 and offWorkAttStatus = 1), 0) as normalNum,
IFNULL(sum(toWorkAttStatus = 2 or offWorkAttStatus = 2), 0) as lateNum,
IFNULL(sum(toWorkAttStatus = 3 or offWorkAttStatus = 3), 0) as skippingNum,
IFNULL(sum(toWorkAttStatus = 4 or offWorkAttStatus = 4), 0) as earlyNum,
IFNULL(sum(toWorkAttStatus = 5 or offWorkAttStatus = 5), 0) as restNum,
IFNULL(sum(toWorkAttStatus in (SELECT dict_value
FROM sys_dict_data
where dict_type = 'att_status' and is_leave = '1') or
offWorkAttStatus in (SELECT dict_value
FROM sys_dict_data
where dict_type = 'att_status' and is_leave = '1')), 0) as leaveNum,
IFNULL(sum(toWorkAttStatus = 7 or offWorkAttStatus = 7), 0) as outNum,
IFNULL(sum(toWorkAttStatus = 8 or offWorkAttStatus = 8), 0) as einErrorNum,
IFNULL(sum(toWorkAttStatus = 9 or offWorkAttStatus = 9), 0) as addressErrorNum
from v_att_update_data
where att_current_day
<if test=' pushType == "1" '>
>= #{pushDate}
</if>
<if test=' pushType == "2" '>
= #{pushDate}
</if>
GROUP BY att_current_day, org_id
</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 (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">
select *
from sys_holiday
where DATE_FORMAT(`date`, '%Y-%m') = DATE_FORMAT(#{pushDate}, '%Y-%m')
</select>
<select id="getPersonLeaveApplyStatus" resultType="java.lang.Integer">
select DISTINCT sdd.dict_value
from leave_apply la
left join sys_dict_data sdd on sdd.dict_label = la.leave_type
where user_id = #{userId}
and org_id = #{orgId}
and CONCAT(#{attCurrentDay}, '|', #{attType})
BETWEEN CONCAT(leave_start_date, '|', leave_start_interval)
AND CONCAT(leave_end_date, '|', leave_end_interval)
AND examine_status = 1
GROUP BY la.user_id
ORDER BY la.create_time DESC
</select>
<select id="getSourceAttData" resultType="com.bonus.system.att.entity.AttSourceDataBean">
SELECT asd.*,
su.user_id,
ag.group_id AS groupId,
g.att_type AS groupType
FROM (SELECT * FROM att_source_data WHERE att_current_day = #{pushDate} AND data_source = 1) asd
LEFT JOIN sys_user su ON su.id_number = asd.id_number
LEFT JOIN att_setting_history ag ON ag.user_id = su.user_id
AND ag.current_day = #{pushDate}
LEFT JOIN att_group g ON g.id = ag.group_id
UNION
SELECT asd.*,
su.user_id,
ag.group_id AS groupId,
g.att_type AS groupType
FROM (SELECT *
FROM att_source_data
WHERE att_current_day = #{pushDate}
AND data_source IN (2, 3)
AND (att_type = 1 OR att_type = 2)) asd
LEFT JOIN sys_user su ON su.user_name = asd.
NAME
LEFT JOIN att_setting_history ag ON ag.user_id = su.user_id
AND ag.current_day = #{pushDate}
LEFT JOIN att_group g ON g.id = ag.group_id;
</select>
<select id="selectAttIsExist" resultType="java.lang.Boolean">
SELECT count(0)
FROM att_data
WHERE user_id = #{userId}
and att_type = #{attType}
and att_current_day = #{attCurrentDay}
</select>
<select id="selectAttUpdateIsExist" resultType="java.lang.Boolean">
SELECT count(0)
FROM att_data_update
WHERE user_id = #{userId}
and att_type = #{attType}
and att_current_day = #{attCurrentDay}
</select>
<select id="getMachineAttendances" resultType="com.bonus.system.att.entity.AttSourceDataBean">
select *
from (select u.name,
'0' as idNumber,
'0' as orgId,
'0' as orgName,
DATE_FORMAT(c.checktime, '%Y-%m-%d') as attCurrentDay,
DATE_FORMAT(c.checktime, '%Y-%m-%d %H:%i:%s') as attCurrentTime,
if(i.alias like '%进%', 1, (if(i.alias like '%出%', 2, 0))) as attType,
i.alias as attAddress,
'0' as attLon,
'0' as attLat,
'2' as dataSource
from zkeco.checkinout c
left join zkeco.iclock i on i.sn = c.sn
left join zkeco.userinfo u on u.userid = c.userid
where
<if test='pushType == "1"'>
DATE_FORMAT(c.checktime, '%Y-%m-%d') = #{pushDate}
</if>
<if test='pushType == "2"'>
DATE_FORMAT(c.checktime, '%Y-%m-%d %H:%i:%s') BETWEEN concat(#{pushDate},' 00:00:00') AND
DATE_ADD(DATE_ADD(concat(#{pushDate},' 00:00:00'), INTERVAL 1 DAY), INTERVAL 5 HOUR) - INTERVAL 1 SECOND
</if>
and u.name != '') a
</select>
<select id="getLeaveData" resultType="com.bonus.system.att.entity.LeaveBean">
SELECT agpr.org_id,
ag.att_type,
la.*,
sdd.dict_value AS attStatus
FROM leave_apply la
LEFT JOIN sys_dict_data sdd ON sdd.dict_label =
IF
(la.leave_type IS NOT NULL, la.leave_type, la.type)
AND sdd.dict_type = 'att_status'
LEFT JOIN att_group_person_relation agpr ON la.user_id = agpr.user_id
LEFT JOIN att_group ag ON ag.id = agpr.group_id
AND ag.is_active = '1'
WHERE la.is_active = 1
AND la.examine_status = 1
AND sdd.dict_value IS NOT NULL
AND agpr.is_active = 1
ORDER BY leave_start_date DESC
</select>
<select id="getLeaveDataByUserId" resultType="java.lang.Integer">
SELECT count(1)
FROM leave_apply la
WHERE la.is_active = 1
AND la.examine_status = 1
AND user_id = #{userId}
AND #{attCurrentDay} BETWEEN leave_start_date and leave_end_date
</select>
<select id="getFirstAttendanceData" resultType="java.lang.Integer">
select count(0)
from att_data
where att_current_day = #{date}
</select>
<select id="getAttSettingDate" resultType="java.lang.String">
SELECT DISTINCT current_day
FROM `att_setting_history`
WHERE current_day > DATE_ADD(#{startDate}, INTERVAL -#{days} DAY)
ORDER BY current_day DESC
</select>
<select id="getAttSettingHistoryDate" resultType="com.bonus.system.att.entity.AttGroupBean">
SELECT *
FROM (SELECT group_id,
user_id,
#{currentDay} as currentDay
FROM att_group_person_relation
WHERE #{currentDay} BETWEEN DATE_FORMAT(effective_time, '%Y-%m-%d')
AND DATE_FORMAT(IFNULL(NOW(), expiring_time), '%Y-%m-%d')
ORDER BY user_id,
effective_time DESC LIMIT 10000000) aa
GROUP BY user_id
</select>
<select id="getAttPerson" resultType="com.bonus.system.att.entity.AttDataBean">
SELECT su.user_id,
ash.group_id,
'1' AS attType,
'0' AS attStatus
FROM att_setting_history ash
LEFT JOIN sys_user su ON ash.user_id = su.user_id
AND su.is_active = 1
WHERE ash.current_day = #{pushDate}
UNION
SELECT su.user_id,
ash.group_id,
'2' AS attType,
'0' AS attStatus
FROM att_setting_history ash
LEFT JOIN sys_user su ON ash.user_id = su.user_id
AND su.is_active = 1
WHERE ash.current_day = #{pushDate}
</select>
<select id="getAttDataPerson" resultType="java.lang.Long">
SELECT distinct user_id
FROM att_data
WHERE att_current_day = #{pushDate}
</select>
<select id="getAttDataByStatus" resultType="com.bonus.system.att.entity.AttDataBean">
SELECT
*
FROM
att_data
WHERE
att_current_day = #{pushDate}
AND att_status = 0
<if test='attType = ""'>
AND att_type = #{attType}
</if>
</select>
<select id="getAttDataUpdateByStatus" resultType="com.bonus.system.att.entity.AttDataBean">
SELECT
*
FROM
att_data_update
WHERE
att_current_day = #{pushDate}
AND att_status = 0
And is_update = 0
<if test='attType = ""'>
AND att_type = #{attType}
</if>
</select>
<select id="selectHolidayByDay" resultType="com.bonus.system.att.entity.Holiday">
SELECT
*
FROM
sys_holiday
WHERE
date = #{pushDate}
AND type = '1'
</select>
</mapper>