1
This commit is contained in:
@@ -54,7 +54,6 @@ class BusController(Controller):
|
||||
data = request.httprequest.json
|
||||
user_id = data.get('logs')[0].get('user_id')
|
||||
employee_id = request.env(user=SUPERUSER_ID)["hr.employee"].search([('mobile_phone', '=', user_id)])
|
||||
recog_time_str = data.get('logs')[0].get("recog_time")
|
||||
attendance_iot_id = request.env(user=SUPERUSER_ID)["attendance.iot"].search([('name', '=', data.get('sn'))])
|
||||
if employee_id:
|
||||
request.env(user=SUPERUSER_ID)["hr.attendance.detail"].create({
|
||||
|
||||
@@ -96,12 +96,10 @@ class AppletAttendance(Controller):
|
||||
check_out_str = check_out.strftime('%H:%M:%S') if check_out else ' '
|
||||
check_in_html = f'<p style="color:red">{check_in_str}</p>' if check_in_status in ['迟到', '早退', '缺卡'] else f'<p style="color:green">{check_in_str}</p>'
|
||||
check_out_html = f'<p style="color:red">{check_out_str}</p>' if check_out_status in ['迟到', '早退', '缺卡'] else f'<p style="color:green">{check_out_str}</p>'
|
||||
|
||||
state = "no"
|
||||
message = "超出范围,不允许打卡"
|
||||
address_ids = request.env(user=SUPERUSER_ID)["applet.address"].search([('address_name', '=', employee_id.company_id.name)])
|
||||
self_address = self.get_address_from_coords(kw['att_latitude'], kw['att_longitude'])
|
||||
|
||||
for address_id in address_ids:
|
||||
wifi_name_list = address_id.wifi_name_ids.mapped('name')
|
||||
card_rice = address_id.card_rice * 0.001 # 打卡范围
|
||||
@@ -112,22 +110,17 @@ class AppletAttendance(Controller):
|
||||
if self.is_within_radius_geopy(kw['att_latitude'], kw['att_longitude'], address_id.latitude, address_id.longitude, card_rice) and kw['wifi_name'] in wifi_name_list:
|
||||
message = '可以打卡'
|
||||
state = 'yes'
|
||||
_logger.info(f"\n可打卡")
|
||||
break
|
||||
else:
|
||||
_logger.info(f"\n不可打卡 ")
|
||||
else:
|
||||
if self.is_within_radius_geopy(kw['att_latitude'], kw['att_longitude'], address_id.latitude, address_id.longitude, card_rice):
|
||||
message = '可以打卡'
|
||||
state = 'yes'
|
||||
_logger.info(f"\n可打卡")
|
||||
break
|
||||
else:
|
||||
_logger.info(f"\n不可打卡 ")
|
||||
if self.is_workday(current_date):
|
||||
attendance_id_class = f"{attendance_id.shift_name} {start_time_str}-{end_time_str}"
|
||||
else:
|
||||
attendance_id_class = f"{attendance_id.shift_name}休息"
|
||||
_logger.info(f"当前班次: {attendance_id_class}")
|
||||
data = {
|
||||
'location': self_address['formatted_address'],
|
||||
'user_id': user_id.id,
|
||||
|
||||
@@ -257,55 +257,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, login):
|
||||
def get_hr_attendance_time(self):
|
||||
"""
|
||||
获取企业微信打卡数据的核心逻辑
|
||||
: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)
|
||||
|
||||
# 企业微信获取打卡数据,要求用户分组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([('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')
|
||||
# 暂时先用for循环,如果后期加大频率,需改成并发
|
||||
user_obj = self.sudo().env['res.users'].search([('login', '=', login)])
|
||||
_logger.info("{} 即将计算人员,login是{}".format(user_obj.name, user_obj.login))
|
||||
total_users = len(user_obj)
|
||||
remaining_users = total_users
|
||||
for user in user_obj:
|
||||
@@ -332,8 +330,8 @@ class HrAttendanceDetail(models.Model):
|
||||
# 同步整理当天出勤数据
|
||||
attendance_obj = self.env['hr.attendance'].search([("userid", "=", user.oauth_uid), ("current_data", "=", current_date)], limit=1)
|
||||
hr_employee_obj = self.env['hr.employee'].sudo().search([("user_id", "=", user.id)], limit=1)
|
||||
# current_datetime_start = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.min.time())
|
||||
# current_datetime_end = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.max.time())
|
||||
current_datetime_start = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.min.time())
|
||||
current_datetime_end = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.max.time())
|
||||
if not attendance_obj:
|
||||
# 判断是否是 普通打卡
|
||||
if not hr_employee_obj.default_planning_role_id:
|
||||
@@ -367,7 +365,6 @@ class HrAttendanceDetail(models.Model):
|
||||
:return:
|
||||
"""
|
||||
# 同步整理当天出勤数据
|
||||
current_date = str(current_date)
|
||||
hr_employee_obj = self.env['hr.employee'].sudo().search([("user_id", "=", user.id)], limit=1)
|
||||
current_datetime_start = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.min.time())
|
||||
current_datetime_end = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.max.time())
|
||||
@@ -407,7 +404,6 @@ class HrAttendanceDetail(models.Model):
|
||||
:param attendance_obj: 判断的时刻的考勤集合
|
||||
:return:
|
||||
"""
|
||||
current_date = str(current_date)
|
||||
current_datetime_start = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.min.time())
|
||||
current_datetime_end = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.max.time())
|
||||
hr_employee_obj = self.env['hr.employee'].sudo().search([("user_id", "=", user.id)], limit=1)
|
||||
|
||||
Reference in New Issue
Block a user