人事系统时间交集问题的调优解决
2020-07-01 本文已影响0人
江江简书
前言:最近项目使用人员反馈,在加班申请的过程中,有些人员有意或者无意中把加班时间调成了相同的或者时间存在交集,这给老板无意中增加了支出,怎么办?能否控制相同人员制单时间校验是否存在相同时间的单据和交集的单据的校验咧?答案肯定是能的
引用网友的函数实现
代码实现
$time_arr 是一个二维数组格式如下
[
1 => [
start_time=>xxxx,
end_time=>xxxx,
]
]
/**
* 控制提交单价时是否存在交集校验时间是否存在交集
* 1.明细的层面本身存在重复的时间
* 2.数据库层面的存在重复时间
*/
//1.控制数据库层面的唯一
foreach ($time_arr as $rows) {
foreach ($rows as $val1) {
$sql = <<<SQL
SELECT
t1.id_ot_detailed
FROM
t_hr_ot_detailed t1
inner join t_hr_overtime_head t2 on t1.t_hr_overtim_head=t2.id_hr_overtime_head
where '{$val1}' between t1.overtime_start and t1.overtime_end and t2.id_person = '{$id_person}' and t2.delete_flag='0' and t2.invalid_flag='0' ;
SQL;
$t_res = \pdo_mysql_fls::sql_query($conn, $sql);
if ($t_res) {
$err_msg = "操作失败!原因:制单重复,请勿重新提交";
throw new Exception($err_msg);
}
}
}
//2.控制当前单据的唯一
if (count($time_arr) > 1) {
for ($i = 1; $i <= count($time_arr); $i++) {
for ($j = $i + 1; $j <= count($time_arr); $j++) {
$inn_res = timemerg($time_arr[$i]['overtime_start' . $i], $time_arr[$i]['overtime_end' . $i], $time_arr[$j]['overtime_start' . $j], $time_arr[$j]['overtime_end' . $j]);
if ($inn_res) {
$err_msg = "操作失败!原因:当前单据存在交集的加班时间请检查。";
throw new Exception($err_msg);
}
}
}
}