Example #1
0
 def __init__(self):
     self.BaseAdmin = BASEADMIN()
     self.BaseController = BaseController()
     self.cplay = CPlay()
     self.cuser = CUser()
     # self.scale_dict = {3: 1000000, 4: 500000, 5: 200000, 6: 100000, 7: 50000,
     #                    8: 50000, 9: 20000, 10: 10000, 11: 5000, 12: 2000, 13: 1000,
     #                    14: 500, 15: 200, 16: 100, 17: 50, 18: 50, 19: 20, 20: 10}
     self.scale_dict = {
         3: 10,
         4: 10,
         5: 10,
         6: 10,
         7: 5,
         8: 4,
         9: 3,
         10: 3,
         11: 2,
         12: 2,
         13: 1,
         14: 1,
         15: 1,
         16: 1,
         17: 1,
         18: 1,
         19: 1,
         20: 1
     }
Example #2
0
 def set_mp_banner(self):
     """小程序轮播图"""
     data = parameter_required(('mpbpicture',))
     mpbid = data.get('mpbid')
     mpb_dict = {'MPBpicture': data.get('mpbpicture'),
                 'MPBsort': data.get('mpbsort'),
                 'MPBshow': data.get('mpbshow'),
                 'MPBposition': data.get('mpbposition'),
                 'contentlink': data.get('contentlink')}
     with db.auto_commit():
         if not mpbid:
             mpb_dict['MPBid'] = str(uuid.uuid1())
             mpb_dict['ADid'] = getattr(request, 'user').id
             mpb_instance = MiniProgramBanner.create(mpb_dict)
             BASEADMIN().create_action(AdminActionS.insert.value, 'MiniProgramBanner', mpb_instance.MPBid)
             msg = '添加成功'
         else:
             mpb_instance = MiniProgramBanner.query.filter_by_(MPBid=mpbid).first_('未找到该轮播图信息')
             if data.get('delete'):
                 mpb_instance.update({'isdelete': True})
                 BASEADMIN().create_action(AdminActionS.delete.value, 'MiniProgramBanner', mpb_instance.MPBid)
                 msg = '删除成功'
             else:
                 mpb_instance.update(mpb_dict, null='not')
                 BASEADMIN().create_action(AdminActionS.update.value, 'MiniProgramBanner', mpb_instance.MPBid)
                 msg = '编辑成功'
         db.session.add(mpb_instance)
     return Success(message=msg, data={'mpbid': mpb_instance.MPBid})
Example #3
0
    def update(self):
        """修改标签"""
        form = ItemUpdateForm().valid_data()
        psid = form.psid.data
        itid = form.itid.data
        itname = form.itname  # 这里不要在后面加data
        isdelete = form.isdelete.data
        if itid in ['planet_featured', 'index_hot', 'news_bind_product', 'news_bind_coupon', 'index_brand',
                    'index_brand_product', 'index_recommend_product_for_you', 'upgrade_product', 'mynews'
                    ] and isdelete is True:
            raise StatusError('系统默认标签不能被删除')

        Items.query.filter_by_(ITid=itid).first_("未找到该标签")
        if not isdelete and Items.query.filter(Items.ITid != itid, Items.ITname == itname,
                                               Items.ITtype == form.ittype.data, Items.isdelete == False).first():
            raise DumpliError("您输入的标签名已存在")
        with db.auto_commit():
            itsort = self._check_itsort(form.itsort.data, form.ittype.data)
            item_dict = {'ITname': itname,
                         'ITsort': itsort,
                         'ITdesc': form.itdesc.data,
                         'ITtype': form.ittype.data,
                         'ITrecommend': form.itrecommend.data,
                         'isdelete': isdelete
                         }
            # item_dict = {k: v for k, v in item_dict.items() if v is not None}
            Items.query.filter_by_(ITid=itid).update(item_dict)
            BASEADMIN().create_action(AdminActionS.update.value, 'Items', itid)
            # 标签场景标签表
            if psid:
                old_psids = list()
                scene_items = SceneItem.query.filter_by_(ITid=itid).all()
                [old_psids.append(scene_item.PSid) for scene_item in scene_items]  # 获取已存在的关联psid
                for psi in psid:
                    ProductScene.query.filter_by_({'PSid': psi}).first_('不存在的场景')
                    if psi not in old_psids:
                        scene_item_dict = {
                            'PSid': psi,
                            'ITid': itid,
                            'SIid': str(uuid.uuid1())
                        }
                        scene_item_instance = SceneItem.create(scene_item_dict)
                        db.session.add(scene_item_instance)
                        BASEADMIN().create_action(AdminActionS.insert.value, 'SceneItem', psi)
                    else:
                        old_psids.remove(psi)
                [SceneItem.query.filter_by(PSid=droped_psid, ITid=itid).delete_() for droped_psid in old_psids]
            else:
                SceneItem.query.filter_by(ITid=itid).delete_()  # psid = [] 为空时,删除所有该标签场景的关联
                BASEADMIN().create_action(AdminActionS.delete.value, 'SceneItem', itid)
        return Success('修改成功', {'itid': itid})
    def add_questanswer(self):
        """插入或更新问题及答案"""
        if not is_admin():
            raise AuthorityError('权限不足')
        data = parameter_required(('qoid', 'quest', 'answer'))
        admin = Admin.query.filter(
            Admin.ADid == request.user.id,
            Admin.ADstatus == AdminStatus.normal.value).first_('权限被收回')
        quest_filter = Quest.query.filter_(Quest.QOid == data.get('qoid'),
                                           Quest.QUquest == data.get('quest'),
                                           Quest.isdelete == False).first()
        # answer_model = Answer.query.filter_(Answer.QAcontent == data.get('answer'), Answer.isdelete == False).first()
        if data.get('quid'):
            quest_model = Quest.query.filter_(Quest.QUid == data.get('quid'),
                                              Quest.isdelete == False).first()
            # 根据id 更新问题,如果问题重复则抛出异常
            self.__update_quest(data, quest_model, quest_filter)
            self.__update_answer(data.get('answer'), quest_model)
            return Success('修改问题成功')
        # 如果传入的问题已经存在但是没有传入id ,还是执行update 操作
        if quest_filter:
            self.__update_quest(data, quest_filter)

            self.__update_answer(data.get('answer'), quest_filter)

            return Success('修改问题成功')
        # 不在数据库内的问题插入
        quest_instance = Quest.create({
            'QOid': data.get('qoid'),
            'QUid': str(uuid.uuid1()),
            'QUquest': data.get('quest'),
            'QUcreateId': admin.ADid
        })
        answer_instance = Answer.create({
            'QAid': str(uuid.uuid1()),
            'QUid': quest_instance.QUid,
            'QAcontent': data.get('answer'),
            'QAcreateId': admin.ADid
        })

        db.session.add(
            quest_instance,
            BASEADMIN().create_action(AdminActionS.insert.value, 'Quest',
                                      str(uuid.uuid1())))
        db.session.add(answer_instance)
        BASEADMIN().create_action(AdminActionS.insert.value, 'Answer',
                                  str(uuid.uuid1()))
        return Success('创建问题成功')
