考勤处理脚本

  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 };
原文地址:https://www.cnblogs.com/endv/p/4622410.html