def get_access_token(self): token = None token_info = OauthAccessToken.query.filter( OauthAccessToken.expired_time >= get_current_date()).first() if token_info: token = token_info.access_token return token config_mina = app.config['MINA_APP'] url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}" \ .format(config_mina['appid'], config_mina['appkey']) r = requests.get(url=url) if r.status_code != 200 or not r.text: return token data = json.loads(r.text) now = datetime.datetime.now() date = now + datetime.timedelta(seconds=data['expires_in'] - 200) model_token = OauthAccessToken() model_token.access_token = data['access_token'] model_token.expired_time = date.strftime("%Y-%m-%d %H:%M:%S") model_token.created_time = get_current_date() db.session.add(model_token) db.session.commit() return data['access_token']
def myAddressOps(): resp = {'code': 200, 'msg': '操作成功~', 'data': {}} req = request.values id = int(req['id']) if 'id' in req else 0 act = req['act'] if 'act' in req else '' member_info = g.member_info if id < 1 or not member_info: resp['code'] = -1 resp['msg'] = "系统繁忙,请稍后再试~~" return jsonify(resp) address_info = MemberAddress.query.filter_by( id=id, member_id=member_info.id).first() if not address_info: resp['code'] = -1 resp['msg'] = "系统繁忙,请稍后再试~~" return jsonify(resp) if act == "del": address_info.status = 0 address_info.updated_time = get_current_date() db.session.add(address_info) db.session.commit() elif act == "default": MemberAddress.query.filter_by(member_id=member_info.id) \ .update({'is_default': 0}) address_info.is_default = 1 address_info.updated_time = get_current_date() db.session.add(address_info) db.session.commit() return jsonify(resp)
def close_order(self, pay_order_id=0): if pay_order_id < 1: return False pay_order_info = PayOrder.query.filter_by(id=pay_order_id, status=-8).first() if not pay_order_info: return False pay_order_items = PayOrderItem.query.filter_by( pay_order_id=pay_order_id).all() if pay_order_items: # 需要归还库存 for item in pay_order_items: tmp_food_info = Food.query.filter_by(id=item.food_id).first() if tmp_food_info: tmp_food_info.stock = tmp_food_info.stock + item.quantity tmp_food_info.updated_time = get_current_date() db.session.add(tmp_food_info) db.session.commit() FoodService.setStockChangeLog(item.food_id, item.quantity, "订单取消") pay_order_info.status = 0 pay_order_info.updated_time = get_current_date() db.session.add(pay_order_info) db.session.commit() return True
def order_success(self, pay_order_id=0, params=None): try: pay_order_info = PayOrder.query.filter_by(id=pay_order_id).first() if not pay_order_info or pay_order_info.status not in [-8, -7]: return True pay_order_info.pay_sn = params['pay_sn'] if params and 'pay_sn' in params else '' pay_order_info.status = 1 pay_order_info.express_status = -7 pay_order_info.updated_time = get_current_date() db.session.add(pay_order_info) pay_order_items = PayOrderItem.query.filter_by(pay_order_id=pay_order_id).all() for order_item in pay_order_items: tmp_model_sale_log = FoodSaleChangeLog() tmp_model_sale_log.food_id = order_item.food_id tmp_model_sale_log.quantity = order_item.quantity tmp_model_sale_log.price = order_item.price tmp_model_sale_log.member_id = order_item.member_id tmp_model_sale_log.created_time = get_current_date() db.session.add(tmp_model_sale_log) db.session.commit() except Exception as e: db.session.rollback() print(e) return False # 加入通知队列,做消息提醒和 QueueService.add_queue("pay", { "member_id": pay_order_info.member_id, "pay_order_id": pay_order_info.id }) return True
def statSite(self, params): act = params['act'] date = params['date'] date_from = params['date_from'] date_to = params['date_to'] app.logger.info("act:{0},from:{1},to:{2}".format( act, date_from, date_to)) stat_pay = db.session.query(func.sum(PayOrder.total_price).label("total_pay_money")) \ .filter(PayOrder.status == 1) \ .filter(PayOrder.created_time >= date_from, PayOrder.created_time <= date_to).first() stat_member_count = Member.query.count() stat_new_member_count = Member.query.filter( Member.created_time >= date_from, Member.created_time <= date_to).count() stat_order_count = PayOrder.query.filter_by( status = 1 )\ .filter(PayOrder.created_time >= date_from, PayOrder.created_time <= date_to)\ .count() stat_share_count = WxShareHistory.query.filter( WxShareHistory.created_time >= date_from, WxShareHistory.created_time <= date_to).count() tmp_stat_site = StatDailySite.query.filter_by(date=date).first() if tmp_stat_site: tmp_model_stat_site = tmp_stat_site else: tmp_model_stat_site = StatDailySite() tmp_model_stat_site.date = date tmp_model_stat_site.created_time = get_current_date() tmp_model_stat_site.total_pay_money = stat_pay[0] if stat_pay[ 0] else 0.00 tmp_model_stat_site.total_new_member_count = stat_new_member_count tmp_model_stat_site.total_member_count = stat_member_count tmp_model_stat_site.total_order_count = stat_order_count tmp_model_stat_site.total_shared_count = stat_share_count tmp_model_stat_site.updated_time = get_current_date() ''' 为了测试效果模拟数据 ''' tmp_model_stat_site.total_pay_money = random.randint(1000, 1010) tmp_model_stat_site.total_new_member_count = random.randint(50, 100) tmp_model_stat_site.total_member_count += tmp_model_stat_site.total_new_member_count tmp_model_stat_site.total_order_count = random.randint(900, 1000) tmp_model_stat_site.total_shared_count = random.randint(1000, 2000) db.session.add(tmp_model_stat_site) db.session.commit()
def login(): resp = {'code': 200, 'msg': '操作成功~', 'data': {}} req = request.values code = req['code'] if 'code' in req else '' if not code or len(code) < 1: resp['code'] = -1 resp['msg'] = "需要code" return jsonify(resp) openid = MemberService.get_wechat_open_id(code) if openid is None: resp['code'] = -1 resp['msg'] = "调用微信出错" return jsonify(resp) nickname = req['nickName'] if 'nickName' in req else '' sex = req['gender'] if 'gender' in req else 0 avatar = req['avatarUrl'] if 'avatarUrl' in req else '' ''' 判断是否已经测试过,注册了直接返回一些信息 ''' bind_info = OauthMemberBind.query.filter_by(openid=openid, type=1).first() if not bind_info: model_member = Member() model_member.nickname = nickname model_member.sex = sex model_member.avatar = avatar model_member.salt = MemberService.generate_salt() model_member.updated_time = model_member.created_time = get_current_date( ) db.session.add(model_member) db.session.commit() model_bind = OauthMemberBind() model_bind.member_id = model_member.id model_bind.type = 1 model_bind.openid = openid model_bind.extra = '' model_bind.updated_time = model_bind.created_time = get_current_date() db.session.add(model_bind) db.session.commit() bind_info = model_bind member_info = Member.query.filter_by(id=bind_info.member_id).first() token = "%s#%s" % (MemberService.generate_auth_code(member_info), member_info.id) resp['data'] = {'token': token} return jsonify(resp)
def task( self ): """ 自动抓取微信群消息 """ app.logger.info( 'executing %s' % ( __name__ ) ) try: app.logger.info( "正在建立Appium会话..." ) self.driver = webdriver.Remote( self.appium_server, self.desired_capability ) # Appium会话配置 self.wait=WebDriverWait(self.driver, self.timeout) app.logger.info( "正在点击微信首页消息列表第一条,进入群消息对话框..." ) self.wait.until( EC.presence_of_element_located( ( By.ID,'com.tencent.mm:id/as4' ) ) ).click() # 获取群聊名称 group_name = self.wait.until( EC.presence_of_element_located( ( By.ID,'com.tencent.mm:id/hm' ) ) ).get_attribute( 'text' ) if not group_name or not re.compile( self.group_tag_pattern ).findall( group_name ): app.logger.info( "当前会话不是群聊,即将关闭..." ) return group_name = re.sub( self.group_tag_pattern, "", group_name ) app.logger.info( "当前群聊名称为:" + group_name ) current_simulator_window_size = get_simulator_window_size( self.driver ) app.logger.info( "当前屏幕尺寸为:{0}".format( current_simulator_window_size ) ) time.sleep( 1 ) # 强制等待1秒 # 消息发布时间 send_time = get_current_date() app.logger.info( '消息发布时间:%s' %( send_time ) ) # 不断向下滑屏,获取当前屏消息 while True: self.get_current_page_msgs( group_name=group_name, send_time=send_time ) try: self.driver.find_element_by_id( 'com.tencent.mm:id/abj' ) app.logger.info( "发现新消息提示框,正在继续向下滑屏..." ) driver_swipe_down( current_simulator_window_size, self.driver ) except NoSuchElementException: app.logger.info( "没有找到新消息提示框,只向下滑屏3次..." ) for i in range(0, 3): driver_swipe_down( current_simulator_window_size, self.driver ) self.get_current_page_msgs( group_name=group_name, send_time=send_time ) break # 一次过滤,first_filter_keys表, 并保存到数据库(messages表),调用公共方法 app.logger.info( "正在根据关键词过滤原始消息记录表..." ) MessagesService.filter_by_keys() # 二次过滤,second_filter_qqnumber表、second_filter_groupnumber表, 并保存到数据库(messages表),调用公共方法 app.logger.info( "根据给定的QQ/微信群号码或者QQ/微信号过滤消息记录表" ) MessagesService.filter_by_numbers() except: app.logger.info( traceback.format_exc() ) finally: app.logger.info( "正在关闭当前Appium会话..." ) # 关闭当前会话 self.driver.quit() app.logger.info( "finished %s" % ( __name__ ) )
def orderOps(): resp = {'code': 200, 'msg': '操作成功~', 'data': {}} req = request.values member_info = g.member_info order_sn = req['order_sn'] if 'order_sn' in req else '' act = req['act'] if 'act' in req else '' pay_order_info = PayOrder.query.filter_by(order_sn=order_sn, member_id=member_info.id).first() if not pay_order_info: resp['code'] = -1 resp['msg'] = "系统繁忙。请稍后再试~~" return jsonify(resp) if act == "cancel": target_pay = PayService( ) ret = target_pay.close_order(pay_order_id=pay_order_info.id) if not ret: resp['code'] = -1 resp['msg'] = "系统繁忙。请稍后再试~~" return jsonify(resp) elif act == "confirm": pay_order_info.express_status = 1 pay_order_info.updated_time = get_current_date() db.session.add( pay_order_info ) db.session.commit() return jsonify(resp)
def upload_by_file(file): config_upload = app.config['UPLOAD'] resp = {'code': 200, 'msg': '操作成功~~', 'data': {}} filename = secure_filename(file.filename) ext = filename.rsplit(".", 1)[1] if ext not in config_upload['ext']: resp['code'] = -1 resp['msg'] = "不允许的扩展类型文件" return resp root_path = app.root_path + config_upload['prefix_path'] # 不使用getCurrentDate创建目录,为了保证其他写的可以用,这里改掉,服务器上好像对时间不兼容 file_dir = datetime.datetime.now().strftime("%Y%m%d") save_dir = root_path + file_dir if not os.path.exists(save_dir): os.mkdir(save_dir) os.chmod(save_dir, stat.S_IRWXU | stat.S_IRGRP | stat.S_IRWXO) file_name = str(uuid.uuid4()).replace("-", "") + "." + ext file.save("{0}/{1}".format(save_dir, file_name)) model_image = Image() model_image.file_key = file_dir + "/" + file_name model_image.created_time = get_current_date() db.session.add(model_image) db.session.commit() resp['data'] = {'file_key': model_image.file_key} return resp
def ops(): resp = {'code': 200, 'msg': '操作成功~~', 'data': {}} req = request.values id = req['id'] if 'id' in req else 0 act = req['act'] if 'act' in req else '' if not id: resp['code'] = -1 resp['msg'] = "请选择要操作的账号~~" return jsonify(resp) if act not in ['remove', 'recover']: resp['code'] = -1 resp['msg'] = "操作有误,请重试~~" return jsonify(resp) food_info = Food.query.filter_by(id=id).first() if not food_info: resp['code'] = -1 resp['msg'] = "指定美食不存在~~" return jsonify(resp) if act == "remove": food_info.status = 0 elif act == "recover": food_info.status = 1 food_info.updated_time = get_current_date() db.session.add(food_info) db.session.commit() return jsonify(resp)
def setItems(member_id=0, food_id=0, number=0): if member_id < 1 or food_id < 1 or number < 1: return False cart_info = MemberCart.query.filter_by(food_id=food_id, member_id=member_id).first() if cart_info: model_cart = cart_info else: model_cart = MemberCart() model_cart.member_id = member_id model_cart.created_time = get_current_date() model_cart.food_id = food_id model_cart.quantity = number model_cart.updated_time = get_current_date() db.session.add(model_cart) db.session.commit() return True
def statMember(self, params): act = params['act'] date = params['date'] date_from = params['date_from'] date_to = params['date_to'] app.logger.info("act:{0},from:{1},to:{2}".format( act, date_from, date_to)) member_list = Member.query.all() if not member_list: app.logger.info("no member list") return for member_info in member_list: tmp_stat_member = StatDailyMember.query.filter_by( date=date, member_id=member_info.id).first() if tmp_stat_member: tmp_model_stat_member = tmp_stat_member else: tmp_model_stat_member = StatDailyMember() tmp_model_stat_member.date = date tmp_model_stat_member.member_id = member_info.id tmp_model_stat_member.created_time = get_current_date() tmp_stat_pay = db.session.query( func.sum(PayOrder.total_price).label("total_pay_money")) \ .filter( PayOrder.member_id == member_info.id ,PayOrder.status == 1 )\ .filter( PayOrder.created_time >= date_from,PayOrder.created_time <= date_to ).first() tmp_stat_share_count = WxShareHistory.query.filter( PayOrder.member_id == member_info.id )\ .filter( PayOrder.created_time >= date_from,PayOrder.created_time <= date_to ).count() tmp_model_stat_member.total_shared_count = tmp_stat_share_count tmp_model_stat_member.total_pay_money = tmp_stat_pay[ 0] if tmp_stat_pay[0] else 0.00 ''' 为了测试效果模拟数据 ''' tmp_model_stat_member.total_shared_count = random.randint(50, 100) tmp_model_stat_member.total_pay_money = random.randint(1000, 1010) tmp_model_stat_member.updated_time = get_current_date() db.session.add(tmp_model_stat_member) db.session.commit() return
def add_queue(queue_name, data=None): model_queue = QueueList() model_queue.queue_name = queue_name if data: model_queue.data = json.dumps(data) model_queue.created_time = model_queue.updated_time = get_current_date() db.session.add(model_queue) db.session.commit() return True
def statFood(self, params): act = params['act'] date = params['date'] date_from = params['date_from'] date_to = params['date_to'] app.logger.info("act:{0},from:{1},to:{2}".format( act, date_from, date_to)) stat_food_list = db.session.query(FoodSaleChangeLog.food_id, func.sum(FoodSaleChangeLog.quantity).label("total_count"), func.sum(FoodSaleChangeLog.price).label("total_pay_money")) \ .filter(FoodSaleChangeLog.created_time >= date_from, FoodSaleChangeLog.created_time <= date_to)\ .group_by( FoodSaleChangeLog.food_id ).all() if not stat_food_list: app.logger.info("no data") return for item in stat_food_list: tmp_food_id = item[0] tmp_stat_food = StatDailyFood.query.filter_by( date=date, food_id=tmp_food_id).first() if tmp_stat_food: tmp_model_stat_food = tmp_stat_food else: tmp_model_stat_food = StatDailyFood() tmp_model_stat_food.date = date tmp_model_stat_food.food_id = tmp_food_id tmp_model_stat_food.created_time = get_current_date() tmp_model_stat_food.total_count = item[1] tmp_model_stat_food.total_pay_money = item[2] tmp_model_stat_food.updated_time = get_current_date() ''' 为了测试效果模拟数据 ''' tmp_model_stat_food.total_count = random.randint(50, 100) tmp_model_stat_food.total_pay_money = random.randint(1000, 1010) db.session.add(tmp_model_stat_food) db.session.commit() return
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 = get_current_date() db.session.add(item) db.session.commit()
def add_error_log(content): if 'favicon.ico' in request.url: return target = AppErrorLog() target.target_url = request.url target.referer_url = request.referrer target.query_params = json.dumps(request.values.to_dict()) target.content = content target.created_time = get_current_date() db.session.add(target) db.session.commit() return True
def add_access_log(): target = AppAccessLog() target.target_url = request.url target.referer_url = request.referrer target.ip = request.remote_addr target.query_params = json.dumps(request.values.to_dict()) if 'current_user' in g and g.current_user is not None: target.uid = g.current_user.uid target.ua = request.headers.get("User-Agent") target.created_time = get_current_date() db.session.add(target) db.session.commit() return True
def memberShare(): resp = {'code': 200, 'msg': '操作成功~', 'data': {}} req = request.values url = req['url'] if 'url' in req else '' member_info = g.member_info model_share = WxShareHistory() if member_info: model_share.member_id = member_info.id model_share.share_url = url model_share.created_time = get_current_date() db.session.add(model_share) db.session.commit() return jsonify(resp)
def add_pay_call_back_data(self, pay_order_id=0, type='pay', data=''): model_callback = PayOrderCallbackData() model_callback.pay_order_id = pay_order_id if type == "pay": model_callback.pay_data = data model_callback.refund_data = '' else: model_callback.refund_data = data model_callback.pay_data = '' model_callback.created_time = model_callback.updated_time = get_current_date() db.session.add(model_callback) db.session.commit() return True
def catSet(): if request.method == "GET": resp_data = {} req = request.args id = int(req.get("id", 0)) info = None if id: info = FoodCat.query.filter_by(id=id).first() resp_data['info'] = info resp_data['current'] = 'cat' return ops_render("food/cat_set.html", resp_data) resp = {'code': 200, 'msg': '操作成功~~', 'data': {}} req = request.values id = req['id'] if 'id' in req else 0 name = req['name'] if 'name' in req else '' weight = int(req['weight']) if ('weight' in req and int(req['weight']) > 0) else 1 if name is None or len(name) < 1: resp['code'] = -1 resp['msg'] = "请输入符合规范的分类名称~~" return jsonify(resp) food_cat_info = FoodCat.query.filter_by(id=id).first() if food_cat_info: model_food_cat = food_cat_info else: model_food_cat = FoodCat() model_food_cat.created_time = get_current_date() model_food_cat.name = name model_food_cat.weight = weight model_food_cat.updated_time = get_current_date() db.session.add(model_food_cat) db.session.commit() return jsonify(resp)
def save_wechat_group_msg(**kwargs): """ 微信群消息入库 """ app.logger.info("executing %s.MessagesService.save_wechat_group_msg" % (__name__)) group_name = kwargs.get('group_name', None) # 群聊名称 group_number = kwargs.get('group_number', None) # 群聊号码 sender_name = kwargs.get('sender_name', None) # 用户昵称 content = kwargs.get('content', None) # 消息内容 send_time = kwargs.get('send_time', None) # 消息发布时间 qq_number = kwargs.get('qq_number', None) # 微信号 if group_name: group_name += "(微信群)" qq_group_model = QqGroup.query.filter_by( group_name=group_name).first() if not qq_group_model: app.logger.info('新的微信群正在入库...') qq_group_model = QqGroup() qq_group_model.group_name = group_name if group_number: qq_group_model.group_number = group_number db.session.add(qq_group_model) db.session.commit() if sender_name and content: fingerprint = md5_hash(sender_name + content) # 计算当前消息的指纹 app.logger.info('当前群消息的指纹是:%s' % (fingerprint)) original_message_model = OriginalMessage.query.filter_by( fingerprint=fingerprint).first() if not original_message_model: app.logger.info('新的群消息正在入库...') original_message_model = OriginalMessage() original_message_model.group_id = qq_group_model.id original_message_model.sender_name = sender_name original_message_model.qq_number = qq_number if qq_number else '微信号暂无' original_message_model.content = content original_message_model.send_time = send_time if send_time else get_current_date( ) original_message_model.fingerprint = fingerprint db.session.add(original_message_model) db.session.commit() app.logger.info("finished %s.MessagesService.save_wechat_group_msg" % (__name__))
def setStockChangeLog(food_id=0, quantity=0, note=''): if food_id < 1: return False food_info = Food.query.filter_by(id=food_id).first() if not food_info: return False model_stock_change = FoodStockChangeLog() model_stock_change.food_id = food_id model_stock_change.unit = quantity model_stock_change.total_stock = food_info.stock model_stock_change.note = note model_stock_change.created_time = get_current_date() db.session.add(model_stock_change) db.session.commit() return True
def orderOps(): resp = {'code': 200, 'msg': '操作成功~', 'data': {}} req = request.values id = req['id'] if 'id' in req else 0 act = req['act'] if 'act' in req else '' pay_order_info = PayOrder.query.filter_by(id=id).first() if not pay_order_info: resp['code'] = -1 resp['msg'] = "系统繁忙。请稍后再试~~" return jsonify(resp) if act == "express": pay_order_info.express_status = -6 pay_order_info.updated_time = get_current_date() db.session.add(pay_order_info) db.session.commit() return jsonify(resp)
def set(): if request.method == "GET": resp_data = {} req = request.args id = int(req.get("id", 0)) reback_url = UrlManager.build_url("/member/index") if id < 1: return redirect(reback_url) info = Member.query.filter_by(id=id).first() if not info: return redirect(reback_url) if info.status != 1: return redirect(reback_url) resp_data['info'] = info resp_data['current'] = 'index' return ops_render("member/set.html", resp_data) resp = {'code': 200, 'msg': '操作成功~~', 'data': {}} req = request.values id = req['id'] if 'id' in req else 0 nickname = req['nickname'] if 'nickname' in req else '' if nickname is None or len(nickname) < 1: resp['code'] = -1 resp['msg'] = "请输入符合规范的姓名~~" return jsonify(resp) member_info = Member.query.filter_by(id=id).first() if not member_info: resp['code'] = -1 resp['msg'] = "指定会员不存在~~" return jsonify(resp) member_info.nickname = nickname member_info.updated_time = get_current_date() db.session.add(member_info) db.session.commit() return jsonify(resp)
def myCommentAdd(): resp = {'code': 200, 'msg': '操作成功~', 'data': {}} member_info = g.member_info req = request.values order_sn = req['order_sn'] if 'order_sn' in req else '' score = req['score'] if 'score' in req else 10 content = req['content'] if 'content' in req else '' pay_order_info = PayOrder.query.filter_by(member_id=member_info.id, order_sn=order_sn).first() if not pay_order_info: resp['code'] = -1 resp['msg'] = "系统繁忙,请稍后再试~~" return jsonify(resp) if pay_order_info.comment_status: resp['code'] = -1 resp['msg'] = "已经评价过了~~" return jsonify(resp) pay_order_items = PayOrderItem.query.filter_by( pay_order_id=pay_order_info.id).all() food_ids = select_filter_obj(pay_order_items, "food_id") tmp_food_ids_str = '_'.join(str(s) for s in food_ids if s not in [None]) model_comment = MemberComments() model_comment.food_ids = "_%s_" % tmp_food_ids_str model_comment.member_id = member_info.id model_comment.pay_order_id = pay_order_info.id model_comment.score = score model_comment.content = content db.session.add(model_comment) pay_order_info.comment_status = 1 pay_order_info.updated_time = get_current_date() db.session.add(pay_order_info) db.session.commit() return jsonify(resp)
def ops(): resp = {'code': 200, 'msg': '操作成功~~', 'data': {}} req = request.values id = req['id'] if 'id' in req else 0 act = req['act'] if 'act' in req else '' if not id: resp['code'] = -1 resp['msg'] = "请选择要操作的账号~~" return jsonify(resp) if act not in ['remove', 'recover']: resp['code'] = -1 resp['msg'] = "操作有误,请重试~~" return jsonify(resp) user_info = User.query.filter_by(uid=id).first() if not user_info: resp['code'] = -1 resp['msg'] = "指定账号不存在~~" return jsonify(resp) if act == "remove": user_info.status = 0 elif act == "recover": user_info.status = 1 if user_info and user_info.uid == 1: resp['code'] = -1 resp['msg'] = "该用户是演示账号,不准操作账号~~" return jsonify(resp) user_info.update_time = get_current_date() db.session.add(user_info) db.session.commit() return jsonify(resp)
def set(): if request.method == "GET": resp_data = {} req = request.args id = int(req.get('id', 0)) info = Food.query.filter_by(id=id).first() if info and info.status != 1: return redirect(UrlManager.build_url("/food/index")) cat_list = FoodCat.query.all() resp_data['info'] = info resp_data['cat_list'] = cat_list resp_data['current'] = 'index' return ops_render("food/set.html", resp_data) resp = {'code': 200, 'msg': '操作成功~~', 'data': {}} req = request.values id = int(req['id']) if 'id' in req and req['id'] else 0 cat_id = int(req['cat_id']) if 'cat_id' in req else 0 name = req['name'] if 'name' in req else '' price = req['price'] if 'price' in req else '' main_image = req['main_image'] if 'main_image' in req else '' summary = req['summary'] if 'summary' in req else '' stock = int(req['stock']) if 'stock' in req else '' tags = req['tags'] if 'tags' in req else '' if cat_id < 1: resp['code'] = -1 resp['msg'] = "全部分类~~" return jsonify(resp) if name is None or len(name) < 1: resp['code'] = -1 resp['msg'] = "请输入符合规范的名称~~" return jsonify(resp) if not price or len(price) < 1: resp['code'] = -1 resp['msg'] = "请输入符合规范的售卖价格~~" return jsonify(resp) price = Decimal(price).quantize(Decimal('0.00')) if price <= 0: resp['code'] = -1 resp['msg'] = "请输入符合规范的售卖价格~~" return jsonify(resp) if main_image is None or len(main_image) < 3: resp['code'] = -1 resp['msg'] = "请上传封面图~~" return jsonify(resp) if summary is None or len(summary) < 3: resp['code'] = -1 resp['msg'] = "请输入图书描述,并不能少于10个字符~~" return jsonify(resp) if stock < 1: resp['code'] = -1 resp['msg'] = "请输入符合规范的库存量~~" return jsonify(resp) if tags is None or len(tags) < 1: resp['code'] = -1 resp['msg'] = "请输入标签,便于搜索~~" return jsonify(resp) food_info = Food.query.filter_by(id=id).first() before_stock = 0 if food_info: model_food = food_info before_stock = model_food.stock else: model_food = Food() model_food.status = 1 model_food.created_time = get_current_date() model_food.cat_id = cat_id model_food.name = name model_food.price = price model_food.main_image = main_image model_food.summary = summary model_food.stock = stock model_food.tags = tags model_food.updated_time = get_current_date() db.session.add(model_food) db.session.commit() FoodService.setStockChangeLog(model_food.id, int(stock) - int(before_stock), "后台修改") return jsonify(resp)
def set(): default_pwd = "******" if request.method == "GET": resp_data = {} req = request.args uid = int(req.get("id", 0)) info = None if uid: info = User.query.filter_by(uid=uid).first() resp_data['info'] = info return ops_render("account/set.html", resp_data) resp = {'code': 200, 'msg': '操作成功~~', 'data': {}} req = request.values id = req['id'] if 'id' in req else 0 nickname = req['nickname'] if 'nickname' in req else '' mobile = req['mobile'] if 'mobile' in req else '' email = req['email'] if 'email' in req else '' login_name = req['login_name'] if 'login_name' in req else '' login_pwd = req['login_pwd'] if 'login_pwd' in req else '' if nickname is None or len(nickname) < 1: resp['code'] = -1 resp['msg'] = "请输入符合规范的姓名~~" return jsonify(resp) if mobile is None or len(mobile) < 1: resp['code'] = -1 resp['msg'] = "请输入符合规范的手机号码~~" return jsonify(resp) if email is None or len(email) < 1: resp['code'] = -1 resp['msg'] = "请输入符合规范的邮箱~~" return jsonify(resp) if login_name is None or len(login_name) < 1: resp['code'] = -1 resp['msg'] = "请输入符合规范的登录用户名~~" return jsonify(resp) if login_pwd is None or len(email) < 6: resp['code'] = -1 resp['msg'] = "请输入符合规范的登录密码~~" return jsonify(resp) has_in = User.query.filter(User.login_name == login_name, User.uid != id).first() if has_in: resp['code'] = -1 resp['msg'] = "该登录名已存在,请换一个试试~~" return jsonify(resp) user_info = User.query.filter_by(uid=id).first() if user_info: model_user = user_info else: model_user = User() model_user.created_time = get_current_date() model_user.login_salt = UserService.generate_salt() model_user.nickname = nickname model_user.mobile = mobile model_user.email = email model_user.login_name = login_name if login_pwd != default_pwd: if user_info and user_info.uid == 1: resp['code'] = -1 resp['msg'] = "该用户是演示账号,不允许修改密码和登录用户名~~" return jsonify(resp) model_user.login_pwd = UserService.generate_password( login_pwd, model_user.login_salt) model_user.updated_time = get_current_date() db.session.add(model_user) db.session.commit() return jsonify(resp)
def myAddressSet(): resp = {'code': 200, 'msg': '操作成功~', 'data': {}} req = request.values id = int(req['id']) if 'id' in req and req['id'] else 0 nickname = req['nickname'] if 'nickname' in req else '' address = req['address'] if 'address' in req else '' mobile = req['mobile'] if 'mobile' in req else '' province_id = int(req['province_id']) if ('province_id' in req and req['province_id']) else 0 province_str = req['province_str'] if 'province_str' in req else '' city_id = int(req['city_id']) if ('city_id' in req and req['city_id']) else 0 city_str = req['city_str'] if 'city_str' in req else '' district_id = int(req['district_id']) if ('district_id' in req and req['district_id']) else 0 district_str = req['district_str'] if 'district_str' in req else '' member_info = g.member_info if not nickname: resp['code'] = -1 resp['msg'] = "请填写联系人姓名~~" return jsonify(resp) if not mobile: resp['code'] = -1 resp['msg'] = "请填写手机号码~~" return jsonify(resp) if province_id < 1: resp['code'] = -1 resp['msg'] = "请选择地区~~" return jsonify(resp) if city_id < 1: resp['code'] = -1 resp['msg'] = "请选择地区~~" return jsonify(resp) if district_id < 1: district_str = '' if not address: resp['code'] = -1 resp['msg'] = "请填写详细地址~~" return jsonify(resp) if not member_info: resp['code'] = -1 resp['msg'] = "系统繁忙,请稍后再试~~" return jsonify(resp) address_info = MemberAddress.query.filter_by( id=id, member_id=member_info.id).first() if address_info: model_address = address_info else: default_address_count = MemberAddress.query.filter_by( is_default=1, member_id=member_info.id, status=1).count() model_address = MemberAddress() model_address.member_id = member_info.id model_address.is_default = 1 if default_address_count == 0 else 0 model_address.created_time = get_current_date() model_address.nickname = nickname model_address.mobile = mobile model_address.address = address model_address.province_id = province_id model_address.province_str = province_str model_address.city_id = city_id model_address.city_str = city_str model_address.area_id = district_id model_address.area_str = district_str model_address.updated_time = get_current_date() db.session.add(model_address) db.session.commit() return jsonify(resp)
def create_order(self, member_id, items=None, params=None): resp = {'code': 200, 'msg': '操作成功~', 'data': {}} pay_price = decimal.Decimal(0.00) continue_cnt = 0 food_ids = [] for item in items: if decimal.Decimal(item['price']) < 0: continue_cnt += 1 continue pay_price = pay_price + decimal.Decimal(item['price']) * int( item['number']) food_ids.append(item['id']) if continue_cnt >= len(items): resp['code'] = -1 resp['msg'] = '商品items为空~~' return resp yun_price = params[ 'yun_price'] if params and 'yun_price' in params else 0 note = params['note'] if params and 'note' in params else '' express_address_id = params[ 'express_address_id'] if params and 'express_address_id' in params else 0 express_info = params[ 'express_info'] if params and 'express_info' in params else {} yun_price = decimal.Decimal(yun_price) total_price = pay_price + yun_price try: # 为了防止并发库存出问题了,我们坐下selectfor update, 这里可以给大家演示下 tmp_food_list = db.session.query(Food).filter(Food.id.in_(food_ids)) \ .with_for_update().all() tmp_food_stock_mapping = {} for tmp_item in tmp_food_list: tmp_food_stock_mapping[tmp_item.id] = tmp_item.stock model_pay_order = PayOrder() model_pay_order.order_sn = self.generate_order_sn() model_pay_order.member_id = member_id model_pay_order.total_price = total_price model_pay_order.yun_price = yun_price model_pay_order.pay_price = pay_price model_pay_order.note = note model_pay_order.status = -8 model_pay_order.express_status = -8 model_pay_order.express_address_id = express_address_id model_pay_order.express_info = json.dumps(express_info) model_pay_order.updated_time = model_pay_order.created_time = get_current_date( ) db.session.add(model_pay_order) # db.session.flush() for item in items: tmp_left_stock = tmp_food_stock_mapping[item['id']] if decimal.Decimal(item['price']) < 0: continue if int(item['number']) > int(tmp_left_stock): raise Exception("您购买的这美食太火爆了,剩余:%s,你购买%s~~" % (tmp_left_stock, item['number'])) tmp_ret = Food.query.filter_by(id=item['id']).update( {"stock": int(tmp_left_stock) - int(item['number'])}) if not tmp_ret: raise Exception("下单失败请重新下单") tmp_pay_item = PayOrderItem() tmp_pay_item.pay_order_id = model_pay_order.id tmp_pay_item.member_id = member_id tmp_pay_item.quantity = item['number'] tmp_pay_item.price = item['price'] tmp_pay_item.food_id = item['id'] tmp_pay_item.note = note tmp_pay_item.updated_time = tmp_pay_item.created_time = get_current_date( ) db.session.add(tmp_pay_item) # db.session.flush() FoodService.setStockChangeLog(item['id'], -item['number'], "在线购买") db.session.commit() resp['data'] = { 'id': model_pay_order.id, 'order_sn': model_pay_order.order_sn, 'total_price': str(total_price) } except Exception as e: db.session.rollback() print(e) resp['code'] = -1 resp['msg'] = "下单失败请重新下单" resp['msg'] = str(e) return resp return resp