考勤处理脚本
1 int init_win() 2 { 3 return 1; 4 }; 5 6 int load_ext() 7 { 8 //显示记录时执行 9 // 10 return 1; 11 }; 12 13 int show_row_ext() 14 { 15 dbg('------------------------------------------'); 16 dbg('开始: ' + emp_name + ' 的 ' + class_date_fmt + ' 的考勤检查'); 17 18 //如果是请假的话,设置统计天数为1 19 if (process_result == 'E') { 20 n2 = 1; 21 return 1; 22 } 23 24 //如果是出差的话,设置统计天数为1 25 if (process_result == 'F') { 26 n2 = 1; 27 return 1; 28 } 29 30 if (note_info != '') { 31 dbg('当天已处理过 | 当天由系统自动处理,停止检查'); 32 dbg('备注信息:' + note_info + ' . 打卡记录:' + on_time + '. 出勤天数: ' + n2); 33 return 1; 34 } 35 36 string ss1; 37 int not_find; 38 not_find = -1; 39 40 //显示每一条记录时执行 41 //一共10个刷卡点,其中0为后勤点,1、3、9为午班刷卡点,2、4、5、6、7、8为野外刷卡点 42 //考勤地点:A、后勤区 | B 午班区 | C 野外区 43 //n1 打卡地点-打卡班次 n2 打卡天数 44 //得到员工当天的打卡记录 45 46 //提前和推迟的小时数 47 int time_dq_hour,time_tc_hour; 48 time_dq_hour = 0; //不得大于野外标准开始小时数 49 time_tc_hour = 0; //标准小时数 + 推迟 不得大于24 50 51 num rec_day; //打卡天数 52 rec_day = 0; 53 54 //野外的开始和结束标准时间 55 int time_yw_beg,time_yw_end; 56 time_yw_beg = 7 - time_dq_hour; 57 time_yw_end = 19 + time_tc_hour; 58 59 //后勤上午开始结束时间 60 int time_hq_s_beg,time_hq_s_end; 61 time_hq_s_beg = 8 - time_dq_hour; 62 time_hq_s_end = 9 + time_tc_hour; 63 64 //后勤下午开始结束时间 65 int time_hq_x_beg,time_hq_x_end; 66 time_hq_x_beg = 14 - time_dq_hour; 67 time_hq_x_end = 15 + time_tc_hour; 68 69 //午班上午开始结束时间 70 int time_jd_s_beg,time_jd_s_end; 71 time_jd_s_beg = 8 - time_dq_hour; 72 time_jd_s_end = 9 + time_tc_hour; 73 74 //午班下午开始结束时间 75 int time_jd_x_beg,time_jd_x_end; 76 time_jd_x_beg = 14 - time_dq_hour; 77 time_jd_x_end = 15 + time_tc_hour; 78 79 //周几 周1-周7 80 int week_day; 81 week_day = get_week_id(class_date); 82 83 string sql; 84 sql = "select card_no,mark_date,mark_time,add_cause from timer_original_rec where mark_date ='" + class_date + "' and card_no = '" + card_no +"' order by mark_date,mark_time"; 85 86 db_run(sql); 87 int row_count; 88 row_count = db_row_count(); 89 90 if (row_count > 0) { 91 //db_show(); 92 dbg('当天共有' + row_count + '条打卡记录'); 93 94 int s_finish;//检测完成 95 s_finish = 0; 96 97 int mark_time_hour; 98 mark_time_hour = 0; 99 100 int i; 101 for (i = 0; i < row_count; i++) { 102 dbg('第' + (i + 1) + '条记录'); 103 //dbg('检测提前中止:' + s_finish); 104 105 mark_time_hour = str_get_sub(db_res(2),0,2); 106 dbg('打卡小时' + mark_time_hour); 107 108 if(s_finish == 1){ 109 break; 110 } 111 112 switch(db_res(3)){ 113 //野外优先 07-19 114 //最小计数1天 115 case '2': 116 case '4': 117 case '5': 118 case '6': 119 case '7': 120 case '8': 121 dbg('当前出勤IP:' + db_res(3) + ' - 野外'); 122 note_info += '野外班次 |'; 123 //得到时间,判断考勤时间是否在有效时间段内 124 if (mark_time_hour >= time_yw_beg && mark_time_hour <= time_yw_end) { 125 rec_day = 1; 126 ss1 = '野外'; 127 //中止继续检测 128 s_finish = 1; 129 }else{ 130 dbg('不在有效的打卡时间段内'); 131 } 132 break; 133 //午班 08-09 14-15 134 case '1': 135 case '3': 136 case '9': 137 dbg('当前出勤IP:' + db_res(3) + ' - 午班'); 138 note_info += '午班班次 | '; 139 140 if (!(week_day == 2 || week_day == 4)) { 141 //得到时间,判断考勤时间是否在有效时间段内 142 //最小计数0.5,上午一次,下午一次 143 if ((mark_time_hour >= time_jd_s_beg && mark_time_hour <= time_jd_s_end) || (mark_time_hour >= time_jd_x_beg && mark_time_hour <= time_jd_x_end)) { 144 rec_day += 0.5; 145 }else{ 146 dbg('不在有效的打卡时间段内'); 147 } 148 }else{ 149 //周2周4,只需要打卡1次 150 if ((mark_time_hour >= time_jd_s_beg && mark_time_hour <= time_jd_s_end) || (mark_time_hour >= time_jd_x_beg && mark_time_hour <= time_jd_x_end)) { 151 rec_day = 1; 152 ss1 = '午班'; 153 }else{ 154 dbg('不在有效的打卡时间段内'); 155 } 156 } 157 158 //午班优先-补贴 159 dbg('找寻午班的位置:' + str_pos(note_info,'午班')); 160 if (str_pos(note_info,'午班') != not_find) { 161 ss1 = '午班'; 162 } 163 164 if (rec_day == 1) { 165 s_finish = 1; 166 } 167 168 break; 169 //后勤 08-09 14-15 170 case '0': 171 dbg('当前出勤IP:' + db_res(3) + ' - 后勤'); 172 note_info += '后勤班次 |'; 173 //是否周2|周4 174 if (!(week_day == 2 || week_day == 4)) { 175 //得到时间,判断考勤时间是否在有效时间段内 176 //最小计数0.5,上午一次,下午一次 177 if ((mark_time_hour >= time_hq_s_beg && mark_time_hour <= time_hq_s_end) || (mark_time_hour >= time_hq_x_beg && mark_time_hour <= time_hq_x_end)) { 178 rec_day += 0.5; 179 }else{ 180 dbg('不在有效的打卡时间段内'); 181 } 182 }else{ 183 //周2周4,只需要打卡1次 184 if ((mark_time_hour >= time_hq_s_beg && mark_time_hour <= time_hq_s_end) || (mark_time_hour >= time_hq_x_beg && mark_time_hour <= time_hq_x_end)) { 185 rec_day = 1; 186 ss1 = '后勤'; 187 }else{ 188 dbg('不在有效的打卡时间段内'); 189 } 190 } 191 192 //午班优先-补贴 193 if (str_pos(note_info,'午班') != not_find) { 194 ss1 = '午班'; 195 } 196 197 if (rec_day == 1) { 198 s_finish = 1; 199 } 200 break; 201 } 202 db_next(); 203 } 204 s1 = ss1; 205 //结果 206 switch(rec_day){ 207 case 0.5: 208 n2 = rec_day; 209 break; 210 case 1: 211 process_result = ''; 212 process_result_name = ''; 213 n2 = rec_day; 214 break; 215 } 216 217 dbg('------------------------------------------'); 218 }else{ 219 dbg('没有打卡记录'); 220 dbg('------------------------------------------'); 221 } 222 223 return 1; 224 }; 225 226 int row_change_ext() 227 { 228 return 1; 229 }; 230 231 int show_detail_row_ext() 232 { 233 return 1; 234 }; 235 236 int main() 237 { 238 return 1; 239 };