123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 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')
|