def set_lottery(qnid, hqrq, addnum): '''采用指定的摇号方案''' import mqsnaire QNOBJ = mdb.get_naire(qnid) cjje = mdb.catch_hq(hqrq).get('success') if not cjje: return {'error': '无行情数据'} t = dbFrame.transaction() try: if addnum > 0: dbFrame.update("QN_NAIRE", vars=locals(), where='QN_ID=$qnid', NUM_LOTTERY=web.SQLLiteral("NUM_LOTTERY+%d" % addnum)) for x in xrange(1, addnum + 1): dbFrame.insert('QN_LOTTERY', LT_ID=utils.get_keyword(), QN_ID=qnid, FS_ID=10000, LOTTERY_NO=QNOBJ.NUM_LOTTERY + x) winno = cjje % (QNOBJ.NUM_LOTTERY + addnum) + 1 mqsnaire.set_winaward(QNOBJ, winno, cjje, hqrq) except Exception, e: t.rollback() traceback.print_exc() return {'error': e}
def getStateBusinessID(state): '''根据微信网页授权的url中的state参数获取业务数据ID。这里state是qnid,返回问卷的fsid''' #这个函数被mforweixin调用 QNOBJ = mdb.get_naire(state) #有奖问卷或红包问卷发布人才能成为别人的引荐人,或问卷发布人是系统配置的营销人员 import madmin return QNOBJ.FS_ID if QNOBJ and (QNOBJ.QN_TYPE in (1, 2) or QNOBJ.FS_ID in madmin.get_salers()) else 10000
def replayQnaire(fromuser): qnid = web.config.app_configuration.get('sys:subnaire', '') #设置问卷ID在关注时返回 if qnid: QNOBJ = mdb.get_naire(qnid) if QNOBJ and QNOBJ.QN_STATUS == 2: FSOBJ = mdb.get_fans_byopenid(fromuser) ANOBJ = mdb.get_answer(QNOBJ.QN_ID, FSOBJ.FS_ID) if not ANOBJ: #如果没参与过才发 msg = getQsArticleBody(QNOBJ) delaySendMessage(fromuser, msg, 500)
def replyClickMB3(fromuser): '''从模板创建问卷''' tps = json.loads(web.config.app_configuration.get('sys:qstemplate', '[]')) retval = [] for x in tps: TPOBJ = mdb.get_naire(x) art = { "title": TPOBJ.QN_TITLE, "url": '', "description": TPOBJ.QN_SUMMARY, "picurl": '' } if TPOBJ.get('IMG1_URL'): art['picurl'] = '%s' % (TPOBJ.IMG1_URL) elif TPOBJ.get('SHARE_PICURL'): art['picurl'] = '%s' % (TPOBJ.SHARE_PICURL) art['url'] = mforweixin.get_mp_authurl("%s/newfromtp" % (HOST_NOS), TPOBJ.QN_ID) retval.append(art) return retval
def testSendQnaire(qnid): #将指定问卷图文消息发送给695423523 from models import mdb, mqsnaire msg = mqsnaire.getQsArticleBody(mdb.get_naire(qnid)) print sendToMe(msg)
def replyTextMessage(fromuser, content): '''解析收到的文本消息。允许管理员用户通过文字指令进行管理操作''' retval = '' content = content.encode('utf8') #收到的消息字符串是unicode类型 fsid = mdb.get_fsid_byopenid(fromuser) #测试号上允许访问扒问卷星的页面 if wxcode == 'test' and fsid in web.config.app_configuration[ 'run:selfman'] and content.find('sojump.com') >= 0: wjid = formatting.get_sojump_id(content) qnid = 'sojump_' + wjid qnid = hashlib.md5(qnid).hexdigest() if mdb.get_naire(qnid): retval = '编号为 %s 的问卷已经有了!' % wjid else: # url = '%s/admin/bawj?fsid=%s&r=%s&wjid=%s'%(HOST_NOS,fsid,cacher_random_checker.genRandomValueForFSID(fsid),wjid) url = mforweixin.get_mp_authurl("%s/admin/bawj" % (HOST_NOS), wjid) retval = { "title": "扒问卷", "url": url, "description": "要扒问卷星的问卷吗?点我继续", "picurl": "" } #管理人员指令 import madmin if not retval and fsid in madmin.get_administrators(): if content == '?' or content == '?': retval = '1.当日实时答卷数\n2.预览抽奖\n3.昨日统计数据\n33.昨日结算\n4.按日统计数据的走势图\n5.营销推广管理\n6.本周答卷王\nC.从系统模板创建问卷\nD.查看调试数据' elif content == '1': #1.当日实时答卷数 today = datetime.datetime.today().strftime("%Y%m%d") countans = web.listget( dbFrame.select( "QN_ANSWERS", what="COUNT(*) CNT", vars=locals(), where="DATE_FORMAT(INPUT_TIME,'%Y%m%d')=$today").list(), 0, {}).get('CNT', 0) return '今日实时答卷数:%d' % countans elif content == '2': #2.预览抽奖 pushTask(previewLottery, fromuser, 0) elif content == '33': #33.昨日结算\n pushTask(dailyWork, (fromuser, formatting.date_add(-1).strftime("%Y%m%d")), 0) elif content == '3': #3.昨日统计数据 import madmin retval = '\n'.join([ '%s: %s' % (key, val) for key, val in madmin.get_lastday_stat() ]) elif content == '4': #4.数据趋势图 retval = { "title": "按日统计数据的走势图", "url": mforweixin.get_mp_authurl("%s/admin/chartdaily" % (HOST_NOS)), "description": "按日统计数据的走势图", "picurl": "" } elif content == '5': #5.营销推广管理 retval = { "title": "营销推广管理", "url": mforweixin.get_mp_authurl("%s/admin/mngmarket" % (HOST_NOS)), "description": "查看营销推广数据,支付推广报酬", "picurl": "" } elif content == '6': #6.本周答卷王 retval = [] for idx, x in enumerate(mdb.stat_thisweek_coin(), 1): retval.append('%d. %s %s' % (idx, formatting.unAscSafeString( x.NICKNAME).encode('utf8'), x.CHG_AMOUNT)) if not retval: retval = '无数据' else: retval = '\n'.join(retval) elif content.lower() == 'c': pass elif content.lower() == 'd': #D.查看调试数据 retval = { "title": "查看调试数据", "url": mforweixin.get_mp_authurl("%s/debug" % (HOST_NOS)), "description": "查看调试数据。已重新加载了系统配置数据。", "picurl": "" } elif content.startswith('black'): fsid = content.replace('black', '') if 'run:blacklist' not in web.config.app_configuration: web.config.app_configuration['run:blacklist'] = [] if fsid: for x in fsid.split(','): web.config.app_configuration['run:blacklist'].append(x) web.config.app_configuration['run:blacklist'] = list( set(web.config.app_configuration['run:blacklist'])) retval = formatting.json_string( web.config.app_configuration['run:blacklist']) elif content.startswith('white'): fsid = content.replace('white', '') if 'run:blacklist' not in web.config.app_configuration: web.config.app_configuration['run:blacklist'] = [] if fsid: for x in fsid.split(','): if x in web.config.app_configuration['run:blacklist']: web.config.app_configuration['run:blacklist'].remove(x) web.config.app_configuration['run:blacklist'] = list( set(web.config.app_configuration['run:blacklist'])) retval = formatting.json_string( web.config.app_configuration['run:blacklist']) else: retval = decodeReceiveMessage(fromuser, fsid, content) if retval: return retval #不能解析粉丝发来的消息,先把【发达消息】发给粉丝 pushTask(mforweixin.sendTextMessage, (fromuser, '没有搜索到有关[%s]的问卷。客服也可能在偷懒╯﹏╰,看看下面几篇文章吧,或许对您有用' % content)) if wxcode == 'test': pushTask(mforweixin.sendTextMessage, (fromuser, 'cSpmz_6G_PBkj7hqA8EYpdAXzqi-wD19aL29_wPSPwQ'), 2000) else: pushTask(mforweixin.sendMPNews, (fromuser, 'cSpmz_6G_PBkj7hqA8EYpdAXzqi-wD19aL29_wPSPwQ'), 2000) #将粉丝发发来的消息转给我自己 pushTask(madmin.sendToMe, ('{0}:{1}'.format(fsid, content), )) #按要求返回特定格式数据,消息便会发到客服 retval = mforweixin.replyCustomerService(wxaccount.ORIGINAL_ID, fromuser) return retval