Example #5
0
    def create_code(self):
        data = parameter_required(('coid', 'conum'))
        coid = data.get('coid')
        conum = data.get('conum')
        with db.auto_commit():
            coupon = Coupon.query.filter_by(COid=coid,
                                            isdelete=False,
                                            COcode=1).first_('该优惠券不能生成兑换码')
            # 校验剩余数量
            if coupon.COlimitNum:
                if int(coupon.COremainNum) < int(conum):
                    raise StatusError('兑换数量超过剩余数量')
                coupon.update(
                    {'COremainNum': int(coupon.COremainNum) - int(conum)})
            # isinstance_list = [coupon]
            db.session.add(coupon)
            for _ in range(int(data.get('conum'))):
                ccid = str(uuid.uuid1())
                cccode = self.coupen_code()
                coupon_code = CouponCode.create({
                    'CCid': ccid,
                    'COid': coid,
                    'CCcode': cccode
                })
                db.session.add(coupon_code)
                BASEADMIN().create_action(AdminActionS.insert.value,
                                          'CouponCode', coid)
                db.session.flush()

        return Success('生成激活码成功', data={'coid': coid, 'conum': conum})
Example #6
0
 def update(self):
     data = parameter_required(('skuid', ))
     skuid = data.get('skuid')
     price = data.get('skuprice')
     stock = data.get('skustock')
     if price:
         if price < 0:
             raise ParamsError('价格小于0')
         price = round(price, 2)
     if stock and stock < 0:
         raise ParamsError('库存小于0')
     skuattritedetail = data.get('skuattritedetail')
     with self.sproduct.auto_commit() as s:
         sku = s.query(ProductSku).filter_by_({
             'SKUid': skuid
         }).first_('sku不存在')
         product = self.sproduct.get_product_by_prid(sku.PRid)
         prattribute = json.loads(product.PRattribute)
         if len(skuattritedetail) != len(prattribute) or not isinstance(
                 skuattritedetail, list):
             raise ParamsError('skuattritedetail 参数不准确')
         skuattritedetail = json.dumps(skuattritedetail)
         sku_dict = {
             'SKUpic': data.get('skupic'),
             'SKUprice': price,
             'SKUstock': stock,
             'SKUattriteDetail': skuattritedetail,
         }
         [setattr(sku, k, v) for k, v in sku_dict.items() if v is not None]
         s.add(sku)
         if is_admin():
             BASEADMIN().create_action(AdminActionS.update.value,
                                       'ProductSku', skuid)
     return Success('更新成功')
