示例#1
0
 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'删除成功')
示例#2
0
 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)
示例#3
0
 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('删除成功')
示例#4
0
 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('删除成功')
示例#5
0
 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})
示例#6
0
 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})
示例#7
0
    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('更新成功')
示例#8
0
    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)
        })
示例#9
0
    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)
                       })