diff --git a/attendance_iot/controllers/kaoqin_test.py b/attendance_iot/controllers/kaoqin_test.py index 4a93f02c7..33df578b9 100644 --- a/attendance_iot/controllers/kaoqin_test.py +++ b/attendance_iot/controllers/kaoqin_test.py @@ -62,6 +62,7 @@ class BusController(Controller): 'source': 'iot', # 打卡来源 'attendance_iot_id': attendance_iot_id.id, # 打卡设备 }) + _logger.info(f"{employee_id.name}打卡--{fields.Datetime.now()}") return {"Result": 0, "Msg": "添加成功"} @route('/api/v1/user/inf_photo', methods=['POST'], type='json', auth='none', csrf=False) diff --git a/yuthon_hr_attendance/controllers/applet_attendance.py b/yuthon_hr_attendance/controllers/applet_attendance.py index 0fcfc75ba..f6c0e43a7 100644 --- a/yuthon_hr_attendance/controllers/applet_attendance.py +++ b/yuthon_hr_attendance/controllers/applet_attendance.py @@ -199,7 +199,9 @@ class AppletAttendance(Controller): :return: """ _logger.info("-------触发打卡接口/yuthon/att/record---------") - res_user_id = request.env(user=SUPERUSER_ID)["res.users"].search([('id', '=', kw.get('user_id'))]) + res_user_id = request.env(user=SUPERUSER_ID)["res.users"].search([('login', '=', kw.get('user_id'))]) + # uid = request.session.authenticate(request.env.cr.dbname, login, password) + # user_id = request.env['res.users'].sudo().browse(uid) _logger.info(f"传过来的user_id:{kw.get('user_id')},名称{res_user_id.name}") employee_id = request.env(user=SUPERUSER_ID)["hr.employee"].search([('name', '=', res_user_id.name)]) if res_user_id: diff --git a/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py b/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py index ccaa1b4a5..26b0d9e6f 100644 --- a/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py +++ b/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py @@ -82,13 +82,12 @@ class HrAttendanceDetail(models.Model): } # 传参按一个人打卡一次传参 - # @api.model_create_multi - # def create(self, vals_list): - # res = super(HrAttendanceDetail, self).create(vals_list) - # for attendance_obj in res: - # self.sudo()._do_save_wx_attendance_data(attendance_obj.employee_id.user_id, attendance_obj.create_date.date()) - # self.sudo()._do_plan_save_wx_attendance_data(attendance_obj.employee_id.user_id, attendance_obj.create_date.date()) - # return res + @api.model_create_multi + def create(self, vals_list): + res = super(HrAttendanceDetail, self).create(vals_list) + employee_id = self.env['hr.employee'].search([('id', '=', vals_list[0]['employee_id'])]) + self.get_hr_attendance_time(employee_id) + return res # # def write(self, vals): # res = super(HrAttendanceDetail, self).write(vals) @@ -257,52 +256,53 @@ class HrAttendanceDetail(models.Model): _logger.error('检查保存之前的数据分析出想要的数据失败,异常:{0},数据信息{1},异常详情:{2}'.format(str(e), str(data), str(traceback.format_exc()))) - def get_hr_attendance_time(self): + def get_hr_attendance_time(self, employee_id): """ 获取企业微信打卡数据的核心逻辑 :return: 处理结果 """ # 从用户列表里获取企业微信的用户 - user_list = self._get_wx_attendance_user_list() + # user_list = self._get_wx_attendance_user_list() now_time = datetime.now() + timedelta(hours=8) - start_time = now_time - timedelta(days=30) + start_time = now_time - timedelta(days=1) # 企业微信获取打卡数据,要求用户分组100,分批获取打卡记录 - for userid_limit in self.utils_list_page(user_list, 100): - # 获取企业微信的打卡信息 - try: - attendance_data = self._get_wx_attendance_data(userid_limit, now_time, start_time) - attendance_result, response = self.sudo().env["wecom.apps"].sync_checkin_data(attendance_data) - except Exception as e: - _logger.error('获取企业微信的打卡信息失败,异常:{0},用户列表{1},异常详情:{2}'.format(str(e), str(userid_limit), str(traceback.format_exc()))) - continue - # 检查请求返回的信息是否正确 - try: - checkin_data = self._check_wx_attendance_data(response, userid_limit) - except Exception as e: - _logger.error('检查请求返回的信息失败,异常:{0},用户列表{1},异常详情:{2}'.format(str(e), str(userid_limit), str(traceback.format_exc()))) - continue - # 将原始数据存储 - for data in checkin_data: - # 检查保存之前的数据是否准确,并且分析出想要的打卡时间 - try: - checkin_time, sch_checkin_time = self._check_wx_attendance_time(data, userid_limit) - except Exception as e: - _logger.error( - '检查保存之前的数据分析出想要的数据失败,异常:{0},数据信息{1},异常详情:{2}'.format(str(e), str(data), str(traceback.format_exc()))) - continue - # 保存相关的企业微信的原始打卡信息 - try: - self._save_wx_attendance_detail_data(data, checkin_time, sch_checkin_time) - except Exception as e: - _logger.error( - '保存相关的企业微信的原始打卡信息失败,异常:{0},数据信息{1},异常详情:{2}'.format(str(e), str(data), str(traceback.format_exc()))) + # for userid_limit in self.utils_list_page(user_list, 100): + # # 获取企业微信的打卡信息 + # try: + # attendance_data = self._get_wx_attendance_data(userid_limit, now_time, start_time) + # attendance_result, response = self.sudo().env["wecom.apps"].sync_checkin_data(attendance_data) + # except Exception as e: + # _logger.error('获取企业微信的打卡信息失败,异常:{0},用户列表{1},异常详情:{2}'.format(str(e), str(userid_limit), str(traceback.format_exc()))) + # continue + # # 检查请求返回的信息是否正确 + # try: + # checkin_data = self._check_wx_attendance_data(response, userid_limit) + # except Exception as e: + # _logger.error('检查请求返回的信息失败,异常:{0},用户列表{1},异常详情:{2}'.format(str(e), str(userid_limit), str(traceback.format_exc()))) + # continue + # # 将原始数据存储 + # for data in checkin_data: + # # 检查保存之前的数据是否准确,并且分析出想要的打卡时间 + # try: + # checkin_time, sch_checkin_time = self._check_wx_attendance_time(data, userid_limit) + # except Exception as e: + # _logger.error( + # '检查保存之前的数据分析出想要的数据失败,异常:{0},数据信息{1},异常详情:{2}'.format(str(e), str(data), str(traceback.format_exc()))) + # continue + # # 保存相关的企业微信的原始打卡信息 + # try: + # self._save_wx_attendance_detail_data(data, checkin_time, sch_checkin_time) + # except Exception as e: + # _logger.error( + # '保存相关的企业微信的原始打卡信息失败,异常:{0},数据信息{1},异常详情:{2}'.format(str(e), str(data), str(traceback.format_exc()))) # 将取回来的数据进行组织整理写入到考勤表中 - employee_ids = self.sudo().env['hr.employee'].search([('use_user_type', '=', 'labor')]) - employee_list = [emp.name for emp in employee_ids] - user_obj = self.sudo().env['res.users'].search([('name', 'not in', ['Administrator', '李鹏宇'] + employee_list), - ('employee_id.contract_id', '!=', False)]).sorted('id') + # employee_ids = self.sudo().env['hr.employee'].search([('id', '=', employee_id.id)]) + # employee_list = [emp.name for emp in employee_ids] + # user_obj = self.sudo().env['res.users'].search([('name', 'not in', ['Administrator', '李鹏宇'] + employee_list), + # ('employee_id.contract_id', '!=', False)]).sorted('id') + user_obj = self.sudo().env['res.users'].search([('id', '=', employee_id.user_id.id)]) # 暂时先用for循环,如果后期加大频率,需改成并发 total_users = len(user_obj) remaining_users = total_users @@ -314,10 +314,6 @@ class HrAttendanceDetail(models.Model): for current_date in self.sudo().divide_time_range_fixed(start_time, now_time): self.sudo()._do_save_wx_attendance_data(user, current_date) self.sudo()._do_plan_save_wx_attendance_data(user, current_date) - # attendance_records = self.env['hr.attendance'].search([], limit=1) - # if attendance_records: - # attendance_records[0].labor_update() - return True def _do_save_wx_attendance_data(self, user, current_date):