Example #7
0
    def create(self):
        """创建场景"""
        form = SceneCreateForm().valid_data()
        psendtime = form.psendtime.data
        with self.sproducts.auto_commit() as s:
            scene_dict = {
                'PSid': str(uuid.uuid1()),
                'PSpic': form.pspic.data,
                'PSname': form.psname.data,
                'PSsort': form.pssort.data,
                'PStimelimited': form.pstimelimited.data,
                'PSstarttime': form.psstarttime.data,
                'PSendtime': psendtime
            }
            product_scene_instance = ProductScene.create(scene_dict)
            s.add(product_scene_instance)

            # 每个场景下默认增加一个“大行星精选”标签
            default_scene_item = SceneItem.create({
                'SIid': str(uuid.uuid1()),
                'PSid': scene_dict.get('PSid'),
                'ITid': 'planet_featured'
            })
            s.add(default_scene_item)
            BASEADMIN().create_action(AdminActionS.insert.value, 'ProductScene', str(uuid.uuid1()))
        if form.pstimelimited.data:
            from planet.extensions.tasks import cancel_scene_association
            current_app.logger.info('限时场景结束时间 : {} '.format(psendtime))
            scene_task_id = cancel_scene_association.apply_async(args=(scene_dict['PSid'],),
                                                                 eta=psendtime - timedelta(hours=8), )

            current_app.logger.info("场景id{}  任务返回的task_id: {}".format(scene_dict['PSid'], scene_task_id))
            conn.set(scene_dict['PSid'], scene_task_id)

        return Success('创建成功', data={'psid': product_scene_instance.PSid})
    def delete_question(self):
        """后台管理员删除问题"""
        if not is_admin():
            raise AuthorityError('权限不足')
        admin = Admin.query.filter_by_(ADid=request.user.id).first_('权限已被回收')

        data = parameter_required(('qulist', ))
        qulist = data.get('qulist')
        for quid in qulist:
            qu = Quest.query.filter_by_(QUid=quid).first()
            if not qu:
                continue
            qu.isdelete = True
            qalist = Answer.query.filter_by_(QUid=qu.QUid).all()
            for qa in qalist:
                qa.isdelete = True
            qan = QuestAnswerNote.create({
                'QANid':
                str(uuid.uuid1()),
                'QANcontent':
                '删除问题',
                'QANcreateid':
                admin.ADid,
                'QANtargetId':
                quid,
                'QANtype':
                QuestAnswerNoteType.qu.value,
            })
            db.session.add(qan)
            BASEADMIN().create_action(AdminActionS.delete.value,
                                      'QuestAnswerNote', str(uuid.uuid1()))

        return Success('删除完成')
Example #9
0
 def shelves(self):
     """批量下架试用商品"""
     if is_supplizer():
         usid = request.user.id
         sup = self._check_supplizer(usid)
         current_app.logger.info('Supplizer {} shelves commodity'.format(
             sup.SUname))
     elif is_admin():
         usid = request.user.id
         admin = self._check_admin(usid)
         current_app.logger.info('Admin {} shelves commodity'.format(
             admin.ADname))
         sup = None
     else:
         raise AuthorityError()
     data = parameter_required(("tcids", ))
     tcid_list = data.get('tcids')
     for tcid in tcid_list:
         commodity = TrialCommodity.query.filter_by_(
             TCid=tcid).first_('未找到商品信息, tcid参数异常')
         if sup:
             assert commodity.CreaterId == usid, '供应商只能下架自己上传的商品'
         if commodity.TCstatus != TrialCommodityStatus.upper.value:
             raise StatusError('只能下架正在上架状态的商品')
         with db.auto_commit():
             commodity.TCstatus = TrialCommodityStatus.reject.value
             if is_admin():
                 BASEADMIN().create_action(AdminActionS.update.value,
                                           'TrialCommodity', tcid)
     return Success('下架成功', {'tcid': tcid_list})
Example #10
0
 def delete(self):
     data = parameter_required(('pcid', ))
     pcid = data.get('pcid')
     with self.sproduct.auto_commit() as s:
         product_category_instance = s.query(ProductCategory).filter_by_({
             'PCid':
             pcid
         }).first_('该分类不存在')
         product_category_instance.isdelete = True
         s.add(product_category_instance)
         BASEADMIN().create_action(AdminActionS.delete.value,
                                   'ProductCategory', pcid)
         s.query(Products).filter_(
             Products.PCid == product_category_instance.PCid).update(
                 {
                     'PRstatus': ProductStatus.off_shelves.value,
                     'PCid': None
                 },
                 synchronize_session=False)
         # else:
         #     parent_catetgory_instance = s.query(ProductCategory).filter_by_({'PCid': parent_catetgory_id}).first_()
         #     if not parent_catetgory_instance:   # 父级目录已删除
         #         s.query(Products).filter_(Products.PCid.in_(sub_ids)).update({
         #             'PCid': 'null'
         #         }, synchronize_session=False)
         #     else:
         #         pass
         #         s.query(Products).filter_by_({
         #             'PCid': pcid
         #         }).update({
         #             'PCid': parent_catetgory_id
         #         }, synchronize_session=False)
     return Success('删除成功')
