Skip to content
Open
2 changes: 1 addition & 1 deletion planet/config/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -808,7 +808,7 @@ class PlayPayType(Enum):

class TemplateID(Enum):
"""小程序模板id"""
enter = 'enter', 'Q1x_k7hWf2bj4Wfn3aWzsmY3-ij-gtDgdcOjzBTjYtQ'
enter = 'enter', 's3OkZQ1Q28VGtqdehYWq46TVj7eTasc8uluJJDoxxKA'
cancel = 'cancel', 's3OkZQ1Q28VGtqdehYWq46TVj7eTasc8uluJJDoxxKA'
gather = 'gather', 's3OkZQ1Q28VGtqdehYWq46TVj7eTasc8uluJJDoxxKA'
activity = 'activity', 's3OkZQ1Q28VGtqdehYWq46TVj7eTasc8uluJJDoxxKA'
Expand Down
49 changes: 34 additions & 15 deletions planet/control/CPlay.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
binded_phone

from planet.config.enums import PlayStatus, EnterCostType, EnterLogStatus, PayType, Client, OrderFrom, SigninLogStatus, \
CollectionType, CollectStatus, MiniUserGrade, ApplyStatus, MakeOverStatus, PlayPayType
CollectionType, CollectStatus, MiniUserGrade, ApplyStatus, MakeOverStatus, PlayPayType, TemplateID

from planet.common.Inforsend import SendSMS

Expand All @@ -33,7 +33,7 @@
from planet.extensions.weixin.pay import WeixinPayError
from planet.models import Cost, Insurance, Play, PlayRequire, EnterLog, EnterCost, User, Gather, SignInSet, SignInLog, \
HelpRecord, UserCollectionLog, Notice, UserLocation, UserWallet, CancelApply, PlayDiscount, Agreement, MakeOver, \
SuccessorSearchLog, PlayPay, SharingParameters, UserInvitation
SuccessorSearchLog, PlayPay, TemplateFormId, SharingParameters, UserInvitation


class CPlay():
Expand Down Expand Up @@ -629,6 +629,7 @@ def get_params(self):
def wechat_notify(self, **kwargs):
"""微信支付回调接口"""
redirect = kwargs.get('redirect')
formid = kwargs.get('formid')
with db.auto_commit():
if not redirect:
data = self.wx_pay.to_dict(request.data)
Expand Down Expand Up @@ -656,7 +657,7 @@ def wechat_notify(self, **kwargs):
})
db.session.add(pp)
if pp.PPpayType == PlayPayType.enterlog.value:
self._enter_log(pp)
self._enter_log(pp, formid=formid)
elif pp.PPpayType == PlayPayType.undertake.value:
current_app.logger.info('开始修改转让单')
self._undertake(pp)
Expand Down Expand Up @@ -1016,10 +1017,7 @@ def set_gather(self):
@phone_required
def join(self):
data = parameter_required(('plid',))
plid = data.get('plid')
elid = data.get('elid')
repay = data.get('repay')

plid, elid, repay, formid = data.get('plid'), data.get('elid'), data.get('repay'), data.get('formid')
opayno = self._opayno()
play = Play.query.filter_by(PLid=plid, isdelete=False).first_('活动已删除')
user = get_current_user()
Expand Down Expand Up @@ -1107,7 +1105,7 @@ def join(self):
redirect = False
if mount_price == Decimal('0'):
redirect = True
pay_args = self._add_pay_detail(opayno=opayno, redirect=redirect,
pay_args = self._add_pay_detail(opayno=opayno, redirect=redirect, formid=formid,
body=body, PPpayMount=mount_price, openid=openid, PPcontent=elid,
PPpayType=PlayPayType.enterlog.value)

Expand Down Expand Up @@ -1438,9 +1436,6 @@ def payment(self):
}
return Success(data=response)

# def recreate(self):
#

"""内部方法"""

def _fill_user(self, model, usid, error_msg=None, realname=False):
Expand Down Expand Up @@ -1885,8 +1880,10 @@ def _fill_location(self, location, isleader=False, realname=False):
location.fill('isleader', isleader)

def _add_pay_detail(self, **kwargs):
# tf = None
with db.auto_commit():
mountprice = kwargs.get('PPpayMount')
fromid = kwargs.get('fromid')
if Decimal(str(mountprice)) <= Decimal('0'):
# mountprice = Decimal('0.01')
mountprice = Decimal('0.00')
Expand All @@ -1898,11 +1895,25 @@ def _add_pay_detail(self, **kwargs):
'PPpayMount': mountprice,
})
db.session.add(pp)
TemplateFormId.query.filter_by(TFcontent=kwargs.get('ppcontent'), isdelete=False,
TFtype=kwargs.get('PPpayType')).delete_(synchronize_session=False)

tf = TemplateFormId.create({
'TFid': str(uuid.uuid1()),
'TFfromId': fromid,
'TFtype': kwargs.get('PPpayType'),
'TFcontent': kwargs.get('ppcontent')
})
db.session.add(tf)

if kwargs.get('redirect'):
self.wechat_notify(redirect=True, pp=pp)
self.wechat_notify(redirect=True, pp=pp, formid=fromid)
return ''

