111 lines
4.3 KiB
Python
111 lines
4.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
from application import app,db
|
|
from common.models.queue.QueueList import QueueList
|
|
import json,requests,datetime
|
|
from common.libs.Helper import getCurrentDate
|
|
from common.libs.pay.WeChatService import WeChatService
|
|
from common.models.pay.PayOrder import PayOrder
|
|
from common.models.pay.PayOrderItem import PayOrderItem
|
|
from common.models.member.OauthMemberBind import OauthMemberBind
|
|
from common.models.food.Food import Food
|
|
from common.models.food.FoodSaleChangeLog import FoodSaleChangeLog
|
|
from sqlalchemy import func
|
|
|
|
'''
|
|
python manager.py runjob -m queue/index
|
|
'''
|
|
|
|
class JobTask():
|
|
def __init__(self):
|
|
pass
|
|
def run(self,params):
|
|
list = QueueList.query.filter_by(status = -1 )\
|
|
.order_by( QueueList.id.asc() ).limit(1).all()
|
|
for item in list:
|
|
if item.queue_name == "pay":
|
|
self.handlePay( item )
|
|
|
|
item.status = 1
|
|
item.updated_time = getCurrentDate()
|
|
db.session.add( item )
|
|
db.session.commit()
|
|
|
|
def handlePay(self,item ):
|
|
data = json.loads( item.data )
|
|
if 'member_id' not in data or 'pay_order_id' not in data:
|
|
return False
|
|
|
|
oauth_bind_info = OauthMemberBind.query.filter_by(member_id=data['member_id']).first()
|
|
if not oauth_bind_info:
|
|
return False
|
|
|
|
pay_order_info = PayOrder.query.filter_by( id = data['pay_order_id']).first()
|
|
if not pay_order_info:
|
|
return False
|
|
|
|
#更新销售总量
|
|
pay_order_items = PayOrderItem.query.filter_by( pay_order_id = pay_order_info.id ).all()
|
|
notice_content = []
|
|
if pay_order_items:
|
|
date_from = datetime.datetime.now().strftime( "%Y-%m-01 00:00:00" )
|
|
date_to = datetime.datetime.now().strftime( "%Y-%m-31 23:59:59" )
|
|
for item in pay_order_items:
|
|
tmp_food_info = Food.query.filter_by( id = item.food_id ).first()
|
|
if not tmp_food_info:
|
|
continue
|
|
|
|
notice_content.append( "%s %s份"%( tmp_food_info.name,item.quantity) )
|
|
|
|
#当月数量
|
|
tmp_stat_info = db.session.query(FoodSaleChangeLog, func.sum(FoodSaleChangeLog.quantity).label("total")) \
|
|
.filter( FoodSaleChangeLog.food_id == item.food_id )\
|
|
.filter( FoodSaleChangeLog.created_time >= date_from,FoodSaleChangeLog.created_time <= date_to ).first()
|
|
tmp_month_count = tmp_stat_info[ 1 ] if tmp_stat_info[ 1 ] else 0
|
|
tmp_food_info.total_count += 1
|
|
tmp_food_info.month_count = tmp_month_count
|
|
db.session.add( tmp_food_info )
|
|
db.session.commit()
|
|
|
|
keyword1_val = pay_order_info.note if pay_order_info.note else '无'
|
|
keyword2_val = "、".join( notice_content )
|
|
keyword3_val = str( pay_order_info.total_price )
|
|
keyword4_val = str( pay_order_info.order_number )
|
|
keyword5_val = ""
|
|
if pay_order_info.express_info:
|
|
express_info = json.loads( pay_order_info.express_info )
|
|
keyword5_val = str( express_info['address'] )
|
|
#发送模板消息
|
|
target_wechat = WeChatService( )
|
|
access_token = target_wechat.getAccessToken()
|
|
headers = {'Content-Type': 'application/json'}
|
|
url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=%s"%access_token
|
|
params = {
|
|
"touser": oauth_bind_info.openid,
|
|
"template_id":"8aqlWFAjZZ_NnR0_vOvHGcwHglvIlAYRaUyOmFD5kvs",
|
|
"page": "pages/my/order_list",
|
|
"form_id": pay_order_info.prepay_id,
|
|
"data": {
|
|
"keyword1": {
|
|
"value": keyword1_val
|
|
},
|
|
"keyword2": {
|
|
"value": keyword2_val
|
|
},
|
|
"keyword3": {
|
|
"value": keyword3_val
|
|
},
|
|
"keyword4": {
|
|
"value": keyword4_val
|
|
},
|
|
"keyword5": {
|
|
"value": keyword5_val
|
|
}
|
|
}
|
|
}
|
|
|
|
r = requests.post(url=url, data= json.dumps( params ).encode('utf-8'), headers=headers)
|
|
r.encoding = "utf-8"
|
|
app.logger.info(r.text)
|
|
return True
|
|
|