Example #11
0
    def upload_delivery_file(self):
        """
        订单批量发货,文件上传入口
        :return:
        """
        if is_admin():
            Admin.query.filter_by(ADid=request.user.id,
                                  ADstatus=AdminStatus.normal.value,
                                  isdelete=False).first_('管理员账号错误')
        elif is_supplizer():
            Supplizer.query.filter_by(SUid=request.user.id,
                                      SUstatus=UserStatus.usual.value,
                                      isdelete=False).first_('供应商账号状态错误')
        else:
            raise TokenError('未登录')
        file = request.files.get('file')
        if not file:
            raise ParamsError('未上传文件')
        current_app.logger.info('Start Add Delivery Template {}'.format(
            datetime.now()))
        folder = 'xls'
        # 接收数据保存到服务器
        file_path = self._save_excel(file, folder)

        # 进行订单发货
        nrows = self._order_delivery(file_path)
        if is_admin():
            with db.auto_commit():
                BASEADMIN().create_action(AdminActionS.insert.value, 'file',
                                          file_path)

        current_app.logger.info('End Add Delivery Template {}'.format(
            datetime.now()))
        return Success('批量发货成功, 共发货 {} 个订单'.format(nrows - 1))
 def delete(self):
     """删除申请"""
     # if is_supplizer():
     #     usid = request.user.id
     #     sup = Supplizer.query.filter_by_(SUid=usid).first_('供应商信息错误')
     #     suid = sup.SUid
     #     current_app.logger.info('Supplizer {} delete integral apply'.format(sup.SUname))
     if is_admin():
         usid = request.user.id
         admin = Admin.query.filter_by_(ADid=usid).first_('管理员信息错误')
         current_app.logger.info('Admin {} delete integral apply'.format(
             admin.ADname))
         sup = None
         suid = None
     else:
         raise AuthorityError()
     data = parameter_required(('ipid', ))
     ipid = data.get('ipid')
     with db.auto_commit():
         apply_info = IntegralProduct.query.filter_by(
             IPid=ipid, isdelete=False).first_('没有该商品记录')
         if sup and apply_info.SUid != suid:
             raise ParamsError('只能删除自己提交的申请')
         if apply_info.IPstatus not in [
                 ApplyStatus.cancle.value, ApplyStatus.reject.value,
                 ApplyStatus.shelves.value
         ]:
             raise StatusError('只能删除已下架或已撤销状态下的申请')
         apply_info.isdelete = True
         IntegralProductSku.query.filter(
             IntegralProductSku.IPid == apply_info.IPid).delete_()
         if is_admin():
             BASEADMIN().create_action(AdminActionS.delete.value,
                                       'IntegralProduct', apply_info.IPid)
     return Success('删除成功', {'ipid': ipid})
Example #13
0
 def delete_apply(self):
     """删除申请"""
     if is_supplizer():
         usid = request.user.id
         sup = Supplizer.query.filter_by_(SUid=usid).first_('供应商信息错误')
         current_app.logger.info(
             'Supplizer {} delete magicbox apply'.format(sup.SUname))
     elif is_admin():
         usid = request.user.id
         admin = Admin.query.filter_by_(ADid=usid).first_('管理员信息错误')
         current_app.logger.info('Admin {} magicbox apply'.format(
             admin.ADname))
         sup = None
     else:
         raise AuthorityError()
     data = parameter_required(('mbaid', ))
     mbaid = data.get('mbaid')
     with db.auto_commit():
         apply_info = MagicBoxApply.query.filter_by_(
             MBAid=mbaid).first_('无此申请记录')
         if sup and apply_info.SUid != sup.SUid:
             raise ParamsError('只能删除自己提交的申请')
         if apply_info.MBAstatus not in [
                 ApplyStatus.cancle.value, ApplyStatus.reject.value,
                 ApplyStatus.shelves.value
         ]:
             raise StatusError('只能删除已下架、已拒绝、已撤销状态下的申请')
         apply_info.isdelete = True
         MagicBoxApplySku.query.filter_by_(MBAid=apply_info.MBAid).delete_()
         if is_admin():
             BASEADMIN().create_action(AdminActionS.delete.value,
                                       'MagicBoxApply', mbaid)
     return Success('删除成功', {'mbaid': mbaid})
Example #14
0
 def offshelves(self):
     current_app.logger.info('下架供应商')
     data = parameter_required(('suid', ))
     suid = data.get('suid')
     with db.auto_commit():
         supplizer = Supplizer.query.filter(
             Supplizer.isdelete == False,
             Supplizer.SUid == suid).first_('供应商不存在')
         supplizer.SUstatus = UserStatus.forbidden.value
         db.session.add(supplizer)
         BASEADMIN().create_action(AdminActionS.update.value, 'Supplizer',
                                   suid)
         # 供应商的品牌也下架
         brand_count = ProductBrand.query.filter(
             ProductBrand.isdelete == False,
             ProductBrand.PBstatus == ProductBrandStatus.upper.value,
             ProductBrand.SUid == suid).update(
                 {'PBstatus': ProductBrandStatus.off_shelves.value})
         current_app.logger.info('共下架了 {}个品牌'.format(brand_count))
         # 供应商的商品下架
         products_count = Products.query.filter(
             Products.isdelete == False,
             Products.PRstatus != ProductStatus.off_shelves.value,
             Products.CreaterId == suid).update({
                 'PRstatus':
                 ProductStatus.off_shelves.value,
             })
         current_app.logger.info('共下架了 {}个商品'.format(products_count))
     return Success('供应商下架成功')