# pay_args =
# prepay_id = pay_args.get('package').split('prepay_id=')[-1]
# current_app.logger.info('当前支付需获取prepayid= {}'.format(prepay_id))
# tf.TFformId = prepay_id
# db.session.add(tf)
return self._pay_detail(kwargs.get('body'), float(mountprice),
kwargs.get('opayno'), kwargs.get('openid'))

Expand Down Expand Up @@ -2105,7 +2116,7 @@ def _opayno(self):
return self._opayno()
return opayno

def _enter_log(self, pp):
def _enter_log(self, pp, formid=None):
# 修改当前用户参加状态
el = EnterLog.query.filter(EnterLog.ELpayNo == pp.PPpayno, EnterLog.isdelete == false()).first()

Expand Down Expand Up @@ -2137,7 +2148,15 @@ def _enter_log(self, pp):
return

self._incount(guide, mount_price)
# self.temp.enter(el.PLid, prepay_id)
# 通知
if not formid:
templateform = TemplateFormId.query.filter(TemplateFormId.TFtype == PlayPayType.enterlog.value,
TemplateFormId.TFcontent == el.ELid,
TemplateFormId.isdelete == false()).first()
if templateform:
formid = templateform.TFformId

self.temp.enter(el, formid)
# self.temp.enter.apply_async(args=[el.PLid, prepay_id], countdown=5 * 60, expires=1 * 60,)

def _undertake(self, pp):
Expand Down
62 changes: 53 additions & 9 deletions planet/control/CTemplates.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
# from enums import TemplateID
import time

from flask import current_app
from sqlalchemy import false

Expand All @@ -10,9 +12,16 @@

def log(fn):
def inner(*args, **kwargs):
# try:

result = fn(*args, **kwargs)
current_app.logger.info('get wx response = {}'.format(result))

# except Exception as e:
# current_app.logger.info('error response = {}'.format(e.args))
# time.sleep(10)
# return inner(*args, **kwargs)

return inner


Expand All @@ -21,26 +30,61 @@ def __init__(self):
self.mp_miniprogram = mp_miniprogram

@log
def enter(self, elid, form_id):
# 用户报名参加,通知到领队
def enter(self, el, form_id):
# 表单信息未获取,无法发送
if not form_id:
return
# 用户报名参加,短信通知到领队 微信模板通知到个人
tempid = TemplateID.enter.zh_value

# 获取领队信息
leader = User.query.join(EnterLog, EnterLog.USid == User.USid).filter(EnterLog.ELid == elid).first()
# el = EnterLog.query.filter(EnterLog.ELid == elid, EnterLog.isdelete == false()).first()
# user =
user = User.query.join(EnterLog, EnterLog.USid == User.USid).filter(EnterLog.ELid == el.ELid).first()

play = Play.query.filter(Play.PLid == el.PLid, Play.isdelete == false()).first()
if not play:
current_app.logger.info('没有活动或活动已删除 elid = {}'.format(el.ELid))
return
leader = User.query.filter(User.USid == play.PLcreate, User.isdelete == false()).first()
if not user or not user.USopenid1:
current_app.logger.info('没有活动用户 elid = {}'.format(el.ELid))
return
if not leader or not leader.USopenid1:
current_app.logger.info('没有活动用户 elid = {}'.format(elid))
current_app.logger.info('没有活动领队 elid = {}'.format(el.ELid))
return

data = {
"keyword1": {
"value": "某个热心网友发来贺电"
"value": el.createtime
},
"keyword2": {
"value": "就这个活动带他一起"
"value": leader.USname
},
"keyword3": {
"value": "恭喜您已成功加入活动!"
},
"keyword4": {
"value": play.PLname
},
"keyword5": {
"value": play.PLstartTime
},
"keyword6": {
"value": leader.UStelphone
}
}
return self.mp_miniprogram.template_send(tempid, leader.USopenid1, data, page='/pages/index/manageActivity', form_id=form_id)
# todo 短信通知领队
for i in range(3):
try:
wxresponse = self.mp_miniprogram.template_send(
tempid, user.USopenid1, data, page='/pages/index/manageActivity', form_id=form_id)
except Exception as e:
current_app.logger.info('get error from wx {}'.format(e.args))
time.sleep(10 + i * 10)
continue
return wxresponse
return self.mp_miniprogram.template_send(
tempid, user.USopenid1, data, page='/pages/index/manageActivity', form_id=form_id)
# return

def cancel(self):
pass
Expand Down
8 changes: 8 additions & 0 deletions planet/models/play.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,3 +134,11 @@ class PlayPay(Base):
PPpaysn = Column(String(64), comment='第三方支付流水')
PPpayJson = Column(Text, comment='回调原文')
PPpaymarks = Column(String(255), comment='备注')


class TemplateFormId(Base):
"""小程序模板formid"""
TFid = Column(String(64), primary_key=True)
TFtype = Column(Integer, default=1, comment='模板类型')
TFformId = Column(String(64), nullable=False, comment='formid')
TFcontent = Column(String(64), comment='关联id')