def remove(self): data = parameter_required(('img_url', )) try: img_url = data.get('img_url') dirs = img_url.split('/')[-6:] name_shuffer = dirs[-1] name = name_shuffer.split('.')[0] if not 'anonymous' in name and request.user.id not in name: raise NotFound() path = os.path.join(current_app.config['BASEDIR'], '/'.join(dirs)) os.remove(path) except Exception as e: raise NotFound() return Success(u'删除成功')
def create_comment(self): usid = request.user.id user = self.snews.get_user_by_id(usid) usname, usheader = user.USname, user.USheader current_app.logger.info('User {0} created a news commentary'.format( user.USname)) data = parameter_required(('neid', 'nctext')) neid = data.get('neid') new_info = self.snews.get_news_content({ 'NEid': neid, 'isdelete': False }) if new_info.NEstatus != NewsStatus.usual.value: raise StatusError('该资讯当前状态不允许进行评论') ncid = data.get('ncid') comment_ncid = str(uuid.uuid1()) reply_ncid = str(uuid.uuid1()) # 直接评论资讯 if ncid in self.empty: with self.snews.auto_commit() as nc: comment = NewsComment.create({ 'NCid': comment_ncid, 'NEid': neid, 'USid': usid, 'USname': usname, 'USheader': usheader, 'NCtext': data.get('nctext'), }) nc.add(comment) # 评论后返回刷新结果 news_comment = NewsComment.query.filter_by_( NCid=comment_ncid).first() self._get_one_comment(news_comment, neid, usid) else: # 回复资讯评论 ori_news_comment = NewsComment.query.filter( NewsComment.NCid == ncid, NewsComment.isdelete == False).first() if not ori_news_comment: raise NotFound('该评论已删除') ncrootid = ori_news_comment.NCrootid if not ncrootid: ncrootid = ncid with self.snews.auto_commit() as r: reply = NewsComment.create({ 'NCid': reply_ncid, 'NEid': neid, 'USid': usid, 'USname': usname, 'USheader': usheader, 'NCtext': data.get('nctext'), 'NCparentid': ncid, 'NCrootid': ncrootid, }) r.add(reply) # 评论后返回刷新结果 news_comment = NewsComment.query.filter_by_(NCid=ncrootid).first() self._get_one_comment(news_comment, neid, usid) return Success('评论成功', data=news_comment)
def delete(self): data = parameter_required(('skuid', )) skuid = data.get('skuid') with self.sproduct.auto_commit() as s: count = s.query(ProductSku).filter_by_({"SKUid": skuid}).delete_() if not count: raise NotFound('不存在的sku') return Success('删除成功')
def delete(self): data = parameter_required(('skuid', )) skuid = data.get('skuid') with self.sproduct.auto_commit() as s: count = s.query(ProductSku).filter_by_({"SKUid": skuid}).delete_() BASEADMIN().create_action(AdminActionS.delete.value, 'ProductSku', skuid) if not count: raise NotFound('不存在的sku') return Success('删除成功')
def comment_favorite(self): """评论点赞""" usid = request.user.id user = self.snews.get_user_by_id(usid) current_app.logger.info('User {0}, comment favorite'.format( user.USname)) data = parameter_required(('ncid', )) ncid = data.get('ncid') comment = NewsComment.query.filter( NewsComment.NCid == ncid, NewsComment.isdelete == False, NewsComment.NCrootid.is_(None)).first() if not comment: raise NotFound('不支持对回复点赞或评论已删除') is_favorite = self.snews.comment_is_favorite(ncid, usid) with self.snews.auto_commit() as s: if not is_favorite: comment_favorite = NewsCommentFavorite.create({ 'NCFid': str(uuid.uuid1()), 'NCid': ncid, 'USid': usid }) s.add(comment_favorite) msg = '已点赞' else: cancel_favorite = s.query(NewsCommentFavorite).filter( NewsCommentFavorite.NCid == ncid, NewsCommentFavorite.USid == usid).delete_() if not cancel_favorite: raise SystemError('服务器繁忙') msg = '已取消' favorite = self.snews.comment_is_favorite(ncid, usid) fav = 1 if favorite else 0 return Success(msg, {'is_favorite': fav})
def create(self): """添加""" if is_admin(): Admin.query.filter_by_(ADid=request.user.id).first_('账号状态异常') current_app.logger.info(">>> Admin Create a Supplizer <<<") elif is_tourist(): current_app.logger.info( ">>> Tourist Uploading Supplizer Files <<<") else: raise AuthorityError('无权限') form = SupplizerCreateForm().valid_data() pbids = form.pbids.data suid = str(uuid.uuid1()) if is_admin(): sustatus = UserStatus.usual.value sudeposit = form.sudeposit.data else: sustatus = UserStatus.auditing.value sudeposit = 0 supassword = generate_password_hash( form.supassword.data) if form.supassword.data else None try: with db.auto_commit(): supperlizer = Supplizer.create({ 'SUid': suid, 'SUlinkPhone': form.sulinkphone.data, 'SUloginPhone': form.suloginphone.data, 'SUname': form.suname.data, 'SUlinkman': form.sulinkman.data, 'SUbaseRate': form.subaserate.data, 'SUaddress': form.suaddress.data, 'SUdeposit': sudeposit, 'SUstatus': sustatus, # 管理员添加的可直接上线 'SUbanksn': form.subanksn.data, 'SUbankname': form.subankname.data, 'SUpassword': supassword, 'SUheader': form.suheader.data, 'SUcontract': form.sucontract.data, 'SUbusinessLicense': form.subusinesslicense.data, 'SUregisteredFund': form.suregisteredfund.data, 'SUmainCategory': form.sumaincategory.data, 'SUregisteredTime': form.suregisteredtime.data, 'SUlegalPerson': form.sulegalperson.data, 'SUemail': form.suemail.data, 'SUlegalPersonIDcardFront': form.sulegalpersonidcardfront.data, 'SUlegalPersonIDcardBack': form.sulegalpersonidcardback.data, }) db.session.add(supperlizer) if is_admin(): BASEADMIN().create_action(AdminActionS.insert.value, 'Supplizer', suid) if pbids: for pbid in pbids: product_brand = ProductBrand.query.filter( ProductBrand.isdelete == False, ProductBrand.PBid == pbid).first() if not product_brand: raise NotFound('品牌不存在') if product_brand.SUid: raise DumpliError('品牌已有供应商') product_brand.SUid = supperlizer.SUid db.session.add(product_brand) if sudeposit and is_admin(): SupplizerDepositLog.create({ 'SDLid': str(uuid.uuid1()), 'SUid': suid, 'SDLnum': Decimal(sudeposit), 'SDafter': Decimal(sudeposit), 'SDbefore': 0, 'SDLacid': request.user.id, }) BASEADMIN().create_action(AdminActionS.insert.value, 'SupplizerDepositLog', str(uuid.uuid1())) except IntegrityError: raise ParamsError('手机号重复') return Success('创建成功', data={'suid': supperlizer.SUid})
def update(self): """更新供应商信息""" if not is_admin() and not is_supplizer(): raise AuthorityError() form = SupplizerUpdateForm().valid_data() pbids = form.pbids.data with db.auto_commit(): supplizer = Supplizer.query.filter( Supplizer.isdelete == False, Supplizer.SUid == form.suid.data).first_('供应商不存在') supplizer_dict = { 'SUlinkPhone': form.sulinkphone.data, 'SUname': form.suname.data, 'SUlinkman': form.sulinkman.data, 'SUaddress': form.suaddress.data, 'SUbanksn': form.subanksn.data, 'SUbankname': form.subankname.data, # 'SUpassword': generate_password_hash(form.supassword.data), # todo 是不是要加上 'SUheader': form.suheader.data, 'SUcontract': form.sucontract.data, 'SUbusinessLicense': form.subusinesslicense.data, 'SUregisteredFund': form.suregisteredfund.data, 'SUmainCategory': form.sumaincategory.data, 'SUregisteredTime': form.suregisteredtime.data, 'SUlegalPerson': form.sulegalperson.data, 'SUemail': form.suemail.data, 'SUlegalPersonIDcardFront': form.sulegalpersonidcardfront.data, 'SUlegalPersonIDcardBack': form.sulegalpersonidcardback.data, } if is_admin(): if form.subaserate.data: supplizer_dict['SUbaseRate'] = form.subaserate.data, if isinstance(form.sustatus.data, int): supplizer_dict['SUstatus'] = form.sustatus.data if form.sustatus.data == UserStatus.usual.value and not supplizer.SUpassword: supplizer_dict['SUpassword'] = generate_password_hash( supplizer.SUloginPhone) if form.sudeposit.data: sudeposit = form.sudeposit.data supplizer_dict['SUdeposit'] = Decimal(sudeposit) if Decimal(sudeposit) != Decimal( getattr(supplizer, 'SUdeposit', 0)): # 押金有变化时进行记录 depositlog = SupplizerDepositLog.create({ 'SDLid': str(uuid.uuid1()), 'SUid': form.suid.data, 'SDLnum': Decimal(sudeposit) - Decimal(getattr(supplizer, 'SUdeposit', 0)), 'SDafter': Decimal(sudeposit), 'SDbefore': Decimal(getattr(supplizer, 'SUdeposit', 0)), 'SDLacid': request.user.id, }) db.session.add(depositlog) BASEADMIN().create_action(AdminActionS.insert.value, 'SupplizerDepositLog', str(uuid.uuid1())) supplizer.update(supplizer_dict, null='dont ignore') db.session.add(supplizer) if is_admin(): BASEADMIN().create_action(AdminActionS.update.value, 'Supplizer', form.suid.data) if pbids and is_admin(): for pbid in pbids: product_brand = ProductBrand.query.filter( ProductBrand.isdelete == False, ProductBrand.PBid == pbid).first() if not product_brand: raise NotFound('品牌不存在') if product_brand.SUid and product_brand.SUid != supplizer.SUid: raise DumpliError('品牌已有供应商') # if product_brand.PBstatus == # todo 品牌已下架 product_brand.SUid = form.suid.data db.session.add(product_brand) # 删除其他的关联 ProductBrand.query.filter( ProductBrand.isdelete == False, ProductBrand.SUid == form.suid.data, ProductBrand.PBid.notin_(pbids)).update( {'SUid': None}, synchronize_session=False) return Success('更新成功')
def open(self): """好友帮拆""" # 判断帮拆活动总控制是否结束 Activity.query.filter_by({ 'ACtype': ActivityType.magic_box.value }).first_('活动已结束') form = MagicBoxOpenForm().valid_data() mbjid = form.mbjid.data level = form.level.data levle_attr = dict(form.level.choices).get(level) usid = request.user.id # 源参与记录 magic_box_join = MagicBoxJoin.query.filter_by({ 'MBJid': mbjid }).first_('请点击好友发来邀请链接') if magic_box_join.MBJstatus != ActivityRecvStatus.wait_recv.value: raise StatusError('已领奖或已过期') if magic_box_join.USid == request.user.id: raise NotFound('仅可打开好友分享的魔盒') mbaid = magic_box_join.MBAid # 活动是否在进行 magic_box_apply = MagicBoxApply.query.filter_by_().filter( MagicBoxApply.MBAid == mbaid, MagicBoxApply.MBAstatus == ApplyStatus.agree.value).first_('活动不存在') today = date.today() lasting = magic_box_apply.AgreeEndtime >= today if not lasting: raise StatusError('活动过期') with db.auto_commit(): # 是否已经帮开奖 ready_open = MagicBoxOpen.query.filter_by_({ 'USid': usid, 'MBJid': mbjid }).first() if ready_open: raise DumpliError('已经帮好友拆过') # 价格变动随机 current_level_str = getattr(magic_box_apply, levle_attr) current_level_json = json.loads( current_level_str) # 列表 ["1-2", "3-4"] current_level_json[0] = list( map(lambda x: int(x) * -1, current_level_json[0].split('-'))) # 第0个元素是- if len(current_level_json) == 2: current_level_json[1] = list( map(int, current_level_json[1].split('-'))) # 第1个元素是+ # todo level2, 减价: 增价 7:3 if level == 2: random_num = random.randint(0, 9) random_choice_first = current_level_json[ 0] if random_num < 7 else current_level_json[1] # todo level3, 减价: 增加 6:4 elif level == 3: random_num = random.randint(0, 9) random_choice_first = current_level_json[ 0] if random_num < 6 else current_level_json[1] else: random_choice_first = random.choice( current_level_json) # 选择是- 还是+ final_reduce = random.uniform(*random_choice_first) # 最终价格变动 final_reduce = round(Decimal(final_reduce), 2) # 价格计算 final_price = Decimal( magic_box_join.MBJcurrentPrice) + final_reduce if final_price > magic_box_apply.SKUprice: final_price = magic_box_apply.SKUprice if final_price < magic_box_apply.SKUminPrice: final_price = magic_box_apply.SKUminPrice final_price = round(final_price, 2) # 帮拆记录 user = User.query.filter_by_({'USid': usid}).first() mb_open = MagicBoxOpen.create({ 'MBOid': str(uuid.uuid1()), 'USid': usid, 'MBJid': mbjid, 'MBOgear': int(level), 'MBOresult': float(final_reduce), 'MBOprice': float(final_price), 'USname': user.USname }) # 源参与价格修改 magic_box_join.MBJcurrentPrice = float(final_price) db.session.add(mb_open) return Success(data={ 'final_reduce': float(final_reduce), 'final_price': float(final_price) })
def open(self): """好友帮拆""" usid = request.user.id user = User.query.filter_by_(USid=usid).first_('请重新登录') data = parameter_required(('mbjid', 'level')) mbjid, level = data.get('mbjid'), data.get('level') if not re.match(r'^[123]$', str(level)): raise ParamsError('level 参数错误') levle_attr = { '1': 'Gearsone', '2': 'Gearstwo', '3': 'Gearsthree' }.get(level) magic_box_join = MagicBoxJoin.query.filter_by( isdelete=False, MBJid=mbjid, MBJstatus=MagicBoxJoinStatus.pending.value).first_('该礼盒活动已结束') if magic_box_join.USid == user.USid: raise NotFound('不能给自己拆盒子, 快去找小伙伴帮忙吧 ~') mbaid = magic_box_join.MBAid # 活动是否在进行 magic_box_apply = MagicBoxApply.query.filter( MagicBoxApply.MBAid == mbaid, MagicBoxApply.MBAstatus == ApplyStatus.agree.value).first_('该礼盒商品已下架') magic_box_sku = MagicBoxApplySku.query.filter_by_( MBSid=magic_box_join.MBSid).first() # sku_origin_price = db.session.query(ProductSku.SKUprice).filter_by_(SKUid=magic_box_sku.SKUid).scalar() with db.auto_commit(): # 是否已经帮开奖 ready_open = MagicBoxOpen.query.filter_by_(USid=usid, MBJid=mbjid).first() if ready_open: raise DumpliError('您已帮好友拆过该礼盒了') # 价格变动随机 current_level_str = getattr(magic_box_apply, levle_attr) current_level_json = json.loads( current_level_str) # 列表 ["1-2", "3-4"] current_level_json[0] = list( map(lambda x: int(x) * -1, current_level_json[0].split('-'))) # 第0个元素是- if len(current_level_json) == 2: current_level_json[1] = list( map(int, current_level_json[1].split('-'))) # 第1个元素是+ if str(level) == '2': one = (current_level_json[0][1] - current_level_json[0][0]) * -1 two = current_level_json[1][1] - current_level_json[1][0] probably = round(float(round(one / (one + two), 2) * 100), 2) current_app.logger.info('选择了 B 档,减价几率{}%'.format(probably)) random_num = random.randint(0, 99) random_choice_first = current_level_json[ 0] if random_num < probably else current_level_json[1] elif str(level) == '3': one = (current_level_json[0][1] - current_level_json[0][0]) * -1 two = current_level_json[1][1] - current_level_json[1][0] probably = round(float(round(one / (one + two), 2) * 100), 2) current_app.logger.info('选择了 C 档,减价几率{}%'.format(probably)) random_num = random.randint(0, 99) random_choice_first = current_level_json[ 0] if random_num < probably else current_level_json[1] else: current_app.logger.info('选择了 A 档') random_choice_first = random.choice( current_level_json) # 选择是- 还是+ final_reduce = random.uniform(*random_choice_first) # 最终价格变动 final_reduce = round(Decimal(final_reduce), 2) current_app.logger.info('价格实际变动 {}'.format(final_reduce)) if final_reduce < 0: action = MagicBoxOpenAction.reduce.value else: action = MagicBoxOpenAction.increase.value # 价格计算 final_price = Decimal( magic_box_join.MBJcurrentPrice) + final_reduce if final_price < magic_box_sku.LowestPrice: final_price = magic_box_sku.LowestPrice final_reduce = Decimal(magic_box_sku.LowestPrice) - Decimal( magic_box_join.MBJcurrentPrice) if final_price >= Decimal(magic_box_sku.SKUprice): final_price = Decimal(magic_box_sku.SKUprice) final_reduce = Decimal(magic_box_sku.SKUprice) - Decimal( magic_box_join.MBJcurrentPrice) final_price = round(final_price, 2) if float(final_reduce) < 0: result = -1 * round(float(final_reduce), 2) else: result = round(float(final_reduce), 2) # 帮拆记录 mb_open = MagicBoxOpen.create({ 'MBOid': str(uuid.uuid1()), 'USid': usid, 'USname': user.USname, 'USheader': user.USheader, 'MBJid': mbjid, 'MBOgear': int(level), 'MBOresult': result, 'MBOaction': action, 'MBOprice': float(final_price), }) db.session.add(mb_open) # 源参与价格修改 magic_box_join.MBJcurrentPrice = float(final_price) return Success('已成功助力', data={ 'action': action, 'final_reduce': result, 'final_price': float(final_price) })