Example #15
0
 def cancel_commodity_apply(self):
     """撤销自己的申请"""
     if is_supplizer():
         usid = request.user.id
         sup = self._check_supplizer(usid)
         current_app.logger.info('Supplizer {} cancel commodity'.format(
             sup.SUname))
     elif is_admin():
         usid = request.user.id
         admin = self._check_admin(usid)
         current_app.logger.info('Admin {} cancel commodity'.format(
             admin.ADname))
     else:
         raise AuthorityError()
     data = parameter_required(('tcid', ))
     tcid = data.get('tcid')
     with db.auto_commit():
         commodity = TrialCommodity.query.filter_by_(
             TCid=tcid).first_('无此商品信息')
         if commodity.TCstatus != TrialCommodityStatus.auditing.value:
             raise StatusError('只有在审核状态的申请可以撤销')
         if commodity.CreaterId != request.user.id:
             raise AuthorityError('仅可撤销自己提交的申请')
         commodity.TCstatus = TrialCommodityStatus.cancel.value
         # 同时将正在进行的审批流改为取消
         approval_info = Approval.query.filter_by_(
             AVcontent=tcid,
             AVstartid=request.user.id,
             AVstatus=ApplyStatus.wait_check.value).first()
         approval_info.AVstatus = ApplyStatus.cancle.value
         if is_admin():
             BASEADMIN().create_action(AdminActionS.update.value,
                                       'TrialCommodity', tcid)
     return Success('取消成功', {'tcid': tcid})
Example #16
0
    def delete(self):
        """删除"""
        data = parameter_required(('suid', ))
        suid = data.get('suid')
        with db.auto_commit():
            supplizer = Supplizer.query.filter(
                Supplizer.isdelete == False,
                Supplizer.SUid == suid).first_('供应商不存在')
            if self._check_lasting_order(suid=suid):
                raise StatusError('供应商部分订单正在进行')

            supplizer.isdelete = True
            db.session.add(supplizer)
            BASEADMIN().create_action(AdminActionS.delete.value, 'Supplizer',
                                      suid)
            # 品牌删除
            productbrands = ProductBrand.query.filter(
                ProductBrand.isdelete == False,
                ProductBrand.SUid == suid).all()
            current_app.logger.info('删除供应商{}'.format(supplizer.SUname))
            for pb in productbrands:
                pb.isdelete = True
                db.session.add(pb)
                # 商品删除
                delete_product = Products.query.filter(
                    Products.isdelete == False,
                    Products.PBid == pb.PBid).update(
                        {'PRstatus': ProductStatus.off_shelves.value})
        return Success('删除成功')
    def shelf_award(self):
        """撤销申请"""
        if not is_supplizer() and not is_admin():
            raise AuthorityError()
        form = ShelfFreshManfirstOrder().valid_data()
        fmfaid = form.fmfaid.data
        with db.auto_commit():
            suid = request.user.id if is_supplizer() else None
            apply_query = FreshManFirstApply.query.filter(
                FreshManFirstApply.isdelete == False,
                FreshManFirstApply.FMFAid == fmfaid,
                FreshManFirstApply.FMFAstatus == ApplyStatus.wait_check.value
            )
            if suid:
                apply_query = apply_query.filter(
                    FreshManFirstApply.SUid == request.user.id,
                )
            apply = apply_query.first_('申请已处理')

            # 库存处理
            self._re_stock(apply)
            apply.FMFAstatus = ApplyStatus.cancle.value
            db.session.add(apply)
            # 相应的审批流
            Approval.query.filter(
                Approval.isdelete == False,
                Approval.AVcontent == fmfaid
            ).update({
                'AVstatus': ApplyStatus.cancle.value
            })
            if is_admin():
                BASEADMIN().create_action(AdminActionS.update.value, 'FreshManFirstApply', fmfaid)
        return Success('撤销成功')
Example #18
0
 def del_commodity(self):
     """删除试用商品"""
     if is_supplizer():
         usid = request.user.id
         sup = self._check_supplizer(usid)
         current_app.logger.info('Supplizer {} delete commodity'.format(
             sup.SUname))
     elif is_admin():
         usid = request.user.id
         admin = self._check_admin(usid)
         current_app.logger.info('Admin {} delete commodity'.format(
             admin.ADname))
         sup = None
     else:
         raise AuthorityError()
     data = parameter_required(("tcid", ))
     tcid = data.get('tcid')
     commodity = TrialCommodity.query.filter_by_(
         TCid=tcid).first_('未找到商品信息, tcid参数异常')
     if sup:
         assert commodity.CreaterId == usid, '供应商只能删除自己上传的商品'
     if commodity.TCstatus not in [
             TrialCommodityStatus.reject.value,
             TrialCommodityStatus.cancel.value
     ]:
         raise StatusError('只能删除已下架或已撤销的商品')
     with db.auto_commit():
         TrialCommodity.query.filter_by(TCid=tcid).delete_()
         TrialCommodityImage.query.filter_by(TCid=tcid).delete_()
         TrialCommoditySku.query.filter_by(TCid=tcid).delete_()
         TrialCommoditySkuValue.query.filter_by(TCid=tcid).delete_()
         if is_admin():
             BASEADMIN().create_action(AdminActionS.delete.value,
                                       'TrialCommodity', tcid)
     return Success('删除成功', {'tcid': tcid})
