from django.http import JsonResponse from backend.wechat import WeChatMsg from .models import ServiceBooking, CreditRecord from math import ceil from django.core import serializers from .setting import APPLICATION_NAME def schedule_tasks(request, task_name): if task_name == 'count_credit': # 每天晚上2点执行,统计今天以前,所有没有统计时长的志愿者活动 count_credit_list = ServiceBooking.count_credit_by_yesterday() for service_booking in count_credit_list: # 每小时计算一分 start_time = service_booking.timeslot_id.start_time end_time = service_booking.timeslot_id.end_time time_delta = (end_time.hour + end_time.minute/60)-(start_time.hour + start_time.minute/60) time_delta = ceil(time_delta) if time_delta < 0: # 遇到跨天的情况 time_delta += 24 # 给用户算上总分和当前的分数 volunteer = service_booking.volunteer_id volunteer.current_credit += time_delta volunteer.total_credit += time_delta volunteer.save() # 添加积分增加记录 # credit_record = CreditRecord(volunteer, time_delta, '系统自动结算志愿者服务时长') # 这里不能用构造函数,会报错 credit_record = CreditRecord() credit_record.volunteer = volunteer credit_record.admin = None credit_record.change = time_delta credit_record.reason = '系统自动结算志愿者服务时长' credit_record.save() # 保存积分已经分发的记录 service_booking.counted_in_credit = True service_booking.save() return JsonResponse(serializers.serialize('json', count_credit_list), safe=False) if task_name == 'next_day_reminder': day = 1 if request.GET.get('day'): day = int(request.GET.get('day')) reminder_booking_list = ServiceBooking.service_booking_reminder_list(day) wechat_reminder_list = [] for booking in reminder_booking_list: wechat_reminder_list.append({ 'name': booking.volunteer_id.name, 'id': booking.volunteer_id.ID, 'wechat_id': booking.volunteer_id.wechat_id, 'date': str(booking.timeslot_id.date), 'start_time': str(booking.timeslot_id.start_time), 'end_time': str(booking.timeslot_id.end_time), 'address': booking.timeslot_id.address, }) for reminder in wechat_reminder_list: if reminder['wechat_id'] != '': wechat_msg = WeChatMsg(reminder['wechat_id'], 'JH-PgN9vm5bB8npDCQ6YKqYYzYpd6gSJSm-iaa_xwvg', APPLICATION_NAME) wechat_msg.set_first('志愿者服务提醒') wechat_msg.add_keyboard(reminder['address']) wechat_msg.add_keyboard('{} {}-{}'.format(reminder['date'], reminder['start_time'], reminder['end_time'])) wechat_msg.set_remark('请准时参加志愿者服务,请勿无故缺席。如有紧急情况,请尽快与管理员联系。') wechat_msg.submit() return JsonResponse(wechat_reminder_list, safe=False, charset='utf-8')