Example #19
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('删除成功')
Example #20
0
    def update_code(self):
        data = parameter_required(('coid', 'cocode'))
        coupon = Coupon.query.filter_by(COid=data.get('coid'),
                                        isdelete=False).first_('优惠券已删除')

        with db.auto_commit():
            coupon.update({'COcode': bool(data.get('cocode', False))})
            BASEADMIN().create_action(AdminActionS.update.value, 'Coupon',
                                      data.get('coid'))

        return Success('修改成功', data={'coid': coupon.COid})
Example #21
0
    def shelf_award(self):
        """撤销申请"""
        if not (is_supplizer() or is_admin()):
            raise AuthorityError()
        data = parameter_required(('tlpid', ))
        tlpid = data.get('tlpid')
        if is_supplizer():
            tlp_from = ApplyFrom.supplizer.value
            suid = request.user.id

        else:
            tlp_from = ApplyFrom.platform.value

            suid = None
        with db.auto_commit():
            apply_info = TimeLimitedProduct.query.filter_by(
                TLPid=tlpid, isdelete=False).first_('无此申请记录')

            if apply_info.TLAstatus != ApplyStatus.wait_check.value:
                raise StatusError('只有在审核状态的申请可以撤销')
            if apply_info.SUid != suid:
                raise AuthorityError('仅可撤销自己提交的申请')
            apply_info.TLAstatus = ApplyStatus.cancle.value

            # 获取原商品属性
            # gnap_old = GuessNumAwardProduct.query.filter(GuessNumAwardProduct.GNAAid == apply_info.GNAAid,
            #                                                 GuessNumAwardProduct.isdelete == False).first()
            product = Products.query.filter_by(PRid=apply_info.PRid,
                                               PRfrom=tlp_from,
                                               isdelete=False).first_('商品信息出错')
            # 获取原sku属性
            tls_list = TimeLimitedSku.query.filter(
                TimeLimitedSku.isdelete == False,
                TimeLimitedSku.TLPid == apply_info.TLPid).all()

            # 遍历原sku 将库存退出去
            for sku in tls_list:
                sku_instance = ProductSku.query.filter_by(
                    isdelete=False, PRid=product.PRid,
                    SKUid=sku.SKUid).first_('商品sku信息不存在')
                self._update_stock(int(sku.TLSstock), product, sku_instance)

            # 同时将正在进行的审批流改为取消 todo
            approval_info = Approval.query.filter_by(
                AVcontent=tlpid,
                AVstartid=request.user.id,
                isdelete=False,
                AVstatus=ApplyStatus.wait_check.value).first()
            approval_info.AVstatus = ApplyStatus.cancle.value
            if is_admin():
                BASEADMIN().create_action(AdminActionS.update.value,
                                          'TimeLimitedProduct', tlpid)
        return Success('取消成功', {'tlpid': tlpid})
Example #22
0
 def delete(self):
     if not is_admin():
         raise AuthorityError()
     data = SignIndelete().valid_data()
     siaid = data.siaid.data
     check_sia = SignInAward.query.filter_by(SIAid=siaid,
                                             isdelete=False).delete_()
     BASEADMIN().create_action(AdminActionS.delete.value, 'SignInAward',
                               siaid)
     if not check_sia:
         raise ParamsError('已删除')
     return Success('删除设置成功')
Example #23
0
    def shelves(self):
        """下架申请"""
        if is_supplizer():
            usid = request.user.id
            sup = Supplizer.query.filter_by_(SUid=usid).first_('供应商信息错误')
            current_app.logger.info('Supplizer {} shelf magicbox apply'.format(
                sup.SUname))
        elif is_admin():
            usid = request.user.id
            admin = Admin.query.filter_by_(ADid=usid).first_('管理员信息错误')
            current_app.logger.info('Admin {} shelf magicbox apply'.format(
                admin.ADname))
            sup = None
        else:
            raise AuthorityError()
        data = parameter_required(('mbaid', ))
        mbaid = data.get('mbaid')
        pending_box = MagicBoxJoin.query.filter(
            MagicBoxJoin.isdelete == False,
            MagicBoxJoin.MBJstatus == MagicBoxJoinStatus.pending.value,
            MagicBoxJoin.MBSendtime >= datetime.now().date(),
            MagicBoxJoin.MBAid == mbaid).first()
        if pending_box:
            current_app.logger.info('仍存在未完成礼盒 MBJid: {}'.format(
                pending_box.MBJid))
            raise StatusError('该商品仍有正在分享中的礼盒未完成,暂不能下架')

        with db.auto_commit():
            apply_info = MagicBoxApply.query.filter_by_(
                MBAid=mbaid).first_('无此申请记录')
            if sup and apply_info.SUid != usid:
                raise StatusError('只能下架自己的申请')
            if apply_info.MBAstatus != ApplyStatus.agree.value:
                raise StatusError('只能下架已通过的申请')
            apply_info.MBAstatus = ApplyStatus.shelves.value
            if is_admin():
                BASEADMIN().create_action(AdminActionS.update.value,
                                          'MagicBoxApply', mbaid)
            # 返回库存
            product = Products.query.filter_by(PRid=apply_info.PRid,
                                               isdelete=False).first_('商品信息出错')
            mbs_old = MagicBoxApplySku.query.filter(
                MagicBoxApplySku.MBAid == apply_info.MBAid,
                MagicBoxApplySku.isdelete == False,
            ).all()
            for sku in mbs_old:
                sku_instance = ProductSku.query.filter_by(
                    isdelete=False, PRid=product.PRid,
                    SKUid=sku.SKUid).first_('商品sku信息不存在')
                super(CMagicBox, self)._update_stock(int(sku.MBSstock),
                                                     product, sku_instance)
        return Success('下架成功', {'mbaid': mbaid})
Example #24
0
 def create(self):
     form = ItemCreateForm().valid_data()
     psid = form.psid.data
     itname = form.itname.data
     itsort = form.itsort.data
     itdesc = form.itdesc.data
     ittype = form.ittype.data
     itrecommend = form.itrecommend.data
     itid = str(uuid.uuid1())
     with self.sproduct.auto_commit() as s:
         if s.query(Items).filter_by(ITname=itname, ITtype=ittype, isdelete=False).first():
             raise DumpliError("您输入的标签名已存在")
         s_list = []
         # 添加标签
         item_dict = {
             'ITid': itid,
             'ITname': itname,
             'ITsort': itsort,
             'ITdesc': itdesc,
             'ITtype': ittype,
             'ITrecommend': itrecommend
         }
         items_instance = Items.create(item_dict)
         s_list.append(items_instance)
         BASEADMIN().create_action(AdminActionS.insert.value, 'Items', itid)
         # 标签场景标签表
         if psid:
             for psi in psid:
                 s.query(ProductScene).filter_by_({'PSid': psi}).first_('不存在的场景')
                 scene_item_dict = {
                     'PSid': psi,
                     'ITid': itid,
                     'SIid': str(uuid.uuid1())
                 }
                 scene_item_instance = SceneItem.create(scene_item_dict)
                 s_list.append(scene_item_instance)
                 BASEADMIN().create_action(AdminActionS.insert.value, 'SceneItem', psi)
         s.add_all(s_list)
     return Success('添加成功', {'itid': itid})
Example #25
0
    def set_entry(self):
        current_app.logger.info("Admin {} set entry banner".format(request.user.username))
        data = parameter_required(('contentlink', 'enpic', 'enshow'))
        enid = data.get('enid') or str(uuid.uuid1())

        with db.auto_commit():
            en = Entry.query.filter(
                Entry.isdelete == False, Entry.ENid == enid).first()
            if data.get('delete'):
                if not en:
                    raise ParamsError('banner 已删除')
                en.update({'isdelete': True})
                db.session.add(en)
                BASEADMIN().create_action(AdminActionS.delete.value, 'Entry', enid)
                return Success('删除成功', {'enid': enid})

            endict = {
                'contentlink': data.get('contentlink'),
                'ENpic': data.get('enpic'),
                'ENshow': bool(data.get('enshow')),
                'ENtype': data.get('entype')
            }
            if not en:
                endict.setdefault('ENid', enid)
                endict.setdefault('ACid', request.user.id)
                en = Entry.create(endict)
                BASEADMIN().create_action(AdminActionS.insert.value, 'Entry', enid)
                msg = '添加成功'
            else:
                en.update(endict)
                BASEADMIN().create_action(AdminActionS.update.value, 'Entry', enid)
                msg = '修改成功'
            db.session.add(en)

            if en.ENshow:
                Entry.query.filter(
                    Entry.ENid != enid, Entry.isdelete == False, Entry.ENtype == en.ENtype).update({'ENshow': False})
        return Success(msg, {'enid': enid})
Example #26
0
    def update(self):
        form = SceneUpdateForm().valid_data()
        psid, pspic, psname, pssort = form.psid.data, form.pspic.data, form.psname.data, form.pssort.data
        pstimelimited, psstarttime, psendtime = form.pstimelimited.data, form.psstarttime.data, form.psendtime.data
        isdelete = form.isdelete.data
        with db.auto_commit():
            pssort = self._check_sort(pssort)
            product_scene = ProductScene.query.filter(ProductScene.isdelete == False,
                                                      ProductScene.PSid == psid
                                                      ).first_('不存在的场景')
            if isdelete:
                SceneItem.query.filter_by(PSid=psid).delete_()
                product_scene.isdelete = True
                admin_action = AdminActions.create({
                    'ADid': request.user.id,
                    'AAaction': 2,
                    'AAmodel': ProductScene,
                    'AAdetail': request.detail,
                    'AAkey': psid
                })
                db.session.add(admin_action)
                conn.delete(psid)
            else:
                product_scene.update({
                    "PSpic": pspic,
                    "PSname": psname,
                    "PSsort": pssort,
                    "PStimelimited": pstimelimited,
                    "PSstarttime": psstarttime,
                    "PSendtime": psendtime,
                }, null='not')
                db.session.add(product_scene)
                BASEADMIN().create_action(AdminActionS.update.value, 'ProductScene', psid)
            if form.pstimelimited.data:

                from planet.extensions.tasks import cancel_scene_association, celery
                current_app.logger.info('更新限时场景结束时间为 : {} '.format(psendtime))
                # celery.control.revoke(task_id=psid, terminate=True, signal='SIGKILL')
                exist_task = conn.get(psid)
                if exist_task:
                    exist_task = str(exist_task, encoding='utf-8')
                    current_app.logger.info('场景已有任务id: {}'.format(exist_task))
                    celery.AsyncResult(exist_task).revoke()

                scene_task_id = cancel_scene_association.apply_async(args=(psid,),
                                                                     eta=psendtime - timedelta(hours=8), )

                conn.set(psid, scene_task_id)

        return Success('更新成功', {'psid': psid})
Example #27
0
 def set_banner(self):
     current_app.logger.info("Admin {} set index banner".format(request.user.username))
     form = IndexSetBannerForm().valid_data()
     ibid = str(uuid.uuid1())
     with db.auto_commit():
         banner = IndexBanner.create({
             'IBid': ibid,
             'contentlink': form.contentlink.data,
             'IBpic': form.ibpic.data,
             'IBsort': form.ibsort.data,
             'IBshow': form.ibshow.data
         })
         db.session.add(banner)
         BASEADMIN().create_action(AdminActionS.insert.value, 'IndexBanner', ibid)
     return Success('添加成功', {'ibid': ibid})
Example #28
0
    def set_hypermarket_banner(self):
        current_app.logger.info("Admin {} set index banner".format(request.user.username))
        # data = parameter_required(('contentlink', 'hibpic', 'hibshow'))
        data = parameter_required()

        ibid = data.get('hibid') or str(uuid.uuid1())

        with db.auto_commit():
            hib = HypermarketIndexBanner.query.filter(
                HypermarketIndexBanner.isdelete == False, HypermarketIndexBanner.HIBid == ibid).first()
            if data.get('delete'):
                if not hib:
                    raise ParamsError('banner 已删除')
                hib.update({'isdelete': True})
                db.session.add(hib)
                return Success('删除成功', {'hibid': ibid})

            hibsort = self._check_sort(data.get('hibsort'))
            hib_dict = {
                'contentlink': data.get('contentlink'),
                'HIBpic': data.get('hibpic'),
                'HIBsort': hibsort,
                'HIBshow': bool(data.get('hibshow'))
            }
            if not hib:
                hib_dict.setdefault('HIBid', ibid)
                hib = HypermarketIndexBanner.create(hib_dict)
                BASEADMIN().create_action(AdminActionS.insert.value, 'HypermarketIndexBanner', ibid)
                msg = '添加成功'
            else:
                hib.update(hib_dict)
                BASEADMIN().create_action(AdminActionS.update.value, 'HypermarketIndexBanner', ibid)
                msg = '修改成功'
            db.session.add(hib)

        return Success(msg, {'hibid': ibid})
 def del_award(self):
     """删除申请"""
     if not is_supplizer() and not is_admin():
         raise AuthorityError()
     form = ShelfFreshManfirstOrder().valid_data()
     fmfaid = form.fmfaid.data
     with db.auto_commit():
         apply_info = FreshManFirstApply.query.filter_by_(FMFAid=fmfaid).first_('申请未找到或已删除')
         if is_supplizer():
             assert apply_info.SUid == request.user.id, '供应商只能删除自己提交的申请'
         if apply_info.FMFAstatus not in [ApplyStatus.cancle.value, ApplyStatus.reject.value]:
             raise StatusError('只能删除已拒绝或已撤销状态下的申请')
         apply_info.isdelete = True
         if is_admin():
             BASEADMIN().create_action(AdminActionS.delete.value, 'FreshManFirstApply', fmfaid)
     return Success('删除成功', {'fmfaid': fmfaid})
Example #30
0
 def update(self):
     """设置活动的基本信息"""
     form = ActivityUpdateForm().valid_data()
     with db.auto_commit():
         act = form.activity
         act.update({
             'ACbackGround': form.acbackground.data,
             'ACtopPic': form.actoppic.data,
             'ACbutton': form.acbutton.data,
             'ACshow': form.acshow.data,
             'ACdesc': form.acdesc.data,
             'ACname': form.acname.data,
             'ACsort': form.acsort.data,
         })
         db.session.add(act)
         BASEADMIN().create_action(AdminActionS.update.value, 'Activity', str(act.ACid))
     return Success('修改成功')