From 27a8fefc2bbcc2dde97d29bdf5d286f7b11307ea Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Thu, 23 May 2019 18:34:31 +0800 Subject: [PATCH 01/20] =?UTF-8?q?=E6=96=B0=E4=BA=BA=E9=A6=96=E5=8D=95?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E5=88=86=E4=BA=AB=E7=9D=80=E5=92=8C=E8=A2=AB?= =?UTF-8?q?=E5=88=86=E4=BA=AB=E8=80=85=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/control/CFreshManFirstOrder.py | 41 +++++++++++++-------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index 39017dea..5ea7ab0b 100644 --- a/planet/control/CFreshManFirstOrder.py +++ b/planet/control/CFreshManFirstOrder.py @@ -136,22 +136,22 @@ def add_order(self): # 只可以买一次 usid = request.user.id user = get_current_user() - exists_order = OrderMain.query.filter( - OrderMain.USid == usid, - OrderMain.isdelete == False, OrderPart.isdelete == False, - ProductItems.isdelete == False, Items.isdelete == False, - # OrderMain.USid == usid, - # OrderMain.OMstatus == OrderMainStatus.ready.value, - OrderPart.PRid == ProductItems.PRid, - ProductItems.ITid == Items.ITid, - Items.ITname != '开店大礼包', - OrderPart.OMid == OrderMain.OMid, - OrderMain.OMstatus > OrderMainStatus.wait_pay.value - ).first() + # exists_order = OrderMain.query.filter( + # OrderMain.USid == usid, + # OrderMain.isdelete == False, OrderPart.isdelete == False, + # ProductItems.isdelete == False, Items.isdelete == False, + # # OrderMain.USid == usid, + # # OrderMain.OMstatus == OrderMainStatus.ready.value, + # OrderPart.PRid == ProductItems.PRid, + # ProductItems.ITid == Items.ITid, + # Items.ITname != '开店大礼包', + # OrderPart.OMid == OrderMain.OMid, + # OrderMain.OMstatus > OrderMainStatus.wait_pay.value + # ).first() # cuser = CUser() # cuser._check_gift_order() - if exists_order: - raise StatusError('您不是新人') + # if exists_order: + # raise StatusError('您不是新人') try: opaytype = int(data.get('opaytype')) except ValueError: @@ -219,7 +219,6 @@ def add_order(self): if secret_usid: try: from_usid = self._base_decode(secret_usid) - # 来源用户是否购买 current_app.logger.info('该用户直接点击了链接购买 分享人id 是 {}'.format(from_usid)) if from_usid == user.USid: from_usid = None @@ -240,10 +239,10 @@ def add_order(self): current_app.logger.info('get share user id = {}'.format(from_usid)) - from_user_order = OrderMain.query.filter_by().filter( + from_user_order = OrderMain.query.filter( + OrderMain.isdelete == False, OrderMain.USid == from_usid, OrderMain.OMstatus > OrderMainStatus.wait_pay.value, - OrderMain.OMfrom == OrderFrom.fresh_man.value, ).first() current_app.logger.info('get share user order = {}'.format(from_user_order)) @@ -318,10 +317,10 @@ def add_order(self): fresh_man_join_dict['UPid'] = from_usid join_instance = FreshManJoinFlow.create(fresh_man_join_dict) db.session.add(join_instance) - # 删除未支付的新人订单 - if exists_order: - exists_order.isdelete = True - db.session.add(exists_order) + # # 删除未支付的新人订单 + # if exists_order: + # exists_order.isdelete = True + # db.session.add(exists_order) from planet.extensions.tasks import auto_cancle_order auto_cancle_order.apply_async(args=([omid],), countdown=30 * 60, expires=40 * 60, ) From 86e3dbb492911ac39c9b88cfea22e186cbc175dd Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Thu, 23 May 2019 19:45:32 +0800 Subject: [PATCH 02/20] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E9=A6=96=E5=8D=95?= =?UTF-8?q?=E6=96=B0=E4=BA=BA=E9=99=90=E5=88=B6=EF=BC=8C=E6=9C=AA=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/control/CFreshManFirstOrder.py | 38 ++++++++++++--------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index 5ea7ab0b..1600ae43 100644 --- a/planet/control/CFreshManFirstOrder.py +++ b/planet/control/CFreshManFirstOrder.py @@ -133,25 +133,20 @@ def add_order(self): Client(omclient) except Exception as e: raise ParamsError('客户端或商品来源错误') - # 只可以买一次 + # 只可以参加一次活动 usid = request.user.id user = get_current_user() - # exists_order = OrderMain.query.filter( - # OrderMain.USid == usid, - # OrderMain.isdelete == False, OrderPart.isdelete == False, - # ProductItems.isdelete == False, Items.isdelete == False, - # # OrderMain.USid == usid, - # # OrderMain.OMstatus == OrderMainStatus.ready.value, - # OrderPart.PRid == ProductItems.PRid, - # ProductItems.ITid == Items.ITid, - # Items.ITname != '开店大礼包', - # OrderPart.OMid == OrderMain.OMid, - # OrderMain.OMstatus > OrderMainStatus.wait_pay.value - # ).first() - # cuser = CUser() - # cuser._check_gift_order() - # if exists_order: - # raise StatusError('您不是新人') + exists_order = OrderMain.query.filter( + OrderMain.USid == usid, + OrderMain.isdelete == False, OrderPart.isdelete == False, + OrderMain.OMfrom == OrderFrom.fresh_man.value, + OrderPart.OMid == OrderMain.OMid, + OrderMain.OMstatus > OrderMainStatus.wait_pay.value + ).first() + cuser = CUser() + cuser._check_gift_order() + if exists_order: + raise StatusError('您不是第一次参加此活动') try: opaytype = int(data.get('opaytype')) except ValueError: @@ -242,6 +237,7 @@ def add_order(self): from_user_order = OrderMain.query.filter( OrderMain.isdelete == False, OrderMain.USid == from_usid, + OrderMain.OMfrom == OrderFrom.fresh_man.value, OrderMain.OMstatus > OrderMainStatus.wait_pay.value, ).first() @@ -317,10 +313,10 @@ def add_order(self): fresh_man_join_dict['UPid'] = from_usid join_instance = FreshManJoinFlow.create(fresh_man_join_dict) db.session.add(join_instance) - # # 删除未支付的新人订单 - # if exists_order: - # exists_order.isdelete = True - # db.session.add(exists_order) + # 删除未支付的新人订单 + if exists_order: + exists_order.isdelete = True + db.session.add(exists_order) from planet.extensions.tasks import auto_cancle_order auto_cancle_order.apply_async(args=([omid],), countdown=30 * 60, expires=40 * 60, ) From 559cf71b673c07f4640ef79420cd01de9a0feffa Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Mon, 27 May 2019 23:29:23 +0800 Subject: [PATCH 03/20] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/api/v2/AFreshManFirstOrder.py | 1 + planet/api/v2/AGuessNum.py | 1 + planet/control/CFreshManFirstOrder.py | 111 ++++++++++++++++++++++++++ planet/control/CGuessNum.py | 95 ++++++++++++++++++++++ planet/extensions/loggers.py | 4 +- planet/models/activity.py | 2 +- 6 files changed, 211 insertions(+), 3 deletions(-) diff --git a/planet/api/v2/AFreshManFirstOrder.py b/planet/api/v2/AFreshManFirstOrder.py index 7b187372..a8bdeb88 100644 --- a/planet/api/v2/AFreshManFirstOrder.py +++ b/planet/api/v2/AFreshManFirstOrder.py @@ -19,6 +19,7 @@ def post(self, fresh_man): apis = { 'add_order': self.creshman.add_order, 'apply_award': self.creshman.apply_award, + 'reapply_award': self.creshman.reapply_award, 'update_award': self.creshman.update_award, 'shelf_award': self.creshman.shelf_award, 'delete': self.creshman.del_award, diff --git a/planet/api/v2/AGuessNum.py b/planet/api/v2/AGuessNum.py index d968c915..cc658631 100644 --- a/planet/api/v2/AGuessNum.py +++ b/planet/api/v2/AGuessNum.py @@ -13,6 +13,7 @@ def post(self, guess_num): 'recv_award': self.cguessnum.recv_award, 'apply_award': self.cguessnum.apply_award, 'update_apply': self.cguessnum.update_apply, + 'reapply_award': self.cguessnum.reapply_award, 'shelf_award': self.cguessnum.shelf_award, 'delete': self.cguessnum.delete_apply, 'shelves': self.cguessnum.shelves, diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index 1600ae43..8f3847fd 100644 --- a/planet/control/CFreshManFirstOrder.py +++ b/planet/control/CFreshManFirstOrder.py @@ -410,6 +410,117 @@ def apply_award(self): fresh_first_apply.FMFAid, apply_from) return Success('申请添加成功', data=fresh_first_apply.FMFAid) + def reapply_award(self): + """重新申请添加奖品""" + if not (is_supplizer() or is_admin()): + raise AuthorityError() + data = parameter_required(('prid', 'prprice', 'skus', 'fmfaid')) + prid = data.get('prid') + fmfaid = data.get('fmfaid') + apply_from = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value + product = Products.query.filter(Products.PRid == prid, Products.isdelete == False, + Products.PRstatus.in_([ProductStatus.usual.value, ProductStatus.auditing.value]) + ).first_('当前商品状态不允许进行申请') + product_brand = ProductBrand.query.filter(ProductBrand.PBid == product.PBid).first_('商品所在信息不全') + with db.auto_commit(): + fresh_first_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == fmfaid, + FreshManFirstApply.isdelete == False).first_('申请单不存在') + # 是否能再次申请 + starttime = fresh_first_apply.AgreeStartime + endtime = fresh_first_apply.AgreeEndtime + if fresh_first_apply.FMFAstatus == ApplyStatus.wait_check.value: + raise ParamsError('正在申请的活动不能再次发起申请') + elif fresh_first_apply.FMFAstatus == ApplyStatus.shelves.value: + raise ParamsError('已下架的活动不能再次发起申请') + elif endtime < date.today: + raise ParamsError('已结束的活动不能再次发起申请') + elif starttime <= date.today: + raise ParamsError('已开始的活动不能再次发起申请') + # 创建新记录 + apply = FreshManFirstApply.create({ + 'FMFAid': str(uuid.uuid1()), + 'SUid': request.user.id, + 'FMFAstartTime': data.get('fmfastarttime'), + 'FMFAendTime': data.get('fmfaendtime'), + 'FMFAfrom': apply_from, + 'AgreeStartime': data.get('fmfastarttime'), + 'AgreeEndtime': data.get('fmfaendtime'), + 'ParentFMFAid': fmfaid + }) + db.session.add(apply) + #对ParentFMFAid进行检验 + if fresh_first_apply.FMFAstatus == ApplyStatus.reject.value: + fresh_first_apply.delete_() + if is_admin(): + BASEADMIN.create_action(AdminActionS.update.value, 'FreshManFirstApply', fmfaid) + # 商品, 暂时只可以添加一个商品 + fresh_first_product = FreshManFirstProduct.query.filter( + FreshManFirstProduct.isdelete == False, + FreshManFirstProduct.FMFAid == fmfaid, + FreshManFirstProduct.PRid == prid, + ).first() + if not fresh_first_product: + # 如果没有查找到, 则说明是更换了参与商品, 因此删除旧的 + FreshManFirstProduct.query.filter(FreshManFirstProduct.FMFAid == fmfaid).delete_() + fresh_first_product = FreshManFirstProduct() + fresh_first_product.FMFPid = str(uuid.uuid1()) + fresh_first_product = fresh_first_product.update({ + # 'FMFAid': fresh_first_apply.FMFAid, + 'PRid': prid, + 'PRmainpic': product.PRmainpic, + 'PRtitle': product.PRtitle, + 'PBid': product.PBid, + 'PBname': product_brand.PBname, + 'PRattribute': product.PRattribute, + 'PRdescription': product.PRdescription, + 'PRprice': data.get('prprice') + }) + db.session.add(fresh_first_product) + skus = data.get('skus') + skuids = [] + for sku in skus: + skuid = sku.get('skuid') + skuids.append(skuid) + skuprice = sku.get('skuprice') + skustock = sku.get('skustock') + sku = ProductSku.query.filter( + ProductSku.isdelete == False, + ProductSku.PRid == prid, + ProductSku.SKUid == skuid + ).first_('商品sku信息不存在') + fresh_first_sku = FreshManFirstSku.query.filter( + FreshManFirstApply.isdelete == False, + FreshManFirstSku.FMFPid == fresh_first_product.FMFPid, + FreshManFirstSku.SKUid == skuid + ).first() + self._update_stock(-int(skustock), product, sku) + if not fresh_first_sku: + fresh_first_sku = FreshManFirstSku() + fresh_first_sku.FMFSid = str(uuid.uuid1()) + fresh_first_sku.update({ + 'FMFSid': str(uuid.uuid1()), + 'FMFPid': fresh_first_product.FMFPid, + 'FMFPstock': skustock, + 'SKUid': skuid, + 'SKUprice': float(skuprice), + }) + db.session.add(fresh_first_sku) + # self._update_stock() + # 删除其他的不需要的新人首单sku + FreshManFirstSku.query.filter( + FreshManFirstSku.isdelete == False, + FreshManFirstSku.FMFPid == fresh_first_product.FMFPid, + FreshManFirstSku.SKUid.notin_(skuids) + ).delete_(synchronize_session=False) + + Approval.query.filter( + Approval.isdelete == False, + Approval.AVcontent == fmfaid + ).delete_() + BASEAPPROVAL().create_approval('tofreshmanfirstproduct', request.user.id, + fresh_first_apply.FMFAid, apply_from) + return Success('申请单修改成功', data=fresh_first_apply.FMFAid) + def update_award(self): """修改""" if not (is_supplizer() or is_admin()): diff --git a/planet/control/CGuessNum.py b/planet/control/CGuessNum.py index fd3b36d7..b3f87307 100644 --- a/planet/control/CGuessNum.py +++ b/planet/control/CGuessNum.py @@ -404,6 +404,101 @@ def list(self): request.mount = total_count return Success(data=ad_return_list) + def reapply_award(self): + """修改猜数字奖品申请, 一次只能处理一天的一个商品""" + if not (is_supplizer() or is_admin()): + raise AuthorityError() + # data = parameter_required(('gnaaid', 'skuprice', 'skustock')) + data = parameter_required(('gnaaid', 'prid', 'prprice', 'skus')) + with db.auto_commit(): + # 获取申请单 + apply_info = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == data.get('gnaaid'), + GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.reject.value, + ApplyStatus.cancle.value]) + ).first_('只有已拒绝或撤销状态的申请可以进行修改') + if apply_info.SUid != request.user.id: + raise AuthorityError('仅可修改自己提交的申请') + gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value + # 解除和原商品属性的绑定 + GuessNumAwardProduct.query.filter_by(GNAAid=apply_info.GNAAid, isdelete=False).delete_() + # product_old.isdelete = True + + # 如果没有修改时间,则用之前时间 + gnaastarttime = data.get('gnaastarttime') or apply_info.GNAAstarttime + # 如果修改了时间,检测是否有冲突 + exist_apply_list = list() + + # 重新添加商品属性 + skus = data.get('skus') + product = Products.query.filter_by( + PRid=data.get('prid'), isdelete=False, PRstatus=ProductStatus.usual.value).first_('商品未上架') + product_brand = ProductBrand.query.filter_by(PBid=product.PBid).first_('商品信息不全') + # 新的商品属性 + gnap = GuessNumAwardProduct.create({ + 'GNAPid': str(uuid.uuid1()), + 'GNAAid': apply_info.GNAAid, + 'PRid': product.PRid, + 'PRmainpic': product.PRmainpic, + 'PRtitle': product.PRtitle, + 'PBid': product.PBid, + 'PBname': product_brand.PBname, + 'PRattribute': product.PRattribute, + 'PRdescription': product.PRdescription, + 'PRprice': data.get('prprice') + }) + db.session.add(gnap) + # 新的sku属性 + for sku in skus: + # 冲突校验。 如果冲突,则跳过,并予以提示 + exits_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.GNAAid != apply_info.GNAAid, + GuessNumAwardApply.GNAAstarttime == gnaastarttime, + GuessNumAwardProduct.GNAAid == GuessNumAwardApply.GNAAid, + GuessNumAwardProduct.PRid == data.get('prid'), + GuessNumAwardSku.SKUid == sku.get('skuid'), + GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, + GuessNumAwardProduct.isdelete == False, + GuessNumAwardSku.isdelete == False, + GuessNumAwardApply.isdelete == False + ).first() + + skuid = sku.get('skuid') + skuprice = sku.get('skuprice') + skustock = sku.get('skustock') + SKUdiscountone = sku.get('skudiscountone') + SKUdiscounttwo = sku.get('skudiscounttwo') + SKUdiscountthree = sku.get('skudiscountthree') + SKUdiscountfour = sku.get('skudiscountfour') + SKUdiscountfive = sku.get('skudiscountfive') + SKUdiscountsix = sku.get('skudiscountsix') + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') + + if exits_apply: + exist_apply_list.append(sku_instance) + continue + # 库存处理 + self._update_stock(-int(skustock), product, sku_instance) + + gnas = GuessNumAwardSku.create({ + 'GNASid': str(uuid.uuid1()), + 'GNAPid': gnap.GNAPid, + 'SKUid': skuid, + 'SKUprice': skuprice, + 'SKUstock': skustock, + 'SKUdiscountone': SKUdiscountone, + 'SKUdiscounttwo': SKUdiscounttwo, + 'SKUdiscountthree': SKUdiscountthree, + 'SKUdiscountfour': SKUdiscountfour, + 'SKUdiscountfive': SKUdiscountfive, + 'SKUdiscountsix': SKUdiscountsix, + }) + db.session.add(gnas) + apply_info.GNAAstatus = ApplyStatus.wait_check.value + super(CGuessNum, self).create_approval('toguessnum', request.user.id, apply_info.GNAAid, gnaafrom) + + return Success('修改成功', {'gnaaid': apply_info.GNAAid, 'skus': exist_apply_list}) + def apply_award(self): """申请添加奖品""" if not (is_supplizer() or is_admin()): diff --git a/planet/extensions/loggers.py b/planet/extensions/loggers.py index 1beda8a8..06452514 100644 --- a/planet/extensions/loggers.py +++ b/planet/extensions/loggers.py @@ -8,7 +8,7 @@ from flask import request from ..common.error_response import ApiError, BaseError, SystemError -from ..common.request_handler import gennerc_log +# from ..common.request_handler import gennerc_log from ..common.success_response import Success @@ -64,7 +64,7 @@ def error404(e): def framework_error(e): if isinstance(e, Success): return e - gennerc_log(e) + # gennerc_log(e) if isinstance(e, BaseError): return e else: diff --git a/planet/models/activity.py b/planet/models/activity.py index 18076135..5bcdfb99 100644 --- a/planet/models/activity.py +++ b/planet/models/activity.py @@ -232,7 +232,7 @@ class FreshManFirstApply(Base): FMFArejectReson = Column(String(255), comment='拒绝理由') AgreeStartime = Column(Date, default=FMFAstartTime, comment='最终确认起始时间') # 同意之后不可为空 AgreeEndtime = Column(Date, default=FMFAendTime, comment='最终确认结束时间') - + ParentFMFAid = Column(String(64),default=None) class FreshManFirstProduct(Base): """新人首单申请商品""" From c8f16d238107772101886edcf6d8a8ad5899373e Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Tue, 28 May 2019 00:23:15 +0800 Subject: [PATCH 04/20] =?UTF-8?q?=E6=96=B0=E4=BA=BA=E9=A6=96=E5=8D=95?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E5=A2=9E=E5=8A=A0=E9=87=8D=E6=96=B0=E7=94=B3?= =?UTF-8?q?=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/control/CFreshManFirstOrder.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index 5a453aa9..a4066f91 100644 --- a/planet/control/CFreshManFirstOrder.py +++ b/planet/control/CFreshManFirstOrder.py @@ -450,7 +450,8 @@ def reapply_award(self): db.session.add(apply) #对ParentFMFAid进行检验 if fresh_first_apply.FMFAstatus == ApplyStatus.reject.value: - fresh_first_apply.delete_() + fresh_first_apply.update({'isdelete': True}) + db.session.add(fresh_first_apply) if is_admin(): BASEADMIN.create_action(AdminActionS.update.value, 'FreshManFirstApply', fmfaid) # 商品, 暂时只可以添加一个商品 From c5a941a12f244f3aa456a34f8dbc63b5b88c5ee5 Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Tue, 28 May 2019 00:40:58 +0800 Subject: [PATCH 05/20] =?UTF-8?q?=E7=8C=9C=E6=95=B0=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=87=8D=E6=96=B0=E7=94=B3=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/control/CGuessNum.py | 27 +++++++++++++++++++++++++-- planet/models/activity.py | 1 + 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/planet/control/CGuessNum.py b/planet/control/CGuessNum.py index b3f87307..04cca5b6 100644 --- a/planet/control/CGuessNum.py +++ b/planet/control/CGuessNum.py @@ -413,11 +413,18 @@ def reapply_award(self): with db.auto_commit(): # 获取申请单 apply_info = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == data.get('gnaaid'), - GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.reject.value, + GuessNumAwardApply.GNAAstatus != ApplyStatus.wait_check.value, + GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.agree.value, ApplyStatus.cancle.value]) - ).first_('只有已拒绝或撤销状态的申请可以进行修改') + ).first_('已下架或审核中的申请不可以进行修改') if apply_info.SUid != request.user.id: raise AuthorityError('仅可修改自己提交的申请') + starttime = apply_info.AgreeStartime + endtime = apply_info.AgreeEndtime + if endtime < date.today: + raise ParamsError('已结束的活动不能再次发起申请') + elif starttime <= date.today: + raise ParamsError('已开始的活动不能再次发起申请') gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value # 解除和原商品属性的绑定 GuessNumAwardProduct.query.filter_by(GNAAid=apply_info.GNAAid, isdelete=False).delete_() @@ -428,6 +435,22 @@ def reapply_award(self): # 如果修改了时间,检测是否有冲突 exist_apply_list = list() + # 创建新记录 + gnaa = GuessNumAwardApply.create({ + 'GNAAid': str(uuid.uuid1()), + 'SUid': request.user.id, + # 'GNAPid': data.get('prid'), + 'GNAAstarttime': gnaastarttime, + 'GNAAendtime': apply_info.AgreeEndtime, + 'GNAAfrom': gnaafrom, + 'GNAAstatus': ApplyStatus.wait_check.value, + 'ParentGNAAid':apply_info.GNAAid + }) + db.session.add(gnaa) + #对ParentFMFAid进行检验 + if apply_info.FMFAstatus == ApplyStatus.reject.value: + apply_info.update({'isdelete': True}) + db.session.add(apply_info) # 重新添加商品属性 skus = data.get('skus') product = Products.query.filter_by( diff --git a/planet/models/activity.py b/planet/models/activity.py index 5bcdfb99..ffd239ed 100644 --- a/planet/models/activity.py +++ b/planet/models/activity.py @@ -119,6 +119,7 @@ class GuessNumAwardApply(Base): GNAArejectReason = Column(String(64), comment='拒绝理由') AgreeStartime = Column(Date, default=GNAAstarttime, comment='最终确认起始时间') # 同意之后不可为空 AgreeEndtime = Column(Date, default=GNAAendtime, comment='最终确认结束时间') + ParentGNAAid = Column(String(64), default=None) class GuessNumAwardProduct(Base): From 62a686085d7574c7193e0f8a2093972877002e72 Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Tue, 28 May 2019 17:51:39 +0800 Subject: [PATCH 06/20] =?UTF-8?q?=E6=96=B0=E4=BA=BA=E9=A6=96=E5=8D=95?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/api/v2/AMagicBox.py | 1 + planet/config/enums.py | 1 + planet/control/CApproval.py | 22 +++++++++ planet/control/CFreshManFirstOrder.py | 47 ++++++++++++++---- planet/control/CGuessNum.py | 17 ++++--- planet/control/CMagicBox.py | 70 +++++++++++++++++++++++++++ 6 files changed, 141 insertions(+), 17 deletions(-) diff --git a/planet/api/v2/AMagicBox.py b/planet/api/v2/AMagicBox.py index a01b4797..d133acb7 100644 --- a/planet/api/v2/AMagicBox.py +++ b/planet/api/v2/AMagicBox.py @@ -19,6 +19,7 @@ def post(self, magicbox): 'join': self.cmagicbox.join, 'recv_award': self.cmagicbox.recv_award, 'apply_award': self.cmagicbox.apply_award, + 'reapply_award': self.cmagicbox.reapply_award, 'update_apply': self.cmagicbox.update_apply, 'shelf_award': self.cmagicbox.shelf_award, 'award_detail': self.cmagicbox.award_detail, diff --git a/planet/config/enums.py b/planet/config/enums.py index be6f2f24..4a3bfac6 100644 --- a/planet/config/enums.py +++ b/planet/config/enums.py @@ -104,6 +104,7 @@ class ApplyFrom(Enum): class ApplyStatus(Enum): + lose_effect = -40, '已失效' shelves = -30, '已下架' cancle = -20, '已撤销' reject = -10, '已拒绝' diff --git a/planet/control/CApproval.py b/planet/control/CApproval.py index a3a12434..12c0dc99 100644 --- a/planet/control/CApproval.py +++ b/planet/control/CApproval.py @@ -1197,6 +1197,28 @@ def refuse_magicbox(self, approval_model, refuse_abo): def agree_freshmanfirstproduct(self, approval_model): ffa = FreshManFirstApply.query.filter_by_(FMFAid=approval_model.AVcontent).first_('新人商品申请数据异常') + parent_apply = ffa + # 将父id和其他同等级的id改为失效 + while parent_apply.ParentFMFAid != None: + parent_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, + FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, + FreshManFirstApply.isdelete == False).first() + if parent_apply: + children_apply = FreshManFirstApply.query.filter( + FreshManFirstApply.ParentFMFAid == parent_apply.ParentFMFAid, + FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, + FreshManFirstApply.isdelete == False).all() + if children_apply: + for child_apply in children_apply: + child_apply.update({ + 'FMFAstatus': ApplyStatus.lose_effect.value + }) + parent_apply.update({ + 'FMFAstatus': ApplyStatus.lose_effect.value + }) + break + parent_apply = FreshManFirstApply.query.filter( + FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() ffa.FMFAstatus = ApplyStatus.agree.value def refuse_freshmanfirstproduct(self, approval_model, refuse_abo): diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index a4066f91..825b12a5 100644 --- a/planet/control/CFreshManFirstOrder.py +++ b/planet/control/CFreshManFirstOrder.py @@ -59,7 +59,7 @@ def list(self): def get(self): """获取单个新人商品""" - data = parameter_required(('fmfpid', )) + data = parameter_required(('fmfpid',)) fmfpid = data.get('fmfpid') fresh_man_first_product = FreshManFirstProduct.query.filter_by_({ 'FMFPid': fmfpid @@ -340,8 +340,8 @@ def apply_award(self): prid = data.get('prid') apply_from = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value product = Products.query.filter(Products.PRid == prid, Products.isdelete == False, - Products.PRstatus.in_([ProductStatus.usual.value, ProductStatus.auditing.value]) - ).first_('当前商品状态不允许进行申请') + Products.PRstatus.in_([ProductStatus.usual.value, ProductStatus.auditing.value]) + ).first_('当前商品状态不允许进行申请') product_brand = ProductBrand.query.filter(ProductBrand.PBid == product.PBid).first_('商品所在信息不全') with db.auto_commit(): fresh_first_apply = FreshManFirstApply.create({ @@ -426,16 +426,44 @@ def reapply_award(self): fresh_first_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == fmfaid, FreshManFirstApply.isdelete == False).first_('申请单不存在') # 是否能再次申请 - starttime = fresh_first_apply.AgreeStartime - endtime = fresh_first_apply.AgreeEndtime if fresh_first_apply.FMFAstatus == ApplyStatus.wait_check.value: raise ParamsError('正在申请的活动不能再次发起申请') elif fresh_first_apply.FMFAstatus == ApplyStatus.shelves.value: raise ParamsError('已下架的活动不能再次发起申请') - elif endtime < date.today: + starttime = fresh_first_apply.AgreeStartime + endtime = fresh_first_apply.AgreeEndtime + if endtime < date.today: raise ParamsError('已结束的活动不能再次发起申请') elif starttime <= date.today: raise ParamsError('已开始的活动不能再次发起申请') + # 父活动和基于父活动的所有再次申请通过的活动都不能是活动开始状态 + parent_apply = fresh_first_apply + while parent_apply.ParentFMFAid != None: + parent_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, + FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, + FreshManFirstApply.isdelete == False).first() + if parent_apply: + children_apply = FreshManFirstApply.query.filter( + FreshManFirstApply.ParentFMFAid == parent_apply.ParentFMFAid, + FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, + FreshManFirstApply.isdelete == False).all() + if children_apply: + for child_apply in children_apply: + starttime = child_apply.AgreeStartime + endtime = child_apply.AgreeEndtime + if endtime < date.today: + raise ParamsError('已结束的活动不能再次发起申请') + elif starttime <= date.today: + raise ParamsError('已开始的活动不能再次发起申请') + starttime = parent_apply.AgreeStartime + endtime = parent_apply.AgreeEndtime + if endtime < date.today: + raise ParamsError('已结束的活动不能再次发起申请') + elif starttime <= date.today: + raise ParamsError('已开始的活动不能再次发起申请') + break + parent_apply = FreshManFirstApply.query.filter( + FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() # 创建新记录 apply = FreshManFirstApply.create({ 'FMFAid': str(uuid.uuid1()), @@ -448,7 +476,7 @@ def reapply_award(self): 'ParentFMFAid': fmfaid }) db.session.add(apply) - #对ParentFMFAid进行检验 + # 对ParentFMFAid进行检验 if fresh_first_apply.FMFAstatus == ApplyStatus.reject.value: fresh_first_apply.update({'isdelete': True}) db.session.add(fresh_first_apply) @@ -615,9 +643,10 @@ def update_award(self): def award_detail(self): """查看申请详情""" - data = parameter_required(('fmfaid', )) + data = parameter_required(('fmfaid',)) fmfaid = data.get('fmfaid') - apply = FreshManFirstApply.query.filter(FreshManFirstApply.isdelete == False, FreshManFirstApply.FMFAid == fmfaid).first_('该申请不存在') + apply = FreshManFirstApply.query.filter(FreshManFirstApply.isdelete == False, + FreshManFirstApply.FMFAid == fmfaid).first_('该申请不存在') apply.fill('FMFAstatus_zh', ApplyStatus(apply.FMFAstatus).zh_value) if apply.FMFAfrom == ApplyFrom.platform.value: admin = Admin.query.filter(Admin.ADid == apply.SUid).first() diff --git a/planet/control/CGuessNum.py b/planet/control/CGuessNum.py index 04cca5b6..4c2a5428 100644 --- a/planet/control/CGuessNum.py +++ b/planet/control/CGuessNum.py @@ -32,7 +32,7 @@ def creat(self): date_now = datetime.now() current_app.logger.info('get week is {}'.format(date_now.weekday())) if date_now.hour == 14 and date_now.minute > 50: - raise StatusError('15点以后不开放') + raise StatusError('15点以后不开放') if date_now.hour > 15: raise StatusError('15点以后不开放') if date_now.weekday() in [5, 6]: @@ -111,7 +111,7 @@ def history_join(self): year = form.year.data month = form.month.data try: - year_month = datetime.strptime(year + '-' + month, '%Y-%m') + year_month = datetime.strptime(year + '-' + month, '%Y-%m') except ValueError as e: raise ParamsError('时间参数异常') usid = request.user.id @@ -199,7 +199,7 @@ def recv_award(self): user = User.query.filter_by(USid=request.user.id).first_('用户信息丢失') # 商品品牌信息 pbid = gnap.PBid - product_brand_instance = ProductBrand.query.filter_by(PBid=pbid, isdelete= False).first() + product_brand_instance = ProductBrand.query.filter_by(PBid=pbid, isdelete=False).first() # 商品分类 product_category = ProductCategory.query.filter_by(PCid=gnap.PCid, isdelete=False).first() # sku详情 @@ -444,10 +444,10 @@ def reapply_award(self): 'GNAAendtime': apply_info.AgreeEndtime, 'GNAAfrom': gnaafrom, 'GNAAstatus': ApplyStatus.wait_check.value, - 'ParentGNAAid':apply_info.GNAAid + 'ParentGNAAid': apply_info.GNAAid }) db.session.add(gnaa) - #对ParentFMFAid进行检验 + # 对ParentFMFAid进行检验 if apply_info.FMFAstatus == ApplyStatus.reject.value: apply_info.update({'isdelete': True}) db.session.add(apply_info) @@ -620,7 +620,7 @@ def update_apply(self): # 获取申请单 apply_info = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == data.get('gnaaid'), GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.reject.value, - ApplyStatus.cancle.value]) + ApplyStatus.cancle.value]) ).first_('只有已拒绝或撤销状态的申请可以进行修改') if apply_info.SUid != request.user.id: raise AuthorityError('仅可修改自己提交的申请') @@ -732,7 +732,7 @@ def shelf_award(self): # 获取原商品属性 gnap_old = GuessNumAwardProduct.query.filter(GuessNumAwardProduct.GNAAid == apply_info.GNAAid, - GuessNumAwardProduct.isdelete == False).first() + GuessNumAwardProduct.isdelete == False).first() product = Products.query.filter_by(PRid=gnap_old.PRid, isdelete=False).first_('商品信息出错') # 获取原sku属性 gnas_old = GuessNumAwardSku.query.filter( @@ -775,7 +775,8 @@ def delete_apply(self): apply_info = GuessNumAwardApply.query.filter_by_(GNAAid=gnaaid).first_('无此申请记录') if sup: assert apply_info.SUid == usid, '供应商只能删除自己提交的申请' - if apply_info.GNAAstatus not in [ApplyStatus.cancle.value, ApplyStatus.reject.value, ApplyStatus.shelves.value]: + if apply_info.GNAAstatus not in [ApplyStatus.cancle.value, ApplyStatus.reject.value, + ApplyStatus.shelves.value]: raise StatusError('只能删除已拒绝或已撤销状态下的申请') apply_info.isdelete = True if is_admin(): diff --git a/planet/control/CMagicBox.py b/planet/control/CMagicBox.py index 69dc323f..5f453399 100644 --- a/planet/control/CMagicBox.py +++ b/planet/control/CMagicBox.py @@ -443,6 +443,76 @@ def apply_award(self): [self.create_approval('tomagicbox', request.user.id, mbaid, mbafrom) for mbaid in mbaid_list] return Success('申请添加成功', {'mbaid': mbaid_list}) + + def reapply_award(self): + """修改魔盒申请""" + if not (is_supplizer() or is_admin()): + raise AuthorityError() + data = parameter_required(('skuid', 'prid', 'skustock', 'mbastarttime', 'skuprice', + 'skuminprice', 'gearsone', 'gearstwo', 'gearsthree')) + mbaid, skuid, prid, skustock = data.get('mbaid'), data.get('skuid'), data.get('prid'), data.get('skustock') + gearsone, gearstwo, gearsthree = data.get('gearsone'), data.get('gearstwo'), data.get('gearsthree') + if not isinstance(gearsone, list): + raise ParamsError('gearsone格式错误') + elif not isinstance(gearstwo, list): + raise ParamsError('gearstwo格式错误') + elif not isinstance(gearsthree, list): + raise ParamsError('gearsthree格式错误') + gearsone, gearstwo, gearsthree = json.dumps(gearsone), json.dumps(gearstwo), json.dumps(gearsthree) + for test_str in (gearsone, gearstwo, gearsthree): + if not re.match(r'^\[(\"\d+\-\d+\"\,? ?)+\]$', test_str): + raise ParamsError('档次变化金额只能填写数字') + apply_info = MagicBoxApply.query.filter(MagicBoxApply.MBAid == mbaid, + MagicBoxApply.MBAstatus.in_([ApplyStatus.reject.value, + ApplyStatus.cancle.value]) + ).first_('只有已拒绝或撤销状态下的申请可以进行修改') + + if apply_info.SUid != request.user.id: + raise AuthorityError('仅可修改自己提交的申请') + mbafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value + sku = ProductSku.query.filter_by_(SKUid=skuid).first_('没有该skuid信息') + product = Products.query.filter(Products.PRid == prid, Products.isdelete == False, + Products.PRstatus == ProductStatus.usual.value + ).first_('仅可将已上架的商品用于申请') # 当前商品状态不允许进行申请 + assert sku.PRid == prid, 'sku与商品信息不对应' + other_apply_info = MagicBoxApply.query.filter(MagicBoxApply.isdelete == False, + MagicBoxApply.MBAid != mbaid, + MagicBoxApply.MBAstatus.notin_( + [ApplyStatus.cancle.value, ApplyStatus.reject.value]), + MagicBoxApply.OSid == apply_info.OSid, + ).first() + current_app.logger.info("其他的同批次共用库存申请 --> {}".format(other_apply_info)) + with db.auto_commit(): + award_dict = { + 'SUid': request.user.id, + 'SKUid': skuid, + 'PRid': prid, + 'PBid': product.PBid, + 'MBAstarttime': data.get('mbastarttime'), + 'MBAendtime': data.get('mbastarttime'), + 'SKUprice': float(data.get('skuprice', 0.01)), + 'SKUminPrice': float(data.get('skuminprice', 0.01)), + 'Gearsone': gearsone, + 'Gearstwo': gearstwo, + 'Gearsthree': gearsthree, + # 'SKUstock': int(skustock), + 'MBAstatus': ApplyStatus.wait_check.value, + 'MBAfrom': mbafrom, + } + award_dict = {k: v for k, v in award_dict.items() if v is not None} + MagicBoxApply.query.filter_by_(MBAid=mbaid).update(award_dict) + if is_admin(): + BASEADMIN.create_action(AdminAction.update.value, 'MagicBoxApply', mbaid) + # 是否修改库存 + if not other_apply_info: + # 如果没有同批正在上架或审核中的,将库存从商品中重新减出来 + out_stock = OutStock.query.filter(OutStock.isdelete == False, OutStock.OSid == apply_info.OSid + ).first() + super(CMagicBox, self)._update_stock(-out_stock.OSnum, skuid=apply_info.SKUid) + + # 重新添加到审批流 + super(CMagicBox, self).create_approval('tomagicbox', request.user.id, mbaid, mbafrom) + return Success('修改成功', {'mbaid': mbaid}) def update_apply(self): """修改魔盒申请""" From 7e615673e0170e84a2aaadd64a1c0f75178a38e7 Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Tue, 28 May 2019 18:23:12 +0800 Subject: [PATCH 07/20] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=A4=A7?= =?UTF-8?q?=E6=95=B0=E6=B4=BB=E5=8A=A8=E7=9A=84=E9=87=8D=E6=96=B0=E5=BC=80?= =?UTF-8?q?=E5=A7=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/control/CApproval.py | 22 ++++++++++++++++++++++ planet/control/CGuessNum.py | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/planet/control/CApproval.py b/planet/control/CApproval.py index 12c0dc99..a385dad1 100644 --- a/planet/control/CApproval.py +++ b/planet/control/CApproval.py @@ -1123,6 +1123,28 @@ def refuse_publish(self, approval_model, refuse_abo): def agree_guessnum(self, approval_model): gnaa = GuessNumAwardApply.query.filter_by_(GNAAid=approval_model.AVcontent).first_('猜数字商品申请数据异常') + parent_apply = gnaa + # 将父id和其他同等级的id改为失效 + while parent_apply.ParentFMFAid != None: + parent_apply = FreshManFirstApply.query.filter(GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, + GuessNumAwardApply.GNAAstatus == ApplyStatus.agree.value, + GuessNumAwardApply.isdelete == False).first() + if parent_apply: + children_apply = GuessNumAwardApply.query.filter( + FreshManFirstApply.ParentGNAAid == parent_apply.ParentGNAAid, + FreshManFirstApply.GNAAstatus == ApplyStatus.agree.value, + FreshManFirstApply.isdelete == False).all() + if children_apply: + for child_apply in children_apply: + child_apply.update({ + 'GNAAstatus': ApplyStatus.lose_effect.value + }) + parent_apply.update({ + 'GNAAstatus': ApplyStatus.lose_effect.value + }) + break + parent_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.FMFAid == parent_apply.ParentGNAAid).first() gnaa.GNAAstatus = ApplyStatus.agree.value # gnaa_other = GuessNumAwardApply.query.filter( # GuessNumAwardApply.GNAAid != gnaa.GNAAid, diff --git a/planet/control/CGuessNum.py b/planet/control/CGuessNum.py index 4c2a5428..692d2f27 100644 --- a/planet/control/CGuessNum.py +++ b/planet/control/CGuessNum.py @@ -425,6 +425,34 @@ def reapply_award(self): raise ParamsError('已结束的活动不能再次发起申请') elif starttime <= date.today: raise ParamsError('已开始的活动不能再次发起申请') + # 父活动和基于父活动的所有再次申请通过的活动都不能是活动开始状态 + parent_apply = apply_info + while parent_apply.ParentGNAAid != None: + parent_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, + GuessNumAwardApply.GNAAstatus == ApplyStatus.agree.value, + GuessNumAwardApply.isdelete == False).first() + if parent_apply: + children_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.ParentGNAAid == parent_apply.ParentGNAAid, + GuessNumAwardApply.GNAAstatus == ApplyStatus.agree.value, + GuessNumAwardApply.isdelete == False).all() + if children_apply: + for child_apply in children_apply: + starttime = child_apply.AgreeStartime + endtime = child_apply.AgreeEndtime + if endtime < date.today: + raise ParamsError('已结束的活动不能再次发起申请') + elif starttime <= date.today: + raise ParamsError('已开始的活动不能再次发起申请') + starttime = parent_apply.AgreeStartime + endtime = parent_apply.AgreeEndtime + if endtime < date.today: + raise ParamsError('已结束的活动不能再次发起申请') + elif starttime <= date.today: + raise ParamsError('已开始的活动不能再次发起申请') + break + gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value # 解除和原商品属性的绑定 GuessNumAwardProduct.query.filter_by(GNAAid=apply_info.GNAAid, isdelete=False).delete_() @@ -447,8 +475,8 @@ def reapply_award(self): 'ParentGNAAid': apply_info.GNAAid }) db.session.add(gnaa) - # 对ParentFMFAid进行检验 - if apply_info.FMFAstatus == ApplyStatus.reject.value: + # 对ParentGNAAid进行检验 + if apply_info.GNAAstatus == ApplyStatus.reject.value: apply_info.update({'isdelete': True}) db.session.add(apply_info) # 重新添加商品属性 From 52683cf4fefb41dc0222041cfd6504ce8fb9d7fb Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Wed, 29 May 2019 21:56:03 +0800 Subject: [PATCH 08/20] =?UTF-8?q?=E6=96=B0=E4=BA=BA=E9=A6=96=E5=8D=95?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/api/v2/ATimeLimited.py | 1 + planet/config/enums.py | 1 + planet/control/CApproval.py | 62 ++++++++++--- planet/control/CFreshManFirstOrder.py | 128 +++++++++++++------------- planet/control/CGuessNum.py | 14 ++- planet/control/CMagicBox.py | 68 +++++++++++++- planet/control/CTimeLimited.py | 112 +++++++++++++++++++++- planet/control/CTrialCommodity.py | 1 + planet/models/activity.py | 3 + 9 files changed, 303 insertions(+), 87 deletions(-) diff --git a/planet/api/v2/ATimeLimited.py b/planet/api/v2/ATimeLimited.py index d837f173..d8aba2fe 100644 --- a/planet/api/v2/ATimeLimited.py +++ b/planet/api/v2/ATimeLimited.py @@ -23,6 +23,7 @@ def post(self, timelimited): 'update_activity': self.ctl.update_activity, 'shelf_award': self.ctl.shelf_award, 'del_award': self.ctl.del_award, + 'reapply_award': self.ctl.reapply_award, 'update_award': self.ctl.update_award } return apis diff --git a/planet/config/enums.py b/planet/config/enums.py index 4a3bfac6..f71ff3d5 100644 --- a/planet/config/enums.py +++ b/planet/config/enums.py @@ -104,6 +104,7 @@ class ApplyFrom(Enum): class ApplyStatus(Enum): + lose_agree = -50,'再次申请审核' lose_effect = -40, '已失效' shelves = -30, '已下架' cancle = -20, '已撤销' diff --git a/planet/control/CApproval.py b/planet/control/CApproval.py index a385dad1..1a9e80d1 100644 --- a/planet/control/CApproval.py +++ b/planet/control/CApproval.py @@ -1125,7 +1125,7 @@ def agree_guessnum(self, approval_model): gnaa = GuessNumAwardApply.query.filter_by_(GNAAid=approval_model.AVcontent).first_('猜数字商品申请数据异常') parent_apply = gnaa # 将父id和其他同等级的id改为失效 - while parent_apply.ParentFMFAid != None: + while parent_apply.ParentGNAAid != None: parent_apply = FreshManFirstApply.query.filter(GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, GuessNumAwardApply.GNAAstatus == ApplyStatus.agree.value, GuessNumAwardApply.isdelete == False).first() @@ -1139,9 +1139,11 @@ def agree_guessnum(self, approval_model): child_apply.update({ 'GNAAstatus': ApplyStatus.lose_effect.value }) + db.session.add(child_apply) parent_apply.update({ 'GNAAstatus': ApplyStatus.lose_effect.value }) + db.session.add(parent_apply) break parent_apply = GuessNumAwardApply.query.filter( GuessNumAwardApply.FMFAid == parent_apply.ParentGNAAid).first() @@ -1185,6 +1187,30 @@ def refuse_guessnum(self, approval_model, refuse_abo): def agree_magicbox(self, approval_model): mba = MagicBoxApply.query.filter_by_(MBAid=approval_model.AVcontent).first_('魔盒商品申请数据异常') + parent_apply = mba + # 将父id和其他同等级的id改为失效 + while parent_apply.ParentMBAid != None: + parent_apply = MagicBoxApply.query.filter(MagicBoxApply.MBAid == parent_apply.ParentMBAid, + MagicBoxApply.MBAstatus == ApplyStatus.agree.value, + MagicBoxApply.isdelete == False).first() + if parent_apply: + children_apply = MagicBoxApply.query.filter( + MagicBoxApply.ParentMBAid == parent_apply.ParentMBAid, + MagicBoxApply.MBAstatus == ApplyStatus.agree.value, + MagicBoxApply.isdelete == False).all() + if children_apply: + for child_apply in children_apply: + child_apply.update({ + 'MBAstatus': ApplyStatus.lose_effect.value + }) + db.session.add(child_apply) + parent_apply.update({ + 'MBAstatus': ApplyStatus.lose_effect.value + }) + db.session.add(parent_apply) + break + parent_apply = MagicBoxApply.query.filter( + MagicBoxApply.MBAid == parent_apply.ParentMBAid).first() mba.MBAstatus = ApplyStatus.agree.value mba_other = MagicBoxApply.query.filter( MagicBoxApply.isdelete == False, @@ -1220,24 +1246,25 @@ def refuse_magicbox(self, approval_model, refuse_abo): def agree_freshmanfirstproduct(self, approval_model): ffa = FreshManFirstApply.query.filter_by_(FMFAid=approval_model.AVcontent).first_('新人商品申请数据异常') parent_apply = ffa - # 将父id和其他同等级的id改为失效 + # 将父id改为失效 while parent_apply.ParentFMFAid != None: parent_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, FreshManFirstApply.isdelete == False).first() if parent_apply: - children_apply = FreshManFirstApply.query.filter( - FreshManFirstApply.ParentFMFAid == parent_apply.ParentFMFAid, - FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, - FreshManFirstApply.isdelete == False).all() - if children_apply: - for child_apply in children_apply: - child_apply.update({ - 'FMFAstatus': ApplyStatus.lose_effect.value - }) parent_apply.update({ 'FMFAstatus': ApplyStatus.lose_effect.value }) + db.session.add(parent_apply) + # 进行库存恢复 + apply_skus = FreshManFirstSku.query.join( + FreshManFirstProduct, FreshManFirstProduct.FMFPid == FreshManFirstSku.FMFPid).filter( + FreshManFirstProduct.FMFAid == parent_apply.FMFAid).all() + from planet.control.COrder import COrder + for apply_sku in apply_skus: + sku = ProductSku.query.filter(ProductSku.SKUid == apply_sku.SKUid).first() + product = Products.query.filter(Products.PRid == sku.PRid).first() + COrder()._update_stock(apply_sku.FMFPstock, product, sku) break parent_apply = FreshManFirstApply.query.filter( FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() @@ -1258,6 +1285,19 @@ def refuse_freshmanfirstproduct(self, approval_model, refuse_abo): sku = ProductSku.query.filter(ProductSku.SKUid == apply_sku.SKUid).first() product = Products.query.filter(Products.PRid == sku.PRid).first() COrder()._update_stock(apply_sku.FMFPstock, product, sku) + #原同意单修改状态 + while parent_apply.ParentFMFAid != None: + parent_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, + FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, + FreshManFirstApply.isdelete == False).first() + if parent_apply: + parent_apply.update({ + 'FMFAstatus': ApplyStatus.agree.value + }) + db.session.add(parent_apply) + break + parent_apply = FreshManFirstApply.query.filter( + FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() def agree_trialcommodity(self, approval_model): tc = TrialCommodity.query.filter_by_(TCid=approval_model.AVcontent).first_('试用商品申请数据异常') diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index 825b12a5..c03f7053 100644 --- a/planet/control/CFreshManFirstOrder.py +++ b/planet/control/CFreshManFirstOrder.py @@ -27,10 +27,29 @@ class CFreshManFirstOrder(COrder, CUser): def list(self): """获取列表""" time_now = date.today() + # 修改一开始的待审核活动状态 + fresh_man_applys = FreshManFirstApply.query.filter( + FreshManFirstApply.FMFAstatus == ApplyStatus.lose_agree.value, + FreshManFirstApply.AgreeStartime <= time_now, + FreshManFirstApply.AgreeEndtime >= time_now, + FreshManFirstApply.isdelete == False, + ).all() + instance_list=[] + with db.auto_commit(): + for fresh_man_apply in fresh_man_applys: + fresh_man_apply.update({'FMFAstatus': ApplyStatus.agree.value}) + instance_list.append(fresh_man_apply) + fresh_child_apply = FreshManFirstApply.query.filter(FreshManFirstApply.ParentFMFAid == fresh_man_apply.FMFAid, + FreshManFirstApply.FMFAstatus == ApplyStatus.wait_check.value, + FreshManFirstApply.isdelete == False).first() + if fresh_child_apply: + fresh_child_apply.update({'FMFAstatus': ApplyStatus.lose_effect.value}) + instance_list.append(fresh_child_apply) + db.session.add_all(instance_list) fresh_man_products = FreshManFirstProduct.query.join( FreshManFirstApply, FreshManFirstApply.FMFAid == FreshManFirstProduct.FMFAid ).filter_( - FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, + FreshManFirstApply.FMFAstatus.in_([ApplyStatus.agree.value,ApplyStatus.lose_agree.value]), FreshManFirstApply.AgreeStartime <= time_now, FreshManFirstApply.AgreeEndtime >= time_now, FreshManFirstApply.isdelete == False, @@ -414,7 +433,7 @@ def reapply_award(self): """重新申请添加奖品""" if not (is_supplizer() or is_admin()): raise AuthorityError() - data = parameter_required(('prid', 'prprice', 'skus', 'fmfaid')) + data = parameter_required(('prid', 'fmfaendtime', 'fmfastarttime', 'prprice', 'skus', 'fmfaid')) prid = data.get('prid') fmfaid = data.get('fmfaid') apply_from = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value @@ -424,43 +443,31 @@ def reapply_award(self): product_brand = ProductBrand.query.filter(ProductBrand.PBid == product.PBid).first_('商品所在信息不全') with db.auto_commit(): fresh_first_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == fmfaid, - FreshManFirstApply.isdelete == False).first_('申请单不存在') + FreshManFirstApply.FMFAstatus.in_([ApplyStatus.cancle.value,ApplyStatus.reject.value,ApplyStatus.agree.value]), + FreshManFirstApply.isdelete == False).first_('已下架或审核中的申请不可以进行修改') # 是否能再次申请 - if fresh_first_apply.FMFAstatus == ApplyStatus.wait_check.value: - raise ParamsError('正在申请的活动不能再次发起申请') - elif fresh_first_apply.FMFAstatus == ApplyStatus.shelves.value: - raise ParamsError('已下架的活动不能再次发起申请') starttime = fresh_first_apply.AgreeStartime endtime = fresh_first_apply.AgreeEndtime if endtime < date.today: - raise ParamsError('已结束的活动不能再次发起申请') + raise StatusError('已结束的活动不能再次发起申请') elif starttime <= date.today: - raise ParamsError('已开始的活动不能再次发起申请') - # 父活动和基于父活动的所有再次申请通过的活动都不能是活动开始状态 + raise StatusError('已开始的活动不能再次发起申请') + # 父活动不能是活动开始状态 parent_apply = fresh_first_apply + instance_list=[] while parent_apply.ParentFMFAid != None: parent_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, FreshManFirstApply.isdelete == False).first() if parent_apply: - children_apply = FreshManFirstApply.query.filter( - FreshManFirstApply.ParentFMFAid == parent_apply.ParentFMFAid, - FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, - FreshManFirstApply.isdelete == False).all() - if children_apply: - for child_apply in children_apply: - starttime = child_apply.AgreeStartime - endtime = child_apply.AgreeEndtime - if endtime < date.today: - raise ParamsError('已结束的活动不能再次发起申请') - elif starttime <= date.today: - raise ParamsError('已开始的活动不能再次发起申请') starttime = parent_apply.AgreeStartime endtime = parent_apply.AgreeEndtime if endtime < date.today: - raise ParamsError('已结束的活动不能再次发起申请') + raise StatusError('已结束的活动不能再次发起申请') elif starttime <= date.today: - raise ParamsError('已开始的活动不能再次发起申请') + raise StatusError('已开始的活动不能再次发起申请') + parent_apply.update({"FMFAstatus":ApplyStatus.lose_agree.value}) + instance_list.append(parent_apply) break parent_apply = FreshManFirstApply.query.filter( FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() @@ -475,26 +482,43 @@ def reapply_award(self): 'AgreeEndtime': data.get('fmfaendtime'), 'ParentFMFAid': fmfaid }) - db.session.add(apply) + instance_list.append(apply) # 对ParentFMFAid进行检验 if fresh_first_apply.FMFAstatus == ApplyStatus.reject.value: fresh_first_apply.update({'isdelete': True}) - db.session.add(fresh_first_apply) + instance_list.append(fresh_first_apply) + db.session.add_all(instance_list) + if is_admin(): BASEADMIN.create_action(AdminActionS.update.value, 'FreshManFirstApply', fmfaid) + apply_from = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value + product = Products.query.filter(Products.PRid == prid, Products.isdelete == False, + Products.PRstatus.in_( + [ProductStatus.usual.value, ProductStatus.auditing.value]) + ).first_('当前商品状态不允许进行申请') + product_brand = ProductBrand.query.filter(ProductBrand.PBid == product.PBid).first_('商品所在信息不全') # 商品, 暂时只可以添加一个商品 - fresh_first_product = FreshManFirstProduct.query.filter( - FreshManFirstProduct.isdelete == False, - FreshManFirstProduct.FMFAid == fmfaid, + fresh_first_apply = apply + check_product = FreshManFirstProduct.query.filter( + FreshManFirstApply.FMFAid == FreshManFirstProduct.FMFAid, FreshManFirstProduct.PRid == prid, - ).first() - if not fresh_first_product: - # 如果没有查找到, 则说明是更换了参与商品, 因此删除旧的 - FreshManFirstProduct.query.filter(FreshManFirstProduct.FMFAid == fmfaid).delete_() - fresh_first_product = FreshManFirstProduct() - fresh_first_product.FMFPid = str(uuid.uuid1()) - fresh_first_product = fresh_first_product.update({ - # 'FMFAid': fresh_first_apply.FMFAid, + or_( + and_(FreshManFirstApply.FMFAstartTime >= fresh_first_apply.FMFAstartTime, + FreshManFirstApply.FMFAstartTime <= fresh_first_apply.FMFAendTime), + and_(FreshManFirstApply.FMFAendTime >= fresh_first_apply.FMFAstartTime, + FreshManFirstApply.FMFAendTime <= fresh_first_apply.FMFAendTime) + # and_(FreshManFirstApply.FMFAstartTime > fresh_first_apply.FMFAendTime) + ), + FreshManFirstApply.isdelete == False, + FreshManFirstProduct.isdelete == False + ).all() + if check_product: + current_app.logger.info('dumpler {}'.format([product_id.FMFPid for product_id in check_product])) + raise ParamsError('重复提交 重叠时间') + + fresh_first_product = FreshManFirstProduct.create({ + 'FMFPid': str(uuid.uuid1()), + 'FMFAid': fresh_first_apply.FMFAid, 'PRid': prid, 'PRmainpic': product.PRmainpic, 'PRtitle': product.PRtitle, @@ -506,27 +530,17 @@ def reapply_award(self): }) db.session.add(fresh_first_product) skus = data.get('skus') - skuids = [] for sku in skus: skuid = sku.get('skuid') - skuids.append(skuid) skuprice = sku.get('skuprice') skustock = sku.get('skustock') - sku = ProductSku.query.filter( + sku_instance = ProductSku.query.filter( ProductSku.isdelete == False, ProductSku.PRid == prid, ProductSku.SKUid == skuid ).first_('商品sku信息不存在') - fresh_first_sku = FreshManFirstSku.query.filter( - FreshManFirstApply.isdelete == False, - FreshManFirstSku.FMFPid == fresh_first_product.FMFPid, - FreshManFirstSku.SKUid == skuid - ).first() - self._update_stock(-int(skustock), product, sku) - if not fresh_first_sku: - fresh_first_sku = FreshManFirstSku() - fresh_first_sku.FMFSid = str(uuid.uuid1()) - fresh_first_sku.update({ + self._update_stock(-int(skustock), product, sku_instance) + fresh_first_sku = FreshManFirstSku.create({ 'FMFSid': str(uuid.uuid1()), 'FMFPid': fresh_first_product.FMFPid, 'FMFPstock': skustock, @@ -534,21 +548,9 @@ def reapply_award(self): 'SKUprice': float(skuprice), }) db.session.add(fresh_first_sku) - # self._update_stock() - # 删除其他的不需要的新人首单sku - FreshManFirstSku.query.filter( - FreshManFirstSku.isdelete == False, - FreshManFirstSku.FMFPid == fresh_first_product.FMFPid, - FreshManFirstSku.SKUid.notin_(skuids) - ).delete_(synchronize_session=False) - - Approval.query.filter( - Approval.isdelete == False, - Approval.AVcontent == fmfaid - ).delete_() BASEAPPROVAL().create_approval('tofreshmanfirstproduct', request.user.id, fresh_first_apply.FMFAid, apply_from) - return Success('申请单修改成功', data=fresh_first_apply.FMFAid) + return Success('申请添加成功', data=fresh_first_apply.FMFAid) def update_award(self): """修改""" diff --git a/planet/control/CGuessNum.py b/planet/control/CGuessNum.py index 692d2f27..d8909a6d 100644 --- a/planet/control/CGuessNum.py +++ b/planet/control/CGuessNum.py @@ -413,14 +413,15 @@ def reapply_award(self): with db.auto_commit(): # 获取申请单 apply_info = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == data.get('gnaaid'), - GuessNumAwardApply.GNAAstatus != ApplyStatus.wait_check.value, GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.agree.value, + ApplyStatus.reject.value, ApplyStatus.cancle.value]) ).first_('已下架或审核中的申请不可以进行修改') if apply_info.SUid != request.user.id: raise AuthorityError('仅可修改自己提交的申请') - starttime = apply_info.AgreeStartime - endtime = apply_info.AgreeEndtime + # 如果没有修改时间,则用之前时间 + gnaastarttime = data.get('gnaastarttime') or apply_info.GNAAstarttime + starttime = endtime = gnaastarttime if endtime < date.today: raise ParamsError('已结束的活动不能再次发起申请') elif starttime <= date.today: @@ -452,14 +453,11 @@ def reapply_award(self): elif starttime <= date.today: raise ParamsError('已开始的活动不能再次发起申请') break - + gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value # 解除和原商品属性的绑定 GuessNumAwardProduct.query.filter_by(GNAAid=apply_info.GNAAid, isdelete=False).delete_() # product_old.isdelete = True - - # 如果没有修改时间,则用之前时间 - gnaastarttime = data.get('gnaastarttime') or apply_info.GNAAstarttime # 如果修改了时间,检测是否有冲突 exist_apply_list = list() @@ -469,7 +467,7 @@ def reapply_award(self): 'SUid': request.user.id, # 'GNAPid': data.get('prid'), 'GNAAstarttime': gnaastarttime, - 'GNAAendtime': apply_info.AgreeEndtime, + 'GNAAendtime': gnaastarttime, 'GNAAfrom': gnaafrom, 'GNAAstatus': ApplyStatus.wait_check.value, 'ParentGNAAid': apply_info.GNAAid diff --git a/planet/control/CMagicBox.py b/planet/control/CMagicBox.py index 5f453399..19b9f375 100644 --- a/planet/control/CMagicBox.py +++ b/planet/control/CMagicBox.py @@ -443,7 +443,7 @@ def apply_award(self): [self.create_approval('tomagicbox', request.user.id, mbaid, mbafrom) for mbaid in mbaid_list] return Success('申请添加成功', {'mbaid': mbaid_list}) - + def reapply_award(self): """修改魔盒申请""" if not (is_supplizer() or is_admin()): @@ -463,9 +463,10 @@ def reapply_award(self): if not re.match(r'^\[(\"\d+\-\d+\"\,? ?)+\]$', test_str): raise ParamsError('档次变化金额只能填写数字') apply_info = MagicBoxApply.query.filter(MagicBoxApply.MBAid == mbaid, - MagicBoxApply.MBAstatus.in_([ApplyStatus.reject.value, + MagicBoxApply.MBAstatus.in_([ApplyStatus.agree.value, + ApplyStatus.reject.value, ApplyStatus.cancle.value]) - ).first_('只有已拒绝或撤销状态下的申请可以进行修改') + ).first_('已下架或审核中的申请不可以进行修改') if apply_info.SUid != request.user.id: raise AuthorityError('仅可修改自己提交的申请') @@ -483,6 +484,65 @@ def reapply_award(self): ).first() current_app.logger.info("其他的同批次共用库存申请 --> {}".format(other_apply_info)) with db.auto_commit(): + starttime = endtime = data.get('mbastarttime') + if endtime < date.today: + raise ParamsError('已结束的活动不能再次发起申请') + elif starttime <= date.today: + raise ParamsError('已开始的活动不能再次发起申请') + # 父活动和基于父活动的所有再次申请通过的活动都不能是活动开始状态 + parent_apply = apply_info + while parent_apply.ParentMBAid != None: + parent_apply = MagicBoxApply.query.filter(MagicBoxApply.MBAid == parent_apply.ParentMBAid, + MagicBoxApply.MBAstatus == ApplyStatus.agree.value, + MagicBoxApply.isdelete == False).first() + if parent_apply: + children_apply = MagicBoxApply.query.filter( + MagicBoxApply.ParentMBAid == parent_apply.ParentMBAid, + MagicBoxApply.MBAstatus == ApplyStatus.agree.value, + MagicBoxApply.isdelete == False).all() + if children_apply: + for child_apply in children_apply: + starttime = child_apply.AgreeStartime + endtime = child_apply.AgreeEndtime + if endtime < date.today: + raise ParamsError('已结束的活动不能再次发起申请') + elif starttime <= date.today: + raise ParamsError('已开始的活动不能再次发起申请') + starttime = parent_apply.AgreeStartime + endtime = parent_apply.AgreeEndtime + if endtime < date.today: + raise ParamsError('已结束的活动不能再次发起申请') + elif starttime <= date.today: + raise ParamsError('已开始的活动不能再次发起申请') + break + parent_apply = MagicBoxApply.query.filter( + MagicBoxApply.MBAid == parent_apply.ParentMBAid).first() + # 创建新记录 + award_dict = { + 'MBAid': str(uuid.uuid1()), + 'SUid': request.user.id, + 'SKUid': skuid, + 'PRid': prid, + 'PBid': product.PBid, + 'MBAstarttime': data.get('mbastarttime'), + 'MBAendtime': data.get('mbastarttime'), + 'SKUprice': float(data.get('skuprice', 0.01)), + 'SKUminPrice': float(data.get('skuminprice', 0.01)), + 'Gearsone': gearsone, + 'Gearstwo': gearstwo, + 'Gearsthree': gearsthree, + # 'SKUstock': int(skustock), + "OSid": str(uuid.uuid1()), + 'MBAstatus': ApplyStatus.wait_check.value, + 'MBAfrom': mbafrom, + 'ParentMBAid':mbaid + } + award_instance = MagicBoxApply.create(award_dict) + db.session.add(award_instance) + # 对ParentMBAid进行检验 + if apply_info.MBAstatus == ApplyStatus.reject.value: + apply_info.update({'isdelete': True}) + db.session.add(apply_info) award_dict = { 'SUid': request.user.id, 'SKUid': skuid, @@ -534,7 +594,7 @@ def update_apply(self): raise ParamsError('档次变化金额只能填写数字') apply_info = MagicBoxApply.query.filter(MagicBoxApply.MBAid == mbaid, MagicBoxApply.MBAstatus.in_([ApplyStatus.reject.value, - ApplyStatus.cancle.value]) + ApplyStatus.cancle.value]) ).first_('只有已拒绝或撤销状态下的申请可以进行修改') if apply_info.SUid != request.user.id: diff --git a/planet/control/CTimeLimited.py b/planet/control/CTimeLimited.py index 11d3250a..8354560a 100644 --- a/planet/control/CTimeLimited.py +++ b/planet/control/CTimeLimited.py @@ -14,7 +14,7 @@ from planet.extensions.register_ext import db, conn from planet.extensions.tasks import end_timelimited, start_timelimited, celery from planet.models import Products, ProductSku, ProductImage, ProductBrand, Supplizer, Admin, Approval, \ - TimeLimitedActivity, TimeLimitedProduct, TimeLimitedSku, IndexBanner, Commision,AdminActions + TimeLimitedActivity, TimeLimitedProduct, TimeLimitedSku, IndexBanner, Commision, AdminActions from .CUser import CUser @@ -321,6 +321,116 @@ def apply_award(self): return Success('申请成功', {'tlpid': tlp.TLPid}) + def reapply_award(self): + """重新申请""" + data = parameter_required(('tlaid', 'tlpid', 'prid', 'prprice', 'skus')) + filter_args = { + Products.PRid == data.get('prid'), + Products.isdelete == False, + Products.PRstatus == ProductStatus.usual.value} + if is_supplizer(): + tlp_from = ApplyFrom.supplizer.value + suid = request.user.id + filter_args.add(Products.PRfrom == tlp_from) + filter_args.add(Products.CreaterId == suid) + else: + tlp_from = ApplyFrom.platform.value + filter_args.add(Products.PRfrom == tlp_from) + suid = None + with db.auto_commit(): + # 获取申请单b + apply_info = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == data.get('tlpid'), + TimeLimitedProduct.PRid == data.get('prid'), + TimeLimitedProduct.isdelete == False + ).first_('商品不存在') + if apply_info.TLAstatus not in [ApplyStatus.reject.value, ApplyStatus.cancle.value, ApplyStatus.agree.value]: + raise StatusError('此申请不可以进行修改') + if apply_info.SUid != suid: + raise AuthorityError('仅可修改自己提交的申请') + # if is_admin() and apply_info.SUid: + # raise AuthorityError('仅可修改自己提交的申请') + + product = Products.query.filter(*filter_args).first_('商品未上架') + # instance_list = list() + skus = data.get('skus') + tla = TimeLimitedActivity.query.filter( + TimeLimitedActivity.isdelete == False, + TimeLimitedActivity.TLAstatus == TimeLimitedStatus.waiting.value, + TimeLimitedActivity.TLAid == data.get('tlaid')).first_('活动已停止报名') + tlp = TimeLimitedProduct.create({ + 'TLPid': str(uuid.uuid1()), + 'TLAid': tla.TLAid, + 'TLAfrom': tlp_from, + 'SUid': suid, + 'PRid': product.PRid, + # 'PRmainpic': product.PRmainpic, + # 'PRattribute': product.PRattribute, + # 'PBid': product.PBid, + # 'PBname': product.PBname, + # 'PRtitle': product.PRtitle, + 'PRprice': data.get('prprice'), + 'ParentTLPid':tla.TLPid + }) + instance_list = [tlp] + skuids = list() + new_skuid = list() + # todo 撤销或者拒绝时 退还库存 + for sku in skus: + skuid = sku.get('skuid') + skuprice = sku.get('skuprice') + skustock = sku.get('skustock') + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') + self._update_stock(-int(skustock), product, sku_instance) + tls = TimeLimitedSku.query.filter( + TimeLimitedSku.TLPid == apply_info.TLPid, + TimeLimitedSku.SKUid == skuid, + TimeLimitedSku.isdelete == False, + ).first() + if not tls: + tls = TimeLimitedSku.create({ + 'TLSid': str(uuid.uuid1()), + 'TLPid': apply_info.TLPid, + 'TLSstock': skustock, + 'SKUid': skuid, + 'SKUprice': skuprice + }) + new_skuid.append(tls.TLSid) + else: + + tls.update({ + 'TLPid': apply_info.TLPid, + 'TLSstock': skustock, + 'SKUid': skuid, + 'SKUprice': skuprice + }) + skuids.append(skuid) + + instance_list.append(tls) + delete_sku = TimeLimitedSku.query.filter( + TimeLimitedSku.isdelete == False, + TimeLimitedSku.SKUid.notin_(skuids), + TimeLimitedSku.TLPid == apply_info.TLPid + ).all() + for tls in delete_sku: + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') + self._update_stock(int(tls.TLSstock), product, sku_instance) + tls.isdelete = True + + current_app.logger.info('本次修改 sku {} 个 新增 {} 删除 {} '.format( + len(skuids), len(new_skuid), len(delete_sku))) + # prstock += skustock + + db.session.add_all(instance_list) + if is_admin(): + BASEADMIN().create_action(AdminActionS.update.value, 'TimeLimitedProduct', data.get('tlpid')) + + super(CTimeLimited, self).create_approval('totimelimited', request.user.id, apply_info.TLPid, + applyfrom=tlp_from) + return Success('修改成功') + def update_award(self): """修改""" data = parameter_required(('tlaid', 'tlpid', 'prid', 'prprice', 'skus')) diff --git a/planet/control/CTrialCommodity.py b/planet/control/CTrialCommodity.py index 266dd6c6..5114b19a 100644 --- a/planet/control/CTrialCommodity.py +++ b/planet/control/CTrialCommodity.py @@ -494,6 +494,7 @@ def resubmit_apply(self): tcid = data.get('tcid') with db.auto_commit(): commodity = TrialCommodity.query.filter_by_(TCid=tcid).first_('无此商品信息') + if commodity.TCstatus not in [TrialCommodityStatus.cancel.value, TrialCommodityStatus.reject.value]: raise StatusError('只有撤销或已下架状态的申请可以重新提交') if sup: diff --git a/planet/models/activity.py b/planet/models/activity.py index ffd239ed..81d22995 100644 --- a/planet/models/activity.py +++ b/planet/models/activity.py @@ -45,6 +45,7 @@ class TrialCommodity(Base): AgreeStartTime = Column(Date, default=ApplyStartTime, comment='最终确认起始时间') # 同意之后不可为空 AgreeEndTime = Column(Date, default=ApplyEndTime, comment='最终确认结束时间') TCrejectReason = Column(Text, comment='拒绝理由') + ParentTCid = Column(String(64), default=None) class TrialCommodityImage(Base): @@ -175,6 +176,7 @@ class MagicBoxApply(Base): MBArejectReason = Column(String(64), comment='拒绝理由') AgreeStartime = Column(Date, default=MBAstarttime, comment='最终确认起始时间') # 同意之后不可为空 AgreeEndtime = Column(Date, default=MBAendtime, comment='最终确认结束时间') + ParentMBAid = Column(String(64), default=None) @property def SKUstock(self): @@ -319,6 +321,7 @@ class TimeLimitedProduct(Base): # PRdescription = Column(Text, comment='描述') # PRfeight = Column(Float, default=0, comment='快递费用') PRprice = Column(Float, nullable=False, comment='显示价格') + ParentTLPid = Column(String(64), default=None) class TimeLimitedSku(Base): From 288dd9f56353138af63bba659aa4b56b79d8c888 Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Thu, 30 May 2019 16:50:04 +0800 Subject: [PATCH 09/20] =?UTF-8?q?=E6=B7=BB=E5=8A=A05=E4=B8=AA=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8=E7=9A=84=E9=87=8D=E6=96=B0=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/api/v2/AFreshManFirstOrder.py | 1 - planet/api/v2/ATrialCommodity.py | 3 +- planet/config/enums.py | 4 +- planet/control/CApproval.py | 167 +++++++++++++++------ planet/control/CFreshManFirstOrder.py | 38 +++-- planet/control/CGuessNum.py | 205 ++++++++++++++------------ planet/control/CMagicBox.py | 139 ++++++++--------- planet/control/CTimeLimited.py | 94 +++++------- planet/control/CTrialCommodity.py | 194 +++++++++++++++++++++++- planet/extensions/tasks.py | 32 +++- readme.md | 1 + 11 files changed, 589 insertions(+), 289 deletions(-) diff --git a/planet/api/v2/AFreshManFirstOrder.py b/planet/api/v2/AFreshManFirstOrder.py index a8bdeb88..aeaa8edb 100644 --- a/planet/api/v2/AFreshManFirstOrder.py +++ b/planet/api/v2/AFreshManFirstOrder.py @@ -25,4 +25,3 @@ def post(self, fresh_man): 'delete': self.creshman.del_award, } return apis - diff --git a/planet/api/v2/ATrialCommodity.py b/planet/api/v2/ATrialCommodity.py index 47814a49..2f2446ea 100644 --- a/planet/api/v2/ATrialCommodity.py +++ b/planet/api/v2/ATrialCommodity.py @@ -17,6 +17,7 @@ def get(self, commodity): def post(self, commodity): apis = { 'add': self.ctrialcommodity.add_commodity, + 'readd': self.ctrialcommodity.readd_commodity, 'create_order': self.ctrialcommodity.create_order, 'update': self.ctrialcommodity.update_commodity, 'del': self.ctrialcommodity.del_commodity, @@ -24,4 +25,4 @@ def post(self, commodity): 'resubmit': self.ctrialcommodity.resubmit_apply, 'shelves': self.ctrialcommodity.shelves, } - return apis \ No newline at end of file + return apis diff --git a/planet/config/enums.py b/planet/config/enums.py index f71ff3d5..0cccbd73 100644 --- a/planet/config/enums.py +++ b/planet/config/enums.py @@ -104,13 +104,13 @@ class ApplyFrom(Enum): class ApplyStatus(Enum): - lose_agree = -50,'再次申请审核' lose_effect = -40, '已失效' shelves = -30, '已下架' cancle = -20, '已撤销' reject = -10, '已拒绝' wait_check = 0, '审核中' agree = 10, '已同意' + lose_agree = 20, '再次申请审核' class OrderRefundOrstatus(Enum): @@ -281,8 +281,10 @@ class GuessNumAwardStatus(Enum): class TrialCommodityStatus(Enum): """试用商品状态""" + lose_effect=-20,'已失效' cancel = -10, '已取消' upper = 0, '已上架' + lose_upper = 10,'重新审核中' # off_shelves = 10, '已下架' auditing = 20, '审核中' reject = 30, '下架/审核失败' diff --git a/planet/control/CApproval.py b/planet/control/CApproval.py index 1a9e80d1..d065046e 100644 --- a/planet/control/CApproval.py +++ b/planet/control/CApproval.py @@ -13,7 +13,7 @@ from planet.config.enums import UserIdentityStatus, PermissionNotesType, AdminLevel, \ AdminStatus, UserLoginTimetype, ApplyStatus, ApprovalAction, ProductStatus, NewsStatus, NewsAwardStatus, \ UserCommissionType, UserCommissionStatus, TrialCommodityStatus, ApplyFrom, \ - SupplizerSettementStatus, CashFor, AdminActionS + SupplizerSettementStatus, CashFor, AdminActionS from planet.common.error_response import ParamsError, SystemError, NotFound, AuthorityError from planet.common.success_response import Success @@ -1124,26 +1124,30 @@ def refuse_publish(self, approval_model, refuse_abo): def agree_guessnum(self, approval_model): gnaa = GuessNumAwardApply.query.filter_by_(GNAAid=approval_model.AVcontent).first_('猜数字商品申请数据异常') parent_apply = gnaa - # 将父id和其他同等级的id改为失效 + # 将父id改为失效 while parent_apply.ParentGNAAid != None: parent_apply = FreshManFirstApply.query.filter(GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, - GuessNumAwardApply.GNAAstatus == ApplyStatus.agree.value, + GuessNumAwardApply.GNAAstatus == ApplyStatus.lose_agree.value, GuessNumAwardApply.isdelete == False).first() if parent_apply: - children_apply = GuessNumAwardApply.query.filter( - FreshManFirstApply.ParentGNAAid == parent_apply.ParentGNAAid, - FreshManFirstApply.GNAAstatus == ApplyStatus.agree.value, - FreshManFirstApply.isdelete == False).all() - if children_apply: - for child_apply in children_apply: - child_apply.update({ - 'GNAAstatus': ApplyStatus.lose_effect.value - }) - db.session.add(child_apply) - parent_apply.update({ - 'GNAAstatus': ApplyStatus.lose_effect.value - }) - db.session.add(parent_apply) + # 获取原商品属性 + gnap_old = GuessNumAwardProduct.query.filter(GuessNumAwardProduct.GNAAid == parent_apply.GNAAid, + GuessNumAwardProduct.isdelete == False).first() + product = Products.query.filter_by(PRid=gnap_old.PRid, isdelete=False).first_('商品信息出错') + # 获取原sku属性 + gnas_old = GuessNumAwardSku.query.filter( + parent_apply.GNAAid == GuessNumAwardProduct.GNAAid, + GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, + GuessNumAwardSku.isdelete == False, + GuessNumAwardProduct.isdelete == False, + ).all() + from planet.control.COrder import COrder + # 遍历原sku 将库存退出去 + for sku in gnas_old: + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') + COrder()._update_stock(int(sku.SKUstock), product, sku_instance) + parent_apply.GNAAstatus = ApplyStatus.lose_effect.value break parent_apply = GuessNumAwardApply.query.filter( GuessNumAwardApply.FMFAid == parent_apply.ParentGNAAid).first() @@ -1184,33 +1188,44 @@ def refuse_guessnum(self, approval_model, refuse_abo): sku_instance = ProductSku.query.filter_by( isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') COrder()._update_stock(int(sku.SKUstock), product, sku_instance) + # 修改原申请状态 + parent_apply = gnaa + while parent_apply.GNAAid != None: + parent_apply = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, + GuessNumAwardApply.GNAAstatus == ApplyStatus.lose_agree.value, + GuessNumAwardApply.isdelete == False).first() + if parent_apply: + parent_apply.GNAAstatus = ApplyStatus.agree.value + break def agree_magicbox(self, approval_model): mba = MagicBoxApply.query.filter_by_(MBAid=approval_model.AVcontent).first_('魔盒商品申请数据异常') parent_apply = mba - # 将父id和其他同等级的id改为失效 + # 将父id改为失效 while parent_apply.ParentMBAid != None: parent_apply = MagicBoxApply.query.filter(MagicBoxApply.MBAid == parent_apply.ParentMBAid, - MagicBoxApply.MBAstatus == ApplyStatus.agree.value, + MagicBoxApply.MBAstatus == ApplyStatus.lose_agree.value, MagicBoxApply.isdelete == False).first() if parent_apply: - children_apply = MagicBoxApply.query.filter( - MagicBoxApply.ParentMBAid == parent_apply.ParentMBAid, - MagicBoxApply.MBAstatus == ApplyStatus.agree.value, - MagicBoxApply.isdelete == False).all() - if children_apply: - for child_apply in children_apply: - child_apply.update({ - 'MBAstatus': ApplyStatus.lose_effect.value - }) - db.session.add(child_apply) - parent_apply.update({ - 'MBAstatus': ApplyStatus.lose_effect.value - }) - db.session.add(parent_apply) + # 是否进行库存变化 + other_apply_info = MagicBoxApply.query.filter(MagicBoxApply.isdelete == False, + MagicBoxApply.MBAid != parent_apply.MBAid, + MagicBoxApply.MBAstatus.notin_( + [ApplyStatus.cancle.value, ApplyStatus.reject.value, + ApplyStatus.agree.value]), + MagicBoxApply.OSid == parent_apply.OSid, + ).first() + if not other_apply_info: + out_stock = OutStock.query.filter(OutStock.isdelete == False, + OutStock.OSid == parent_apply.OSid + ).first() + from planet.control.COrder import COrder + COrder()._update_stock(out_stock.OSnum, skuid=parent_apply.SKUid) + parent_apply.MBAstatus = ApplyStatus.lose_effect.value break parent_apply = MagicBoxApply.query.filter( MagicBoxApply.MBAid == parent_apply.ParentMBAid).first() + mba.MBAstatus = ApplyStatus.agree.value mba_other = MagicBoxApply.query.filter( MagicBoxApply.isdelete == False, @@ -1242,6 +1257,16 @@ def refuse_magicbox(self, approval_model, refuse_abo): ).first() from planet.control.COrder import COrder COrder()._update_stock(out_stock.OSnum, skuid=mba.SKUid) + parent_apply = mba + while parent_apply.ParentMBAid != None: + parent_apply = MagicBoxApply.query.filter(MagicBoxApply.MBAid == parent_apply.ParentMBAid, + MagicBoxApply.MBAstatus == ApplyStatus.lose_agree.value, + MagicBoxApply.isdelete == False).first() + if parent_apply: + parent_apply.MBAstatus = ApplyStatus.agree.value + break + parent_apply = MagicBoxApply.query.filter( + MagicBoxApply.MBAid == parent_apply.ParentMBAid).first() def agree_freshmanfirstproduct(self, approval_model): ffa = FreshManFirstApply.query.filter_by_(FMFAid=approval_model.AVcontent).first_('新人商品申请数据异常') @@ -1249,13 +1274,9 @@ def agree_freshmanfirstproduct(self, approval_model): # 将父id改为失效 while parent_apply.ParentFMFAid != None: parent_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, - FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, + FreshManFirstApply.FMFAstatus == ApplyStatus.lose_agree.value, FreshManFirstApply.isdelete == False).first() if parent_apply: - parent_apply.update({ - 'FMFAstatus': ApplyStatus.lose_effect.value - }) - db.session.add(parent_apply) # 进行库存恢复 apply_skus = FreshManFirstSku.query.join( FreshManFirstProduct, FreshManFirstProduct.FMFPid == FreshManFirstSku.FMFPid).filter( @@ -1265,6 +1286,7 @@ def agree_freshmanfirstproduct(self, approval_model): sku = ProductSku.query.filter(ProductSku.SKUid == apply_sku.SKUid).first() product = Products.query.filter(Products.PRid == sku.PRid).first() COrder()._update_stock(apply_sku.FMFPstock, product, sku) + parent_apply.FMFAstatus = ApplyStatus.lose_effect.value break parent_apply = FreshManFirstApply.query.filter( FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() @@ -1285,16 +1307,14 @@ def refuse_freshmanfirstproduct(self, approval_model, refuse_abo): sku = ProductSku.query.filter(ProductSku.SKUid == apply_sku.SKUid).first() product = Products.query.filter(Products.PRid == sku.PRid).first() COrder()._update_stock(apply_sku.FMFPstock, product, sku) - #原同意单修改状态 + parent_apply = ffa + # 原同意单修改状态 while parent_apply.ParentFMFAid != None: parent_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, - FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, + FreshManFirstApply.FMFAstatus == ApplyStatus.lose_agree.value, FreshManFirstApply.isdelete == False).first() if parent_apply: - parent_apply.update({ - 'FMFAstatus': ApplyStatus.agree.value - }) - db.session.add(parent_apply) + parent_apply.FMFAstatus = ApplyStatus.agree.value break parent_apply = FreshManFirstApply.query.filter( FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() @@ -1304,6 +1324,17 @@ def agree_trialcommodity(self, approval_model): tc.TCstatus = TrialCommodityStatus.upper.value tc.AgreeStartTime = tc.ApplyStartTime tc.AgreeEndTime = tc.ApplyEndTime # todo 同意时自动填写申请时间,后期可能需要管理同意时输入灵活时间 + parent_apply = tc + while parent_apply.ParentTCid != None: + parent_apply = TrialCommodity.query.filter( + TrialCommodity.TCid == parent_apply.ParentTCid, + TrialCommodity.TCstatus == TrialCommodityStatus.lose_upper.value, + TrialCommodity.isdelete == False).first() + if parent_apply: + parent_apply.TCstatus = ApplyStatus.lose_effect.value + break + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() def refuse_trialcommodity(self, approval_model, refuse_abo): tc = TrialCommodity.query.filter_by_(TCid=approval_model.AVcontent).first() @@ -1311,6 +1342,17 @@ def refuse_trialcommodity(self, approval_model, refuse_abo): return tc.TCstatus = TrialCommodityStatus.reject.value tc.TCrejectReason = refuse_abo + parent_apply = tc + while parent_apply.ParentTCid != None: + parent_apply = TrialCommodity.query.filter( + TrialCommodity.TCid == parent_apply.ParentTCid, + TrialCommodity.TCstatus == ApplyStatus.lose_upper.value, + TrialCommodity.isdelete == False).first() + if parent_apply: + parent_apply.TCstatus = ApplyStatus.agree.value + break + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() def agree_activationcode(self, approval_model): aca = ActivationCodeApply.query.filter_by_(ACAid=approval_model.AVcontent).first_('激活码申请数据异常') @@ -1337,6 +1379,32 @@ def refuse_activationcode(self, approval_model, refuse_abo): def agree_timelimited(self, approval_model): tla = TimeLimitedProduct.query.filter_by_(TLPid=approval_model.AVcontent).first_('限时活动商品申请数据异常') + parent_apply = tla + while parent_apply.ParentTLPid != None: + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid, + TimeLimitedProduct.TLAstatus == ApplyStatus.lose_agree.value, + TimeLimitedProduct.isdelete == False).first() + if parent_apply: + # 获取原商品属性 + product = Products.query.filter_by(PRid=parent_apply.PRid, isdelete=False).first() + # 获取原sku属性 + tls_old = TimeLimitedSku.query.filter( + TimeLimitedSku.TLPid == parent_apply.TLPid, + TimeLimitedSku.isdelete == False, + TimeLimitedProduct.isdelete == False, + ).all() + from planet.control.COrder import COrder + + # 遍历原sku 将库存退出去 + for sku in tls_old: + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') + COrder()._update_stock(int(sku.TLSstock), product, sku_instance) + parent_apply.TLAstatus = ApplyStatus.lose_effect.value + break + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() tla.TLAstatus = ApplyStatus.agree.value def refuse_timelimited(self, approval_model, refuse_abo): @@ -1360,6 +1428,17 @@ def refuse_timelimited(self, approval_model, refuse_abo): sku_instance = ProductSku.query.filter_by( isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') COrder()._update_stock(int(sku.TLSstock), product, sku_instance) + parent_apply = tlp + while parent_apply.ParentTLPid != None: + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid, + TimeLimitedProduct.TLAstatus == ApplyStatus.lose_agree.value, + TimeLimitedProduct.isdelete == False).first() + if parent_apply: + parent_apply.TLAstatus = ApplyStatus.agree.value + break + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() def agree_tointegral(self, approval_model): ip = IntegralProduct.query.filter_by_(IPid=approval_model.AVcontent).first_('星币商品申请数据异常') diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index c03f7053..c8d154a7 100644 --- a/planet/control/CFreshManFirstOrder.py +++ b/planet/control/CFreshManFirstOrder.py @@ -34,22 +34,32 @@ def list(self): FreshManFirstApply.AgreeEndtime >= time_now, FreshManFirstApply.isdelete == False, ).all() - instance_list=[] + instance_list = [] with db.auto_commit(): for fresh_man_apply in fresh_man_applys: fresh_man_apply.update({'FMFAstatus': ApplyStatus.agree.value}) instance_list.append(fresh_man_apply) - fresh_child_apply = FreshManFirstApply.query.filter(FreshManFirstApply.ParentFMFAid == fresh_man_apply.FMFAid, - FreshManFirstApply.FMFAstatus == ApplyStatus.wait_check.value, - FreshManFirstApply.isdelete == False).first() + fresh_child_apply = FreshManFirstApply.query.filter( + FreshManFirstApply.ParentFMFAid == fresh_man_apply.FMFAid, + FreshManFirstApply.FMFAstatus == ApplyStatus.wait_check.value, + FreshManFirstApply.isdelete == False).first() if fresh_child_apply: fresh_child_apply.update({'FMFAstatus': ApplyStatus.lose_effect.value}) instance_list.append(fresh_child_apply) + # 进行库存恢复 + apply_skus = FreshManFirstSku.query.join( + FreshManFirstProduct, FreshManFirstProduct.FMFPid == FreshManFirstSku.FMFPid).filter( + FreshManFirstProduct.FMFAid == fresh_child_apply.FMFAid).all() + from planet.control.COrder import COrder + for apply_sku in apply_skus: + sku = ProductSku.query.filter(ProductSku.SKUid == apply_sku.SKUid).first() + product = Products.query.filter(Products.PRid == sku.PRid).first() + COrder()._update_stock(apply_sku.FMFPstock, product, sku) db.session.add_all(instance_list) fresh_man_products = FreshManFirstProduct.query.join( FreshManFirstApply, FreshManFirstApply.FMFAid == FreshManFirstProduct.FMFAid ).filter_( - FreshManFirstApply.FMFAstatus.in_([ApplyStatus.agree.value,ApplyStatus.lose_agree.value]), + FreshManFirstApply.FMFAstatus.in_([ApplyStatus.agree.value, ApplyStatus.lose_agree.value]), FreshManFirstApply.AgreeStartime <= time_now, FreshManFirstApply.AgreeEndtime >= time_now, FreshManFirstApply.isdelete == False, @@ -443,8 +453,11 @@ def reapply_award(self): product_brand = ProductBrand.query.filter(ProductBrand.PBid == product.PBid).first_('商品所在信息不全') with db.auto_commit(): fresh_first_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == fmfaid, - FreshManFirstApply.FMFAstatus.in_([ApplyStatus.cancle.value,ApplyStatus.reject.value,ApplyStatus.agree.value]), - FreshManFirstApply.isdelete == False).first_('已下架或审核中的申请不可以进行修改') + FreshManFirstApply.FMFAstatus.in_( + [ApplyStatus.cancle.value, ApplyStatus.reject.value, + ApplyStatus.agree.value]), + FreshManFirstApply.isdelete == False).first_( + '已下架或审核中的申请不可以进行修改') # 是否能再次申请 starttime = fresh_first_apply.AgreeStartime endtime = fresh_first_apply.AgreeEndtime @@ -454,7 +467,7 @@ def reapply_award(self): raise StatusError('已开始的活动不能再次发起申请') # 父活动不能是活动开始状态 parent_apply = fresh_first_apply - instance_list=[] + instance_list = [] while parent_apply.ParentFMFAid != None: parent_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, @@ -466,7 +479,7 @@ def reapply_award(self): raise StatusError('已结束的活动不能再次发起申请') elif starttime <= date.today: raise StatusError('已开始的活动不能再次发起申请') - parent_apply.update({"FMFAstatus":ApplyStatus.lose_agree.value}) + parent_apply.update({"FMFAstatus": ApplyStatus.lose_agree.value}) instance_list.append(parent_apply) break parent_apply = FreshManFirstApply.query.filter( @@ -487,8 +500,6 @@ def reapply_award(self): if fresh_first_apply.FMFAstatus == ApplyStatus.reject.value: fresh_first_apply.update({'isdelete': True}) instance_list.append(fresh_first_apply) - db.session.add_all(instance_list) - if is_admin(): BASEADMIN.create_action(AdminActionS.update.value, 'FreshManFirstApply', fmfaid) apply_from = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value @@ -528,7 +539,7 @@ def reapply_award(self): 'PRdescription': product.PRdescription, 'PRprice': data.get('prprice') }) - db.session.add(fresh_first_product) + instance_list.append(fresh_first_product) skus = data.get('skus') for sku in skus: skuid = sku.get('skuid') @@ -547,9 +558,10 @@ def reapply_award(self): 'SKUid': skuid, 'SKUprice': float(skuprice), }) - db.session.add(fresh_first_sku) + instance_list.append(fresh_first_sku) BASEAPPROVAL().create_approval('tofreshmanfirstproduct', request.user.id, fresh_first_apply.FMFAid, apply_from) + db.session.add_all(instance_list) return Success('申请添加成功', data=fresh_first_apply.FMFAid) def update_award(self): diff --git a/planet/control/CGuessNum.py b/planet/control/CGuessNum.py index d8909a6d..2fefbab8 100644 --- a/planet/control/CGuessNum.py +++ b/planet/control/CGuessNum.py @@ -310,14 +310,45 @@ def recv_award(self): def today_gnap(self): now = datetime.now() today = date.today() - gnaa_list = GuessNumAwardApply.query.filter_by( - GNAAstarttime=today, GNAAstatus=ApplyStatus.agree.value, isdelete=False).all() + gnaa_list = GuessNumAwardApply.query.filter( + GuessNumAwardApply.GNAAstarttime == today, + GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.agree.value, ApplyStatus.lose_agree.value]), + GuessNumAwardApply.isdelete == False).all() user = get_current_user() gn = GuessNum.query.filter_by(USid=user.USid, isdelete=False).order_by(GuessNum.createtime.desc()).first() - + instance_list = [] for gnaa in gnaa_list: + if gnaa.GNAAstatus == ApplyStatus.lose_agree.value: + gnaa.update({'GNAAstatus': ApplyStatus.agree.value}) + instance_list.append(gnaa) + gna_child_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.ParentGNAAid == gnaa.GNAAid, + GuessNumAwardApply.GNAAstatus == ApplyStatus.wait_check.value, + GuessNumAwardApply.isdelete == False).first() + if gna_child_apply: + gna_child_apply.update({'GNAAstatus': ApplyStatus.lose_effect.value}) + # 获取原商品属性 + gnap_old = GuessNumAwardProduct.query.filter(GuessNumAwardProduct.GNAAid == gna_child_apply.GNAAid, + GuessNumAwardProduct.isdelete == False).first() + product = Products.query.filter_by(PRid=gnap_old.PRid, isdelete=False).first_('商品信息出错') + # 获取原sku属性 + gnas_old = GuessNumAwardSku.query.filter( + gna_child_apply.GNAAid == GuessNumAwardProduct.GNAAid, + GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, + GuessNumAwardSku.isdelete == False, + GuessNumAwardProduct.isdelete == False, + ).all() + from planet.control.COrder import COrder + + # 遍历原sku 将库存退出去 + for sku in gnas_old: + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') + COrder()._update_stock(int(sku.SKUstock), product, sku_instance) + instance_list.append(gna_child_apply) current_app.logger.info('获取到申请 {}'.format(gnaa.GNAAid)) self._fill_gnaa(gnaa, gn, now) + db.session.add_all(instance_list) # 上方图 activity = Activity.query.filter_by_({ @@ -408,8 +439,7 @@ def reapply_award(self): """修改猜数字奖品申请, 一次只能处理一天的一个商品""" if not (is_supplizer() or is_admin()): raise AuthorityError() - # data = parameter_required(('gnaaid', 'skuprice', 'skustock')) - data = parameter_required(('gnaaid', 'prid', 'prprice', 'skus')) + data = parameter_required(('prid', 'prprice', 'skus', 'gnaastarttime', 'gnaaid')) with db.auto_commit(): # 获取申请单 apply_info = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == data.get('gnaaid'), @@ -426,40 +456,27 @@ def reapply_award(self): raise ParamsError('已结束的活动不能再次发起申请') elif starttime <= date.today: raise ParamsError('已开始的活动不能再次发起申请') - # 父活动和基于父活动的所有再次申请通过的活动都不能是活动开始状态 + # 父活动不能是活动开始状态 parent_apply = apply_info + instance_list = [] while parent_apply.ParentGNAAid != None: parent_apply = GuessNumAwardApply.query.filter( GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, GuessNumAwardApply.GNAAstatus == ApplyStatus.agree.value, GuessNumAwardApply.isdelete == False).first() if parent_apply: - children_apply = GuessNumAwardApply.query.filter( - GuessNumAwardApply.ParentGNAAid == parent_apply.ParentGNAAid, - GuessNumAwardApply.GNAAstatus == ApplyStatus.agree.value, - GuessNumAwardApply.isdelete == False).all() - if children_apply: - for child_apply in children_apply: - starttime = child_apply.AgreeStartime - endtime = child_apply.AgreeEndtime - if endtime < date.today: - raise ParamsError('已结束的活动不能再次发起申请') - elif starttime <= date.today: - raise ParamsError('已开始的活动不能再次发起申请') starttime = parent_apply.AgreeStartime endtime = parent_apply.AgreeEndtime if endtime < date.today: raise ParamsError('已结束的活动不能再次发起申请') elif starttime <= date.today: raise ParamsError('已开始的活动不能再次发起申请') + parent_apply.update({"GNAAstatus": ApplyStatus.lose_agree.value}) + instance_list.append(parent_apply) break - gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value # 解除和原商品属性的绑定 GuessNumAwardProduct.query.filter_by(GNAAid=apply_info.GNAAid, isdelete=False).delete_() - # product_old.isdelete = True - # 如果修改了时间,检测是否有冲突 - exist_apply_list = list() # 创建新记录 gnaa = GuessNumAwardApply.create({ @@ -472,81 +489,85 @@ def reapply_award(self): 'GNAAstatus': ApplyStatus.wait_check.value, 'ParentGNAAid': apply_info.GNAAid }) - db.session.add(gnaa) + instance_list.append(gnaa) # 对ParentGNAAid进行检验 if apply_info.GNAAstatus == ApplyStatus.reject.value: apply_info.update({'isdelete': True}) - db.session.add(apply_info) - # 重新添加商品属性 - skus = data.get('skus') + instance_list.append(apply_info) + # 欲申请商品 product = Products.query.filter_by( PRid=data.get('prid'), isdelete=False, PRstatus=ProductStatus.usual.value).first_('商品未上架') product_brand = ProductBrand.query.filter_by(PBid=product.PBid).first_('商品信息不全') - # 新的商品属性 - gnap = GuessNumAwardProduct.create({ - 'GNAPid': str(uuid.uuid1()), - 'GNAAid': apply_info.GNAAid, - 'PRid': product.PRid, - 'PRmainpic': product.PRmainpic, - 'PRtitle': product.PRtitle, - 'PBid': product.PBid, - 'PBname': product_brand.PBname, - 'PRattribute': product.PRattribute, - 'PRdescription': product.PRdescription, - 'PRprice': data.get('prprice') - }) - db.session.add(gnap) - # 新的sku属性 - for sku in skus: - # 冲突校验。 如果冲突,则跳过,并予以提示 - exits_apply = GuessNumAwardApply.query.filter( - GuessNumAwardApply.GNAAid != apply_info.GNAAid, - GuessNumAwardApply.GNAAstarttime == gnaastarttime, - GuessNumAwardProduct.GNAAid == GuessNumAwardApply.GNAAid, - GuessNumAwardProduct.PRid == data.get('prid'), - GuessNumAwardSku.SKUid == sku.get('skuid'), - GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, - GuessNumAwardProduct.isdelete == False, - GuessNumAwardSku.isdelete == False, - GuessNumAwardApply.isdelete == False - ).first() - - skuid = sku.get('skuid') - skuprice = sku.get('skuprice') - skustock = sku.get('skustock') - SKUdiscountone = sku.get('skudiscountone') - SKUdiscounttwo = sku.get('skudiscounttwo') - SKUdiscountthree = sku.get('skudiscountthree') - SKUdiscountfour = sku.get('skudiscountfour') - SKUdiscountfive = sku.get('skudiscountfive') - SKUdiscountsix = sku.get('skudiscountsix') - sku_instance = ProductSku.query.filter_by( - isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') - - if exits_apply: - exist_apply_list.append(sku_instance) - continue - # 库存处理 - self._update_stock(-int(skustock), product, sku_instance) - - gnas = GuessNumAwardSku.create({ - 'GNASid': str(uuid.uuid1()), - 'GNAPid': gnap.GNAPid, - 'SKUid': skuid, - 'SKUprice': skuprice, - 'SKUstock': skustock, - 'SKUdiscountone': SKUdiscountone, - 'SKUdiscounttwo': SKUdiscounttwo, - 'SKUdiscountthree': SKUdiscountthree, - 'SKUdiscountfour': SKUdiscountfour, - 'SKUdiscountfive': SKUdiscountfive, - 'SKUdiscountsix': SKUdiscountsix, - }) - db.session.add(gnas) - apply_info.GNAAstatus = ApplyStatus.wait_check.value - super(CGuessNum, self).create_approval('toguessnum', request.user.id, apply_info.GNAAid, gnaafrom) - - return Success('修改成功', {'gnaaid': apply_info.GNAAid, 'skus': exist_apply_list}) + # 时间列表 + time_list = data.get('gnaastarttime') + # 申请的sku list + skus = data.get('skus') + with db.auto_commit(): + # 系统实际生成的申请id列表, 按日期不同生成不同的申请单 + gnaaid_list = list() + for day in time_list: + # 校验是否存在已提交申请 + exist_apply = GuessNumAwardApply.query.filter( + GuessNumAwardProduct.PRid == data.get('prid'), + # GuessNumAwardProduct.GNAPid == GuessNumAwardApply.GNAPid, + GuessNumAwardApply.isdelete == False, + GuessNumAwardApply.SUid == request.user.id, + GuessNumAwardApply.GNAAstarttime == day).first() + if exist_apply: + raise ParamsError('您已添加过{}日的申请'.format(day)) + + db.session.add(gnaa) + gnaaid_list.append(gnaa.GNAAid) + # 活动商品 + gnap = GuessNumAwardProduct.create({ + 'GNAPid': str(uuid.uuid1()), + 'GNAAid': gnaa.GNAAid, + 'PRid': product.PRid, + 'PRmainpic': product.PRmainpic, + 'PRtitle': product.PRtitle, + 'PBid': product.PBid, + 'PBname': product_brand.PBname, + 'PRattribute': product.PRattribute, + 'PRdescription': product.PRdescription, + 'PRprice': data.get('prprice') + }) + instance_list.append(gnap) + # 活动sku + for sku in skus: + skuid = sku.get('skuid') + skuprice = sku.get('skuprice') + skustock = sku.get('skustock') + skudiscountone = sku.get('skudiscountone') + skudiscounttwo = sku.get('skudiscounttwo') + skudiscountthree = sku.get('skudiscountthree') + skudiscountfour = sku.get('skudiscountfour') + skudiscountfive = sku.get('skudiscountfive') + skudiscountsix = sku.get('skudiscountsix') + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') + self._update_stock(-int(skustock), product, sku_instance) + # db.session.add(sku) + gnas = GuessNumAwardSku.create({ + 'GNASid': str(uuid.uuid1()), + 'GNAPid': gnap.GNAPid, + 'SKUid': skuid, + 'SKUprice': skuprice, + 'SKUstock': skustock, + 'SKUdiscountone': skudiscountone, + 'SKUdiscounttwo': skudiscounttwo, + 'SKUdiscountthree': skudiscountthree, + 'SKUdiscountfour': skudiscountfour, + 'SKUdiscountfive': skudiscountfive, + 'SKUdiscountsix': skudiscountsix, + }) + instance_list.append(gnas) + if is_admin(): + BASEADMIN.create_action(AdminActionS.insert.value, 'GuessNumAwardApply', str(uuid.uuid1())) + # 添加到审批流 + for gnaaid in gnaaid_list: + super(CGuessNum, self).create_approval('toguessnum', request.user.id, gnaaid, gnaafrom) + db.session.add_all(instance_list) + return Success('申请添加成功', {'gnaaid': gnaaid_list}) def apply_award(self): """申请添加奖品""" @@ -586,6 +607,8 @@ def apply_award(self): 'GNAAstatus': ApplyStatus.wait_check.value, }) db.session.add(gnaa) + if is_admin(): + BASEADMIN.create_action(AdminActionS.insert.value, 'GuessNumAwardApply', str(uuid.uuid1())) gnaaid_list.append(gnaa.GNAAid) # 活动商品 gnap = GuessNumAwardProduct.create({ diff --git a/planet/control/CMagicBox.py b/planet/control/CMagicBox.py index 19b9f375..589774ab 100644 --- a/planet/control/CMagicBox.py +++ b/planet/control/CMagicBox.py @@ -445,12 +445,10 @@ def apply_award(self): return Success('申请添加成功', {'mbaid': mbaid_list}) def reapply_award(self): - """修改魔盒申请""" - if not (is_supplizer() or is_admin()): - raise AuthorityError() + """魔盒重新申请""" data = parameter_required(('skuid', 'prid', 'skustock', 'mbastarttime', 'skuprice', 'skuminprice', 'gearsone', 'gearstwo', 'gearsthree')) - mbaid, skuid, prid, skustock = data.get('mbaid'), data.get('skuid'), data.get('prid'), data.get('skustock') + mbaid, skuid, prid, skustock = data.get('mbaid'), data.get('skuid'), data.get('prid'), data.get('skustock', 1) gearsone, gearstwo, gearsthree = data.get('gearsone'), data.get('gearstwo'), data.get('gearsthree') if not isinstance(gearsone, list): raise ParamsError('gearsone格式错误') @@ -462,20 +460,23 @@ def reapply_award(self): for test_str in (gearsone, gearstwo, gearsthree): if not re.match(r'^\[(\"\d+\-\d+\"\,? ?)+\]$', test_str): raise ParamsError('档次变化金额只能填写数字') + mbafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value + sku = ProductSku.query.filter_by_(SKUid=skuid).first_('没有该skuid信息') + product = Products.query.filter(Products.PRid == prid, Products.isdelete == False, + Products.PRstatus == ProductStatus.usual.value + ).first_('仅可将已上架的商品用于申请') + assert sku.PRid == prid, 'sku与商品信息不对应' apply_info = MagicBoxApply.query.filter(MagicBoxApply.MBAid == mbaid, MagicBoxApply.MBAstatus.in_([ApplyStatus.agree.value, ApplyStatus.reject.value, - ApplyStatus.cancle.value]) - ).first_('已下架或审核中的申请不可以进行修改') + ApplyStatus.cancle.value]) + ).first_('已下架或审核中的申请不可以进行修改') if apply_info.SUid != request.user.id: raise AuthorityError('仅可修改自己提交的申请') - mbafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value - sku = ProductSku.query.filter_by_(SKUid=skuid).first_('没有该skuid信息') - product = Products.query.filter(Products.PRid == prid, Products.isdelete == False, - Products.PRstatus == ProductStatus.usual.value - ).first_('仅可将已上架的商品用于申请') # 当前商品状态不允许进行申请 assert sku.PRid == prid, 'sku与商品信息不对应' + award_instance_list = list() + mbaid_list = list() other_apply_info = MagicBoxApply.query.filter(MagicBoxApply.isdelete == False, MagicBoxApply.MBAid != mbaid, MagicBoxApply.MBAstatus.notin_( @@ -489,90 +490,80 @@ def reapply_award(self): raise ParamsError('已结束的活动不能再次发起申请') elif starttime <= date.today: raise ParamsError('已开始的活动不能再次发起申请') - # 父活动和基于父活动的所有再次申请通过的活动都不能是活动开始状态 + # 已通过的父活动不能是活动开始状态 parent_apply = apply_info while parent_apply.ParentMBAid != None: parent_apply = MagicBoxApply.query.filter(MagicBoxApply.MBAid == parent_apply.ParentMBAid, MagicBoxApply.MBAstatus == ApplyStatus.agree.value, MagicBoxApply.isdelete == False).first() if parent_apply: - children_apply = MagicBoxApply.query.filter( - MagicBoxApply.ParentMBAid == parent_apply.ParentMBAid, - MagicBoxApply.MBAstatus == ApplyStatus.agree.value, - MagicBoxApply.isdelete == False).all() - if children_apply: - for child_apply in children_apply: - starttime = child_apply.AgreeStartime - endtime = child_apply.AgreeEndtime - if endtime < date.today: - raise ParamsError('已结束的活动不能再次发起申请') - elif starttime <= date.today: - raise ParamsError('已开始的活动不能再次发起申请') starttime = parent_apply.AgreeStartime endtime = parent_apply.AgreeEndtime if endtime < date.today: raise ParamsError('已结束的活动不能再次发起申请') elif starttime <= date.today: raise ParamsError('已开始的活动不能再次发起申请') + parent_apply.update({"MBAstatus": ApplyStatus.lose_agree.value}) + award_instance_list.append(parent_apply) break parent_apply = MagicBoxApply.query.filter( MagicBoxApply.MBAid == parent_apply.ParentMBAid).first() - # 创建新记录 - award_dict = { - 'MBAid': str(uuid.uuid1()), - 'SUid': request.user.id, - 'SKUid': skuid, - 'PRid': prid, - 'PBid': product.PBid, - 'MBAstarttime': data.get('mbastarttime'), - 'MBAendtime': data.get('mbastarttime'), - 'SKUprice': float(data.get('skuprice', 0.01)), - 'SKUminPrice': float(data.get('skuminprice', 0.01)), - 'Gearsone': gearsone, - 'Gearstwo': gearstwo, - 'Gearsthree': gearsthree, - # 'SKUstock': int(skustock), - "OSid": str(uuid.uuid1()), - 'MBAstatus': ApplyStatus.wait_check.value, - 'MBAfrom': mbafrom, - 'ParentMBAid':mbaid - } - award_instance = MagicBoxApply.create(award_dict) - db.session.add(award_instance) # 对ParentMBAid进行检验 if apply_info.MBAstatus == ApplyStatus.reject.value: apply_info.update({'isdelete': True}) - db.session.add(apply_info) - award_dict = { - 'SUid': request.user.id, + award_instance_list.append(apply_info) + time_list = data.get('mbastarttime') + if not isinstance(time_list, list): + raise ParamsError('参数 mbastarttime 格式错误') + skustock = int(skustock) + if skustock == 0: + raise ParamsError('申请参与的库存数不能为0') + # 活动出库单 + osid = str(uuid.uuid1()) + db.session.add(OutStock.create({ + 'OSid': osid, 'SKUid': skuid, - 'PRid': prid, - 'PBid': product.PBid, - 'MBAstarttime': data.get('mbastarttime'), - 'MBAendtime': data.get('mbastarttime'), - 'SKUprice': float(data.get('skuprice', 0.01)), - 'SKUminPrice': float(data.get('skuminprice', 0.01)), - 'Gearsone': gearsone, - 'Gearstwo': gearstwo, - 'Gearsthree': gearsthree, - # 'SKUstock': int(skustock), - 'MBAstatus': ApplyStatus.wait_check.value, - 'MBAfrom': mbafrom, - } - award_dict = {k: v for k, v in award_dict.items() if v is not None} - MagicBoxApply.query.filter_by_(MBAid=mbaid).update(award_dict) + 'OSnum': skustock + })) + self._update_stock(-skustock, skuid=skuid) + for day in time_list: + # 先检测是否存在相同skuid,相同日期的申请 + exist_apply_sku = MagicBoxApply.query.filter(MagicBoxApply.SKUid == skuid, + MagicBoxApply.isdelete == False, + MagicBoxApply.SUid == request.user.id, + MagicBoxApply.MBAstarttime == day).first() + if exist_apply_sku: + raise ParamsError('您已添加过{}日的申请'.format(day)) + # 创建新记录 + award_dict = { + 'MBAid': str(uuid.uuid1()), + 'SUid': request.user.id, + 'SKUid': skuid, + 'PRid': prid, + 'PBid': product.PBid, + 'MBAstarttime': data.get('mbastarttime'), + 'MBAendtime': data.get('mbastarttime'), + 'SKUprice': float(data.get('skuprice', 0.01)), + 'SKUminPrice': float(data.get('skuminprice', 0.01)), + 'Gearsone': gearsone, + 'Gearstwo': gearstwo, + 'Gearsthree': gearsthree, + # 'SKUstock': int(skustock), + "OSid": str(uuid.uuid1()), + 'MBAstatus': ApplyStatus.wait_check.value, + 'MBAfrom': mbafrom, + 'ParentMBAid': mbaid + } + award_instance = MagicBoxApply.create(award_dict) + award_instance_list.append(award_instance) + mbaid_list.append(award_dict['MBAid']) + db.session.add_all(award_instance_list) if is_admin(): - BASEADMIN.create_action(AdminAction.update.value, 'MagicBoxApply', mbaid) - # 是否修改库存 - if not other_apply_info: - # 如果没有同批正在上架或审核中的,将库存从商品中重新减出来 - out_stock = OutStock.query.filter(OutStock.isdelete == False, OutStock.OSid == apply_info.OSid - ).first() - super(CMagicBox, self)._update_stock(-out_stock.OSnum, skuid=apply_info.SKUid) + BASEADMIN.create_action(AdminAction.insert.value, 'MagicBoxApply', str(uuid.uuid1())) + # 添加到审批流 + [self.create_approval('tomagicbox', request.user.id, mbaid, mbafrom) for mbaid in mbaid_list] - # 重新添加到审批流 - super(CMagicBox, self).create_approval('tomagicbox', request.user.id, mbaid, mbafrom) - return Success('修改成功', {'mbaid': mbaid}) + return Success('申请添加成功', {'mbaid': mbaid_list}) def update_apply(self): """修改魔盒申请""" diff --git a/planet/control/CTimeLimited.py b/planet/control/CTimeLimited.py index 8354560a..197eca3e 100644 --- a/planet/control/CTimeLimited.py +++ b/planet/control/CTimeLimited.py @@ -116,7 +116,7 @@ def list_product(self): TimeLimitedProduct.isdelete == False, } if common_user(): - filter_args.add(TimeLimitedProduct.TLAstatus == ApplyStatus.agree.value) + filter_args.add(TimeLimitedProduct.TLAstatus.in_([ApplyStatus.agree.value, ApplyStatus.lose_agree.value])) current_app.logger.info('本次是普通用户进行查询') elif is_supplizer(): current_app.logger.info('本次是供应商进行查询') @@ -323,6 +323,8 @@ def apply_award(self): def reapply_award(self): """重新申请""" + if not (is_supplizer() or is_admin()): + raise AuthorityError() data = parameter_required(('tlaid', 'tlpid', 'prid', 'prprice', 'skus')) filter_args = { Products.PRid == data.get('prid'), @@ -338,27 +340,39 @@ def reapply_award(self): filter_args.add(Products.PRfrom == tlp_from) suid = None with db.auto_commit(): - # 获取申请单b + # 获取申请单 apply_info = TimeLimitedProduct.query.filter( TimeLimitedProduct.TLPid == data.get('tlpid'), TimeLimitedProduct.PRid == data.get('prid'), TimeLimitedProduct.isdelete == False ).first_('商品不存在') - if apply_info.TLAstatus not in [ApplyStatus.reject.value, ApplyStatus.cancle.value, ApplyStatus.agree.value]: + if apply_info.TLAstatus not in [ApplyStatus.reject.value, ApplyStatus.cancle.value, + ApplyStatus.agree.value]: raise StatusError('此申请不可以进行修改') if apply_info.SUid != suid: raise AuthorityError('仅可修改自己提交的申请') - # if is_admin() and apply_info.SUid: - # raise AuthorityError('仅可修改自己提交的申请') - - product = Products.query.filter(*filter_args).first_('商品未上架') - # instance_list = list() + product = Products.query.filter(*filter_args).first_('只能选择自己的商品') skus = data.get('skus') tla = TimeLimitedActivity.query.filter( TimeLimitedActivity.isdelete == False, TimeLimitedActivity.TLAstatus == TimeLimitedStatus.waiting.value, TimeLimitedActivity.TLAid == data.get('tlaid')).first_('活动已停止报名') - tlp = TimeLimitedProduct.create({ + instance_list = [] + while apply_info.ParentTLPid != None: + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid, + TimeLimitedProduct.TLAstatus == ApplyStatus.agree.value, + TimeLimitedProduct.isdelete == False).first() + if parent_apply: + parent_apply.update({"TLAstatus": ApplyStatus.lose_agree.value}) + instance_list.append(parent_apply) + break + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() + if apply_info.TLAstatus == ApplyStatus.reject.value: + apply_info.update({'isdelete': True}) + instance_list.append(apply_info) + new_tlp = TimeLimitedProduct.create({ 'TLPid': str(uuid.uuid1()), 'TLAid': tla.TLAid, 'TLAfrom': tlp_from, @@ -370,12 +384,9 @@ def reapply_award(self): # 'PBname': product.PBname, # 'PRtitle': product.PRtitle, 'PRprice': data.get('prprice'), - 'ParentTLPid':tla.TLPid + 'ParentTLPid': apply_info.TLPid }) - instance_list = [tlp] - skuids = list() - new_skuid = list() - # todo 撤销或者拒绝时 退还库存 + instance_list.append(new_tlp) for sku in skus: skuid = sku.get('skuid') skuprice = sku.get('skuprice') @@ -383,53 +394,24 @@ def reapply_award(self): sku_instance = ProductSku.query.filter_by( isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') self._update_stock(-int(skustock), product, sku_instance) - tls = TimeLimitedSku.query.filter( - TimeLimitedSku.TLPid == apply_info.TLPid, - TimeLimitedSku.SKUid == skuid, - TimeLimitedSku.isdelete == False, - ).first() - if not tls: - tls = TimeLimitedSku.create({ - 'TLSid': str(uuid.uuid1()), - 'TLPid': apply_info.TLPid, - 'TLSstock': skustock, - 'SKUid': skuid, - 'SKUprice': skuprice - }) - new_skuid.append(tls.TLSid) - else: - - tls.update({ - 'TLPid': apply_info.TLPid, - 'TLSstock': skustock, - 'SKUid': skuid, - 'SKUprice': skuprice - }) - skuids.append(skuid) + tls = TimeLimitedSku.create({ + 'TLSid': str(uuid.uuid1()), + 'TLPid': new_tlp.TLPid, + 'TLSstock': skustock, + 'SKUid': skuid, + 'SKUprice': skuprice + }) instance_list.append(tls) - delete_sku = TimeLimitedSku.query.filter( - TimeLimitedSku.isdelete == False, - TimeLimitedSku.SKUid.notin_(skuids), - TimeLimitedSku.TLPid == apply_info.TLPid - ).all() - for tls in delete_sku: - sku_instance = ProductSku.query.filter_by( - isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') - self._update_stock(int(tls.TLSstock), product, sku_instance) - tls.isdelete = True - - current_app.logger.info('本次修改 sku {} 个 新增 {} 删除 {} '.format( - len(skuids), len(new_skuid), len(delete_sku))) - # prstock += skustock - + # prstock += skustock db.session.add_all(instance_list) if is_admin(): - BASEADMIN().create_action(AdminActionS.update.value, 'TimeLimitedProduct', data.get('tlpid')) + BASEADMIN().create_action(AdminActionS.insert.value, 'TimeLimitedProduct', str(uuid.uuid1())) - super(CTimeLimited, self).create_approval('totimelimited', request.user.id, apply_info.TLPid, - applyfrom=tlp_from) - return Success('修改成功') + # todo 添加到审批流 + super(CTimeLimited, self).create_approval('totimelimited', request.user.id, new_tlp.TLPid, applyfrom=tlp_from) + + return Success('申请成功', {'tlpid': new_tlp.TLPid}) def update_award(self): """修改""" diff --git a/planet/control/CTrialCommodity.py b/planet/control/CTrialCommodity.py index 5114b19a..6f93b0f4 100644 --- a/planet/control/CTrialCommodity.py +++ b/planet/control/CTrialCommodity.py @@ -53,7 +53,8 @@ def get_commodity_list(self): args = parameter_required(('page_num', 'page_size')) kw = args.get('kw') tcstatus = args.get('tcstatus', 'upper') - if str(tcstatus) not in ['upper', 'auditing', 'reject', 'cancel', 'sell_out', 'all']: + if str(tcstatus) not in ['upper', 'auditing', 'reject', 'cancel', 'sell_out', 'all', 'lose_effect', + 'lose_upper']: raise ParamsError('tcstatus, 参数错误') tcstatus = getattr(TrialCommodityStatus, tcstatus).value commodity_query = TrialCommodity.query.filter(TrialCommodity.isdelete == False) @@ -61,6 +62,28 @@ def get_commodity_list(self): ProductBrand.isdelete == False, ProductBrand.PBstatus == ProductBrandStatus.upper.value ) + with db.auto_commit(): + # 修改状态 + commoditys = TrialCommodity.query.filter(TrialCommodity.AgreeStartTime <= date.today(), + TrialCommodity.AgreeEndTime >= date.today(), + TrialCommodity.TCstocks > 0, + TrialCommodity.TCstatus == TrialCommodityStatus.lose_upper + ).all() + instance_list = [] + if commoditys: + for commodity in commoditys: + commodity.update({'TCstatus': TrialCommodityStatus.upper.value}) + instance_list.append(commodity) + old_commoditys = TrialCommodity.query.filter(TrialCommodity.AgreeStartTime <= date.today(), + TrialCommodity.AgreeEndTime >= date.today(), + TrialCommodity.TCstocks > 0, + TrialCommodity.TCstatus == TrialCommodityStatus.auditing + ).all() + if old_commoditys: + for commodity in old_commoditys: + commodity.update({'TCstatus': TrialCommodityStatus.lose_effect.value}) + instance_list.append(commodity) + if tcstatus is not None: commodity_query = commodity_query.filter(TrialCommodity.TCstatus == tcstatus) if time_filter: @@ -99,7 +122,7 @@ def get_commodity_list(self): "banner": banner, "remarks": remarks, "commodity": commodity_list - } + } return Success(data=data).get_body(tourist=tourist) def get_commodity(self): @@ -280,6 +303,158 @@ def add_commodity(self): super().create_approval('totrialcommodity', request.user.id, tcid, tcfrom) return Success("添加成功", {'tcid': tcid}) + def readd_commodity(self): + """添加试用商品""" + if is_supplizer(): + usid = request.user.id + sup = self._check_supplizer(usid) + current_app.logger.info('Supplizer {} creat commodity'.format(sup.SUname)) + tcfrom = ApplyFrom.supplizer.value + elif is_admin(): + usid = request.user.id + admin = self._check_admin(usid) + current_app.logger.info('Admin {} creat commodity'.format(admin.ADname)) + tcfrom = ApplyFrom.platform.value + else: + raise AuthorityError() + data = parameter_required(('tctitle', 'tcdescription', 'tcdeposit', 'tcdeadline', 'tcfreight', + 'tcmainpic', 'tcattribute', 'tcdesc', 'pbid', 'images', 'skus', + 'tskuvalue', 'applystarttime', 'applyendtime', 'tcid' + )) + tcattribute = data.get('tcattribute') + tcdescription = data.get('tcdescription') + tcdesc = data.get('tcdesc') + tcdeposit = data.get('tcdeposit') + tcstocks = 0 + pbid = data.get('pbid') + images = data.get('images') + skus = data.get('skus') + tskuvalue = data.get('tskuvalue') + tcid = data.get('tcid') + commodity = TrialCommodity.query.filter(TrialCommodity.TCid == tcid, + TrialCommodity.TCstatus.in_([TrialCommodityStatus.upper.value, + TrialCommodityStatus.reject.value, + TrialCommodityStatus.cancle.value]), + TrialCommodity.isdelete == False + ).first_('该试用申请不能被重新申请') + if sup: + assert commodity.CreaterId == usid, '供应商只能修改自己上传的商品' + if not isinstance(images, list) or not isinstance(skus, list): + raise ParamsError('images/skus, 参数错误') + ProductBrand.query.filter_by_(PBid=pbid).first_('未找到该品牌信息') + tcid = str(uuid.uuid1()) + pbid = data.get('pbid') + images = data.get('images') + skus = data.get('skus') + if not isinstance(images, list) or not isinstance(skus, list): + raise ParamsError('images/skus, 参数错误') + ProductBrand.query.filter_by_(PBid=pbid).first_('pbid 参数错误, 未找到相应品牌') + with db.auto_commit(): + session_list = [] + # 是否能再次申请 + starttime = commodity.AgreeStartTime + endtime = commodity.AgreeEndtime + if endtime < date.today: + raise StatusError('已结束的活动不能再次发起申请') + elif starttime <= date.today: + raise StatusError('已开始的活动不能再次发起申请') + # 父活动不能是活动开始状态 + parent_apply = commodity + while parent_apply.ParentFMFAid != None: + parent_apply = TrialCommodity.query.filter(TrialCommodity.TCid == parent_apply.ParentTCid, + TrialCommodity.TCstatus == TrialCommodityStatus.agree.value, + TrialCommodity.isdelete == False).first() + if parent_apply: + starttime = parent_apply.AgreeStartime + endtime = parent_apply.AgreeEndtime + if endtime < date.today: + raise StatusError('已结束的活动不能再次发起申请') + elif starttime <= date.today: + raise StatusError('已开始的活动不能再次发起申请') + parent_apply.update({"TCstatus": ApplyStatus.lose_upper.value}) + session_list.append(parent_apply) + break + parent_apply = TrialCommodity.query.filter( + TrialCommodity.TCid == parent_apply.ParentTCid).first() + if commodity.TCstatus == ApplyStatus.reject.value: + commodity.update({'isdelete': True}) + session_list.append(commodity) + + for image in images: + parameter_required(('tcipic', 'tcisort'), datafrom=image) + image_info = TrialCommodityImage.create({ + 'TCIid': str(uuid.uuid1()), + 'TCid': tcid, + 'TCIpic': image.get('tcipic'), + 'TCIsort': image.get('tcisort') + }) + session_list.append(image_info) + # sku + sku_detail_list = [] # 一个临时的列表, 使用记录的sku_detail来检测sku_value是否符合规范 + for sku in skus: + parameter_required(('skupic', 'skustock', 'skuattritedetail'), datafrom=sku) + skuattritedetail = sku.get('skuattritedetail') + if not isinstance(skuattritedetail, list) or len(skuattritedetail) != len(tcattribute): + raise ParamsError('skuattritedetail与tcattribute不符') + sku_detail_list.append(skuattritedetail) + skustock = sku.get('skustock') + assert int(skustock) >= 0, '库存数量不能小于0' + tcstocks += int(skustock) # 计算总库存 + sku_info = TrialCommoditySku.create({ + 'SKUid': image_info.TCIid, + 'TCid': tcid, + 'SKUpic': sku.get('skupic'), + 'SKUprice': tcdeposit, + 'SKUstock': int(skustock), + 'SKUattriteDetail': json.dumps(skuattritedetail) + }) + session_list.append(sku_info) + if tskuvalue: + if not isinstance(tskuvalue, list) or len(tskuvalue) != len(tcattribute): + raise ParamsError('tskuvalue与prattribute不符') + sku_reverce = [] + for index in range(len(tcattribute)): + value = list(set([attribute[index] for attribute in sku_detail_list])) + sku_reverce.append(value) + # 对应位置的列表元素应该相同 + if set(value) != set(tskuvalue[index]): + raise ParamsError('请核对tskuvalue') + # sku_value表 + sku_value_instance = TrialCommoditySkuValue.create({ + 'TSKUid': image_info.TCIid, + 'TCid': tcid, + 'TSKUvalue': json.dumps(tskuvalue) + }) + session_list.append(sku_value_instance) + + new_commodity = TrialCommodity.create({ + 'TCid': tcid, + 'TCtitle': data.get('tctitle'), + 'TCdescription': tcdescription, + 'TCdeposit': tcdeposit, + 'TCdeadline': data.get('tcdeadline'), # 暂时先按天为单位 + 'TCfreight': data.get('tcfreight'), + 'TCstocks': tcstocks, + 'TCstatus': TrialCommodityStatus.auditing.value, + 'TCmainpic': data.get('tcmainpic'), + 'TCattribute': json.dumps(tcattribute or '[]'), + 'TCdesc': tcdesc or [], + 'TCremarks': data.get('tcremarks'), + 'CreaterId': request.user.id, + 'PBid': pbid, + 'TCfrom': tcfrom, + 'ApplyStartTime': data.get('applystarttime'), + 'ApplyEndTime': data.get('applyendtime'), + 'ParentTCid': commodity.TCid + }) + session_list.append(new_commodity) + db.session.add_all(session_list) + if is_admin(): + BASEADMIN().create_action(AdminActionS.insert.value, 'TrialCommodity', tcid) + # 添加进审批流 + super().create_approval('totrialcommodity', request.user.id, tcid, tcfrom) + return Success("添加成功", {'tcid': tcid}) + def update_commodity(self): """修改试用商品""" if is_supplizer(): @@ -554,7 +729,8 @@ def create_order(self): raise ParamsError('客户端来源错误') with db.auto_commit(): # 用户的地址信息 - user_address_instance = db.session.query(UserAddress).filter_by_({'UAid': uaid, 'USid': usid}).first_('地址信息不存在') + user_address_instance = db.session.query(UserAddress).filter_by_({'UAid': uaid, 'USid': usid}).first_( + '地址信息不存在') omrecvphone = user_address_instance.UAphone areaid = user_address_instance.AAid # 地址拼接 @@ -571,17 +747,20 @@ def create_order(self): omid = str(uuid.uuid1()) pbid = data.get('pbid') ommessage = data.get('ommessage') - product_brand_instance = db.session.query(ProductBrand).filter_by_({'PBid': pbid}).first_('品牌id: {}不存在'.format(pbid)) + product_brand_instance = db.session.query(ProductBrand).filter_by_({'PBid': pbid}).first_( + '品牌id: {}不存在'.format(pbid)) opid = str(uuid.uuid1()) skuid = data.get('skuid') opnum = int(data.get('nums', 1)) assert opnum > 0, 'nums <= 0, 参数错误' - sku_instance = db.session.query(TrialCommoditySku).filter_by_({'SKUid': skuid}).first_('skuid: {}不存在'.format(skuid)) + sku_instance = db.session.query(TrialCommoditySku).filter_by_({'SKUid': skuid}).first_( + 'skuid: {}不存在'.format(skuid)) if sku_instance.TCid != tcid: raise ParamsError('skuid 与 tcid, 商品不对应') assert int(sku_instance.SKUstock) - int(opnum) >= 0, '商品库存不足' - product_instance = db.session.query(TrialCommodity).filter_by_({'TCid': tcid}).first_('skuid: {}对应的商品不存在'.format(skuid)) + product_instance = db.session.query(TrialCommodity).filter_by_({'TCid': tcid}).first_( + 'skuid: {}对应的商品不存在'.format(skuid)) if product_instance.PBid != pbid: raise ParamsError('品牌id: {}与skuid: {}不对应'.format(pbid, skuid)) small_total = Decimal(str(product_instance.TCdeposit)) * opnum @@ -651,7 +830,8 @@ def create_order(self): auto_cancle_order.apply_async(args=([omid],), countdown=30 * 60, expires=40 * 60, ) # 生成支付信息 body = product_instance.TCtitle - pay_args = self._pay_detail(omclient, opaytype, opayno, float(small_total), body, openid=user.USopenid1 or user.USopenid2) + pay_args = self._pay_detail(omclient, opaytype, opayno, float(small_total), body, + openid=user.USopenid1 or user.USopenid2) response = { 'pay_type': PayType(opaytype).name, 'opaytype': opaytype, diff --git a/planet/extensions/tasks.py b/planet/extensions/tasks.py index 82c990d7..14be89fe 100644 --- a/planet/extensions/tasks.py +++ b/planet/extensions/tasks.py @@ -286,7 +286,7 @@ def create_settlenment(): # and_( cast(UserCommission.updatetime, Date) < tomonth_22, cast(UserCommission.updatetime, Date) >= pre_month_22, - # )) + # )) ).first() ss_total = su_comiission[0] or 0 ss = SupplizerSettlement.create({ @@ -776,6 +776,36 @@ def start_timelimited(tlaid): with db.auto_commit(): tla.TLAstatus = TimeLimitedStatus.starting.value + tlps = TimeLimitedProduct.query.filter(TimeLimitedProduct.TLAid == tlaid, + TimeLimitedProduct.isdelete == False, + TimeLimitedProduct.TLAstatus == ApplyStatus.lose_agree.value + ).all() + if tlps: + for tlp in tlps: + tlp.TLAstatus = TimeLimitedStatus.starting.value + old_tlps = TimeLimitedProduct.query.filter(TimeLimitedProduct.TLAid == tlaid, + TimeLimitedProduct.isdelete == False, + TimeLimitedProduct.TLAstatus == ApplyStatus.wait_check.value + ).all() + if old_tlps: + for tlp in old_tlps: + tlp.TLAstatus = TimeLimitedStatus.lose_effect.value + # 获取原商品属性 + product = Products.query.filter_by(PRid=tlp.PRid, isdelete=False).first() + # 获取原sku属性 + tls_old = TimeLimitedSku.query.filter( + TimeLimitedSku.TLPid == tlp.TLPid, + TimeLimitedSku.isdelete == False, + TimeLimitedProduct.isdelete == False, + ).all() + from planet.control.COrder import COrder + + # 遍历原sku 将库存退出去 + for sku in tls_old: + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') + COrder()._update_stock(int(sku.TLSstock), product, sku_instance) + current_app.logger.info('修改限时活动为开始 结束') diff --git a/readme.md b/readme.md index 1912d55f..01713709 100644 --- a/readme.md +++ b/readme.md @@ -75,6 +75,7 @@ alembic downgrade 上个版本号 # 可在本次迁移文件头部中找到'Revi - 数据库迁移需要先进入容器,在任意目录下使用 `ddd` 可进入容器bash下 - 容器外任意目录下使用 `dss` 可重启服务 +- 容器外任意目录下使用 `ttt` 可监听 ## 日志 From 0abe820acb97e2adaa9798f4d062260190beb469 Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Fri, 31 May 2019 00:09:59 +0800 Subject: [PATCH 10/20] =?UTF-8?q?=E6=96=B0=E4=BA=BA=E9=A6=96=E5=8D=95?= =?UTF-8?q?=E8=87=AA=E6=B5=8B=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/config/enums.py | 2 +- planet/control/CApproval.py | 24 +- planet/control/CFreshManFirstOrder.py | 274 ++++++++--------- planet/control/CGuessNum.py | 403 +++++++++++++------------- planet/control/CTrialCommodity.py | 3 +- 5 files changed, 336 insertions(+), 370 deletions(-) diff --git a/planet/config/enums.py b/planet/config/enums.py index 0cccbd73..1f09322b 100644 --- a/planet/config/enums.py +++ b/planet/config/enums.py @@ -110,7 +110,7 @@ class ApplyStatus(Enum): reject = -10, '已拒绝' wait_check = 0, '审核中' agree = 10, '已同意' - lose_agree = 20, '再次申请审核' + lose_agree = 20, '重新审核中' class OrderRefundOrstatus(Enum): diff --git a/planet/control/CApproval.py b/planet/control/CApproval.py index d065046e..ffb9c252 100644 --- a/planet/control/CApproval.py +++ b/planet/control/CApproval.py @@ -1273,10 +1273,10 @@ def agree_freshmanfirstproduct(self, approval_model): parent_apply = ffa # 将父id改为失效 while parent_apply.ParentFMFAid != None: - parent_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, + current_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, FreshManFirstApply.FMFAstatus == ApplyStatus.lose_agree.value, FreshManFirstApply.isdelete == False).first() - if parent_apply: + if current_apply: # 进行库存恢复 apply_skus = FreshManFirstSku.query.join( FreshManFirstProduct, FreshManFirstProduct.FMFPid == FreshManFirstSku.FMFPid).filter( @@ -1286,10 +1286,11 @@ def agree_freshmanfirstproduct(self, approval_model): sku = ProductSku.query.filter(ProductSku.SKUid == apply_sku.SKUid).first() product = Products.query.filter(Products.PRid == sku.PRid).first() COrder()._update_stock(apply_sku.FMFPstock, product, sku) - parent_apply.FMFAstatus = ApplyStatus.lose_effect.value + current_apply.FMFAstatus = ApplyStatus.lose_effect.value break - parent_apply = FreshManFirstApply.query.filter( - FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() + else: + parent_apply = FreshManFirstApply.query.filter( + FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() ffa.FMFAstatus = ApplyStatus.agree.value def refuse_freshmanfirstproduct(self, approval_model, refuse_abo): @@ -1310,14 +1311,17 @@ def refuse_freshmanfirstproduct(self, approval_model, refuse_abo): parent_apply = ffa # 原同意单修改状态 while parent_apply.ParentFMFAid != None: - parent_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, + current_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, FreshManFirstApply.FMFAstatus == ApplyStatus.lose_agree.value, FreshManFirstApply.isdelete == False).first() - if parent_apply: - parent_apply.FMFAstatus = ApplyStatus.agree.value + + if current_apply: + current_app.logger.info('{}'.format(parent_apply.FMFAid)) + current_apply.FMFAstatus = ApplyStatus.agree.value break - parent_apply = FreshManFirstApply.query.filter( - FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() + else: + parent_apply = FreshManFirstApply.query.filter( + FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() def agree_trialcommodity(self, approval_model): tc = TrialCommodity.query.filter_by_(TCid=approval_model.AVcontent).first_('试用商品申请数据异常') diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index c8d154a7..127e685c 100644 --- a/planet/control/CFreshManFirstOrder.py +++ b/planet/control/CFreshManFirstOrder.py @@ -34,18 +34,15 @@ def list(self): FreshManFirstApply.AgreeEndtime >= time_now, FreshManFirstApply.isdelete == False, ).all() - instance_list = [] with db.auto_commit(): for fresh_man_apply in fresh_man_applys: - fresh_man_apply.update({'FMFAstatus': ApplyStatus.agree.value}) - instance_list.append(fresh_man_apply) + fresh_man_apply.FMFAstatus=ApplyStatus.agree.value fresh_child_apply = FreshManFirstApply.query.filter( FreshManFirstApply.ParentFMFAid == fresh_man_apply.FMFAid, FreshManFirstApply.FMFAstatus == ApplyStatus.wait_check.value, FreshManFirstApply.isdelete == False).first() if fresh_child_apply: - fresh_child_apply.update({'FMFAstatus': ApplyStatus.lose_effect.value}) - instance_list.append(fresh_child_apply) + fresh_child_apply.FMFAstatus=ApplyStatus.lose_effect.value # 进行库存恢复 apply_skus = FreshManFirstSku.query.join( FreshManFirstProduct, FreshManFirstProduct.FMFPid == FreshManFirstSku.FMFPid).filter( @@ -55,11 +52,10 @@ def list(self): sku = ProductSku.query.filter(ProductSku.SKUid == apply_sku.SKUid).first() product = Products.query.filter(Products.PRid == sku.PRid).first() COrder()._update_stock(apply_sku.FMFPstock, product, sku) - db.session.add_all(instance_list) fresh_man_products = FreshManFirstProduct.query.join( FreshManFirstApply, FreshManFirstApply.FMFAid == FreshManFirstProduct.FMFAid ).filter_( - FreshManFirstApply.FMFAstatus.in_([ApplyStatus.agree.value, ApplyStatus.lose_agree.value]), + FreshManFirstApply.FMFAstatus==ApplyStatus.agree.value, FreshManFirstApply.AgreeStartime <= time_now, FreshManFirstApply.AgreeEndtime >= time_now, FreshManFirstApply.isdelete == False, @@ -441,49 +437,17 @@ def apply_award(self): def reapply_award(self): """重新申请添加奖品""" - if not (is_supplizer() or is_admin()): - raise AuthorityError() data = parameter_required(('prid', 'fmfaendtime', 'fmfastarttime', 'prprice', 'skus', 'fmfaid')) - prid = data.get('prid') fmfaid = data.get('fmfaid') - apply_from = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value - product = Products.query.filter(Products.PRid == prid, Products.isdelete == False, - Products.PRstatus.in_([ProductStatus.usual.value, ProductStatus.auditing.value]) - ).first_('当前商品状态不允许进行申请') - product_brand = ProductBrand.query.filter(ProductBrand.PBid == product.PBid).first_('商品所在信息不全') with db.auto_commit(): fresh_first_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == fmfaid, FreshManFirstApply.FMFAstatus.in_( [ApplyStatus.cancle.value, ApplyStatus.reject.value, ApplyStatus.agree.value]), - FreshManFirstApply.isdelete == False).first_( - '已下架或审核中的申请不可以进行修改') - # 是否能再次申请 - starttime = fresh_first_apply.AgreeStartime - endtime = fresh_first_apply.AgreeEndtime - if endtime < date.today: - raise StatusError('已结束的活动不能再次发起申请') - elif starttime <= date.today: - raise StatusError('已开始的活动不能再次发起申请') - # 父活动不能是活动开始状态 - parent_apply = fresh_first_apply - instance_list = [] - while parent_apply.ParentFMFAid != None: - parent_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, - FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, - FreshManFirstApply.isdelete == False).first() - if parent_apply: - starttime = parent_apply.AgreeStartime - endtime = parent_apply.AgreeEndtime - if endtime < date.today: - raise StatusError('已结束的活动不能再次发起申请') - elif starttime <= date.today: - raise StatusError('已开始的活动不能再次发起申请') - parent_apply.update({"FMFAstatus": ApplyStatus.lose_agree.value}) - instance_list.append(parent_apply) - break - parent_apply = FreshManFirstApply.query.filter( - FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() + FreshManFirstApply.isdelete == False).first_('已下架或审核中的申请不可以进行修改') + prid = data.get('prid') + fmfaid = data.get('fmfaid') + apply_from = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value # 创建新记录 apply = FreshManFirstApply.create({ 'FMFAid': str(uuid.uuid1()), @@ -495,13 +459,7 @@ def reapply_award(self): 'AgreeEndtime': data.get('fmfaendtime'), 'ParentFMFAid': fmfaid }) - instance_list.append(apply) - # 对ParentFMFAid进行检验 - if fresh_first_apply.FMFAstatus == ApplyStatus.reject.value: - fresh_first_apply.update({'isdelete': True}) - instance_list.append(fresh_first_apply) - if is_admin(): - BASEADMIN.create_action(AdminActionS.update.value, 'FreshManFirstApply', fmfaid) + db.session.add(apply) apply_from = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value product = Products.query.filter(Products.PRid == prid, Products.isdelete == False, Products.PRstatus.in_( @@ -509,27 +467,9 @@ def reapply_award(self): ).first_('当前商品状态不允许进行申请') product_brand = ProductBrand.query.filter(ProductBrand.PBid == product.PBid).first_('商品所在信息不全') # 商品, 暂时只可以添加一个商品 - fresh_first_apply = apply - check_product = FreshManFirstProduct.query.filter( - FreshManFirstApply.FMFAid == FreshManFirstProduct.FMFAid, - FreshManFirstProduct.PRid == prid, - or_( - and_(FreshManFirstApply.FMFAstartTime >= fresh_first_apply.FMFAstartTime, - FreshManFirstApply.FMFAstartTime <= fresh_first_apply.FMFAendTime), - and_(FreshManFirstApply.FMFAendTime >= fresh_first_apply.FMFAstartTime, - FreshManFirstApply.FMFAendTime <= fresh_first_apply.FMFAendTime) - # and_(FreshManFirstApply.FMFAstartTime > fresh_first_apply.FMFAendTime) - ), - FreshManFirstApply.isdelete == False, - FreshManFirstProduct.isdelete == False - ).all() - if check_product: - current_app.logger.info('dumpler {}'.format([product_id.FMFPid for product_id in check_product])) - raise ParamsError('重复提交 重叠时间') - fresh_first_product = FreshManFirstProduct.create({ 'FMFPid': str(uuid.uuid1()), - 'FMFAid': fresh_first_apply.FMFAid, + 'FMFAid': apply.FMFAid, 'PRid': prid, 'PRmainpic': product.PRmainpic, 'PRtitle': product.PRtitle, @@ -539,7 +479,9 @@ def reapply_award(self): 'PRdescription': product.PRdescription, 'PRprice': data.get('prprice') }) - instance_list.append(fresh_first_product) + db.session.add(fresh_first_product) + fresh_first_apply.update({"FMFAstatus": ApplyStatus.lose_agree.value}) + db.session.add(fresh_first_apply) skus = data.get('skus') for sku in skus: skuid = sku.get('skuid') @@ -558,11 +500,12 @@ def reapply_award(self): 'SKUid': skuid, 'SKUprice': float(skuprice), }) - instance_list.append(fresh_first_sku) + db.session.add(fresh_first_sku) + if is_admin(): + BASEADMIN().create_action(AdminActionS.update.value, 'FreshManFirstApply', fmfaid) BASEAPPROVAL().create_approval('tofreshmanfirstproduct', request.user.id, - fresh_first_apply.FMFAid, apply_from) - db.session.add_all(instance_list) - return Success('申请添加成功', data=fresh_first_apply.FMFAid) + apply.FMFAid, apply_from) + return Success('申请单修改成功', data=apply.FMFAid) def update_award(self): """修改""" @@ -576,84 +519,117 @@ def update_award(self): Products.PRstatus.in_([ProductStatus.usual.value, ProductStatus.auditing.value]) ).first_('当前商品状态不允许进行申请') product_brand = ProductBrand.query.filter(ProductBrand.PBid == product.PBid).first_('商品所在信息不全') - with db.auto_commit(): - fresh_first_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == fmfaid, - FreshManFirstApply.isdelete == False).first_('申请单不存在') - fresh_first_apply.update({ - 'SUid': request.user.id, - 'FMFAfrom': apply_from, - 'FMFAstatus': ApplyStatus.wait_check.value - }) - db.session.add(fresh_first_apply) - if is_admin(): - BASEADMIN().create_action(AdminActionS.update.value, 'FreshManFirstApply', fmfaid) - # 商品, 暂时只可以添加一个商品 - fresh_first_product = FreshManFirstProduct.query.filter( - FreshManFirstProduct.isdelete == False, - FreshManFirstProduct.FMFAid == fmfaid, - FreshManFirstProduct.PRid == prid, - ).first() - if not fresh_first_product: - # 如果没有查找到, 则说明是更换了参与商品, 因此删除旧的 - FreshManFirstProduct.query.filter(FreshManFirstProduct.FMFAid == fmfaid).delete_() - fresh_first_product = FreshManFirstProduct() - fresh_first_product.FMFPid = str(uuid.uuid1()) - fresh_first_product = fresh_first_product.update({ - # 'FMFAid': fresh_first_apply.FMFAid, - 'PRid': prid, - 'PRmainpic': product.PRmainpic, - 'PRtitle': product.PRtitle, - 'PBid': product.PBid, - 'PBname': product_brand.PBname, - 'PRattribute': product.PRattribute, - 'PRdescription': product.PRdescription, - 'PRprice': data.get('prprice') - }) - db.session.add(fresh_first_product) - skus = data.get('skus') - skuids = [] - for sku in skus: - skuid = sku.get('skuid') - skuids.append(skuid) - skuprice = sku.get('skuprice') - skustock = sku.get('skustock') - sku = ProductSku.query.filter( - ProductSku.isdelete == False, - ProductSku.PRid == prid, - ProductSku.SKUid == skuid - ).first_('商品sku信息不存在') - fresh_first_sku = FreshManFirstSku.query.filter( - FreshManFirstApply.isdelete == False, - FreshManFirstSku.FMFPid == fresh_first_product.FMFPid, - FreshManFirstSku.SKUid == skuid + fresh_first_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == fmfaid, + FreshManFirstApply.FMFAstatus.in_( + [ApplyStatus.cancle.value, ApplyStatus.reject.value, + ApplyStatus.agree.value]), + FreshManFirstApply.isdelete == False).first_('已下架或审核中的申请不可以进行修改') + # 是否能再次申请 + starttime = fresh_first_apply.AgreeStartime + endtime = fresh_first_apply.AgreeEndtime + if endtime < date.today(): + raise StatusError('已结束的活动不能再次发起申请') + elif starttime <= date.today(): + raise StatusError('已开始的活动不能再次发起申请') + # 父活动不能是活动开始状态 + parent_apply = fresh_first_apply + while parent_apply.ParentFMFAid != None: + current_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, + FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, + FreshManFirstApply.isdelete == False).first() + if current_apply: + starttime = parent_apply.AgreeStartime + endtime = parent_apply.AgreeEndtime + if endtime < date.today(): + raise StatusError('已结束的活动不能再次发起申请') + elif starttime <= date.today(): + raise StatusError('已开始的活动不能再次发起申请') + current_apply.update({"FMFAstatus": ApplyStatus.lose_agree.value}) + db.session.add(current_apply) + break + else: + parent_apply = FreshManFirstApply.query.filter( + FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() + current_app.logger.info('正在进行重新修改{}'.format(fresh_first_apply.FMFAid)) + if fresh_first_apply.FMFAstatus==ApplyStatus.cancle.value or fresh_first_apply.FMFAstatus == ApplyStatus.reject.value: + with db.auto_commit(): + fresh_first_apply.update({ + 'SUid': request.user.id, + 'FMFAfrom': apply_from, + 'FMFAstatus': ApplyStatus.wait_check.value + }) + db.session.add(fresh_first_apply) + if is_admin(): + BASEADMIN().create_action(AdminActionS.update.value, 'FreshManFirstApply', fmfaid) + # 商品, 暂时只可以添加一个商品 + fresh_first_product = FreshManFirstProduct.query.filter( + FreshManFirstProduct.isdelete == False, + FreshManFirstProduct.FMFAid == fmfaid, + FreshManFirstProduct.PRid == prid, ).first() - self._update_stock(-int(skustock), product, sku) - if not fresh_first_sku: - fresh_first_sku = FreshManFirstSku() - fresh_first_sku.FMFSid = str(uuid.uuid1()) - fresh_first_sku.update({ - 'FMFSid': str(uuid.uuid1()), - 'FMFPid': fresh_first_product.FMFPid, - 'FMFPstock': skustock, - 'SKUid': skuid, - 'SKUprice': float(skuprice), + if not fresh_first_product: + # 如果没有查找到, 则说明是更换了参与商品, 因此删除旧的 + FreshManFirstProduct.query.filter(FreshManFirstProduct.FMFAid == fmfaid).delete_() + fresh_first_product = FreshManFirstProduct() + fresh_first_product.FMFPid = str(uuid.uuid1()) + fresh_first_product = fresh_first_product.update({ + # 'FMFAid': fresh_first_apply.FMFAid, + 'PRid': prid, + 'PRmainpic': product.PRmainpic, + 'PRtitle': product.PRtitle, + 'PBid': product.PBid, + 'PBname': product_brand.PBname, + 'PRattribute': product.PRattribute, + 'PRdescription': product.PRdescription, + 'PRprice': data.get('prprice') }) - db.session.add(fresh_first_sku) - # self._update_stock() - # 删除其他的不需要的新人首单sku - FreshManFirstSku.query.filter( - FreshManFirstSku.isdelete == False, - FreshManFirstSku.FMFPid == fresh_first_product.FMFPid, - FreshManFirstSku.SKUid.notin_(skuids) - ).delete_(synchronize_session=False) + db.session.add(fresh_first_product) + skus = data.get('skus') + skuids = [] + for sku in skus: + skuid = sku.get('skuid') + skuids.append(skuid) + skuprice = sku.get('skuprice') + skustock = sku.get('skustock') + sku = ProductSku.query.filter( + ProductSku.isdelete == False, + ProductSku.PRid == prid, + ProductSku.SKUid == skuid + ).first_('商品sku信息不存在') + fresh_first_sku = FreshManFirstSku.query.filter( + FreshManFirstApply.isdelete == False, + FreshManFirstSku.FMFPid == fresh_first_product.FMFPid, + FreshManFirstSku.SKUid == skuid + ).first() + self._update_stock(-int(skustock), product, sku) + if not fresh_first_sku: + fresh_first_sku = FreshManFirstSku() + fresh_first_sku.FMFSid = str(uuid.uuid1()) + fresh_first_sku.update({ + 'FMFSid': str(uuid.uuid1()), + 'FMFPid': fresh_first_product.FMFPid, + 'FMFPstock': skustock, + 'SKUid': skuid, + 'SKUprice': float(skuprice), + }) + db.session.add(fresh_first_sku) + # self._update_stock() + # 删除其他的不需要的新人首单sku + FreshManFirstSku.query.filter( + FreshManFirstSku.isdelete == False, + FreshManFirstSku.FMFPid == fresh_first_product.FMFPid, + FreshManFirstSku.SKUid.notin_(skuids) + ).delete_(synchronize_session=False) - Approval.query.filter( - Approval.isdelete == False, - Approval.AVcontent == fmfaid - ).delete_() - BASEAPPROVAL().create_approval('tofreshmanfirstproduct', request.user.id, - fresh_first_apply.FMFAid, apply_from) - return Success('申请单修改成功', data=fresh_first_apply.FMFAid) + Approval.query.filter( + Approval.isdelete == False, + Approval.AVcontent == fmfaid + ).delete_() + BASEAPPROVAL().create_approval('tofreshmanfirstproduct', request.user.id, + fresh_first_apply.FMFAid, apply_from) + return Success('申请单修改成功', data=fresh_first_apply.FMFAid) + else: + self.reapply_award() def award_detail(self): """查看申请详情""" diff --git a/planet/control/CGuessNum.py b/planet/control/CGuessNum.py index 2fefbab8..0a52a01a 100644 --- a/planet/control/CGuessNum.py +++ b/planet/control/CGuessNum.py @@ -316,17 +316,15 @@ def today_gnap(self): GuessNumAwardApply.isdelete == False).all() user = get_current_user() gn = GuessNum.query.filter_by(USid=user.USid, isdelete=False).order_by(GuessNum.createtime.desc()).first() - instance_list = [] for gnaa in gnaa_list: if gnaa.GNAAstatus == ApplyStatus.lose_agree.value: - gnaa.update({'GNAAstatus': ApplyStatus.agree.value}) - instance_list.append(gnaa) + gnaa.GNAAstatus=ApplyStatus.agree.value gna_child_apply = GuessNumAwardApply.query.filter( GuessNumAwardApply.ParentGNAAid == gnaa.GNAAid, GuessNumAwardApply.GNAAstatus == ApplyStatus.wait_check.value, GuessNumAwardApply.isdelete == False).first() if gna_child_apply: - gna_child_apply.update({'GNAAstatus': ApplyStatus.lose_effect.value}) + gna_child_apply.GNAAstatus=ApplyStatus.lose_effect.value # 获取原商品属性 gnap_old = GuessNumAwardProduct.query.filter(GuessNumAwardProduct.GNAAid == gna_child_apply.GNAAid, GuessNumAwardProduct.isdelete == False).first() @@ -345,10 +343,8 @@ def today_gnap(self): sku_instance = ProductSku.query.filter_by( isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') COrder()._update_stock(int(sku.SKUstock), product, sku_instance) - instance_list.append(gna_child_apply) current_app.logger.info('获取到申请 {}'.format(gnaa.GNAAid)) self._fill_gnaa(gnaa, gn, now) - db.session.add_all(instance_list) # 上方图 activity = Activity.query.filter_by_({ @@ -437,137 +433,97 @@ def list(self): def reapply_award(self): """修改猜数字奖品申请, 一次只能处理一天的一个商品""" - if not (is_supplizer() or is_admin()): - raise AuthorityError() data = parameter_required(('prid', 'prprice', 'skus', 'gnaastarttime', 'gnaaid')) - with db.auto_commit(): - # 获取申请单 - apply_info = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == data.get('gnaaid'), - GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.agree.value, - ApplyStatus.reject.value, - ApplyStatus.cancle.value]) - ).first_('已下架或审核中的申请不可以进行修改') - if apply_info.SUid != request.user.id: - raise AuthorityError('仅可修改自己提交的申请') - # 如果没有修改时间,则用之前时间 - gnaastarttime = data.get('gnaastarttime') or apply_info.GNAAstarttime - starttime = endtime = gnaastarttime - if endtime < date.today: - raise ParamsError('已结束的活动不能再次发起申请') - elif starttime <= date.today: - raise ParamsError('已开始的活动不能再次发起申请') - # 父活动不能是活动开始状态 - parent_apply = apply_info - instance_list = [] - while parent_apply.ParentGNAAid != None: - parent_apply = GuessNumAwardApply.query.filter( - GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, - GuessNumAwardApply.GNAAstatus == ApplyStatus.agree.value, - GuessNumAwardApply.isdelete == False).first() - if parent_apply: - starttime = parent_apply.AgreeStartime - endtime = parent_apply.AgreeEndtime - if endtime < date.today: - raise ParamsError('已结束的活动不能再次发起申请') - elif starttime <= date.today: - raise ParamsError('已开始的活动不能再次发起申请') - parent_apply.update({"GNAAstatus": ApplyStatus.lose_agree.value}) - instance_list.append(parent_apply) - break - gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value - # 解除和原商品属性的绑定 - GuessNumAwardProduct.query.filter_by(GNAAid=apply_info.GNAAid, isdelete=False).delete_() - - # 创建新记录 - gnaa = GuessNumAwardApply.create({ - 'GNAAid': str(uuid.uuid1()), - 'SUid': request.user.id, - # 'GNAPid': data.get('prid'), - 'GNAAstarttime': gnaastarttime, - 'GNAAendtime': gnaastarttime, - 'GNAAfrom': gnaafrom, - 'GNAAstatus': ApplyStatus.wait_check.value, - 'ParentGNAAid': apply_info.GNAAid + # 获取申请单 + apply_info = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == data.get('gnaaid'), + GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.agree.value, + ApplyStatus.reject.value, + ApplyStatus.cancle.value]) + ).first_('已下架或审核中的申请不可以进行修改') + product = Products.query.filter_by( + PRid=data.get('prid'), isdelete=False, PRstatus=ProductStatus.usual.value).first_('商品未上架') + product_brand = ProductBrand.query.filter_by(PBid=product.PBid).first_('商品信息不全') + # 如果没有修改时间,则用之前时间 + gnaastarttime = data.get('gnaastarttime') or apply_info.GNAAstarttime + gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value + # 创建新记录 + gnaa = GuessNumAwardApply.create({ + 'GNAAid': str(uuid.uuid1()), + 'SUid': request.user.id, + # 'GNAPid': data.get('prid'), + 'GNAAstarttime': gnaastarttime, + 'GNAAendtime': gnaastarttime, + 'GNAAfrom': gnaafrom, + 'GNAAstatus': ApplyStatus.wait_check.value, + 'ParentGNAAid': apply_info.GNAAid + }) + db.session.add(gnaa) + # 时间列表 + time_list = data.get('gnaastarttime') + # 申请的sku list + skus = data.get('skus') + # 系统实际生成的申请id列表, 按日期不同生成不同的申请单 + gnaaid_list = list() + for day in time_list: + # 校验是否存在已提交申请 + exist_apply = GuessNumAwardApply.query.filter( + GuessNumAwardProduct.PRid == data.get('prid'), + # GuessNumAwardProduct.GNAPid == GuessNumAwardApply.GNAPid, + GuessNumAwardApply.isdelete == False, + GuessNumAwardApply.SUid == request.user.id, + GuessNumAwardApply.GNAAstarttime == day).first() + if exist_apply: + raise ParamsError('您已添加过{}日的申请'.format(day)) + gnaaid_list.append(gnaa.GNAAid) + # 活动商品 + gnap = GuessNumAwardProduct.create({ + 'GNAPid': str(uuid.uuid1()), + 'GNAAid': gnaa.GNAAid, + 'PRid': product.PRid, + 'PRmainpic': product.PRmainpic, + 'PRtitle': product.PRtitle, + 'PBid': product.PBid, + 'PBname': product_brand.PBname, + 'PRattribute': product.PRattribute, + 'PRdescription': product.PRdescription, + 'PRprice': data.get('prprice') }) - instance_list.append(gnaa) - # 对ParentGNAAid进行检验 - if apply_info.GNAAstatus == ApplyStatus.reject.value: - apply_info.update({'isdelete': True}) - instance_list.append(apply_info) - # 欲申请商品 - product = Products.query.filter_by( - PRid=data.get('prid'), isdelete=False, PRstatus=ProductStatus.usual.value).first_('商品未上架') - product_brand = ProductBrand.query.filter_by(PBid=product.PBid).first_('商品信息不全') - # 时间列表 - time_list = data.get('gnaastarttime') - # 申请的sku list - skus = data.get('skus') - with db.auto_commit(): - # 系统实际生成的申请id列表, 按日期不同生成不同的申请单 - gnaaid_list = list() - for day in time_list: - # 校验是否存在已提交申请 - exist_apply = GuessNumAwardApply.query.filter( - GuessNumAwardProduct.PRid == data.get('prid'), - # GuessNumAwardProduct.GNAPid == GuessNumAwardApply.GNAPid, - GuessNumAwardApply.isdelete == False, - GuessNumAwardApply.SUid == request.user.id, - GuessNumAwardApply.GNAAstarttime == day).first() - if exist_apply: - raise ParamsError('您已添加过{}日的申请'.format(day)) - - db.session.add(gnaa) - gnaaid_list.append(gnaa.GNAAid) - # 活动商品 - gnap = GuessNumAwardProduct.create({ - 'GNAPid': str(uuid.uuid1()), - 'GNAAid': gnaa.GNAAid, - 'PRid': product.PRid, - 'PRmainpic': product.PRmainpic, - 'PRtitle': product.PRtitle, - 'PBid': product.PBid, - 'PBname': product_brand.PBname, - 'PRattribute': product.PRattribute, - 'PRdescription': product.PRdescription, - 'PRprice': data.get('prprice') - }) - instance_list.append(gnap) - # 活动sku - for sku in skus: - skuid = sku.get('skuid') - skuprice = sku.get('skuprice') - skustock = sku.get('skustock') - skudiscountone = sku.get('skudiscountone') - skudiscounttwo = sku.get('skudiscounttwo') - skudiscountthree = sku.get('skudiscountthree') - skudiscountfour = sku.get('skudiscountfour') - skudiscountfive = sku.get('skudiscountfive') - skudiscountsix = sku.get('skudiscountsix') - sku_instance = ProductSku.query.filter_by( - isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') - self._update_stock(-int(skustock), product, sku_instance) - # db.session.add(sku) - gnas = GuessNumAwardSku.create({ - 'GNASid': str(uuid.uuid1()), - 'GNAPid': gnap.GNAPid, - 'SKUid': skuid, - 'SKUprice': skuprice, - 'SKUstock': skustock, - 'SKUdiscountone': skudiscountone, - 'SKUdiscounttwo': skudiscounttwo, - 'SKUdiscountthree': skudiscountthree, - 'SKUdiscountfour': skudiscountfour, - 'SKUdiscountfive': skudiscountfive, - 'SKUdiscountsix': skudiscountsix, - }) - instance_list.append(gnas) - if is_admin(): - BASEADMIN.create_action(AdminActionS.insert.value, 'GuessNumAwardApply', str(uuid.uuid1())) - # 添加到审批流 - for gnaaid in gnaaid_list: - super(CGuessNum, self).create_approval('toguessnum', request.user.id, gnaaid, gnaafrom) - db.session.add_all(instance_list) - return Success('申请添加成功', {'gnaaid': gnaaid_list}) + db.session.add(gnap) + # 活动sku + for sku in skus: + skuid = sku.get('skuid') + skuprice = sku.get('skuprice') + skustock = sku.get('skustock') + skudiscountone = sku.get('skudiscountone') + skudiscounttwo = sku.get('skudiscounttwo') + skudiscountthree = sku.get('skudiscountthree') + skudiscountfour = sku.get('skudiscountfour') + skudiscountfive = sku.get('skudiscountfive') + skudiscountsix = sku.get('skudiscountsix') + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') + self._update_stock(-int(skustock), product, sku_instance) + # db.session.add(sku) + gnas = GuessNumAwardSku.create({ + 'GNASid': str(uuid.uuid1()), + 'GNAPid': gnap.GNAPid, + 'SKUid': skuid, + 'SKUprice': skuprice, + 'SKUstock': skustock, + 'SKUdiscountone': skudiscountone, + 'SKUdiscounttwo': skudiscounttwo, + 'SKUdiscountthree': skudiscountthree, + 'SKUdiscountfour': skudiscountfour, + 'SKUdiscountfive': skudiscountfive, + 'SKUdiscountsix': skudiscountsix, + }) + instance_list.append(gnas) + if is_admin(): + BASEADMIN().create_action(AdminActionS.insert.value, 'GuessNumAwardApply', str(uuid.uuid1())) + # 添加到审批流 + super(CGuessNum, self).create_approval('toguessnum', request.user.id, gnaa.gnaaid, gnaafrom) + db.session.add_all(instance_list) + return Success('申请添加成功', {'gnaaid': gnaaid_list}) def apply_award(self): """申请添加奖品""" @@ -608,7 +564,7 @@ def apply_award(self): }) db.session.add(gnaa) if is_admin(): - BASEADMIN.create_action(AdminActionS.insert.value, 'GuessNumAwardApply', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'GuessNumAwardApply', str(uuid.uuid1())) gnaaid_list.append(gnaa.GNAAid) # 活动商品 gnap = GuessNumAwardProduct.create({ @@ -668,11 +624,39 @@ def update_apply(self): with db.auto_commit(): # 获取申请单 apply_info = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == data.get('gnaaid'), - GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.reject.value, + GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.agree.value, + ApplyStatus.reject.value, ApplyStatus.cancle.value]) - ).first_('只有已拒绝或撤销状态的申请可以进行修改') + ).first_('已下架或审核中的申请不可以进行修改') if apply_info.SUid != request.user.id: raise AuthorityError('仅可修改自己提交的申请') + # 如果没有修改时间,则用之前时间 + gnaastarttime = data.get('gnaastarttime') or apply_info.GNAAstarttime + starttime = endtime = gnaastarttime + if endtime < date.today: + raise ParamsError('已结束的活动不能再次发起申请') + elif starttime <= date.today: + raise ParamsError('已开始的活动不能再次发起申请') + # 父活动不能是活动开始状态 + parent_apply = apply_info + while parent_apply.ParentGNAAid != None: + current_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, + GuessNumAwardApply.GNAAstatus == ApplyStatus.agree.value, + GuessNumAwardApply.isdelete == False).first() + if current_apply: + starttime = parent_apply.AgreeStartime + endtime = parent_apply.AgreeEndtime + if endtime < date.today: + raise ParamsError('已结束的活动不能再次发起申请') + elif starttime <= date.today: + raise ParamsError('已开始的活动不能再次发起申请') + current_apply.update({"GNAAstatus": ApplyStatus.lose_agree.value}) + db.session.add(parent_apply) + break + else: + parent_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid).first() gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value # 解除和原商品属性的绑定 GuessNumAwardProduct.query.filter_by(GNAAid=apply_info.GNAAid, isdelete=False).delete_() @@ -682,77 +666,78 @@ def update_apply(self): gnaastarttime = data.get('gnaastarttime') or apply_info.GNAAstarttime # 如果修改了时间,检测是否有冲突 exist_apply_list = list() + if apply_info.GNAAstatus == ApplyStatus.cancle.value or apply_info.GNAAstatus == ApplyStatus.reject.value: + # 重新添加商品属性 + skus = data.get('skus') + product = Products.query.filter_by( + PRid=data.get('prid'), isdelete=False, PRstatus=ProductStatus.usual.value).first_('商品未上架') + product_brand = ProductBrand.query.filter_by(PBid=product.PBid).first_('商品信息不全') + # 新的商品属性 + gnap = GuessNumAwardProduct.create({ + 'GNAPid': str(uuid.uuid1()), + 'GNAAid': apply_info.GNAAid, + 'PRid': product.PRid, + 'PRmainpic': product.PRmainpic, + 'PRtitle': product.PRtitle, + 'PBid': product.PBid, + 'PBname': product_brand.PBname, + 'PRattribute': product.PRattribute, + 'PRdescription': product.PRdescription, + 'PRprice': data.get('prprice') + }) + db.session.add(gnap) + # 新的sku属性 + for sku in skus: + # 冲突校验。 如果冲突,则跳过,并予以提示 + exits_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.GNAAid != apply_info.GNAAid, + GuessNumAwardApply.GNAAstarttime == gnaastarttime, + GuessNumAwardProduct.GNAAid == GuessNumAwardApply.GNAAid, + GuessNumAwardProduct.PRid == data.get('prid'), + GuessNumAwardSku.SKUid == sku.get('skuid'), + GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, + GuessNumAwardProduct.isdelete == False, + GuessNumAwardSku.isdelete == False, + GuessNumAwardApply.isdelete == False + ).first() - # 重新添加商品属性 - skus = data.get('skus') - product = Products.query.filter_by( - PRid=data.get('prid'), isdelete=False, PRstatus=ProductStatus.usual.value).first_('商品未上架') - product_brand = ProductBrand.query.filter_by(PBid=product.PBid).first_('商品信息不全') - # 新的商品属性 - gnap = GuessNumAwardProduct.create({ - 'GNAPid': str(uuid.uuid1()), - 'GNAAid': apply_info.GNAAid, - 'PRid': product.PRid, - 'PRmainpic': product.PRmainpic, - 'PRtitle': product.PRtitle, - 'PBid': product.PBid, - 'PBname': product_brand.PBname, - 'PRattribute': product.PRattribute, - 'PRdescription': product.PRdescription, - 'PRprice': data.get('prprice') - }) - db.session.add(gnap) - # 新的sku属性 - for sku in skus: - # 冲突校验。 如果冲突,则跳过,并予以提示 - exits_apply = GuessNumAwardApply.query.filter( - GuessNumAwardApply.GNAAid != apply_info.GNAAid, - GuessNumAwardApply.GNAAstarttime == gnaastarttime, - GuessNumAwardProduct.GNAAid == GuessNumAwardApply.GNAAid, - GuessNumAwardProduct.PRid == data.get('prid'), - GuessNumAwardSku.SKUid == sku.get('skuid'), - GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, - GuessNumAwardProduct.isdelete == False, - GuessNumAwardSku.isdelete == False, - GuessNumAwardApply.isdelete == False - ).first() - - skuid = sku.get('skuid') - skuprice = sku.get('skuprice') - skustock = sku.get('skustock') - SKUdiscountone = sku.get('skudiscountone') - SKUdiscounttwo = sku.get('skudiscounttwo') - SKUdiscountthree = sku.get('skudiscountthree') - SKUdiscountfour = sku.get('skudiscountfour') - SKUdiscountfive = sku.get('skudiscountfive') - SKUdiscountsix = sku.get('skudiscountsix') - sku_instance = ProductSku.query.filter_by( - isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') - - if exits_apply: - exist_apply_list.append(sku_instance) - continue - # 库存处理 - self._update_stock(-int(skustock), product, sku_instance) + skuid = sku.get('skuid') + skuprice = sku.get('skuprice') + skustock = sku.get('skustock') + SKUdiscountone = sku.get('skudiscountone') + SKUdiscounttwo = sku.get('skudiscounttwo') + SKUdiscountthree = sku.get('skudiscountthree') + SKUdiscountfour = sku.get('skudiscountfour') + SKUdiscountfive = sku.get('skudiscountfive') + SKUdiscountsix = sku.get('skudiscountsix') + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') - gnas = GuessNumAwardSku.create({ - 'GNASid': str(uuid.uuid1()), - 'GNAPid': gnap.GNAPid, - 'SKUid': skuid, - 'SKUprice': skuprice, - 'SKUstock': skustock, - 'SKUdiscountone': SKUdiscountone, - 'SKUdiscounttwo': SKUdiscounttwo, - 'SKUdiscountthree': SKUdiscountthree, - 'SKUdiscountfour': SKUdiscountfour, - 'SKUdiscountfive': SKUdiscountfive, - 'SKUdiscountsix': SKUdiscountsix, - }) - db.session.add(gnas) - apply_info.GNAAstatus = ApplyStatus.wait_check.value - super(CGuessNum, self).create_approval('toguessnum', request.user.id, apply_info.GNAAid, gnaafrom) + if exits_apply: + exist_apply_list.append(sku_instance) + continue + # 库存处理 + self._update_stock(-int(skustock), product, sku_instance) - return Success('修改成功', {'gnaaid': apply_info.GNAAid, 'skus': exist_apply_list}) + gnas = GuessNumAwardSku.create({ + 'GNASid': str(uuid.uuid1()), + 'GNAPid': gnap.GNAPid, + 'SKUid': skuid, + 'SKUprice': skuprice, + 'SKUstock': skustock, + 'SKUdiscountone': SKUdiscountone, + 'SKUdiscounttwo': SKUdiscounttwo, + 'SKUdiscountthree': SKUdiscountthree, + 'SKUdiscountfour': SKUdiscountfour, + 'SKUdiscountfive': SKUdiscountfive, + 'SKUdiscountsix': SKUdiscountsix, + }) + db.session.add(gnas) + apply_info.GNAAstatus = ApplyStatus.wait_check.value + super(CGuessNum, self).create_approval('toguessnum', request.user.id, apply_info.GNAAid, gnaafrom) + return Success('修改成功', {'gnaaid': apply_info.GNAAid, 'skus': exist_apply_list}) + else: + self.reapply_award() def award_detail(self): """查看申请详情""" @@ -802,7 +787,7 @@ def shelf_award(self): AVstatus=ApplyStatus.wait_check.value).first() approval_info.AVstatus = ApplyStatus.cancle.value if is_admin(): - BASEADMIN.create_action(AdminActionS.update.value, 'GuessNumAwardApply', gnaaid) + BASEADMIN().create_action(AdminActionS.update.value, 'GuessNumAwardApply', gnaaid) return Success('取消成功', {'gnaaid': gnaaid}) def delete_apply(self): @@ -829,7 +814,7 @@ def delete_apply(self): raise StatusError('只能删除已拒绝或已撤销状态下的申请') apply_info.isdelete = True if is_admin(): - BASEADMIN.create_action(AdminActionS.delete.value, 'GuessNumAwardApply', gnaaid) + BASEADMIN().create_action(AdminActionS.delete.value, 'GuessNumAwardApply', gnaaid) return Success('删除成功', {'gnaaid': gnaaid}) def shelves(self): @@ -855,7 +840,7 @@ def shelves(self): raise StatusError('只能下架已通过的申请') apply_info.GNAAstatus = ApplyStatus.shelves.value if is_admin(): - BASEADMIN.create_action(AdminActionS.update.value, 'GuessNumAwardApply', gnaaid) + BASEADMIN().create_action(AdminActionS.update.value, 'GuessNumAwardApply', gnaaid) return Success('下架成功', {'mbaid': gnaaid}) @staticmethod diff --git a/planet/control/CTrialCommodity.py b/planet/control/CTrialCommodity.py index 6f93b0f4..efa7e5b5 100644 --- a/planet/control/CTrialCommodity.py +++ b/planet/control/CTrialCommodity.py @@ -67,7 +67,7 @@ def get_commodity_list(self): commoditys = TrialCommodity.query.filter(TrialCommodity.AgreeStartTime <= date.today(), TrialCommodity.AgreeEndTime >= date.today(), TrialCommodity.TCstocks > 0, - TrialCommodity.TCstatus == TrialCommodityStatus.lose_upper + TrialCommodity.TCstatus == TrialCommodityStatus.lose_upper.value ).all() instance_list = [] if commoditys: @@ -457,6 +457,7 @@ def readd_commodity(self): def update_commodity(self): """修改试用商品""" + self.readd_commodity() if is_supplizer(): usid = request.user.id sup = self._check_supplizer(usid) From 3cc897589fc5438ecddadff0eed45853395ce15f Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Fri, 31 May 2019 03:05:54 +0800 Subject: [PATCH 11/20] =?UTF-8?q?=E7=8C=9C=E6=95=B0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/control/CApproval.py | 26 ++- planet/control/CCollection.py | 2 +- planet/control/CFreshManFirstOrder.py | 1 + planet/control/CGuessNum.py | 305 +++++++++++++------------- 4 files changed, 173 insertions(+), 161 deletions(-) diff --git a/planet/control/CApproval.py b/planet/control/CApproval.py index ffb9c252..b424cabc 100644 --- a/planet/control/CApproval.py +++ b/planet/control/CApproval.py @@ -1126,17 +1126,17 @@ def agree_guessnum(self, approval_model): parent_apply = gnaa # 将父id改为失效 while parent_apply.ParentGNAAid != None: - parent_apply = FreshManFirstApply.query.filter(GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, + current_apply = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, GuessNumAwardApply.GNAAstatus == ApplyStatus.lose_agree.value, GuessNumAwardApply.isdelete == False).first() - if parent_apply: + if current_apply: # 获取原商品属性 - gnap_old = GuessNumAwardProduct.query.filter(GuessNumAwardProduct.GNAAid == parent_apply.GNAAid, + gnap_old = GuessNumAwardProduct.query.filter(GuessNumAwardProduct.GNAAid == current_apply.GNAAid, GuessNumAwardProduct.isdelete == False).first() product = Products.query.filter_by(PRid=gnap_old.PRid, isdelete=False).first_('商品信息出错') # 获取原sku属性 gnas_old = GuessNumAwardSku.query.filter( - parent_apply.GNAAid == GuessNumAwardProduct.GNAAid, + current_apply.GNAAid == GuessNumAwardProduct.GNAAid, GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, GuessNumAwardSku.isdelete == False, GuessNumAwardProduct.isdelete == False, @@ -1147,10 +1147,11 @@ def agree_guessnum(self, approval_model): sku_instance = ProductSku.query.filter_by( isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') COrder()._update_stock(int(sku.SKUstock), product, sku_instance) - parent_apply.GNAAstatus = ApplyStatus.lose_effect.value + current_apply.GNAAstatus = ApplyStatus.lose_effect.value break - parent_apply = GuessNumAwardApply.query.filter( - GuessNumAwardApply.FMFAid == parent_apply.ParentGNAAid).first() + else: + parent_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid).first() gnaa.GNAAstatus = ApplyStatus.agree.value # gnaa_other = GuessNumAwardApply.query.filter( # GuessNumAwardApply.GNAAid != gnaa.GNAAid, @@ -1190,13 +1191,16 @@ def refuse_guessnum(self, approval_model, refuse_abo): COrder()._update_stock(int(sku.SKUstock), product, sku_instance) # 修改原申请状态 parent_apply = gnaa - while parent_apply.GNAAid != None: - parent_apply = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, + while parent_apply.ParentGNAAid != None: + current_apply = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, GuessNumAwardApply.GNAAstatus == ApplyStatus.lose_agree.value, GuessNumAwardApply.isdelete == False).first() - if parent_apply: - parent_apply.GNAAstatus = ApplyStatus.agree.value + if current_apply: + current_apply.GNAAstatus = ApplyStatus.agree.value break + else: + parent_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid).first() def agree_magicbox(self, approval_model): mba = MagicBoxApply.query.filter_by_(MBAid=approval_model.AVcontent).first_('魔盒商品申请数据异常') diff --git a/planet/control/CCollection.py b/planet/control/CCollection.py index 1793cd13..6ce61d5c 100644 --- a/planet/control/CCollection.py +++ b/planet/control/CCollection.py @@ -23,7 +23,7 @@ def collect(self): try: c = CollectionType(c).value except: - current_app.logger.info('get colletcion type {} error '.format(c)) + ParentGNAAid c = 0 ctid = self._check_type_id(c, ctid) diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index 127e685c..9e204ac4 100644 --- a/planet/control/CFreshManFirstOrder.py +++ b/planet/control/CFreshManFirstOrder.py @@ -5,6 +5,7 @@ from flask import request, current_app from sqlalchemy import or_, and_ +from planet.common.base_service import get_session from planet.common.params_validates import parameter_required from planet.common.success_response import Success from planet.common.token_handler import token_required, get_current_user, is_supplizer, is_admin diff --git a/planet/control/CGuessNum.py b/planet/control/CGuessNum.py index 0a52a01a..e2040ce2 100644 --- a/planet/control/CGuessNum.py +++ b/planet/control/CGuessNum.py @@ -7,6 +7,7 @@ from flask import request, current_app from sqlalchemy import cast, Date, extract +from planet.common.base_service import get_session from planet.common.error_response import StatusError, ParamsError, NotFound, AuthorityError from planet.common.params_validates import parameter_required from planet.common.success_response import Success @@ -42,7 +43,7 @@ def creat(self): usid = request.user.id with db.auto_commit(): - today = date.today() + today = date.today()() today_raward = GuessNumAwardApply.query.filter_by_().filter_( GuessNumAwardApply.AgreeStartime <= today, @@ -70,9 +71,9 @@ def get(self): GuessNum.isdelete == False ).first_() if not join_history: - if form.date.data.date() == date.today(): + if form.date.data.date() == date.today()(): return Success('今日未参与') - elif form.date.data.date() == date.today() - timedelta(days=1): + elif form.date.data.date() == date.today()() - timedelta(days=1): raise NotFound('昨日未参与') else: raise NotFound('未参与') @@ -121,7 +122,7 @@ def history_join(self): GuessNum.USid == usid ).order_by(GuessNum.GNdate.desc()).group_by(GuessNum.GNdate).all() correct_count = 0 # 猜对次数 - today = date.today() + today = date.today()() for join_history in join_historys: correct_num = CorrectNum.query.filter( CorrectNum.CNdate == join_history.GNdate @@ -309,7 +310,7 @@ def recv_award(self): @token_required def today_gnap(self): now = datetime.now() - today = date.today() + today = date.today()() gnaa_list = GuessNumAwardApply.query.filter( GuessNumAwardApply.GNAAstarttime == today, GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.agree.value, ApplyStatus.lose_agree.value]), @@ -318,13 +319,13 @@ def today_gnap(self): gn = GuessNum.query.filter_by(USid=user.USid, isdelete=False).order_by(GuessNum.createtime.desc()).first() for gnaa in gnaa_list: if gnaa.GNAAstatus == ApplyStatus.lose_agree.value: - gnaa.GNAAstatus=ApplyStatus.agree.value + gnaa.GNAAstatus = ApplyStatus.agree.value gna_child_apply = GuessNumAwardApply.query.filter( GuessNumAwardApply.ParentGNAAid == gnaa.GNAAid, GuessNumAwardApply.GNAAstatus == ApplyStatus.wait_check.value, GuessNumAwardApply.isdelete == False).first() if gna_child_apply: - gna_child_apply.GNAAstatus=ApplyStatus.lose_effect.value + gna_child_apply.GNAAstatus = ApplyStatus.lose_effect.value # 获取原商品属性 gnap_old = GuessNumAwardProduct.query.filter(GuessNumAwardProduct.GNAAid == gna_child_apply.GNAAid, GuessNumAwardProduct.isdelete == False).first() @@ -364,7 +365,6 @@ def get_discount_by_skuid(self): data = parameter_required(('skuid', 'gnaaid')) user = get_current_user() gn = GuessNum.query.filter_by(USid=user.USid, isdelete=False).order_by(GuessNum.createtime.desc()).first() - # today = date.today() gnas = GuessNumAwardSku.query.filter( GuessNumAwardSku.SKUid == data.get('skuid'), GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, @@ -433,96 +433,107 @@ def list(self): def reapply_award(self): """修改猜数字奖品申请, 一次只能处理一天的一个商品""" - data = parameter_required(('prid', 'prprice', 'skus', 'gnaastarttime', 'gnaaid')) - # 获取申请单 - apply_info = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == data.get('gnaaid'), - GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.agree.value, - ApplyStatus.reject.value, - ApplyStatus.cancle.value]) - ).first_('已下架或审核中的申请不可以进行修改') - product = Products.query.filter_by( - PRid=data.get('prid'), isdelete=False, PRstatus=ProductStatus.usual.value).first_('商品未上架') - product_brand = ProductBrand.query.filter_by(PBid=product.PBid).first_('商品信息不全') - # 如果没有修改时间,则用之前时间 - gnaastarttime = data.get('gnaastarttime') or apply_info.GNAAstarttime - gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value - # 创建新记录 - gnaa = GuessNumAwardApply.create({ - 'GNAAid': str(uuid.uuid1()), - 'SUid': request.user.id, - # 'GNAPid': data.get('prid'), - 'GNAAstarttime': gnaastarttime, - 'GNAAendtime': gnaastarttime, - 'GNAAfrom': gnaafrom, - 'GNAAstatus': ApplyStatus.wait_check.value, - 'ParentGNAAid': apply_info.GNAAid - }) - db.session.add(gnaa) - # 时间列表 - time_list = data.get('gnaastarttime') - # 申请的sku list - skus = data.get('skus') - # 系统实际生成的申请id列表, 按日期不同生成不同的申请单 - gnaaid_list = list() - for day in time_list: - # 校验是否存在已提交申请 - exist_apply = GuessNumAwardApply.query.filter( - GuessNumAwardProduct.PRid == data.get('prid'), - # GuessNumAwardProduct.GNAPid == GuessNumAwardApply.GNAPid, - GuessNumAwardApply.isdelete == False, - GuessNumAwardApply.SUid == request.user.id, - GuessNumAwardApply.GNAAstarttime == day).first() - if exist_apply: - raise ParamsError('您已添加过{}日的申请'.format(day)) - gnaaid_list.append(gnaa.GNAAid) - # 活动商品 - gnap = GuessNumAwardProduct.create({ - 'GNAPid': str(uuid.uuid1()), - 'GNAAid': gnaa.GNAAid, - 'PRid': product.PRid, - 'PRmainpic': product.PRmainpic, - 'PRtitle': product.PRtitle, - 'PBid': product.PBid, - 'PBname': product_brand.PBname, - 'PRattribute': product.PRattribute, - 'PRdescription': product.PRdescription, - 'PRprice': data.get('prprice') - }) - db.session.add(gnap) - # 活动sku - for sku in skus: - skuid = sku.get('skuid') - skuprice = sku.get('skuprice') - skustock = sku.get('skustock') - skudiscountone = sku.get('skudiscountone') - skudiscounttwo = sku.get('skudiscounttwo') - skudiscountthree = sku.get('skudiscountthree') - skudiscountfour = sku.get('skudiscountfour') - skudiscountfive = sku.get('skudiscountfive') - skudiscountsix = sku.get('skudiscountsix') - sku_instance = ProductSku.query.filter_by( - isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') - self._update_stock(-int(skustock), product, sku_instance) - # db.session.add(sku) - gnas = GuessNumAwardSku.create({ - 'GNASid': str(uuid.uuid1()), - 'GNAPid': gnap.GNAPid, - 'SKUid': skuid, - 'SKUprice': skuprice, - 'SKUstock': skustock, - 'SKUdiscountone': skudiscountone, - 'SKUdiscounttwo': skudiscounttwo, - 'SKUdiscountthree': skudiscountthree, - 'SKUdiscountfour': skudiscountfour, - 'SKUdiscountfive': skudiscountfive, - 'SKUdiscountsix': skudiscountsix, + with db.auto_commit(): + data = parameter_required(('prid', 'prprice', 'skus', 'gnaastarttime', 'gnaaid')) + # 获取申请单 + apply_info = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == data.get('gnaaid'), + GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.agree.value, + ApplyStatus.reject.value, + ApplyStatus.cancle.value]) + ).first_('已下架或审核中的申请不可以进行修改') + product = Products.query.filter_by( + PRid=data.get('prid'), isdelete=False, PRstatus=ProductStatus.usual.value).first_('商品未上架') + product_brand = ProductBrand.query.filter_by(PBid=product.PBid).first_('商品信息不全') + # 如果没有修改时间,则用之前时间 + gnaastarttime = data.get('gnaastarttime') or apply_info.GNAAstarttime + gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value + # 时间列表 + time_list = gnaastarttime + # 申请的sku list + skus = data.get('skus') + # 系统实际生成的申请id列表, 按日期不同生成不同的申请单 + gnaaid_list = list() + exist_apply_list = list() + apply_info.update({'GNAAstatus':ApplyStatus.lose_agree.value}) + db.session.add(apply_info) + for day in time_list: + gnaa = GuessNumAwardApply.create({ + 'GNAAid': str(uuid.uuid1()), + 'SUid': request.user.id, + # 'GNAPid': data.get('prid'), + 'GNAAstarttime': day, + 'GNAAendtime': day, + 'GNAAfrom': gnaafrom, + 'GNAAstatus': ApplyStatus.wait_check.value, + 'ParentGNAAid': apply_info.GNAAid }) - instance_list.append(gnas) - if is_admin(): - BASEADMIN().create_action(AdminActionS.insert.value, 'GuessNumAwardApply', str(uuid.uuid1())) - # 添加到审批流 - super(CGuessNum, self).create_approval('toguessnum', request.user.id, gnaa.gnaaid, gnaafrom) - db.session.add_all(instance_list) + db.session.add(gnaa) + gnaaid_list.append(gnaa.GNAAid) + if is_admin(): + BASEADMIN().create_action(AdminActionS.insert.value, 'GuessNumAwardApply', gnaa.GNAAid) + # 活动商品 + gnap = GuessNumAwardProduct.create({ + 'GNAPid': str(uuid.uuid1()), + 'GNAAid': gnaa.GNAAid, + 'PRid': product.PRid, + 'PRmainpic': product.PRmainpic, + 'PRtitle': product.PRtitle, + 'PBid': product.PBid, + 'PBname': product_brand.PBname, + 'PRattribute': product.PRattribute, + 'PRdescription': product.PRdescription, + 'PRprice': data.get('prprice') + }) + db.session.add(gnap) + # 活动sku + for sku in skus: + # # 冲突校验。 如果冲突,则跳过,并予以提示 + # exits_apply = GuessNumAwardApply.query.filter( + # GuessNumAwardApply.GNAAid != apply_info.GNAAid, + # GuessNumAwardApply.GNAAstarttime == gnaastarttime, + # GuessNumAwardProduct.GNAAid == GuessNumAwardApply.GNAAid, + # GuessNumAwardProduct.PRid == data.get('prid'), + # GuessNumAwardSku.SKUid == sku.get('skuid'), + # GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, + # GuessNumAwardProduct.isdelete == False, + # GuessNumAwardSku.isdelete == False, + # GuessNumAwardApply.isdelete == False + # ).first() + + skuid = sku.get('skuid') + skuprice = sku.get('skuprice') + skustock = sku.get('skustock') + SKUdiscountone = sku.get('skudiscountone') + SKUdiscounttwo = sku.get('skudiscounttwo') + SKUdiscountthree = sku.get('skudiscountthree') + SKUdiscountfour = sku.get('skudiscountfour') + SKUdiscountfive = sku.get('skudiscountfive') + SKUdiscountsix = sku.get('skudiscountsix') + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') + + # if exits_apply: + # exist_apply_list.append(sku_instance) + # continue + # 库存处理 + self._update_stock(-int(skustock), product, sku_instance) + gnas = GuessNumAwardSku.create({ + 'GNASid': str(uuid.uuid1()), + 'GNAPid': gnap.GNAPid, + 'SKUid': skuid, + 'SKUprice': skuprice, + 'SKUstock': skustock, + 'SKUdiscountone': SKUdiscountone, + 'SKUdiscounttwo': SKUdiscounttwo, + 'SKUdiscountthree': SKUdiscountthree, + 'SKUdiscountfour': SKUdiscountfour, + 'SKUdiscountfive': SKUdiscountfive, + 'SKUdiscountsix': SKUdiscountsix, + }) + db.session.add(gnas) + for gnaaid in gnaaid_list: + # 添加到审批流 + super(CGuessNum, self).create_approval('toguessnum', request.user.id, gnaaid, gnaafrom) return Success('申请添加成功', {'gnaaid': gnaaid_list}) def apply_award(self): @@ -546,7 +557,6 @@ def apply_award(self): # 校验是否存在已提交申请 exist_apply = GuessNumAwardApply.query.filter( GuessNumAwardProduct.PRid == data.get('prid'), - # GuessNumAwardProduct.GNAPid == GuessNumAwardApply.GNAPid, GuessNumAwardApply.isdelete == False, GuessNumAwardApply.SUid == request.user.id, GuessNumAwardApply.GNAAstarttime == day).first() @@ -564,7 +574,7 @@ def apply_award(self): }) db.session.add(gnaa) if is_admin(): - BASEADMIN().create_action(AdminActionS.insert.value, 'GuessNumAwardApply', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'GuessNumAwardApply', gnaa.GNAAid) gnaaid_list.append(gnaa.GNAAid) # 活动商品 gnap = GuessNumAwardProduct.create({ @@ -594,7 +604,6 @@ def apply_award(self): sku_instance = ProductSku.query.filter_by( isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') self._update_stock(-int(skustock), product, sku_instance) - # db.session.add(sku) gnas = GuessNumAwardSku.create({ 'GNASid': str(uuid.uuid1()), 'GNAPid': gnap.GNAPid, @@ -621,53 +630,49 @@ def update_apply(self): raise AuthorityError() # data = parameter_required(('gnaaid', 'skuprice', 'skustock')) data = parameter_required(('gnaaid', 'prid', 'prprice', 'skus')) - with db.auto_commit(): - # 获取申请单 - apply_info = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == data.get('gnaaid'), - GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.agree.value, - ApplyStatus.reject.value, - ApplyStatus.cancle.value]) - ).first_('已下架或审核中的申请不可以进行修改') - if apply_info.SUid != request.user.id: - raise AuthorityError('仅可修改自己提交的申请') - # 如果没有修改时间,则用之前时间 - gnaastarttime = data.get('gnaastarttime') or apply_info.GNAAstarttime - starttime = endtime = gnaastarttime - if endtime < date.today: - raise ParamsError('已结束的活动不能再次发起申请') - elif starttime <= date.today: - raise ParamsError('已开始的活动不能再次发起申请') - # 父活动不能是活动开始状态 - parent_apply = apply_info - while parent_apply.ParentGNAAid != None: - current_apply = GuessNumAwardApply.query.filter( - GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, - GuessNumAwardApply.GNAAstatus == ApplyStatus.agree.value, - GuessNumAwardApply.isdelete == False).first() - if current_apply: - starttime = parent_apply.AgreeStartime - endtime = parent_apply.AgreeEndtime - if endtime < date.today: - raise ParamsError('已结束的活动不能再次发起申请') - elif starttime <= date.today: - raise ParamsError('已开始的活动不能再次发起申请') - current_apply.update({"GNAAstatus": ApplyStatus.lose_agree.value}) - db.session.add(parent_apply) - break - else: - parent_apply = GuessNumAwardApply.query.filter( - GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid).first() - gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value + # 获取申请单 + apply_info = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == data.get('gnaaid'), + GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.agree.value, + ApplyStatus.reject.value, + ApplyStatus.cancle.value]) + ).first_('已下架或审核中的申请不可以进行修改') + if apply_info.SUid != request.user.id: + raise AuthorityError('仅可修改自己提交的申请') + starttime = endtime = apply_info.GNAAstarttime + if endtime < date.today(): + raise ParamsError('已结束的活动不能再次发起申请') + elif starttime <= date.today(): + raise ParamsError('已开始的活动不能再次发起申请') + # 父活动不能是活动开始状态 + parent_apply = apply_info + while parent_apply.ParentGNAAid != None: + current_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, + GuessNumAwardApply.GNAAstatus == ApplyStatus.agree.value, + GuessNumAwardApply.isdelete == False).first() + if current_apply: + starttime = parent_apply.AgreeStartime + endtime = parent_apply.AgreeEndtime + if endtime < date.today(): + raise ParamsError('已结束的活动不能再次发起申请') + elif starttime <= date.today(): + raise ParamsError('已开始的活动不能再次发起申请') + current_apply.update({'GNAAstatus':ApplyStatus.lose_agree.value}) + db.session.add(current_apply) + current_app.logger.info('current_apply{}'.format(current_apply.GNAAstatus)) + break + else: + parent_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid).first() + gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value + if apply_info.GNAAstatus == ApplyStatus.cancle.value or apply_info.GNAAstatus == ApplyStatus.reject.value: # 解除和原商品属性的绑定 GuessNumAwardProduct.query.filter_by(GNAAid=apply_info.GNAAid, isdelete=False).delete_() - # product_old.isdelete = True - - # 如果没有修改时间,则用之前时间 - gnaastarttime = data.get('gnaastarttime') or apply_info.GNAAstarttime - # 如果修改了时间,检测是否有冲突 - exist_apply_list = list() - if apply_info.GNAAstatus == ApplyStatus.cancle.value or apply_info.GNAAstatus == ApplyStatus.reject.value: + with db.auto_commit(): # 重新添加商品属性 + # 如果没有修改时间,则用之前时间 + gnaastarttime = data.get('gnaastarttime') or apply_info.GNAAstarttime + exist_apply_list = list() skus = data.get('skus') product = Products.query.filter_by( PRid=data.get('prid'), isdelete=False, PRstatus=ProductStatus.usual.value).first_('商品未上架') @@ -685,6 +690,7 @@ def update_apply(self): 'PRdescription': product.PRdescription, 'PRprice': data.get('prprice') }) + current_app.logger.info('{}'.format(gnap)) db.session.add(gnap) # 新的sku属性 for sku in skus: @@ -734,10 +740,10 @@ def update_apply(self): }) db.session.add(gnas) apply_info.GNAAstatus = ApplyStatus.wait_check.value - super(CGuessNum, self).create_approval('toguessnum', request.user.id, apply_info.GNAAid, gnaafrom) - return Success('修改成功', {'gnaaid': apply_info.GNAAid, 'skus': exist_apply_list}) - else: - self.reapply_award() + super(CGuessNum, self).create_approval('toguessnum', request.user.id, apply_info.GNAAid, gnaafrom) + return Success('修改成功', {'gnaaid': apply_info.GNAAid, 'skus': exist_apply_list}) + else: + self.reapply_award() def award_detail(self): """查看申请详情""" @@ -856,7 +862,8 @@ def _getBetweenDay(begin_date, end_date): def _fill_apply(self, award): award.fill('gnaastatus_zh', ApplyStatus(award.GNAAstatus).zh_value) - product = GuessNumAwardProduct.query.filter_by(GNAAid=award.GNAAid, isdelete=False).first() + product = GuessNumAwardProduct.query.filter_by(GNAAid=award.GNAAid).first() + current_app.logger.info('{}'.format(product.GNAAid)) # product = Products.query.filter_by_(PRid=gnap.PRid).first_('商品已下架') product.PRattribute = json.loads(product.PRattribute) # product.PRremarks = json.loads(getattr(product, 'PRremarks') or '{}') From 0b87d2cb5cc12602854ccb18d362512eb665371e Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Fri, 31 May 2019 03:24:26 +0800 Subject: [PATCH 12/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9baseadmin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/control/CActivationCode.py | 2 +- planet/control/CApproval.py | 10 +++++----- planet/control/CCategory.py | 2 +- planet/control/CClub.py | 2 +- planet/control/CCollection.py | 1 - planet/control/CFreshManFirstOrder.py | 2 +- planet/control/CIntegralStore.py | 2 +- planet/control/CMagicBox.py | 12 ++++++------ planet/control/CMessage.py | 6 +++--- planet/control/CNews.py | 2 +- planet/control/CQuestanswer.py | 10 +++++----- planet/control/CScene.py | 2 +- planet/control/CSigninSetting.py | 2 +- planet/control/CSku.py | 2 +- planet/control/CSupplizer.py | 9 +++++---- planet/control/CTimeLimited.py | 4 ++-- planet/control/CUser.py | 4 ++-- 17 files changed, 37 insertions(+), 37 deletions(-) diff --git a/planet/control/CActivationCode.py b/planet/control/CActivationCode.py index 175d7f7f..10fa78c8 100644 --- a/planet/control/CActivationCode.py +++ b/planet/control/CActivationCode.py @@ -101,7 +101,7 @@ def set_rule(self): 'ACRcash': form.acrcash.data }) db.session.add(rule_instance) - BASEADMIN().create_action(AdminActionS.insert.value, 'ActivationCodeRule', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'ActivationCodeRule', ActivationCodeRule.ACRid) return Success('添加成功', rule_instance.ACRid) @admin_required diff --git a/planet/control/CApproval.py b/planet/control/CApproval.py index b424cabc..c9b6f85f 100644 --- a/planet/control/CApproval.py +++ b/planet/control/CApproval.py @@ -97,7 +97,7 @@ def add_permissionitems(self): 'PIname': piname, }) db.session.add(pi) - BASEADMIN().create_action(AdminActionS.insert.value, 'PermissionItems', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'PermissionItems', PermissionItems.PIid) ptn.setdefault('PNcontent', pi.PIid) ptn.setdefault('PINaction', '创建权限标签 {} 成功'.format(piname)) db.session.add(PermissionNotes.create(ptn)) @@ -209,7 +209,7 @@ def add_permission(self): "PELevel": pelevel }) db.session.add(permission_instence) - BASEADMIN().create_action(AdminActionS.insert.value, 'Permission', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'Permission', permission_instence.PEid) # ptn['ANaction'] = '创建 权限 {0} 等级 {1}'.format( # pt_after.PTname, data.get("pelevel")) ptn.setdefault('PINaction', '创建 {2} 权限 {0} 等级 {1}'.format( @@ -246,7 +246,7 @@ def add_adminpermission(self): # 'PTid': data.get('ptid') }) db.session.add(adp) - BASEADMIN().create_action(AdminActionS.insert.value, 'AdminPermission', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'AdminPermission', AdminPermission.ADPid) # 校验是否有被删除的管理员 check_adp_list = AdminPermission.query.filter_by_(PIid=data.get('piid')).all() for check_adp in check_adp_list: @@ -574,7 +574,7 @@ def deal_approval(self): apn_instance = ApprovalNotes.create(approvalnote_dict) db.session.add(apn_instance) if is_admin(): - BASEADMIN().create_action(AdminActionS.insert.value, 'ApprovalNotes', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'ApprovalNotes', AdminActionS.ANid) if int(data.get("anaction")) == ApprovalAction.agree.value: # 审批操作是否为同意 @@ -741,7 +741,7 @@ def add_pi_and_pe_and_ap(self): 'PINaction': '创建权限标签{}'.format(pi.PIname), } db.session.add(pi) - BASEADMIN().create_action(AdminActionS.insert.value, 'PermissionItems', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'PermissionItems', ptn_pi.PNid) db.session.add(PermissionNotes.create(ptn_pi)) pe = Permission.query.filter_by_(PTid=pt.PTid, PELevel=data.get('pelevel'), PIid=pi.PIid).first() pelevel = data.get('pelevel') diff --git a/planet/control/CCategory.py b/planet/control/CCategory.py index 67a52d82..4c4b6591 100644 --- a/planet/control/CCategory.py +++ b/planet/control/CCategory.py @@ -66,7 +66,7 @@ def create(self): 'PCtopPic': data.get('pctoppic') }) s.add(category_instance) - BASEADMIN().create_action(AdminActionS.insert.value, 'ProductCategory', str(uuid.uuid4())) + BASEADMIN().create_action(AdminActionS.insert.value, 'ProductCategory', ProductCategory.PCid) return Success('创建成功', {'pcid': category_instance.PCid}) @admin_required diff --git a/planet/control/CClub.py b/planet/control/CClub.py index 03117a77..714a056e 100644 --- a/planet/control/CClub.py +++ b/planet/control/CClub.py @@ -54,7 +54,7 @@ def create_companymessage(self): "CMindex": CMindex }) db.session.add(new_companymessage) - BASEADMIN().create_action(AdminActionS.insert.value, 'CompanyMessage', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'CompanyMessage', new_companymessage.CMid) return Success("发布成功") @get_session diff --git a/planet/control/CCollection.py b/planet/control/CCollection.py index 6ce61d5c..7bd43538 100644 --- a/planet/control/CCollection.py +++ b/planet/control/CCollection.py @@ -23,7 +23,6 @@ def collect(self): try: c = CollectionType(c).value except: - ParentGNAAid c = 0 ctid = self._check_type_id(c, ctid) diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index 9e204ac4..cde18209 100644 --- a/planet/control/CFreshManFirstOrder.py +++ b/planet/control/CFreshManFirstOrder.py @@ -381,7 +381,7 @@ def apply_award(self): }) db.session.add(fresh_first_apply) if is_admin(): - BASEADMIN().create_action(AdminActionS.insert.value, 'FreshManFirstApply', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'FreshManFirstApply', fresh_first_apply.FMFAid) # 商品, 暂时只可以添加一个商品 check_product = FreshManFirstProduct.query.filter( FreshManFirstApply.FMFAid == FreshManFirstProduct.FMFAid, diff --git a/planet/control/CIntegralStore.py b/planet/control/CIntegralStore.py index bad5ff82..dc4e9144 100644 --- a/planet/control/CIntegralStore.py +++ b/planet/control/CIntegralStore.py @@ -147,7 +147,7 @@ def update(self): instance_list.append(ipsku_instance) db.session.add_all(instance_list) if is_admin(): - BASEADMIN().create_action(AdminActionS.update.value, 'IntegralProduct', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.update.value, 'IntegralProduct', ip.IPid) super(CIntegralStore, self).create_approval('tointegral', uid, ip.IPid, applyfrom=ipfrom) return Success('更新成功', data=dict(IPid=ip.IPid)) diff --git a/planet/control/CMagicBox.py b/planet/control/CMagicBox.py index 589774ab..a70e8554 100644 --- a/planet/control/CMagicBox.py +++ b/planet/control/CMagicBox.py @@ -438,7 +438,7 @@ def apply_award(self): mbaid_list.append(award_dict['MBAid']) db.session.add_all(award_instance_list) if is_admin(): - BASEADMIN.create_action(AdminAction.insert.value, 'MagicBoxApply', str(uuid.uuid1())) + BASEADMIN().create_action(AdminAction.insert.value, 'MagicBoxApply',award_instance.MBAid) # 添加到审批流 [self.create_approval('tomagicbox', request.user.id, mbaid, mbafrom) for mbaid in mbaid_list] @@ -559,7 +559,7 @@ def reapply_award(self): mbaid_list.append(award_dict['MBAid']) db.session.add_all(award_instance_list) if is_admin(): - BASEADMIN.create_action(AdminAction.insert.value, 'MagicBoxApply', str(uuid.uuid1())) + BASEADMIN().create_action(AdminAction.insert.value, 'MagicBoxApply', award_instance.MBAid) # 添加到审批流 [self.create_approval('tomagicbox', request.user.id, mbaid, mbafrom) for mbaid in mbaid_list] @@ -623,7 +623,7 @@ def update_apply(self): award_dict = {k: v for k, v in award_dict.items() if v is not None} MagicBoxApply.query.filter_by_(MBAid=mbaid).update(award_dict) if is_admin(): - BASEADMIN.create_action(AdminAction.update.value, 'MagicBoxApply', mbaid) + BASEADMIN().create_action(AdminAction.update.value, 'MagicBoxApply', mbaid) # 是否修改库存 if not other_apply_info: # 如果没有同批正在上架或审核中的,将库存从商品中重新减出来 @@ -693,7 +693,7 @@ def shelf_award(self): raise AuthorityError('仅可撤销自己提交的申请') apply_info.MBAstatus = ApplyStatus.cancle.value if is_admin(): - BASEADMIN.create_action(AdminAction.update.value, 'MagicBoxApply', mbaid) + BASEADMIN().create_action(AdminAction.update.value, 'MagicBoxApply', mbaid) # 是否修改库存 if not other_apply_info: out_stock = OutStock.query.filter( @@ -730,7 +730,7 @@ def delete_apply(self): raise StatusError('只能删除已拒绝或已撤销状态下的申请') apply_info.isdelete = True if is_admin(): - BASEADMIN.create_action(AdminAction.delete.value, 'MagicBoxApply', mbaid) + BASEADMIN().create_action(AdminAction.delete.value, 'MagicBoxApply', mbaid) return Success('删除成功', {'mbaid': mbaid}) def shelves(self): @@ -756,7 +756,7 @@ def shelves(self): raise StatusError('只能下架已通过的申请') apply_info.MBAstatus = ApplyStatus.reject.value if is_admin(): - BASEADMIN.create_action(AdminAction.update.value, 'MagicBoxApply', mbaid) + BASEADMIN().create_action(AdminAction.update.value, 'MagicBoxApply', mbaid) return Success('下架成功', {'mbaid': mbaid}) @staticmethod diff --git a/planet/control/CMessage.py b/planet/control/CMessage.py index 9a7c7eb7..db9dcbd4 100644 --- a/planet/control/CMessage.py +++ b/planet/control/CMessage.py @@ -41,7 +41,7 @@ def set_message(self): pm.update({'isdelete': True}) db.session.add(pm) if is_admin(): - BASEADMIN.create_action(AdminAction.delete.value, 'PlatformMessage', pmid) + BASEADMIN().create_action(AdminAction.delete.value, 'PlatformMessage', pmid) return Success('删除成功', data={'pmid': pmid}) pmdict = { 'PMtext': data.get('pmtext'), @@ -53,12 +53,12 @@ def set_message(self): pmdict.setdefault('PMfrom', pmfrom) pm = PlatformMessage.create(pmdict) if is_admin(): - BASEADMIN.create_action(AdminAction.insert.value, 'PlatformMessage', pmid) + BASEADMIN().create_action(AdminAction.insert.value, 'PlatformMessage', pmid) msg = '创建成功' else: pm.update(pmdict) if is_admin(): - BASEADMIN.create_action(AdminAction.update.value, 'PlatformMessage', pmid) + BASEADMIN().create_action(AdminAction.update.value, 'PlatformMessage', pmid) msg = '更新成功' # 如果站内信为上线状态,创建用户站内信 todo diff --git a/planet/control/CNews.py b/planet/control/CNews.py index 6ad4ac8f..903550dc 100644 --- a/planet/control/CNews.py +++ b/planet/control/CNews.py @@ -1148,7 +1148,7 @@ def create_topic(self): 'TOCfrom': tocfrom}) db.session.add(topic_instance) if is_admin(): - BASEADMIN().create_action(AdminActionS.insert.value, 'TopicOfConversations', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'TopicOfConversations', topic_instance.TOCid) return Success('创建成功', data=dict(tocid=topic_instance.TOCid, toctitle=topic_instance.TOCtitle)) def get_topic(self): diff --git a/planet/control/CQuestanswer.py b/planet/control/CQuestanswer.py index 0e64e4be..1da27bff 100644 --- a/planet/control/CQuestanswer.py +++ b/planet/control/CQuestanswer.py @@ -107,7 +107,7 @@ def add_questoutline(self): 'QOcreateId': admin.ADid }) db.session.add(qo_instance) - BASEADMIN().create_action(AdminActionS.insert.value, 'QuestOutline', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'QuestOutline',qo_instance.QOid) qo_instance.fields = self.QuestOutlineFields[:] return Success('创建问题分类成功', data=qo_instance) @@ -150,9 +150,9 @@ def add_questanswer(self): 'QAcreateId': admin.ADid }) - db.session.add(quest_instance, BASEADMIN().create_action(AdminActionS.insert.value, 'Quest', str(uuid.uuid1()))) + db.session.add(quest_instance, BASEADMIN().create_action(AdminActionS.insert.value, 'Quest', quest_instance.QOid)) db.session.add(answer_instance) - BASEADMIN().create_action(AdminActionS.insert.value, 'Answer', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'Answer', answer_instance.QAid) return Success('创建问题成功') @get_session @@ -281,7 +281,7 @@ def delete_questoutline(self): 'QANtargetId': qoid }) db.session.add(qan) - BASEADMIN().create_action(AdminActionS.delete.value, 'QuestAnswerNote', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.delete.value, 'QuestAnswerNote',qan.QANid) return Success('删除完成') @get_session @@ -310,7 +310,7 @@ def delete_question(self): 'QANtype': QuestAnswerNoteType.qu.value, }) db.session.add(qan) - BASEADMIN().create_action(AdminActionS.delete.value, 'QuestAnswerNote', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.delete.value, 'QuestAnswerNote', qan.QANid) return Success('删除完成') # diff --git a/planet/control/CScene.py b/planet/control/CScene.py index 7aa17a77..fa2b6a91 100644 --- a/planet/control/CScene.py +++ b/planet/control/CScene.py @@ -70,7 +70,7 @@ def create(self): 'ITid': 'planet_featured' }) s.add(default_scene_item) - BASEADMIN().create_action(AdminActionS.insert.value, 'ProductScene', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'ProductScene', default_scene_item.SIid) if form.pstimelimited.data: from planet.extensions.tasks import cancel_scene_association current_app.logger.info('限时场景结束时间 : {} '.format(psendtime)) diff --git a/planet/control/CSigninSetting.py b/planet/control/CSigninSetting.py index 31bff7dd..c385c982 100644 --- a/planet/control/CSigninSetting.py +++ b/planet/control/CSigninSetting.py @@ -53,7 +53,7 @@ def add_or_update(self): delete_sia.isdelete = True db.session.add_all(sia_in_list) - BASEADMIN().create_action(AdminActionS.insert.value, 'SignInAward', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'SignInAward', sia_in.SIAid) return Success('签到设置成功') @get_session diff --git a/planet/control/CSku.py b/planet/control/CSku.py index 3c23d45b..618b1666 100644 --- a/planet/control/CSku.py +++ b/planet/control/CSku.py @@ -42,7 +42,7 @@ def add(self): }) s.add(sku_instance) if is_admin(): - BASEADMIN().create_action(AdminActionS.insert.value, 'ProductSku', str(uuid.uuid4())) + BASEADMIN().create_action(AdminActionS.insert.value, 'ProductSku', sku_instance.SKUid) return Success('添加成功', {'skuid': sku_instance.SKUid}) @token_required diff --git a/planet/control/CSupplizer.py b/planet/control/CSupplizer.py index 3f423a9b..6e813992 100644 --- a/planet/control/CSupplizer.py +++ b/planet/control/CSupplizer.py @@ -131,7 +131,7 @@ def create(self): product_brand.SUid = supperlizer.SUid db.session.add(product_brand) if sudeposit and is_admin(): - SupplizerDepositLog.create({ + log = SupplizerDepositLog.create({ 'SDLid': str(uuid.uuid1()), 'SUid': suid, 'SDLnum': Decimal(sudeposit), @@ -139,7 +139,8 @@ def create(self): 'SDbefore': 0, 'SDLacid': request.user.id, }) - BASEADMIN().create_action(AdminActionS.insert.value, 'SupplizerDepositLog', str(uuid.uuid1())) + db.session.add(log) + BASEADMIN().create_action(AdminActionS.insert.value, 'SupplizerDepositLog', log.SDLid) except IntegrityError: raise ParamsError('手机号重复') return Success('创建成功', data={'suid': supperlizer.SUid}) @@ -192,7 +193,7 @@ def update(self): 'SDLacid': request.user.id, }) db.session.add(depositlog) - BASEADMIN().create_action(AdminActionS.insert.value, 'SupplizerDepositLog',str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'SupplizerDepositLog',depositlog.SDLid) supplizer.update(supplizer_dict, null='dont ignore') db.session.add(supplizer) @@ -571,5 +572,5 @@ def add_update_notes(self): }) db.session.add(mn) - BASEADMIN().create_action(AdminActionS.insert.value, 'ManagerSystemNotes', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'ManagerSystemNotes', mn.MNid) return Success('创建通告成功', data=mn.MNid) diff --git a/planet/control/CTimeLimited.py b/planet/control/CTimeLimited.py index 197eca3e..977cf53e 100644 --- a/planet/control/CTimeLimited.py +++ b/planet/control/CTimeLimited.py @@ -236,7 +236,7 @@ def create(self): }) with db.auto_commit(): db.session.add(tlb) - BASEADMIN().create_action(AdminActionS.insert.value, 'TimeLimitedActivity', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'TimeLimitedActivity', tla.TLAid) current_app.logger.info('增加轮播图成功') else: @@ -406,7 +406,7 @@ def reapply_award(self): # prstock += skustock db.session.add_all(instance_list) if is_admin(): - BASEADMIN().create_action(AdminActionS.insert.value, 'TimeLimitedProduct', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'TimeLimitedProduct', new_tlp.TLPid) # todo 添加到审批流 super(CTimeLimited, self).create_approval('totimelimited', request.user.id, new_tlp.TLPid, applyfrom=tlp_from) diff --git a/planet/control/CUser.py b/planet/control/CUser.py index faf95a4a..3fb4a03b 100644 --- a/planet/control/CUser.py +++ b/planet/control/CUser.py @@ -1360,7 +1360,7 @@ def update_admin(self): }) db.session.add(an_instance) if is_admin(): - BASEADMIN().create_action(AdminActionS.insert.value, 'AdminNotes', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'AdminNotes', an_instance.ANid) return Success("操作成功") @get_session @@ -1984,7 +1984,7 @@ def apply_cash(self): }) db.session.add(cn) if is_admin(): - BASEADMIN().create_action(AdminActionS.insert.value, 'CashNotes', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'CashNotes', cn.CNid) db.session.flush() # 创建审批流 From 2b70fffd80cb76a8daba791daaa8eb599a7595b3 Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Fri, 31 May 2019 13:20:09 +0800 Subject: [PATCH 13/20] =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E8=A1=8C?= =?UTF-8?q?=E4=B8=BA=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/control/CActivationCode.py | 2 +- planet/control/CApproval.py | 34 ++--- planet/control/CCategory.py | 2 +- planet/control/CIntegralStore.py | 2 +- planet/control/CTimeLimited.py | 206 +++++++++++++++--------------- planet/extensions/tasks.py | 3 +- 6 files changed, 125 insertions(+), 124 deletions(-) diff --git a/planet/control/CActivationCode.py b/planet/control/CActivationCode.py index 10fa78c8..cd7453cc 100644 --- a/planet/control/CActivationCode.py +++ b/planet/control/CActivationCode.py @@ -101,7 +101,7 @@ def set_rule(self): 'ACRcash': form.acrcash.data }) db.session.add(rule_instance) - BASEADMIN().create_action(AdminActionS.insert.value, 'ActivationCodeRule', ActivationCodeRule.ACRid) + BASEADMIN().create_action(AdminActionS.insert.value, 'ActivationCodeRule', rule_instance.ACRid) return Success('添加成功', rule_instance.ACRid) @admin_required diff --git a/planet/control/CApproval.py b/planet/control/CApproval.py index c9b6f85f..ec1aca50 100644 --- a/planet/control/CApproval.py +++ b/planet/control/CApproval.py @@ -152,7 +152,7 @@ def add_permission_type(self): ptn.setdefault('PINaction', '创建 {} 审批类型'.format(ptname)) db.session.add(PermissionNotes.create(ptn)) db.session.add(PermissionType.create(pt_dict)) - BASEADMIN().create_action(AdminActionS.insert.value, 'PermissionType', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'PermissionNotes',ptn["PNid"]) return Success('创建审批类型成功', data={'ptid': pt.PTid}) @get_session @@ -246,7 +246,7 @@ def add_adminpermission(self): # 'PTid': data.get('ptid') }) db.session.add(adp) - BASEADMIN().create_action(AdminActionS.insert.value, 'AdminPermission', AdminPermission.ADPid) + BASEADMIN().create_action(AdminActionS.insert.value, 'AdminPermission', adp.ADPid) # 校验是否有被删除的管理员 check_adp_list = AdminPermission.query.filter_by_(PIid=data.get('piid')).all() for check_adp in check_adp_list: @@ -574,7 +574,7 @@ def deal_approval(self): apn_instance = ApprovalNotes.create(approvalnote_dict) db.session.add(apn_instance) if is_admin(): - BASEADMIN().create_action(AdminActionS.insert.value, 'ApprovalNotes', AdminActionS.ANid) + BASEADMIN().create_action(AdminActionS.insert.value, 'ApprovalNotes', apn_instance.ANid) if int(data.get("anaction")) == ApprovalAction.agree.value: # 审批操作是否为同意 @@ -741,7 +741,7 @@ def add_pi_and_pe_and_ap(self): 'PINaction': '创建权限标签{}'.format(pi.PIname), } db.session.add(pi) - BASEADMIN().create_action(AdminActionS.insert.value, 'PermissionItems', ptn_pi.PNid) + BASEADMIN().create_action(AdminActionS.insert.value, 'PermissionItems', pi.PIid) db.session.add(PermissionNotes.create(ptn_pi)) pe = Permission.query.filter_by_(PTid=pt.PTid, PELevel=data.get('pelevel'), PIid=pi.PIid).first() pelevel = data.get('pelevel') @@ -1389,16 +1389,16 @@ def agree_timelimited(self, approval_model): tla = TimeLimitedProduct.query.filter_by_(TLPid=approval_model.AVcontent).first_('限时活动商品申请数据异常') parent_apply = tla while parent_apply.ParentTLPid != None: - parent_apply = TimeLimitedProduct.query.filter( + current_apply = TimeLimitedProduct.query.filter( TimeLimitedProduct.TLPid == parent_apply.ParentTLPid, TimeLimitedProduct.TLAstatus == ApplyStatus.lose_agree.value, TimeLimitedProduct.isdelete == False).first() - if parent_apply: + if current_apply: # 获取原商品属性 - product = Products.query.filter_by(PRid=parent_apply.PRid, isdelete=False).first() + product = Products.query.filter_by(PRid=current_apply.PRid, isdelete=False).first() # 获取原sku属性 tls_old = TimeLimitedSku.query.filter( - TimeLimitedSku.TLPid == parent_apply.TLPid, + TimeLimitedSku.TLPid == current_apply.TLPid, TimeLimitedSku.isdelete == False, TimeLimitedProduct.isdelete == False, ).all() @@ -1409,10 +1409,11 @@ def agree_timelimited(self, approval_model): sku_instance = ProductSku.query.filter_by( isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') COrder()._update_stock(int(sku.TLSstock), product, sku_instance) - parent_apply.TLAstatus = ApplyStatus.lose_effect.value + current_apply.TLAstatus = ApplyStatus.lose_effect.value break - parent_apply = TimeLimitedProduct.query.filter( - TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() + else: + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() tla.TLAstatus = ApplyStatus.agree.value def refuse_timelimited(self, approval_model, refuse_abo): @@ -1438,15 +1439,16 @@ def refuse_timelimited(self, approval_model, refuse_abo): COrder()._update_stock(int(sku.TLSstock), product, sku_instance) parent_apply = tlp while parent_apply.ParentTLPid != None: - parent_apply = TimeLimitedProduct.query.filter( + current_apply = TimeLimitedProduct.query.filter( TimeLimitedProduct.TLPid == parent_apply.ParentTLPid, TimeLimitedProduct.TLAstatus == ApplyStatus.lose_agree.value, TimeLimitedProduct.isdelete == False).first() - if parent_apply: - parent_apply.TLAstatus = ApplyStatus.agree.value + if current_apply: + current_apply.TLAstatus = ApplyStatus.agree.value break - parent_apply = TimeLimitedProduct.query.filter( - TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() + else: + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() def agree_tointegral(self, approval_model): ip = IntegralProduct.query.filter_by_(IPid=approval_model.AVcontent).first_('星币商品申请数据异常') diff --git a/planet/control/CCategory.py b/planet/control/CCategory.py index 4c4b6591..41c8fb48 100644 --- a/planet/control/CCategory.py +++ b/planet/control/CCategory.py @@ -66,7 +66,7 @@ def create(self): 'PCtopPic': data.get('pctoppic') }) s.add(category_instance) - BASEADMIN().create_action(AdminActionS.insert.value, 'ProductCategory', ProductCategory.PCid) + BASEADMIN().create_action(AdminActionS.insert.value, 'ProductCategory', category_instance.PCid) return Success('创建成功', {'pcid': category_instance.PCid}) @admin_required diff --git a/planet/control/CIntegralStore.py b/planet/control/CIntegralStore.py index dc4e9144..6bdd4204 100644 --- a/planet/control/CIntegralStore.py +++ b/planet/control/CIntegralStore.py @@ -79,7 +79,7 @@ def apply(self): instance_list.append(ipsku_instance) db.session.add_all(instance_list) if is_admin(): - BASEADMIN().create_action(AdminActionS.insert.value, 'IntegralProduct', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'IntegralProduct', ip_instance.IPid) super(CIntegralStore, self).create_approval('tointegral', uid, ip_instance.IPid, applyfrom=ipfrom) return Success('申请成功', data=dict(IPid=ip_instance.IPid)) diff --git a/planet/control/CTimeLimited.py b/planet/control/CTimeLimited.py index 977cf53e..f28e8208 100644 --- a/planet/control/CTimeLimited.py +++ b/planet/control/CTimeLimited.py @@ -314,7 +314,7 @@ def apply_award(self): # prstock += skustock db.session.add_all(instance_list) if is_admin(): - BASEADMIN().create_action(AdminActionS.insert.value, 'TimeLimitedProduct', str(uuid.uuid1())) + BASEADMIN().create_action(AdminActionS.insert.value, 'TimeLimitedProduct', tlp.TLPid) # todo 添加到审批流 super(CTimeLimited, self).create_approval('totimelimited', request.user.id, tlp.TLPid, applyfrom=tlp_from) @@ -346,11 +346,7 @@ def reapply_award(self): TimeLimitedProduct.PRid == data.get('prid'), TimeLimitedProduct.isdelete == False ).first_('商品不存在') - if apply_info.TLAstatus not in [ApplyStatus.reject.value, ApplyStatus.cancle.value, - ApplyStatus.agree.value]: - raise StatusError('此申请不可以进行修改') - if apply_info.SUid != suid: - raise AuthorityError('仅可修改自己提交的申请') + apply_info.update({"TLAstatus": ApplyStatus.lose_agree.value}) product = Products.query.filter(*filter_args).first_('只能选择自己的商品') skus = data.get('skus') tla = TimeLimitedActivity.query.filter( @@ -358,20 +354,6 @@ def reapply_award(self): TimeLimitedActivity.TLAstatus == TimeLimitedStatus.waiting.value, TimeLimitedActivity.TLAid == data.get('tlaid')).first_('活动已停止报名') instance_list = [] - while apply_info.ParentTLPid != None: - parent_apply = TimeLimitedProduct.query.filter( - TimeLimitedProduct.TLPid == parent_apply.ParentTLPid, - TimeLimitedProduct.TLAstatus == ApplyStatus.agree.value, - TimeLimitedProduct.isdelete == False).first() - if parent_apply: - parent_apply.update({"TLAstatus": ApplyStatus.lose_agree.value}) - instance_list.append(parent_apply) - break - parent_apply = TimeLimitedProduct.query.filter( - TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() - if apply_info.TLAstatus == ApplyStatus.reject.value: - apply_info.update({'isdelete': True}) - instance_list.append(apply_info) new_tlp = TimeLimitedProduct.create({ 'TLPid': str(uuid.uuid1()), 'TLAid': tla.TLAid, @@ -429,93 +411,109 @@ def update_award(self): tlp_from = ApplyFrom.platform.value filter_args.add(Products.PRfrom == tlp_from) suid = None - with db.auto_commit(): - # 获取申请单 - apply_info = TimeLimitedProduct.query.filter( - TimeLimitedProduct.TLPid == data.get('tlpid'), - TimeLimitedProduct.PRid == data.get('prid'), - TimeLimitedProduct.isdelete == False - ).first_('商品不存在') - if apply_info.TLAstatus not in [ApplyStatus.reject.value, ApplyStatus.cancle.value]: - raise ParamsError('只有已拒绝或撤销状态的申请可以进行修改') - if apply_info.SUid != suid: - raise AuthorityError('仅可修改自己提交的申请') - # if is_admin() and apply_info.SUid: - # raise AuthorityError('仅可修改自己提交的申请') - - product = Products.query.filter(*filter_args).first_('商品未上架') - # instance_list = list() - skus = data.get('skus') - tla = TimeLimitedActivity.query.filter( - TimeLimitedActivity.isdelete == False, - TimeLimitedActivity.TLAstatus == TimeLimitedStatus.waiting.value, - TimeLimitedActivity.TLAid == data.get('tlaid')).first_('活动已停止报名') - apply_info.update({ - 'TLAid': tla.TLAid, - 'TLAfrom': tlp_from, - 'SUid': suid, - 'PRid': product.PRid, - 'PRprice': data.get('prprice'), - 'TLAstatus': ApplyStatus.wait_check.value - }) - instance_list = [apply_info] - skuids = list() - new_skuid = list() - # todo 撤销或者拒绝时 退还库存 - for sku in skus: - skuid = sku.get('skuid') - skuprice = sku.get('skuprice') - skustock = sku.get('skustock') - sku_instance = ProductSku.query.filter_by( - isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') - self._update_stock(-int(skustock), product, sku_instance) - tls = TimeLimitedSku.query.filter( - TimeLimitedSku.TLPid == apply_info.TLPid, - TimeLimitedSku.SKUid == skuid, + apply_info = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == data.get('tlpid'), + TimeLimitedProduct.PRid == data.get('prid'), + TimeLimitedProduct.isdelete == False + ).first_('商品不存在') + if apply_info.TLAstatus not in [ApplyStatus.reject.value, ApplyStatus.cancle.value, + ApplyStatus.agree.value]: + raise StatusError('此申请不可以进行修改') + if apply_info.SUid != suid: + raise AuthorityError('仅可修改自己提交的申请') + skus = data.get('skus') + tla = TimeLimitedActivity.query.filter( + TimeLimitedActivity.isdelete == False, + TimeLimitedActivity.TLAstatus == TimeLimitedStatus.waiting.value, + TimeLimitedActivity.TLAid == data.get('tlaid')).first_('活动已停止报名') + parent_apply = apply_info + while apply_info.ParentTLPid != None: + current_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid, + TimeLimitedProduct.TLAstatus == ApplyStatus.agree.value, + TimeLimitedProduct.isdelete == False).first() + if current_apply: + current_apply.update({"TLAstatus": ApplyStatus.lose_agree.value}) + db.session.add(current_apply) + break + else: + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() + if apply_info.TLAstatus == ApplyStatus.reject.value or apply_info.TLAstatus == ApplyStatus.cancle.value: + with db.auto_commit(): + # if is_admin() and apply_info.SUid: + # raise AuthorityError('仅可修改自己提交的申请') + + product = Products.query.filter(*filter_args).first_('商品未上架') + # instance_list = list() + apply_info.update({ + 'TLAid': tla.TLAid, + 'TLAfrom': tlp_from, + 'SUid': suid, + 'PRid': product.PRid, + 'PRprice': data.get('prprice'), + 'TLAstatus': ApplyStatus.wait_check.value + }) + instance_list = [apply_info] + skuids = list() + new_skuid = list() + # todo 撤销或者拒绝时 退还库存 + for sku in skus: + skuid = sku.get('skuid') + skuprice = sku.get('skuprice') + skustock = sku.get('skustock') + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') + self._update_stock(-int(skustock), product, sku_instance) + tls = TimeLimitedSku.query.filter( + TimeLimitedSku.TLPid == apply_info.TLPid, + TimeLimitedSku.SKUid == skuid, + TimeLimitedSku.isdelete == False, + ).first() + if not tls: + tls = TimeLimitedSku.create({ + 'TLSid': str(uuid.uuid1()), + 'TLPid': apply_info.TLPid, + 'TLSstock': skustock, + 'SKUid': skuid, + 'SKUprice': skuprice + }) + new_skuid.append(tls.TLSid) + else: + + tls.update({ + 'TLPid': apply_info.TLPid, + 'TLSstock': skustock, + 'SKUid': skuid, + 'SKUprice': skuprice + }) + skuids.append(skuid) + + instance_list.append(tls) + delete_sku = TimeLimitedSku.query.filter( TimeLimitedSku.isdelete == False, - ).first() - if not tls: - tls = TimeLimitedSku.create({ - 'TLSid': str(uuid.uuid1()), - 'TLPid': apply_info.TLPid, - 'TLSstock': skustock, - 'SKUid': skuid, - 'SKUprice': skuprice - }) - new_skuid.append(tls.TLSid) - else: - - tls.update({ - 'TLPid': apply_info.TLPid, - 'TLSstock': skustock, - 'SKUid': skuid, - 'SKUprice': skuprice - }) - skuids.append(skuid) - - instance_list.append(tls) - delete_sku = TimeLimitedSku.query.filter( - TimeLimitedSku.isdelete == False, - TimeLimitedSku.SKUid.notin_(skuids), - TimeLimitedSku.TLPid == apply_info.TLPid - ).all() - for tls in delete_sku: - sku_instance = ProductSku.query.filter_by( - isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') - self._update_stock(int(tls.TLSstock), product, sku_instance) - tls.isdelete = True - - current_app.logger.info('本次修改 sku {} 个 新增 {} 删除 {} '.format( - len(skuids), len(new_skuid), len(delete_sku))) - # prstock += skustock + TimeLimitedSku.SKUid.notin_(skuids), + TimeLimitedSku.TLPid == apply_info.TLPid + ).all() + for tls in delete_sku: + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') + self._update_stock(int(tls.TLSstock), product, sku_instance) + tls.isdelete = True + + current_app.logger.info('本次修改 sku {} 个 新增 {} 删除 {} '.format( + len(skuids), len(new_skuid), len(delete_sku))) + # prstock += skustock - db.session.add_all(instance_list) - if is_admin(): - BASEADMIN().create_action(AdminActionS.update.value, 'TimeLimitedProduct', data.get('tlpid')) + db.session.add_all(instance_list) + if is_admin(): + BASEADMIN().create_action(AdminActionS.update.value, 'TimeLimitedProduct', data.get('tlpid')) - super(CTimeLimited, self).create_approval('totimelimited', request.user.id, apply_info.TLPid, - applyfrom=tlp_from) - return Success('修改成功') + super(CTimeLimited, self).create_approval('totimelimited', request.user.id, apply_info.TLPid, + applyfrom=tlp_from) + return Success('修改成功') + else: + self.reapply_award() @admin_required def update_activity(self): diff --git a/planet/extensions/tasks.py b/planet/extensions/tasks.py index 14be89fe..13d2ec1e 100644 --- a/planet/extensions/tasks.py +++ b/planet/extensions/tasks.py @@ -789,7 +789,8 @@ def start_timelimited(tlaid): ).all() if old_tlps: for tlp in old_tlps: - tlp.TLAstatus = TimeLimitedStatus.lose_effect.value + tlp.update({'TLAstatus': TimeLimitedStatus.lose_effect.value}) + db.session.add(tlp) # 获取原商品属性 product = Products.query.filter_by(PRid=tlp.PRid, isdelete=False).first() # 获取原sku属性 From 0fd179269293044861e67d7ad4957819309da665 Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Fri, 31 May 2019 17:03:55 +0800 Subject: [PATCH 14/20] =?UTF-8?q?=E7=8C=9C=E6=95=B0=E5=AD=97=E8=87=AA?= =?UTF-8?q?=E6=B5=8B=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/api/v2/AFreshManFirstOrder.py | 1 - planet/api/v2/AGuessNum.py | 1 - planet/control/CFreshManFirstOrder.py | 48 ++++-- planet/control/CGuessNum.py | 232 +++++++++++++------------- 4 files changed, 145 insertions(+), 137 deletions(-) diff --git a/planet/api/v2/AFreshManFirstOrder.py b/planet/api/v2/AFreshManFirstOrder.py index aeaa8edb..624bab50 100644 --- a/planet/api/v2/AFreshManFirstOrder.py +++ b/planet/api/v2/AFreshManFirstOrder.py @@ -19,7 +19,6 @@ def post(self, fresh_man): apis = { 'add_order': self.creshman.add_order, 'apply_award': self.creshman.apply_award, - 'reapply_award': self.creshman.reapply_award, 'update_award': self.creshman.update_award, 'shelf_award': self.creshman.shelf_award, 'delete': self.creshman.del_award, diff --git a/planet/api/v2/AGuessNum.py b/planet/api/v2/AGuessNum.py index cc658631..d968c915 100644 --- a/planet/api/v2/AGuessNum.py +++ b/planet/api/v2/AGuessNum.py @@ -13,7 +13,6 @@ def post(self, guess_num): 'recv_award': self.cguessnum.recv_award, 'apply_award': self.cguessnum.apply_award, 'update_apply': self.cguessnum.update_apply, - 'reapply_award': self.cguessnum.reapply_award, 'shelf_award': self.cguessnum.shelf_award, 'delete': self.cguessnum.delete_apply, 'shelves': self.cguessnum.shelves, diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index cde18209..6c9a1581 100644 --- a/planet/control/CFreshManFirstOrder.py +++ b/planet/control/CFreshManFirstOrder.py @@ -37,13 +37,15 @@ def list(self): ).all() with db.auto_commit(): for fresh_man_apply in fresh_man_applys: - fresh_man_apply.FMFAstatus=ApplyStatus.agree.value + fresh_man_apply.update({'FMFAstatus':ApplyStatus.agree.value}) + db.session.add(fresh_man_apply) fresh_child_apply = FreshManFirstApply.query.filter( FreshManFirstApply.ParentFMFAid == fresh_man_apply.FMFAid, FreshManFirstApply.FMFAstatus == ApplyStatus.wait_check.value, FreshManFirstApply.isdelete == False).first() if fresh_child_apply: - fresh_child_apply.FMFAstatus=ApplyStatus.lose_effect.value + fresh_child_apply.update({'FMFAstatus':ApplyStatus.lose_effect.value}) + db.session.add(fresh_child_apply) # 进行库存恢复 apply_skus = FreshManFirstSku.query.join( FreshManFirstProduct, FreshManFirstProduct.FMFPid == FreshManFirstSku.FMFPid).filter( @@ -436,19 +438,14 @@ def apply_award(self): fresh_first_apply.FMFAid, apply_from) return Success('申请添加成功', data=fresh_first_apply.FMFAid) - def reapply_award(self): + def reapply_award(self,fresh_first_apply): """重新申请添加奖品""" data = parameter_required(('prid', 'fmfaendtime', 'fmfastarttime', 'prprice', 'skus', 'fmfaid')) - fmfaid = data.get('fmfaid') with db.auto_commit(): - fresh_first_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == fmfaid, - FreshManFirstApply.FMFAstatus.in_( - [ApplyStatus.cancle.value, ApplyStatus.reject.value, - ApplyStatus.agree.value]), - FreshManFirstApply.isdelete == False).first_('已下架或审核中的申请不可以进行修改') prid = data.get('prid') fmfaid = data.get('fmfaid') apply_from = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value + current_app.logger.info('获取到参数{}'.format(data)) # 创建新记录 apply = FreshManFirstApply.create({ 'FMFAid': str(uuid.uuid1()), @@ -506,7 +503,7 @@ def reapply_award(self): BASEADMIN().create_action(AdminActionS.update.value, 'FreshManFirstApply', fmfaid) BASEAPPROVAL().create_approval('tofreshmanfirstproduct', request.user.id, apply.FMFAid, apply_from) - return Success('申请单修改成功', data=apply.FMFAid) + return apply def update_award(self): """修改""" @@ -515,6 +512,13 @@ def update_award(self): data = parameter_required(('prid', 'prprice', 'skus', 'fmfaid')) prid = data.get('prid') fmfaid = data.get('fmfaid') + agreeStartime=datetime.strptime(data.get('fmfastarttime'), '%Y-%m-%d') + agreeEndtime= datetime.strptime(data.get('fmfaendtime'), '%Y-%m-%d') + current_app.logger.info('开始时间{} 结束时间{}'.format(agreeStartime,agreeEndtime)) + if agreeEndtime < datetime.today(): + raise StatusError('已结束的活动不能再次发起申请') + elif agreeStartime <= datetime.today(): + raise StatusError('已开始的活动不能再次发起申请') apply_from = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value product = Products.query.filter(Products.PRid == prid, Products.isdelete == False, Products.PRstatus.in_([ProductStatus.usual.value, ProductStatus.auditing.value]) @@ -526,12 +530,14 @@ def update_award(self): ApplyStatus.agree.value]), FreshManFirstApply.isdelete == False).first_('已下架或审核中的申请不可以进行修改') # 是否能再次申请 - starttime = fresh_first_apply.AgreeStartime - endtime = fresh_first_apply.AgreeEndtime - if endtime < date.today(): - raise StatusError('已结束的活动不能再次发起申请') - elif starttime <= date.today(): - raise StatusError('已开始的活动不能再次发起申请') + if fresh_first_apply.FMFAstatus == ApplyStatus.agree.value: + starttime = fresh_first_apply.AgreeStartime + endtime = fresh_first_apply.AgreeEndtime + current_app.logger.info('开始时间{} 结束时间{}'.format(starttime, endtime)) + if endtime < date.today(): + raise StatusError('已结束的活动不能再次发起申请') + elif starttime <= date.today(): + raise StatusError('已开始的活动不能再次发起申请') # 父活动不能是活动开始状态 parent_apply = fresh_first_apply while parent_apply.ParentFMFAid != None: @@ -541,6 +547,7 @@ def update_award(self): if current_apply: starttime = parent_apply.AgreeStartime endtime = parent_apply.AgreeEndtime + current_app.logger.info('开始时间{} 结束时间{}'.format(starttime, endtime)) if endtime < date.today(): raise StatusError('已结束的活动不能再次发起申请') elif starttime <= date.today(): @@ -557,7 +564,11 @@ def update_award(self): fresh_first_apply.update({ 'SUid': request.user.id, 'FMFAfrom': apply_from, - 'FMFAstatus': ApplyStatus.wait_check.value + 'FMFAstatus': ApplyStatus.wait_check.value, + 'FMFAstartTime':data.get('fmfastarttime'), + 'FMFAendTime':data.get('fmfaendtime'), + 'AgreeStartime':data.get('fmfastarttime'), + 'AgreeEndtime':data.get('fmfaendtime'), }) db.session.add(fresh_first_apply) if is_admin(): @@ -630,7 +641,8 @@ def update_award(self): fresh_first_apply.FMFAid, apply_from) return Success('申请单修改成功', data=fresh_first_apply.FMFAid) else: - self.reapply_award() + apply = self.reapply_award(fresh_first_apply) + return Success('申请单修改成功', data=apply.FMFAid) def award_detail(self): """查看申请详情""" diff --git a/planet/control/CGuessNum.py b/planet/control/CGuessNum.py index e2040ce2..e8a5b316 100644 --- a/planet/control/CGuessNum.py +++ b/planet/control/CGuessNum.py @@ -43,7 +43,7 @@ def creat(self): usid = request.user.id with db.auto_commit(): - today = date.today()() + today = date.today() today_raward = GuessNumAwardApply.query.filter_by_().filter_( GuessNumAwardApply.AgreeStartime <= today, @@ -71,9 +71,9 @@ def get(self): GuessNum.isdelete == False ).first_() if not join_history: - if form.date.data.date() == date.today()(): + if form.date.data.date() == date.today(): return Success('今日未参与') - elif form.date.data.date() == date.today()() - timedelta(days=1): + elif form.date.data.date() == date.today() - timedelta(days=1): raise NotFound('昨日未参与') else: raise NotFound('未参与') @@ -122,7 +122,7 @@ def history_join(self): GuessNum.USid == usid ).order_by(GuessNum.GNdate.desc()).group_by(GuessNum.GNdate).all() correct_count = 0 # 猜对次数 - today = date.today()() + today = date.today() for join_history in join_historys: correct_num = CorrectNum.query.filter( CorrectNum.CNdate == join_history.GNdate @@ -310,7 +310,7 @@ def recv_award(self): @token_required def today_gnap(self): now = datetime.now() - today = date.today()() + today = date.today() gnaa_list = GuessNumAwardApply.query.filter( GuessNumAwardApply.GNAAstarttime == today, GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.agree.value, ApplyStatus.lose_agree.value]), @@ -319,13 +319,15 @@ def today_gnap(self): gn = GuessNum.query.filter_by(USid=user.USid, isdelete=False).order_by(GuessNum.createtime.desc()).first() for gnaa in gnaa_list: if gnaa.GNAAstatus == ApplyStatus.lose_agree.value: - gnaa.GNAAstatus = ApplyStatus.agree.value + gnaa.update({'GNAAstatus' : ApplyStatus.agree.value}) + db.session.add(gnaa) gna_child_apply = GuessNumAwardApply.query.filter( GuessNumAwardApply.ParentGNAAid == gnaa.GNAAid, GuessNumAwardApply.GNAAstatus == ApplyStatus.wait_check.value, GuessNumAwardApply.isdelete == False).first() if gna_child_apply: - gna_child_apply.GNAAstatus = ApplyStatus.lose_effect.value + gna_child_apply.update({'GNAAstatus' : ApplyStatus.lose_effect.value}) + db.session.add(gna_child_apply) # 获取原商品属性 gnap_old = GuessNumAwardProduct.query.filter(GuessNumAwardProduct.GNAAid == gna_child_apply.GNAAid, GuessNumAwardProduct.isdelete == False).first() @@ -431,110 +433,96 @@ def list(self): request.mount = total_count return Success(data=ad_return_list) - def reapply_award(self): + def reapply_award(self,apply_info): """修改猜数字奖品申请, 一次只能处理一天的一个商品""" with db.auto_commit(): data = parameter_required(('prid', 'prprice', 'skus', 'gnaastarttime', 'gnaaid')) - # 获取申请单 - apply_info = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == data.get('gnaaid'), - GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.agree.value, - ApplyStatus.reject.value, - ApplyStatus.cancle.value]) - ).first_('已下架或审核中的申请不可以进行修改') - product = Products.query.filter_by( - PRid=data.get('prid'), isdelete=False, PRstatus=ProductStatus.usual.value).first_('商品未上架') + product = Products.query.filter_by(PRid=data.get('prid'), isdelete=False, PRstatus=ProductStatus.usual.value).first_('商品未上架') product_brand = ProductBrand.query.filter_by(PBid=product.PBid).first_('商品信息不全') # 如果没有修改时间,则用之前时间 - gnaastarttime = data.get('gnaastarttime') or apply_info.GNAAstarttime + gnaastarttime = data.get('gnaastarttime')[0] or apply_info.GNAAstarttime gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value - # 时间列表 - time_list = gnaastarttime # 申请的sku list skus = data.get('skus') # 系统实际生成的申请id列表, 按日期不同生成不同的申请单 - gnaaid_list = list() exist_apply_list = list() apply_info.update({'GNAAstatus':ApplyStatus.lose_agree.value}) db.session.add(apply_info) - for day in time_list: - gnaa = GuessNumAwardApply.create({ - 'GNAAid': str(uuid.uuid1()), - 'SUid': request.user.id, - # 'GNAPid': data.get('prid'), - 'GNAAstarttime': day, - 'GNAAendtime': day, - 'GNAAfrom': gnaafrom, - 'GNAAstatus': ApplyStatus.wait_check.value, - 'ParentGNAAid': apply_info.GNAAid - }) - db.session.add(gnaa) - gnaaid_list.append(gnaa.GNAAid) - if is_admin(): - BASEADMIN().create_action(AdminActionS.insert.value, 'GuessNumAwardApply', gnaa.GNAAid) - # 活动商品 - gnap = GuessNumAwardProduct.create({ - 'GNAPid': str(uuid.uuid1()), - 'GNAAid': gnaa.GNAAid, - 'PRid': product.PRid, - 'PRmainpic': product.PRmainpic, - 'PRtitle': product.PRtitle, - 'PBid': product.PBid, - 'PBname': product_brand.PBname, - 'PRattribute': product.PRattribute, - 'PRdescription': product.PRdescription, - 'PRprice': data.get('prprice') + gnaa = GuessNumAwardApply.create({ + 'GNAAid': str(uuid.uuid1()), + 'SUid': request.user.id, + 'GNAAstarttime': gnaastarttime, + 'GNAAendtime': gnaastarttime, + 'GNAAfrom': gnaafrom, + 'GNAAstatus': ApplyStatus.wait_check.value, + 'ParentGNAAid': apply_info.GNAAid + }) + db.session.add(gnaa) + if is_admin(): + BASEADMIN().create_action(AdminActionS.insert.value, 'GuessNumAwardApply', gnaa.GNAAid) + # 活动商品 + gnap = GuessNumAwardProduct.create({ + 'GNAPid': str(uuid.uuid1()), + 'GNAAid': gnaa.GNAAid, + 'PRid': product.PRid, + 'PRmainpic': product.PRmainpic, + 'PRtitle': product.PRtitle, + 'PBid': product.PBid, + 'PBname': product_brand.PBname, + 'PRattribute': product.PRattribute, + 'PRdescription': product.PRdescription, + 'PRprice': data.get('prprice') + }) + db.session.add(gnap) + # 活动sku + for sku in skus: + # 冲突校验。 如果冲突,则跳过,并予以提示 + exits_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.GNAAid != apply_info.GNAAid, + GuessNumAwardApply.GNAAstarttime == gnaastarttime, + GuessNumAwardProduct.GNAAid == GuessNumAwardApply.GNAAid, + GuessNumAwardProduct.PRid == data.get('prid'), + GuessNumAwardSku.SKUid == sku.get('skuid'), + GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, + GuessNumAwardProduct.isdelete == False, + GuessNumAwardSku.isdelete == False, + GuessNumAwardApply.isdelete == False + ).first() + + skuid = sku.get('skuid') + skuprice = sku.get('skuprice') + skustock = sku.get('skustock') + SKUdiscountone = sku.get('skudiscountone') + SKUdiscounttwo = sku.get('skudiscounttwo') + SKUdiscountthree = sku.get('skudiscountthree') + SKUdiscountfour = sku.get('skudiscountfour') + SKUdiscountfive = sku.get('skudiscountfive') + SKUdiscountsix = sku.get('skudiscountsix') + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') + + if exits_apply: + exist_apply_list.append(sku_instance) + continue + # 库存处理 + self._update_stock(-int(skustock), product, sku_instance) + gnas = GuessNumAwardSku.create({ + 'GNASid': str(uuid.uuid1()), + 'GNAPid': gnap.GNAPid, + 'SKUid': skuid, + 'SKUprice': skuprice, + 'SKUstock': skustock, + 'SKUdiscountone': SKUdiscountone, + 'SKUdiscounttwo': SKUdiscounttwo, + 'SKUdiscountthree': SKUdiscountthree, + 'SKUdiscountfour': SKUdiscountfour, + 'SKUdiscountfive': SKUdiscountfive, + 'SKUdiscountsix': SKUdiscountsix, }) - db.session.add(gnap) - # 活动sku - for sku in skus: - # # 冲突校验。 如果冲突,则跳过,并予以提示 - # exits_apply = GuessNumAwardApply.query.filter( - # GuessNumAwardApply.GNAAid != apply_info.GNAAid, - # GuessNumAwardApply.GNAAstarttime == gnaastarttime, - # GuessNumAwardProduct.GNAAid == GuessNumAwardApply.GNAAid, - # GuessNumAwardProduct.PRid == data.get('prid'), - # GuessNumAwardSku.SKUid == sku.get('skuid'), - # GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, - # GuessNumAwardProduct.isdelete == False, - # GuessNumAwardSku.isdelete == False, - # GuessNumAwardApply.isdelete == False - # ).first() - - skuid = sku.get('skuid') - skuprice = sku.get('skuprice') - skustock = sku.get('skustock') - SKUdiscountone = sku.get('skudiscountone') - SKUdiscounttwo = sku.get('skudiscounttwo') - SKUdiscountthree = sku.get('skudiscountthree') - SKUdiscountfour = sku.get('skudiscountfour') - SKUdiscountfive = sku.get('skudiscountfive') - SKUdiscountsix = sku.get('skudiscountsix') - sku_instance = ProductSku.query.filter_by( - isdelete=False, PRid=product.PRid, SKUid=skuid).first_('商品sku信息不存在') - - # if exits_apply: - # exist_apply_list.append(sku_instance) - # continue - # 库存处理 - self._update_stock(-int(skustock), product, sku_instance) - gnas = GuessNumAwardSku.create({ - 'GNASid': str(uuid.uuid1()), - 'GNAPid': gnap.GNAPid, - 'SKUid': skuid, - 'SKUprice': skuprice, - 'SKUstock': skustock, - 'SKUdiscountone': SKUdiscountone, - 'SKUdiscounttwo': SKUdiscounttwo, - 'SKUdiscountthree': SKUdiscountthree, - 'SKUdiscountfour': SKUdiscountfour, - 'SKUdiscountfive': SKUdiscountfive, - 'SKUdiscountsix': SKUdiscountsix, - }) - db.session.add(gnas) - for gnaaid in gnaaid_list: - # 添加到审批流 - super(CGuessNum, self).create_approval('toguessnum', request.user.id, gnaaid, gnaafrom) - return Success('申请添加成功', {'gnaaid': gnaaid_list}) + db.session.add(gnas) + # 添加到审批流 + super(CGuessNum, self).create_approval('toguessnum', request.user.id, gnaa.GNAAid, gnaafrom) + return {'gnaaid':gnaa.GNAAid,'skus': exist_apply_list} def apply_award(self): """申请添加奖品""" @@ -628,7 +616,6 @@ def update_apply(self): """修改猜数字奖品申请, 一次只能处理一天的一个商品""" if not (is_supplizer() or is_admin()): raise AuthorityError() - # data = parameter_required(('gnaaid', 'skuprice', 'skustock')) data = parameter_required(('gnaaid', 'prid', 'prprice', 'skus')) # 获取申请单 apply_info = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == data.get('gnaaid'), @@ -638,45 +625,56 @@ def update_apply(self): ).first_('已下架或审核中的申请不可以进行修改') if apply_info.SUid != request.user.id: raise AuthorityError('仅可修改自己提交的申请') - starttime = endtime = apply_info.GNAAstarttime - if endtime < date.today(): - raise ParamsError('已结束的活动不能再次发起申请') - elif starttime <= date.today(): - raise ParamsError('已开始的活动不能再次发起申请') - # 父活动不能是活动开始状态 + # 进行时间校验 + # 更改后的时间限制 + if data.get('gnaastarttime'): + gnaastarttime = datetime.strptime(data.get('gnaastarttime')[0], '%Y-%m-%d') + else: + gnaastarttime = apply_info.GNAAstarttime + if gnaastarttime <= datetime.today(): + raise StatusError('不能在该活动时间发起申请') + # 原时间限制 parent_apply = apply_info + if parent_apply.GNAAstatus == ApplyStatus.agree.value: + if parent_apply.AgreeStartime<= date.today(): + raise StatusError('不能在该活动时间发起申请') while parent_apply.ParentGNAAid != None: current_apply = GuessNumAwardApply.query.filter( GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, GuessNumAwardApply.GNAAstatus == ApplyStatus.agree.value, GuessNumAwardApply.isdelete == False).first() if current_apply: - starttime = parent_apply.AgreeStartime - endtime = parent_apply.AgreeEndtime - if endtime < date.today(): - raise ParamsError('已结束的活动不能再次发起申请') - elif starttime <= date.today(): - raise ParamsError('已开始的活动不能再次发起申请') + if current_apply.AgreeStartime <= date.today(): + raise StatusError('不能在该活动时间段内发起申请') current_apply.update({'GNAAstatus':ApplyStatus.lose_agree.value}) db.session.add(current_apply) - current_app.logger.info('current_apply{}'.format(current_apply.GNAAstatus)) break else: parent_apply = GuessNumAwardApply.query.filter( GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid).first() - gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value if apply_info.GNAAstatus == ApplyStatus.cancle.value or apply_info.GNAAstatus == ApplyStatus.reject.value: + gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value # 解除和原商品属性的绑定 GuessNumAwardProduct.query.filter_by(GNAAid=apply_info.GNAAid, isdelete=False).delete_() with db.auto_commit(): # 重新添加商品属性 # 如果没有修改时间,则用之前时间 - gnaastarttime = data.get('gnaastarttime') or apply_info.GNAAstarttime + gnaastarttime = data.get('gnaastarttime')[0] or apply_info.GNAAstarttime exist_apply_list = list() skus = data.get('skus') product = Products.query.filter_by( PRid=data.get('prid'), isdelete=False, PRstatus=ProductStatus.usual.value).first_('商品未上架') product_brand = ProductBrand.query.filter_by(PBid=product.PBid).first_('商品信息不全') + # 猜数字apply + apply_info.update({ + 'GNAAstarttime': gnaastarttime, + 'GNAAendtime': gnaastarttime, + 'GNAAstatus':ApplyStatus.wait_check.value, + 'GNAAfrom': gnaafrom, + }) + db.session.add(apply_info) + if is_admin(): + BASEADMIN().create_action(AdminActionS.insert.value, 'GuessNumAwardApply', apply_info.GNAAid) # 新的商品属性 gnap = GuessNumAwardProduct.create({ 'GNAPid': str(uuid.uuid1()), @@ -694,7 +692,7 @@ def update_apply(self): db.session.add(gnap) # 新的sku属性 for sku in skus: - # 冲突校验。 如果冲突,则跳过,并予以提示 + # 时间冲突校验。 如果冲突,则跳过,并予以提示 exits_apply = GuessNumAwardApply.query.filter( GuessNumAwardApply.GNAAid != apply_info.GNAAid, GuessNumAwardApply.GNAAstarttime == gnaastarttime, @@ -739,11 +737,11 @@ def update_apply(self): 'SKUdiscountsix': SKUdiscountsix, }) db.session.add(gnas) - apply_info.GNAAstatus = ApplyStatus.wait_check.value super(CGuessNum, self).create_approval('toguessnum', request.user.id, apply_info.GNAAid, gnaafrom) return Success('修改成功', {'gnaaid': apply_info.GNAAid, 'skus': exist_apply_list}) else: - self.reapply_award() + gna = self.reapply_award(apply_info) + return Success('申请添加成功', gna) def award_detail(self): """查看申请详情""" From b2385b8bed4e502af37132bac386ec7c364d5721 Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Sat, 1 Jun 2019 15:23:39 +0800 Subject: [PATCH 15/20] =?UTF-8?q?=E9=99=90=E6=97=B6=E8=87=AA=E6=B5=8B?= =?UTF-8?q?=E5=AE=8C=E6=AF=95=20=E5=8F=91=E7=8E=B0=E5=89=8D=E4=B8=89?= =?UTF-8?q?=E4=B8=AA=E6=B4=BB=E5=8A=A8=E6=BC=8F=E6=B4=9E=20=E6=83=B3?= =?UTF-8?q?=E6=AD=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/api/v2/AMagicBox.py | 1 - planet/control/CApproval.py | 103 +++++++---- planet/control/CFreshManFirstOrder.py | 16 +- planet/control/CGuessNum.py | 14 +- planet/control/CMagicBox.py | 251 +++++++++++--------------- planet/control/CTimeLimited.py | 99 +++++----- planet/control/CTrialCommodity.py | 2 +- 7 files changed, 233 insertions(+), 253 deletions(-) diff --git a/planet/api/v2/AMagicBox.py b/planet/api/v2/AMagicBox.py index d133acb7..a01b4797 100644 --- a/planet/api/v2/AMagicBox.py +++ b/planet/api/v2/AMagicBox.py @@ -19,7 +19,6 @@ def post(self, magicbox): 'join': self.cmagicbox.join, 'recv_award': self.cmagicbox.recv_award, 'apply_award': self.cmagicbox.apply_award, - 'reapply_award': self.cmagicbox.reapply_award, 'update_apply': self.cmagicbox.update_apply, 'shelf_award': self.cmagicbox.shelf_award, 'award_detail': self.cmagicbox.award_detail, diff --git a/planet/control/CApproval.py b/planet/control/CApproval.py index ec1aca50..93abcfe8 100644 --- a/planet/control/CApproval.py +++ b/planet/control/CApproval.py @@ -1207,28 +1207,28 @@ def agree_magicbox(self, approval_model): parent_apply = mba # 将父id改为失效 while parent_apply.ParentMBAid != None: - parent_apply = MagicBoxApply.query.filter(MagicBoxApply.MBAid == parent_apply.ParentMBAid, - MagicBoxApply.MBAstatus == ApplyStatus.lose_agree.value, - MagicBoxApply.isdelete == False).first() - if parent_apply: - # 是否进行库存变化 + current_apply = MagicBoxApply.query.filter(MagicBoxApply.MBAid == parent_apply.ParentMBAid, + MagicBoxApply.MBAstatus == ApplyStatus.lose_agree.value, + MagicBoxApply.isdelete == False).first() + if current_apply: other_apply_info = MagicBoxApply.query.filter(MagicBoxApply.isdelete == False, - MagicBoxApply.MBAid != parent_apply.MBAid, + MagicBoxApply.MBAid != current_apply.MBAid, MagicBoxApply.MBAstatus.notin_( [ApplyStatus.cancle.value, ApplyStatus.reject.value, - ApplyStatus.agree.value]), - MagicBoxApply.OSid == parent_apply.OSid, + ApplyStatus.lose_effect.value]), + MagicBoxApply.OSid == current_apply.OSid, ).first() if not other_apply_info: out_stock = OutStock.query.filter(OutStock.isdelete == False, - OutStock.OSid == parent_apply.OSid + OutStock.OSid == current_apply.OSid ).first() from planet.control.COrder import COrder COrder()._update_stock(out_stock.OSnum, skuid=parent_apply.SKUid) parent_apply.MBAstatus = ApplyStatus.lose_effect.value break - parent_apply = MagicBoxApply.query.filter( - MagicBoxApply.MBAid == parent_apply.ParentMBAid).first() + else: + parent_apply = MagicBoxApply.query.filter( + MagicBoxApply.MBAid == parent_apply.ParentMBAid).first() mba.MBAstatus = ApplyStatus.agree.value mba_other = MagicBoxApply.query.filter( @@ -1252,7 +1252,7 @@ def refuse_magicbox(self, approval_model, refuse_abo): other_apply_info = MagicBoxApply.query.filter(MagicBoxApply.isdelete == False, MagicBoxApply.MBAid != mba.MBAid, MagicBoxApply.MBAstatus.notin_( - [ApplyStatus.cancle.value, ApplyStatus.reject.value]), + [ApplyStatus.cancle.value, ApplyStatus.reject.value,ApplyStatus.lose_effect.value]), MagicBoxApply.OSid == mba.OSid, ).first() if not other_apply_info: @@ -1263,14 +1263,15 @@ def refuse_magicbox(self, approval_model, refuse_abo): COrder()._update_stock(out_stock.OSnum, skuid=mba.SKUid) parent_apply = mba while parent_apply.ParentMBAid != None: - parent_apply = MagicBoxApply.query.filter(MagicBoxApply.MBAid == parent_apply.ParentMBAid, + current_apply = MagicBoxApply.query.filter(MagicBoxApply.MBAid == current_apply.ParentMBAid, MagicBoxApply.MBAstatus == ApplyStatus.lose_agree.value, MagicBoxApply.isdelete == False).first() - if parent_apply: - parent_apply.MBAstatus = ApplyStatus.agree.value + if current_apply: + current_apply.MBAstatus = ApplyStatus.agree.value break - parent_apply = MagicBoxApply.query.filter( - MagicBoxApply.MBAid == parent_apply.ParentMBAid).first() + else: + parent_apply = MagicBoxApply.query.filter( + MagicBoxApply.MBAid == parent_apply.ParentMBAid).first() def agree_freshmanfirstproduct(self, approval_model): ffa = FreshManFirstApply.query.filter_by_(FMFAid=approval_model.AVcontent).first_('新人商品申请数据异常') @@ -1389,11 +1390,36 @@ def agree_timelimited(self, approval_model): tla = TimeLimitedProduct.query.filter_by_(TLPid=approval_model.AVcontent).first_('限时活动商品申请数据异常') parent_apply = tla while parent_apply.ParentTLPid != None: - current_apply = TimeLimitedProduct.query.filter( - TimeLimitedProduct.TLPid == parent_apply.ParentTLPid, - TimeLimitedProduct.TLAstatus == ApplyStatus.lose_agree.value, - TimeLimitedProduct.isdelete == False).first() + current_apply = TimeLimitedProduct.query.filter(TimeLimitedProduct.TLPid == parent_apply.ParentTLPid, + TimeLimitedProduct.TLAstatus.in_([ApplyStatus.lose_agree.value,ApplyStatus.lose_effect.value]), + TimeLimitedProduct.isdelete == False).first() if current_apply: + current_app.logger.info('目前正在将再次审核改为已失效的 商品为 {}'.format(current_apply.TLPid)) + if current_apply.TLAstatus == ApplyStatus.lose_effect.value: + children_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.ParentTLPid == current_apply.TLPid, + TimeLimitedProduct.TLAstatus == ApplyStatus.lose_agree.value, + TimeLimitedProduct.isdelete == False).all() + for child in children_apply: + current_app.logger.info('child{}'.format(child.TLPid)) + child.update({"TLAstatus": ApplyStatus.lose_effect.value}) + db.session.add(child) + # 获取原商品属性 + product = Products.query.filter_by(PRid=child.PRid, isdelete=False).first() + # 获取原sku属性 + tls_old = TimeLimitedSku.query.filter( + TimeLimitedSku.TLPid == child.TLPid, + TimeLimitedSku.isdelete == False, + TimeLimitedProduct.isdelete == False, + ).all() + from planet.control.COrder import COrder + + # 遍历原sku 将库存退出去 + for sku in tls_old: + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') + COrder()._update_stock(int(sku.TLSstock), product, sku_instance) + current_apply.TLAstatus = ApplyStatus.lose_effect.value # 获取原商品属性 product = Products.query.filter_by(PRid=current_apply.PRid, isdelete=False).first() # 获取原sku属性 @@ -1409,11 +1435,8 @@ def agree_timelimited(self, approval_model): sku_instance = ProductSku.query.filter_by( isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') COrder()._update_stock(int(sku.TLSstock), product, sku_instance) - current_apply.TLAstatus = ApplyStatus.lose_effect.value - break - else: - parent_apply = TimeLimitedProduct.query.filter( - TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() tla.TLAstatus = ApplyStatus.agree.value def refuse_timelimited(self, approval_model, refuse_abo): @@ -1439,16 +1462,26 @@ def refuse_timelimited(self, approval_model, refuse_abo): COrder()._update_stock(int(sku.TLSstock), product, sku_instance) parent_apply = tlp while parent_apply.ParentTLPid != None: - current_apply = TimeLimitedProduct.query.filter( - TimeLimitedProduct.TLPid == parent_apply.ParentTLPid, - TimeLimitedProduct.TLAstatus == ApplyStatus.lose_agree.value, - TimeLimitedProduct.isdelete == False).first() + current_apply = TimeLimitedProduct.query.filter(TimeLimitedProduct.TLPid == parent_apply.ParentTLPid, + TimeLimitedProduct.TLAstatus.in_( + [ApplyStatus.lose_agree.value, + ApplyStatus.lose_effect.value]), + TimeLimitedProduct.isdelete == False).first() if current_apply: - current_apply.TLAstatus = ApplyStatus.agree.value - break - else: - parent_apply = TimeLimitedProduct.query.filter( - TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() + current_app.logger.info('目前正在将再次审核改为已失效的 商品为 {}'.format(current_apply.TLPid)) + if current_apply.TLAstatus == ApplyStatus.lose_effect.value: + child = TimeLimitedProduct.query.filter( + TimeLimitedProduct.ParentTLPid == current_apply.TLPid, + TimeLimitedProduct.TLAstatus == ApplyStatus.lose_agree.value, + TimeLimitedProduct.isdelete == False).order_by(TimeLimitedProduct.createtime.desc()).first() + current_app.logger.info('child{}'.format(child.TLPid)) + child.update({"TLAstatus": ApplyStatus.agree.value}) + db.session.add(child) + else: + current_apply.TLAstatus = ApplyStatus.agree.value + break + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() def agree_tointegral(self, approval_model): ip = IntegralProduct.query.filter_by_(IPid=approval_model.AVcontent).first_('星币商品申请数据异常') diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index 6c9a1581..63c20256 100644 --- a/planet/control/CFreshManFirstOrder.py +++ b/planet/control/CFreshManFirstOrder.py @@ -512,13 +512,13 @@ def update_award(self): data = parameter_required(('prid', 'prprice', 'skus', 'fmfaid')) prid = data.get('prid') fmfaid = data.get('fmfaid') - agreeStartime=datetime.strptime(data.get('fmfastarttime'), '%Y-%m-%d') - agreeEndtime= datetime.strptime(data.get('fmfaendtime'), '%Y-%m-%d') - current_app.logger.info('开始时间{} 结束时间{}'.format(agreeStartime,agreeEndtime)) - if agreeEndtime < datetime.today(): - raise StatusError('已结束的活动不能再次发起申请') - elif agreeStartime <= datetime.today(): - raise StatusError('已开始的活动不能再次发起申请') + # agreeStartime=datetime.strptime(data.get('fmfastarttime'), '%Y-%m-%d') + # agreeEndtime= datetime.strptime(data.get('fmfaendtime'), '%Y-%m-%d') + # current_app.logger.info('开始时间{} 结束时间{}'.format(agreeStartime,agreeEndtime)) + # if agreeEndtime < datetime.today(): + # raise StatusError('已结束的活动不能再次发起申请') + # elif agreeStartime <= datetime.today(): + # raise StatusError('已开始的活动不能再次发起申请') apply_from = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value product = Products.query.filter(Products.PRid == prid, Products.isdelete == False, Products.PRstatus.in_([ProductStatus.usual.value, ProductStatus.auditing.value]) @@ -567,8 +567,6 @@ def update_award(self): 'FMFAstatus': ApplyStatus.wait_check.value, 'FMFAstartTime':data.get('fmfastarttime'), 'FMFAendTime':data.get('fmfaendtime'), - 'AgreeStartime':data.get('fmfastarttime'), - 'AgreeEndtime':data.get('fmfaendtime'), }) db.session.add(fresh_first_apply) if is_admin(): diff --git a/planet/control/CGuessNum.py b/planet/control/CGuessNum.py index e8a5b316..f0ba973f 100644 --- a/planet/control/CGuessNum.py +++ b/planet/control/CGuessNum.py @@ -626,13 +626,13 @@ def update_apply(self): if apply_info.SUid != request.user.id: raise AuthorityError('仅可修改自己提交的申请') # 进行时间校验 - # 更改后的时间限制 - if data.get('gnaastarttime'): - gnaastarttime = datetime.strptime(data.get('gnaastarttime')[0], '%Y-%m-%d') - else: - gnaastarttime = apply_info.GNAAstarttime - if gnaastarttime <= datetime.today(): - raise StatusError('不能在该活动时间发起申请') + # # 更改后的时间限制 + # if data.get('gnaastarttime'): + # gnaastarttime = datetime.strptime(data.get('gnaastarttime')[0], '%Y-%m-%d') + # else: + # gnaastarttime = apply_info.GNAAstarttime + # if gnaastarttime <= datetime.today(): + # raise StatusError('不能在该活动时间发起申请') # 原时间限制 parent_apply = apply_info if parent_apply.GNAAstatus == ApplyStatus.agree.value: diff --git a/planet/control/CMagicBox.py b/planet/control/CMagicBox.py index a70e8554..88388654 100644 --- a/planet/control/CMagicBox.py +++ b/planet/control/CMagicBox.py @@ -444,134 +444,68 @@ def apply_award(self): return Success('申请添加成功', {'mbaid': mbaid_list}) - def reapply_award(self): + def reapply_award(self,apply_info): """魔盒重新申请""" data = parameter_required(('skuid', 'prid', 'skustock', 'mbastarttime', 'skuprice', 'skuminprice', 'gearsone', 'gearstwo', 'gearsthree')) - mbaid, skuid, prid, skustock = data.get('mbaid'), data.get('skuid'), data.get('prid'), data.get('skustock', 1) + mbaid, skuid, prid= data.get('mbaid'), data.get('skuid'), data.get('prid') gearsone, gearstwo, gearsthree = data.get('gearsone'), data.get('gearstwo'), data.get('gearsthree') - if not isinstance(gearsone, list): - raise ParamsError('gearsone格式错误') - elif not isinstance(gearstwo, list): - raise ParamsError('gearstwo格式错误') - elif not isinstance(gearsthree, list): - raise ParamsError('gearsthree格式错误') gearsone, gearstwo, gearsthree = json.dumps(gearsone), json.dumps(gearstwo), json.dumps(gearsthree) - for test_str in (gearsone, gearstwo, gearsthree): - if not re.match(r'^\[(\"\d+\-\d+\"\,? ?)+\]$', test_str): - raise ParamsError('档次变化金额只能填写数字') mbafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value - sku = ProductSku.query.filter_by_(SKUid=skuid).first_('没有该skuid信息') product = Products.query.filter(Products.PRid == prid, Products.isdelete == False, Products.PRstatus == ProductStatus.usual.value ).first_('仅可将已上架的商品用于申请') - assert sku.PRid == prid, 'sku与商品信息不对应' - apply_info = MagicBoxApply.query.filter(MagicBoxApply.MBAid == mbaid, - MagicBoxApply.MBAstatus.in_([ApplyStatus.agree.value, - ApplyStatus.reject.value, - ApplyStatus.cancle.value]) - ).first_('已下架或审核中的申请不可以进行修改') - - if apply_info.SUid != request.user.id: - raise AuthorityError('仅可修改自己提交的申请') - assert sku.PRid == prid, 'sku与商品信息不对应' - award_instance_list = list() - mbaid_list = list() + apply_info.update({'MBAstatus':ApplyStatus.lose_agree.value}) + db.session.add(apply_info) other_apply_info = MagicBoxApply.query.filter(MagicBoxApply.isdelete == False, MagicBoxApply.MBAid != mbaid, MagicBoxApply.MBAstatus.notin_( - [ApplyStatus.cancle.value, ApplyStatus.reject.value]), + [ApplyStatus.cancle.value, ApplyStatus.reject.value,ApplyStatus.lose_effect.value]), MagicBoxApply.OSid == apply_info.OSid, ).first() current_app.logger.info("其他的同批次共用库存申请 --> {}".format(other_apply_info)) with db.auto_commit(): - starttime = endtime = data.get('mbastarttime') - if endtime < date.today: - raise ParamsError('已结束的活动不能再次发起申请') - elif starttime <= date.today: - raise ParamsError('已开始的活动不能再次发起申请') - # 已通过的父活动不能是活动开始状态 - parent_apply = apply_info - while parent_apply.ParentMBAid != None: - parent_apply = MagicBoxApply.query.filter(MagicBoxApply.MBAid == parent_apply.ParentMBAid, - MagicBoxApply.MBAstatus == ApplyStatus.agree.value, - MagicBoxApply.isdelete == False).first() - if parent_apply: - starttime = parent_apply.AgreeStartime - endtime = parent_apply.AgreeEndtime - if endtime < date.today: - raise ParamsError('已结束的活动不能再次发起申请') - elif starttime <= date.today: - raise ParamsError('已开始的活动不能再次发起申请') - parent_apply.update({"MBAstatus": ApplyStatus.lose_agree.value}) - award_instance_list.append(parent_apply) - break - parent_apply = MagicBoxApply.query.filter( - MagicBoxApply.MBAid == parent_apply.ParentMBAid).first() - # 对ParentMBAid进行检验 - if apply_info.MBAstatus == ApplyStatus.reject.value: - apply_info.update({'isdelete': True}) - award_instance_list.append(apply_info) - time_list = data.get('mbastarttime') - if not isinstance(time_list, list): - raise ParamsError('参数 mbastarttime 格式错误') - skustock = int(skustock) - if skustock == 0: - raise ParamsError('申请参与的库存数不能为0') - # 活动出库单 - osid = str(uuid.uuid1()) - db.session.add(OutStock.create({ - 'OSid': osid, + # 创建新记录 + award_dict = { + 'MBAid': str(uuid.uuid1()), + 'SUid': request.user.id, 'SKUid': skuid, - 'OSnum': skustock - })) - self._update_stock(-skustock, skuid=skuid) - for day in time_list: - # 先检测是否存在相同skuid,相同日期的申请 - exist_apply_sku = MagicBoxApply.query.filter(MagicBoxApply.SKUid == skuid, - MagicBoxApply.isdelete == False, - MagicBoxApply.SUid == request.user.id, - MagicBoxApply.MBAstarttime == day).first() - if exist_apply_sku: - raise ParamsError('您已添加过{}日的申请'.format(day)) - # 创建新记录 - award_dict = { - 'MBAid': str(uuid.uuid1()), - 'SUid': request.user.id, - 'SKUid': skuid, - 'PRid': prid, - 'PBid': product.PBid, - 'MBAstarttime': data.get('mbastarttime'), - 'MBAendtime': data.get('mbastarttime'), - 'SKUprice': float(data.get('skuprice', 0.01)), - 'SKUminPrice': float(data.get('skuminprice', 0.01)), - 'Gearsone': gearsone, - 'Gearstwo': gearstwo, - 'Gearsthree': gearsthree, - # 'SKUstock': int(skustock), - "OSid": str(uuid.uuid1()), - 'MBAstatus': ApplyStatus.wait_check.value, - 'MBAfrom': mbafrom, - 'ParentMBAid': mbaid - } - award_instance = MagicBoxApply.create(award_dict) - award_instance_list.append(award_instance) - mbaid_list.append(award_dict['MBAid']) - db.session.add_all(award_instance_list) + 'PRid': prid, + 'PBid': product.PBid, + 'MBAstarttime': data.get('mbastarttime')[0], + 'MBAendtime': data.get('mbastarttime')[0], + 'SKUprice': float(data.get('skuprice', 0.01)), + 'SKUminPrice': float(data.get('skuminprice', 0.01)), + 'Gearsone': gearsone, + 'Gearstwo': gearstwo, + 'Gearsthree': gearsthree, + "OSid": str(uuid.uuid1()), + 'MBAstatus': ApplyStatus.wait_check.value, + 'MBAfrom': mbafrom, + 'ParentMBAid': mbaid + } + award_instance = MagicBoxApply.create(award_dict) + db.session.add(award_instance) if is_admin(): BASEADMIN().create_action(AdminAction.insert.value, 'MagicBoxApply', award_instance.MBAid) - # 添加到审批流 - [self.create_approval('tomagicbox', request.user.id, mbaid, mbafrom) for mbaid in mbaid_list] + # 是否修改库存 + if not other_apply_info: + # 如果没有同批正在上架或审核中的,将库存从商品中重新减出来 + out_stock = OutStock.query.filter(OutStock.isdelete == False, OutStock.OSid == apply_info.OSid + ).first() + super(CMagicBox, self)._update_stock(-out_stock.OSnum, skuid=apply_info.SKUid) + # 重新添加到审批流 + super(CMagicBox, self).create_approval('tomagicbox', request.user.id, award_instance.MBAid, mbafrom) - return Success('申请添加成功', {'mbaid': mbaid_list}) + return award_instance.MBAid def update_apply(self): """修改魔盒申请""" if not (is_supplizer() or is_admin()): raise AuthorityError() - data = parameter_required(('skuid', 'prid', 'skustock', 'mbastarttime', 'skuprice', + data = parameter_required(('skuid', 'prid', 'mbastarttime', 'skuprice', 'skuminprice', 'gearsone', 'gearstwo', 'gearsthree')) - mbaid, skuid, prid, skustock = data.get('mbaid'), data.get('skuid'), data.get('prid'), data.get('skustock') + mbaid, skuid, prid = data.get('mbaid'), data.get('skuid'), data.get('prid') gearsone, gearstwo, gearsthree = data.get('gearsone'), data.get('gearstwo'), data.get('gearsthree') if not isinstance(gearsone, list): raise ParamsError('gearsone格式错误') @@ -584,56 +518,81 @@ def update_apply(self): if not re.match(r'^\[(\"\d+\-\d+\"\,? ?)+\]$', test_str): raise ParamsError('档次变化金额只能填写数字') apply_info = MagicBoxApply.query.filter(MagicBoxApply.MBAid == mbaid, - MagicBoxApply.MBAstatus.in_([ApplyStatus.reject.value, + MagicBoxApply.MBAstatus.in_([ApplyStatus.agree.value, + ApplyStatus.reject.value, ApplyStatus.cancle.value]) - ).first_('只有已拒绝或撤销状态下的申请可以进行修改') + ).first_('已下架或审核中的申请不可以进行修改') if apply_info.SUid != request.user.id: raise AuthorityError('仅可修改自己提交的申请') - mbafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value - sku = ProductSku.query.filter_by_(SKUid=skuid).first_('没有该skuid信息') - product = Products.query.filter(Products.PRid == prid, Products.isdelete == False, - Products.PRstatus == ProductStatus.usual.value - ).first_('仅可将已上架的商品用于申请') # 当前商品状态不允许进行申请 - assert sku.PRid == prid, 'sku与商品信息不对应' - other_apply_info = MagicBoxApply.query.filter(MagicBoxApply.isdelete == False, - MagicBoxApply.MBAid != mbaid, - MagicBoxApply.MBAstatus.notin_( - [ApplyStatus.cancle.value, ApplyStatus.reject.value]), - MagicBoxApply.OSid == apply_info.OSid, + # 已通过的父活动不能是活动开始状态 + if apply_info.MBAstatus == ApplyStatus.agree.value: + starttime = apply_info.MBAstarttime + if starttime <= date.today(): + current_app.logger.info('starttime{}today{}'.format(starttime,date.today())) + raise StatusError('不能在该活动时间发起申请') + parent_apply = apply_info + while parent_apply.ParentMBAid != None: + current_apply = MagicBoxApply.query.filter(MagicBoxApply.MBAid == parent_apply.ParentMBAid, + MagicBoxApply.MBAstatus == ApplyStatus.agree.value, + MagicBoxApply.isdelete == False).first() + if current_apply: + starttime = current_apply.MBAstarttime + if starttime <= date.today(): + raise StatusError('已结束的活动不能再次发起申请') + current_apply.update({"MBAstatus": ApplyStatus.lose_agree.value}) + db.session.add(parent_apply) + break + else: + parent_apply = MagicBoxApply.query.filter( + MagicBoxApply.MBAid == parent_apply.ParentMBAid).first() + if apply_info.MBAstatus == ApplyStatus.reject.value or apply_info.MBAstatus == ApplyStatus.cancle.value: + mbafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value + sku = ProductSku.query.filter_by_(SKUid=skuid).first_('没有该skuid信息') + product = Products.query.filter(Products.PRid == prid, Products.isdelete == False, + Products.PRstatus == ProductStatus.usual.value + ).first_('仅可将已上架的商品用于申请') # 当前商品状态不允许进行申请 + assert sku.PRid == prid, 'sku与商品信息不对应' + other_apply_info = MagicBoxApply.query.filter(MagicBoxApply.isdelete == False, + MagicBoxApply.MBAid != mbaid, + MagicBoxApply.MBAstatus.notin_( + [ApplyStatus.cancle.value, ApplyStatus.reject.value,ApplyStatus.lose_effect.value]), + MagicBoxApply.OSid == apply_info.OSid, + ).first() + current_app.logger.info("其他的同批次共用库存申请 --> {}".format(other_apply_info)) + with db.auto_commit(): + award_dict = { + 'SUid': request.user.id, + 'SKUid': skuid, + 'PRid': prid, + 'PBid': product.PBid, + 'MBAstarttime': data.get('mbastarttime')[0], + 'MBAendtime': data.get('mbastarttime')[0], + 'SKUprice': float(data.get('skuprice', 0.01)), + 'SKUminPrice': float(data.get('skuminprice', 0.01)), + 'Gearsone': gearsone, + 'Gearstwo': gearstwo, + 'Gearsthree': gearsthree, + 'MBAstatus': ApplyStatus.wait_check.value, + 'MBAfrom': mbafrom, + } + award_dict = {k: v for k, v in award_dict.items() if v is not None} + MagicBoxApply.query.filter_by_(MBAid=mbaid).update(award_dict) + if is_admin(): + BASEADMIN().create_action(AdminAction.update.value, 'MagicBoxApply', mbaid) + # 是否修改库存 + if not other_apply_info: + # 如果没有同批正在上架或审核中的,将库存从商品中重新减出来 + out_stock = OutStock.query.filter(OutStock.isdelete == False, OutStock.OSid == apply_info.OSid ).first() - current_app.logger.info("其他的同批次共用库存申请 --> {}".format(other_apply_info)) - with db.auto_commit(): - award_dict = { - 'SUid': request.user.id, - 'SKUid': skuid, - 'PRid': prid, - 'PBid': product.PBid, - 'MBAstarttime': data.get('mbastarttime'), - 'MBAendtime': data.get('mbastarttime'), - 'SKUprice': float(data.get('skuprice', 0.01)), - 'SKUminPrice': float(data.get('skuminprice', 0.01)), - 'Gearsone': gearsone, - 'Gearstwo': gearstwo, - 'Gearsthree': gearsthree, - # 'SKUstock': int(skustock), - 'MBAstatus': ApplyStatus.wait_check.value, - 'MBAfrom': mbafrom, - } - award_dict = {k: v for k, v in award_dict.items() if v is not None} - MagicBoxApply.query.filter_by_(MBAid=mbaid).update(award_dict) - if is_admin(): - BASEADMIN().create_action(AdminAction.update.value, 'MagicBoxApply', mbaid) - # 是否修改库存 - if not other_apply_info: - # 如果没有同批正在上架或审核中的,将库存从商品中重新减出来 - out_stock = OutStock.query.filter(OutStock.isdelete == False, OutStock.OSid == apply_info.OSid - ).first() - super(CMagicBox, self)._update_stock(-out_stock.OSnum, skuid=apply_info.SKUid) + super(CMagicBox, self)._update_stock(-out_stock.OSnum, skuid=apply_info.SKUid) - # 重新添加到审批流 - super(CMagicBox, self).create_approval('tomagicbox', request.user.id, mbaid, mbafrom) - return Success('修改成功', {'mbaid': mbaid}) + # 重新添加到审批流 + super(CMagicBox, self).create_approval('tomagicbox', request.user.id, mbaid, mbafrom) + return Success('修改成功', {'mbaid': mbaid}) + else: + mbaid = self.reapply_award(apply_info) + return Success('修改成功', {'mbaid': mbaid}) def award_detail(self): """查看申请详情""" diff --git a/planet/control/CTimeLimited.py b/planet/control/CTimeLimited.py index f28e8208..3beefa98 100644 --- a/planet/control/CTimeLimited.py +++ b/planet/control/CTimeLimited.py @@ -1,6 +1,7 @@ import json import math import uuid +import copy from datetime import datetime, timedelta from flask import request, current_app from planet.common.params_validates import parameter_required @@ -41,7 +42,7 @@ def list_activity_product(self): TimeLimitedProduct.isdelete == False, Products.isdelete == False, Products.PRstatus == ProductStatus.usual.value, - TimeLimitedProduct.TLAstatus == ApplyStatus.agree.value + TimeLimitedProduct.TLAstatus.in_([ApplyStatus.agree.value,ApplyStatus.lose_agree.value]) ) tlp_count = tlp_query.count() time_limited.fill('prcount', tlp_count) @@ -132,7 +133,7 @@ def list_product(self): if prtitle: filter_args.add(Products.PRtitle.ilike('%{}%'.format(prtitle))) - filter_args.add(TimeLimitedProduct.TLAstatus >= ApplyStatus.shelves.value) + # filter_args.add(TimeLimitedProduct.TLAstatus >= ApplyStatus.shelves.value) tlp_list = TimeLimitedProduct.query.join(Products, Products.PRid == TimeLimitedProduct.PRid).filter( *filter_args).order_by( TimeLimitedProduct.createtime.desc()).all() @@ -151,17 +152,22 @@ def list_product(self): TimeLimitedActivity.TLAid == tlaid, ).first_('没有此活动') - for tlp in tlp_list: - current_app.logger.info(tlp) - - product = self._fill_tlp(tlp, tla) + for tlps in tlp_list: + # current_app.logger.info(tlp.TLPid) + product = copy.deepcopy(self._fill_tlp(tlps, tla)) + # current_app.logger.info(product.tlpid) if product: + # current_app.logger.info(product.tlpid) product_list.append(product) + # current_app.logger.info(product.tlpid) + for products in product_list: + current_app.logger.info(products.tlpid) # 筛选后重新分页 page = int(data.get('page_num', 1)) or 1 count = int(data.get('page_size', 15)) or 15 total_count = len(product_list) + current_app.logger.info(page,count,total_count) if page < 1: page = 1 total_page = math.ceil(total_count / int(count)) or 1 @@ -176,6 +182,7 @@ def list_product(self): request.mount = total_count # tlakwargs = dict(tlaname=tla.TlAname) self._fill_tla(tla) + # current_app.logger.info(ad_return_list) return Success(data=ad_return_list).get_body(tla=tla) def get(self): @@ -321,54 +328,29 @@ def apply_award(self): return Success('申请成功', {'tlpid': tlp.TLPid}) - def reapply_award(self): + def reapply_award(self,apply_info,tlp_from,suid,product): """重新申请""" - if not (is_supplizer() or is_admin()): - raise AuthorityError() data = parameter_required(('tlaid', 'tlpid', 'prid', 'prprice', 'skus')) - filter_args = { - Products.PRid == data.get('prid'), - Products.isdelete == False, - Products.PRstatus == ProductStatus.usual.value} - if is_supplizer(): - tlp_from = ApplyFrom.supplizer.value - suid = request.user.id - filter_args.add(Products.PRfrom == tlp_from) - filter_args.add(Products.CreaterId == suid) - else: - tlp_from = ApplyFrom.platform.value - filter_args.add(Products.PRfrom == tlp_from) - suid = None with db.auto_commit(): # 获取申请单 - apply_info = TimeLimitedProduct.query.filter( - TimeLimitedProduct.TLPid == data.get('tlpid'), - TimeLimitedProduct.PRid == data.get('prid'), - TimeLimitedProduct.isdelete == False - ).first_('商品不存在') apply_info.update({"TLAstatus": ApplyStatus.lose_agree.value}) - product = Products.query.filter(*filter_args).first_('只能选择自己的商品') + db.session.add(apply_info) skus = data.get('skus') tla = TimeLimitedActivity.query.filter( TimeLimitedActivity.isdelete == False, TimeLimitedActivity.TLAstatus == TimeLimitedStatus.waiting.value, TimeLimitedActivity.TLAid == data.get('tlaid')).first_('活动已停止报名') - instance_list = [] new_tlp = TimeLimitedProduct.create({ 'TLPid': str(uuid.uuid1()), 'TLAid': tla.TLAid, 'TLAfrom': tlp_from, + 'TLAstatus': ApplyStatus.wait_check.value, 'SUid': suid, 'PRid': product.PRid, - # 'PRmainpic': product.PRmainpic, - # 'PRattribute': product.PRattribute, - # 'PBid': product.PBid, - # 'PBname': product.PBname, - # 'PRtitle': product.PRtitle, 'PRprice': data.get('prprice'), 'ParentTLPid': apply_info.TLPid }) - instance_list.append(new_tlp) + db.session.add(new_tlp) for sku in skus: skuid = sku.get('skuid') skuprice = sku.get('skuprice') @@ -384,16 +366,15 @@ def reapply_award(self): 'SKUprice': skuprice }) - instance_list.append(tls) + db.session.add(tls) # prstock += skustock - db.session.add_all(instance_list) if is_admin(): BASEADMIN().create_action(AdminActionS.insert.value, 'TimeLimitedProduct', new_tlp.TLPid) # todo 添加到审批流 super(CTimeLimited, self).create_approval('totimelimited', request.user.id, new_tlp.TLPid, applyfrom=tlp_from) - return Success('申请成功', {'tlpid': new_tlp.TLPid}) + return new_tlp.TLPid def update_award(self): """修改""" @@ -426,25 +407,32 @@ def update_award(self): TimeLimitedActivity.isdelete == False, TimeLimitedActivity.TLAstatus == TimeLimitedStatus.waiting.value, TimeLimitedActivity.TLAid == data.get('tlaid')).first_('活动已停止报名') + if tla.TLAstatus == TimeLimitedStatus.starting.value: + raise StatusError('此申请不可以进行修改') + product = Products.query.filter(*filter_args).first_('商品未上架') + # 修改父商品状态 parent_apply = apply_info - while apply_info.ParentTLPid != None: - current_apply = TimeLimitedProduct.query.filter( - TimeLimitedProduct.TLPid == parent_apply.ParentTLPid, - TimeLimitedProduct.TLAstatus == ApplyStatus.agree.value, - TimeLimitedProduct.isdelete == False).first() + while parent_apply.ParentTLPid: + current_apply = TimeLimitedProduct.query.filter(TimeLimitedProduct.TLPid == parent_apply.ParentTLPid, + TimeLimitedProduct.TLAstatus.in_([ApplyStatus.agree.value,ApplyStatus.lose_effect.value]), + TimeLimitedProduct.isdelete == False).first() if current_apply: - current_apply.update({"TLAstatus": ApplyStatus.lose_agree.value}) - db.session.add(current_apply) - break - else: - parent_apply = TimeLimitedProduct.query.filter( - TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() + current_app.logger.info('current_apply{}'.format(current_apply.TLPid)) + if current_apply.TLAstatus == ApplyStatus.lose_effect.value: + children_apply = TimeLimitedProduct.query.filter(TimeLimitedProduct.ParentTLPid == current_apply.TLPid, + TimeLimitedProduct.TLAstatus == ApplyStatus.agree.value, + TimeLimitedProduct.isdelete == False).all() + for child in children_apply: + current_app.logger.info('child{}'.format(child.TLPid)) + child.update({"TLAstatus": ApplyStatus.lose_agree.value}) + db.session.add(child) + else: + current_apply.update({"TLAstatus": ApplyStatus.lose_agree.value}) + db.session.add(current_apply) + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() if apply_info.TLAstatus == ApplyStatus.reject.value or apply_info.TLAstatus == ApplyStatus.cancle.value: with db.auto_commit(): - # if is_admin() and apply_info.SUid: - # raise AuthorityError('仅可修改自己提交的申请') - - product = Products.query.filter(*filter_args).first_('商品未上架') # instance_list = list() apply_info.update({ 'TLAid': tla.TLAid, @@ -513,7 +501,8 @@ def update_award(self): applyfrom=tlp_from) return Success('修改成功') else: - self.reapply_award() + tlpid = self.reapply_award(apply_info,tlp_from,suid,product) + return Success('修改成功',{'tlpid': tlpid}) @admin_required def update_activity(self): @@ -755,6 +744,8 @@ def _fill_tlp(self, tlp, tla): product.fill('tlpid', tlp.TLPid) product.fill('tlpcreatetime', tlp.createtime) product.fill('tlastatus_zh', ApplyStatus(tlp.TLAstatus).zh_value) + # current_app.logger.info(tlp.TLPid) + # current_app.logger.info(product.tlpid) product.fill('tlastatus_en', ApplyStatus(tlp.TLAstatus).name) product.fill('tlastatus', tlp.TLAstatus) # product.fill('prprice', tlp.PRprice) diff --git a/planet/control/CTrialCommodity.py b/planet/control/CTrialCommodity.py index efa7e5b5..ac6baf09 100644 --- a/planet/control/CTrialCommodity.py +++ b/planet/control/CTrialCommodity.py @@ -77,7 +77,7 @@ def get_commodity_list(self): old_commoditys = TrialCommodity.query.filter(TrialCommodity.AgreeStartTime <= date.today(), TrialCommodity.AgreeEndTime >= date.today(), TrialCommodity.TCstocks > 0, - TrialCommodity.TCstatus == TrialCommodityStatus.auditing + TrialCommodity.TCstatus == TrialCommodityStatus.auditing.value ).all() if old_commoditys: for commodity in old_commoditys: From 4c857b1f81fbb8c053b65c9dcc4ef6cec40be721 Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Sat, 1 Jun 2019 17:18:49 +0800 Subject: [PATCH 16/20] =?UTF-8?q?=E6=96=B0=E4=BA=BA=E9=A6=96=E5=8D=95?= =?UTF-8?q?=E8=87=AA=E6=B5=8B=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/control/CApproval.py | 136 +++++++++++++++----------- planet/control/CFreshManFirstOrder.py | 44 ++++++--- planet/control/CTimeLimited.py | 11 ++- 3 files changed, 113 insertions(+), 78 deletions(-) diff --git a/planet/control/CApproval.py b/planet/control/CApproval.py index 93abcfe8..c704800e 100644 --- a/planet/control/CApproval.py +++ b/planet/control/CApproval.py @@ -1279,23 +1279,37 @@ def agree_freshmanfirstproduct(self, approval_model): # 将父id改为失效 while parent_apply.ParentFMFAid != None: current_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, - FreshManFirstApply.FMFAstatus == ApplyStatus.lose_agree.value, + FreshManFirstApply.FMFAstatus.in_([ApplyStatus.lose_agree.value,ApplyStatus.lose_effect.value]), FreshManFirstApply.isdelete == False).first() if current_apply: # 进行库存恢复 - apply_skus = FreshManFirstSku.query.join( - FreshManFirstProduct, FreshManFirstProduct.FMFPid == FreshManFirstSku.FMFPid).filter( - FreshManFirstProduct.FMFAid == parent_apply.FMFAid).all() - from planet.control.COrder import COrder - for apply_sku in apply_skus: - sku = ProductSku.query.filter(ProductSku.SKUid == apply_sku.SKUid).first() - product = Products.query.filter(Products.PRid == sku.PRid).first() - COrder()._update_stock(apply_sku.FMFPstock, product, sku) + if current_apply.FMFAstatus == ApplyStatus.lose_effect.value: + child = FreshManFirstApply.query.filter( + FreshManFirstApply.ParentFMFAid == current_apply.FMFAid, + FreshManFirstApply.FMFAstatus == ApplyStatus.lose_agree.value, + FreshManFirstApply.isdelete == False).first() + child.update({"FMFAstatus": ApplyStatus.lose_effect.value}) + db.session.add(child) + apply_skus = FreshManFirstSku.query.join( + FreshManFirstProduct, FreshManFirstProduct.FMFPid == FreshManFirstSku.FMFPid).filter( + FreshManFirstProduct.FMFAid == child.FMFAid).all() + from planet.control.COrder import COrder + for apply_sku in apply_skus: + sku = ProductSku.query.filter(ProductSku.SKUid == apply_sku.SKUid).first() + product = Products.query.filter(Products.PRid == sku.PRid).first() + COrder()._update_stock(apply_sku.FMFPstock, product, sku) + else: current_apply.FMFAstatus = ApplyStatus.lose_effect.value - break - else: - parent_apply = FreshManFirstApply.query.filter( - FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() + apply_skus = FreshManFirstSku.query.join( + FreshManFirstProduct, FreshManFirstProduct.FMFPid == FreshManFirstSku.FMFPid).filter( + FreshManFirstProduct.FMFAid == current_apply.FMFAid).all() + from planet.control.COrder import COrder + for apply_sku in apply_skus: + sku = ProductSku.query.filter(ProductSku.SKUid == apply_sku.SKUid).first() + product = Products.query.filter(Products.PRid == sku.PRid).first() + COrder()._update_stock(apply_sku.FMFPstock, product, sku) + parent_apply = FreshManFirstApply.query.filter( + FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() ffa.FMFAstatus = ApplyStatus.agree.value def refuse_freshmanfirstproduct(self, approval_model, refuse_abo): @@ -1314,19 +1328,24 @@ def refuse_freshmanfirstproduct(self, approval_model, refuse_abo): product = Products.query.filter(Products.PRid == sku.PRid).first() COrder()._update_stock(apply_sku.FMFPstock, product, sku) parent_apply = ffa - # 原同意单修改状态 while parent_apply.ParentFMFAid != None: current_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, - FreshManFirstApply.FMFAstatus == ApplyStatus.lose_agree.value, - FreshManFirstApply.isdelete == False).first() - + FreshManFirstApply.FMFAstatus.in_( + [ApplyStatus.lose_agree.value, + ApplyStatus.lose_effect.value]), + FreshManFirstApply.isdelete == False).first() if current_apply: - current_app.logger.info('{}'.format(parent_apply.FMFAid)) - current_apply.FMFAstatus = ApplyStatus.agree.value - break - else: - parent_apply = FreshManFirstApply.query.filter( - FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() + if current_apply.FMFAstatus == ApplyStatus.lose_effect.value: + child = FreshManFirstApply.query.filter( + FreshManFirstApply.ParentFMFAid == current_apply.FMFAid, + FreshManFirstApply.FMFAstatus == ApplyStatus.lose_agree.value, + FreshManFirstApply.isdelete == False).first() + child.update({"FMFAstatus": ApplyStatus.agree.value}) + db.session.add(child) + else: + current_apply.FMFAstatus = ApplyStatus.agree.value + parent_apply = FreshManFirstApply.query.filter( + FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() def agree_trialcommodity(self, approval_model): tc = TrialCommodity.query.filter_by_(TCid=approval_model.AVcontent).first_('试用商品申请数据异常') @@ -1396,45 +1415,44 @@ def agree_timelimited(self, approval_model): if current_apply: current_app.logger.info('目前正在将再次审核改为已失效的 商品为 {}'.format(current_apply.TLPid)) if current_apply.TLAstatus == ApplyStatus.lose_effect.value: - children_apply = TimeLimitedProduct.query.filter( + child = TimeLimitedProduct.query.filter( TimeLimitedProduct.ParentTLPid == current_apply.TLPid, TimeLimitedProduct.TLAstatus == ApplyStatus.lose_agree.value, - TimeLimitedProduct.isdelete == False).all() - for child in children_apply: - current_app.logger.info('child{}'.format(child.TLPid)) - child.update({"TLAstatus": ApplyStatus.lose_effect.value}) - db.session.add(child) - # 获取原商品属性 - product = Products.query.filter_by(PRid=child.PRid, isdelete=False).first() - # 获取原sku属性 - tls_old = TimeLimitedSku.query.filter( - TimeLimitedSku.TLPid == child.TLPid, - TimeLimitedSku.isdelete == False, - TimeLimitedProduct.isdelete == False, - ).all() - from planet.control.COrder import COrder - - # 遍历原sku 将库存退出去 - for sku in tls_old: - sku_instance = ProductSku.query.filter_by( - isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') - COrder()._update_stock(int(sku.TLSstock), product, sku_instance) - current_apply.TLAstatus = ApplyStatus.lose_effect.value - # 获取原商品属性 - product = Products.query.filter_by(PRid=current_apply.PRid, isdelete=False).first() - # 获取原sku属性 - tls_old = TimeLimitedSku.query.filter( - TimeLimitedSku.TLPid == current_apply.TLPid, - TimeLimitedSku.isdelete == False, - TimeLimitedProduct.isdelete == False, - ).all() - from planet.control.COrder import COrder + TimeLimitedProduct.isdelete == False).first() + current_app.logger.info('child{}'.format(child.TLPid)) + child.update({"TLAstatus": ApplyStatus.lose_effect.value}) + db.session.add(child) + # 获取原商品属性 + product = Products.query.filter_by(PRid=child.PRid, isdelete=False).first() + # 获取原sku属性 + tls_old = TimeLimitedSku.query.filter( + TimeLimitedSku.TLPid == child.TLPid, + TimeLimitedSku.isdelete == False, + TimeLimitedProduct.isdelete == False, + ).all() + from planet.control.COrder import COrder + # 遍历原sku 将库存退出去 + for sku in tls_old: + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') + COrder()._update_stock(int(sku.TLSstock), product, sku_instance) + else: + current_apply.TLAstatus = ApplyStatus.lose_effect.value + # 获取原商品属性 + product = Products.query.filter_by(PRid=current_apply.PRid, isdelete=False).first() + # 获取原sku属性 + tls_old = TimeLimitedSku.query.filter( + TimeLimitedSku.TLPid == current_apply.TLPid, + TimeLimitedSku.isdelete == False, + TimeLimitedProduct.isdelete == False, + ).all() + from planet.control.COrder import COrder - # 遍历原sku 将库存退出去 - for sku in tls_old: - sku_instance = ProductSku.query.filter_by( - isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') - COrder()._update_stock(int(sku.TLSstock), product, sku_instance) + # 遍历原sku 将库存退出去 + for sku in tls_old: + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') + COrder()._update_stock(int(sku.TLSstock), product, sku_instance) parent_apply = TimeLimitedProduct.query.filter( TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() tla.TLAstatus = ApplyStatus.agree.value diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index 63c20256..3807ddbc 100644 --- a/planet/control/CFreshManFirstOrder.py +++ b/planet/control/CFreshManFirstOrder.py @@ -538,26 +538,42 @@ def update_award(self): raise StatusError('已结束的活动不能再次发起申请') elif starttime <= date.today(): raise StatusError('已开始的活动不能再次发起申请') + fresh_first_apply.update({'FMFAstatus':ApplyStatus.lose_agree.value}) + db.session.add(fresh_first_apply) # 父活动不能是活动开始状态 parent_apply = fresh_first_apply while parent_apply.ParentFMFAid != None: current_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, - FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, + FreshManFirstApply.FMFAstatus.in_([ApplyStatus.agree.value,ApplyStatus.lose_effect.value]), FreshManFirstApply.isdelete == False).first() if current_apply: - starttime = parent_apply.AgreeStartime - endtime = parent_apply.AgreeEndtime - current_app.logger.info('开始时间{} 结束时间{}'.format(starttime, endtime)) - if endtime < date.today(): - raise StatusError('已结束的活动不能再次发起申请') - elif starttime <= date.today(): - raise StatusError('已开始的活动不能再次发起申请') - current_apply.update({"FMFAstatus": ApplyStatus.lose_agree.value}) - db.session.add(current_apply) - break - else: - parent_apply = FreshManFirstApply.query.filter( - FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() + if current_apply.FMFAstatus == ApplyStatus.lose_effect.value: + children_apply = FreshManFirstApply.query.filter(FreshManFirstApply.ParentFMFAid == current_apply.FMFAid, + FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, + FreshManFirstApply.isdelete == False).first() + if children_apply: + starttime = parent_apply.AgreeStartime + endtime = parent_apply.AgreeEndtime + current_app.logger.info('开始时间{} 结束时间{}'.format(starttime, endtime)) + if endtime < date.today(): + raise StatusError('已结束的活动不能再次发起申请') + elif starttime <= date.today(): + raise StatusError('已开始的活动不能再次发起申请') + children_apply.update({"FMFAstatus": ApplyStatus.lose_agree.value}) + db.session.add(children_apply) + else: + starttime = current_apply.AgreeStartime + endtime = current_apply.AgreeEndtime + current_app.logger.info('开始时间{} 结束时间{}'.format(starttime, endtime)) + if endtime < date.today(): + raise StatusError('已结束的活动不能再次发起申请') + elif starttime <= date.today(): + raise StatusError('已开始的活动不能再次发起申请') + current_apply.update({"FMFAstatus": ApplyStatus.lose_agree.value}) + db.session.add(current_apply) + break + parent_apply = FreshManFirstApply.query.filter( + FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid).first() current_app.logger.info('正在进行重新修改{}'.format(fresh_first_apply.FMFAid)) if fresh_first_apply.FMFAstatus==ApplyStatus.cancle.value or fresh_first_apply.FMFAstatus == ApplyStatus.reject.value: with db.auto_commit(): diff --git a/planet/control/CTimeLimited.py b/planet/control/CTimeLimited.py index 3beefa98..e7839848 100644 --- a/planet/control/CTimeLimited.py +++ b/planet/control/CTimeLimited.py @@ -421,14 +421,15 @@ def update_award(self): if current_apply.TLAstatus == ApplyStatus.lose_effect.value: children_apply = TimeLimitedProduct.query.filter(TimeLimitedProduct.ParentTLPid == current_apply.TLPid, TimeLimitedProduct.TLAstatus == ApplyStatus.agree.value, - TimeLimitedProduct.isdelete == False).all() - for child in children_apply: - current_app.logger.info('child{}'.format(child.TLPid)) - child.update({"TLAstatus": ApplyStatus.lose_agree.value}) - db.session.add(child) + TimeLimitedProduct.isdelete == False).first() + current_app.logger.info('child{}'.format(children_apply.TLPid)) + children_apply.update({"TLAstatus": ApplyStatus.lose_agree.value}) + db.session.add(children_apply) + break else: current_apply.update({"TLAstatus": ApplyStatus.lose_agree.value}) db.session.add(current_apply) + break parent_apply = TimeLimitedProduct.query.filter( TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() if apply_info.TLAstatus == ApplyStatus.reject.value or apply_info.TLAstatus == ApplyStatus.cancle.value: From 30d5e84908bd39767d1bf055592b3785005a2cd3 Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Sat, 1 Jun 2019 18:13:32 +0800 Subject: [PATCH 17/20] =?UTF-8?q?=E7=8C=9C=E6=95=B0=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E8=87=AA=E6=B5=8B=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/control/CApproval.py | 152 ++++++++++++++++++++------------- planet/control/CGuessNum.py | 31 +++++-- planet/control/CTimeLimited.py | 9 +- 3 files changed, 120 insertions(+), 72 deletions(-) diff --git a/planet/control/CApproval.py b/planet/control/CApproval.py index c704800e..af37ec91 100644 --- a/planet/control/CApproval.py +++ b/planet/control/CApproval.py @@ -1127,31 +1127,55 @@ def agree_guessnum(self, approval_model): # 将父id改为失效 while parent_apply.ParentGNAAid != None: current_apply = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, - GuessNumAwardApply.GNAAstatus == ApplyStatus.lose_agree.value, + GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.lose_agree.value,ApplyStatus.lose_effect.value]), GuessNumAwardApply.isdelete == False).first() if current_apply: - # 获取原商品属性 - gnap_old = GuessNumAwardProduct.query.filter(GuessNumAwardProduct.GNAAid == current_apply.GNAAid, - GuessNumAwardProduct.isdelete == False).first() - product = Products.query.filter_by(PRid=gnap_old.PRid, isdelete=False).first_('商品信息出错') - # 获取原sku属性 - gnas_old = GuessNumAwardSku.query.filter( - current_apply.GNAAid == GuessNumAwardProduct.GNAAid, - GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, - GuessNumAwardSku.isdelete == False, - GuessNumAwardProduct.isdelete == False, - ).all() - from planet.control.COrder import COrder - # 遍历原sku 将库存退出去 - for sku in gnas_old: - sku_instance = ProductSku.query.filter_by( - isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') - COrder()._update_stock(int(sku.SKUstock), product, sku_instance) + if current_apply.GNAAstatus == ApplyStatus.lose_effect.value: + child = GuessNumAwardApply.query.filter( + GuessNumAwardApply.ParentGNAAid == current_apply.GNAAid, + GuessNumAwardApply.GNAAstatus == ApplyStatus.lose_agree.value, + GuessNumAwardApply.isdelete == False).first() + if child: + child.update({"GNAAstatus": ApplyStatus.lose_effect.value}) + db.session.add(child) + # 获取原商品属性 + gnap_old = GuessNumAwardProduct.query.filter(GuessNumAwardProduct.GNAAid == child.GNAAid, + GuessNumAwardProduct.isdelete == False).first() + product = Products.query.filter_by(PRid=gnap_old.PRid, isdelete=False).first_('商品信息出错') + # 获取原sku属性 + gnas_old = GuessNumAwardSku.query.filter( + current_apply.GNAAid == GuessNumAwardProduct.GNAAid, + GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, + GuessNumAwardSku.isdelete == False, + GuessNumAwardProduct.isdelete == False, + ).all() + from planet.control.COrder import COrder + # 遍历原sku 将库存退出去 + for sku in gnas_old: + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') + COrder()._update_stock(int(sku.SKUstock), product, sku_instance) + else: current_apply.GNAAstatus = ApplyStatus.lose_effect.value - break - else: - parent_apply = GuessNumAwardApply.query.filter( - GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid).first() + # 获取原商品属性 + gnap_old = GuessNumAwardProduct.query.filter(GuessNumAwardProduct.GNAAid == current_apply.GNAAid, + GuessNumAwardProduct.isdelete == False).first() + product = Products.query.filter_by(PRid=gnap_old.PRid, isdelete=False).first_('商品信息出错') + # 获取原sku属性 + gnas_old = GuessNumAwardSku.query.filter( + current_apply.GNAAid == GuessNumAwardProduct.GNAAid, + GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, + GuessNumAwardSku.isdelete == False, + GuessNumAwardProduct.isdelete == False, + ).all() + from planet.control.COrder import COrder + # 遍历原sku 将库存退出去 + for sku in gnas_old: + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') + COrder()._update_stock(int(sku.SKUstock), product, sku_instance) + parent_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid).first() gnaa.GNAAstatus = ApplyStatus.agree.value # gnaa_other = GuessNumAwardApply.query.filter( # GuessNumAwardApply.GNAAid != gnaa.GNAAid, @@ -1189,18 +1213,25 @@ def refuse_guessnum(self, approval_model, refuse_abo): sku_instance = ProductSku.query.filter_by( isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') COrder()._update_stock(int(sku.SKUstock), product, sku_instance) - # 修改原申请状态 parent_apply = gnaa while parent_apply.ParentGNAAid != None: current_apply = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, - GuessNumAwardApply.GNAAstatus == ApplyStatus.lose_agree.value, + GuessNumAwardApply.GNAAstatus .in_( + [ApplyStatus.lose_agree.value, + ApplyStatus.lose_effect.value]), GuessNumAwardApply.isdelete == False).first() if current_apply: - current_apply.GNAAstatus = ApplyStatus.agree.value - break - else: - parent_apply = GuessNumAwardApply.query.filter( - GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid).first() + if current_apply.GNAAstatus == ApplyStatus.lose_effect.value: + child = GuessNumAwardApply.query.filter( + GuessNumAwardApply.ParentGNAAid == current_apply.GNAAid, + GuessNumAwardApply.GNAAstatus == ApplyStatus.lose_agree.value, + GuessNumAwardApply.isdelete == False).first() + if child: + child.update({"GNAAstatus": ApplyStatus.agree.value}) + else: + current_apply.GNAAstatus = ApplyStatus.agree.value + parent_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid).first() def agree_magicbox(self, approval_model): mba = MagicBoxApply.query.filter_by_(MBAid=approval_model.AVcontent).first_('魔盒商品申请数据异常') @@ -1208,7 +1239,7 @@ def agree_magicbox(self, approval_model): # 将父id改为失效 while parent_apply.ParentMBAid != None: current_apply = MagicBoxApply.query.filter(MagicBoxApply.MBAid == parent_apply.ParentMBAid, - MagicBoxApply.MBAstatus == ApplyStatus.lose_agree.value, + MagicBoxApply.MBAstatus .in_([ApplyStatus.lose_agree.value,ApplyStatus.lose_effect.value]), MagicBoxApply.isdelete == False).first() if current_apply: other_apply_info = MagicBoxApply.query.filter(MagicBoxApply.isdelete == False, @@ -1288,16 +1319,17 @@ def agree_freshmanfirstproduct(self, approval_model): FreshManFirstApply.ParentFMFAid == current_apply.FMFAid, FreshManFirstApply.FMFAstatus == ApplyStatus.lose_agree.value, FreshManFirstApply.isdelete == False).first() - child.update({"FMFAstatus": ApplyStatus.lose_effect.value}) - db.session.add(child) - apply_skus = FreshManFirstSku.query.join( - FreshManFirstProduct, FreshManFirstProduct.FMFPid == FreshManFirstSku.FMFPid).filter( - FreshManFirstProduct.FMFAid == child.FMFAid).all() - from planet.control.COrder import COrder - for apply_sku in apply_skus: - sku = ProductSku.query.filter(ProductSku.SKUid == apply_sku.SKUid).first() - product = Products.query.filter(Products.PRid == sku.PRid).first() - COrder()._update_stock(apply_sku.FMFPstock, product, sku) + if child: + child.update({"FMFAstatus": ApplyStatus.lose_effect.value}) + db.session.add(child) + apply_skus = FreshManFirstSku.query.join( + FreshManFirstProduct, FreshManFirstProduct.FMFPid == FreshManFirstSku.FMFPid).filter( + FreshManFirstProduct.FMFAid == child.FMFAid).all() + from planet.control.COrder import COrder + for apply_sku in apply_skus: + sku = ProductSku.query.filter(ProductSku.SKUid == apply_sku.SKUid).first() + product = Products.query.filter(Products.PRid == sku.PRid).first() + COrder()._update_stock(apply_sku.FMFPstock, product, sku) else: current_apply.FMFAstatus = ApplyStatus.lose_effect.value apply_skus = FreshManFirstSku.query.join( @@ -1340,8 +1372,9 @@ def refuse_freshmanfirstproduct(self, approval_model, refuse_abo): FreshManFirstApply.ParentFMFAid == current_apply.FMFAid, FreshManFirstApply.FMFAstatus == ApplyStatus.lose_agree.value, FreshManFirstApply.isdelete == False).first() - child.update({"FMFAstatus": ApplyStatus.agree.value}) - db.session.add(child) + if child: + child.update({"FMFAstatus": ApplyStatus.agree.value}) + db.session.add(child) else: current_apply.FMFAstatus = ApplyStatus.agree.value parent_apply = FreshManFirstApply.query.filter( @@ -1419,23 +1452,24 @@ def agree_timelimited(self, approval_model): TimeLimitedProduct.ParentTLPid == current_apply.TLPid, TimeLimitedProduct.TLAstatus == ApplyStatus.lose_agree.value, TimeLimitedProduct.isdelete == False).first() - current_app.logger.info('child{}'.format(child.TLPid)) - child.update({"TLAstatus": ApplyStatus.lose_effect.value}) - db.session.add(child) - # 获取原商品属性 - product = Products.query.filter_by(PRid=child.PRid, isdelete=False).first() - # 获取原sku属性 - tls_old = TimeLimitedSku.query.filter( - TimeLimitedSku.TLPid == child.TLPid, - TimeLimitedSku.isdelete == False, - TimeLimitedProduct.isdelete == False, - ).all() - from planet.control.COrder import COrder - # 遍历原sku 将库存退出去 - for sku in tls_old: - sku_instance = ProductSku.query.filter_by( - isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') - COrder()._update_stock(int(sku.TLSstock), product, sku_instance) + if child: + current_app.logger.info('child{}'.format(child.TLPid)) + child.update({"TLAstatus": ApplyStatus.lose_effect.value}) + db.session.add(child) + # 获取原商品属性 + product = Products.query.filter_by(PRid=child.PRid, isdelete=False).first() + # 获取原sku属性 + tls_old = TimeLimitedSku.query.filter( + TimeLimitedSku.TLPid == child.TLPid, + TimeLimitedSku.isdelete == False, + TimeLimitedProduct.isdelete == False, + ).all() + from planet.control.COrder import COrder + # 遍历原sku 将库存退出去 + for sku in tls_old: + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') + COrder()._update_stock(int(sku.TLSstock), product, sku_instance) else: current_apply.TLAstatus = ApplyStatus.lose_effect.value # 获取原商品属性 diff --git a/planet/control/CGuessNum.py b/planet/control/CGuessNum.py index f0ba973f..3d19cfd6 100644 --- a/planet/control/CGuessNum.py +++ b/planet/control/CGuessNum.py @@ -638,20 +638,33 @@ def update_apply(self): if parent_apply.GNAAstatus == ApplyStatus.agree.value: if parent_apply.AgreeStartime<= date.today(): raise StatusError('不能在该活动时间发起申请') + apply_info.update({'GNAAstatus':ApplyStatus.lose_agree.value}) + db.session.add(apply_info) while parent_apply.ParentGNAAid != None: current_apply = GuessNumAwardApply.query.filter( GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, - GuessNumAwardApply.GNAAstatus == ApplyStatus.agree.value, + GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.agree.value,ApplyStatus.lose_effect.value]), GuessNumAwardApply.isdelete == False).first() if current_apply: - if current_apply.AgreeStartime <= date.today(): - raise StatusError('不能在该活动时间段内发起申请') - current_apply.update({'GNAAstatus':ApplyStatus.lose_agree.value}) - db.session.add(current_apply) - break - else: - parent_apply = GuessNumAwardApply.query.filter( - GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid).first() + if current_apply.GNAAstatus == ApplyStatus.lose_effect.value: + children_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.ParentGNAAid == current_apply.GNAAid, + GuessNumAwardApply.GNAAstatus == ApplyStatus.agree.value, + GuessNumAwardApply.isdelete == False).first() + if children_apply: + if parent_apply.GNAAstatus == ApplyStatus.agree.value: + if parent_apply.AgreeStartime <= date.today(): + raise StatusError('不能在该活动时间发起申请') + children_apply.update({"GNAAstatus": ApplyStatus.lose_agree.value}) + db.session.add(children_apply) + else: + if current_apply.AgreeStartime <= date.today(): + raise StatusError('不能在该活动时间段内发起申请') + current_apply.update({'GNAAstatus':ApplyStatus.lose_agree.value}) + db.session.add(current_apply) + parent_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid).first() + if apply_info.GNAAstatus == ApplyStatus.cancle.value or apply_info.GNAAstatus == ApplyStatus.reject.value: gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value # 解除和原商品属性的绑定 diff --git a/planet/control/CTimeLimited.py b/planet/control/CTimeLimited.py index e7839848..3b8b24c6 100644 --- a/planet/control/CTimeLimited.py +++ b/planet/control/CTimeLimited.py @@ -422,10 +422,11 @@ def update_award(self): children_apply = TimeLimitedProduct.query.filter(TimeLimitedProduct.ParentTLPid == current_apply.TLPid, TimeLimitedProduct.TLAstatus == ApplyStatus.agree.value, TimeLimitedProduct.isdelete == False).first() - current_app.logger.info('child{}'.format(children_apply.TLPid)) - children_apply.update({"TLAstatus": ApplyStatus.lose_agree.value}) - db.session.add(children_apply) - break + if children_apply: + current_app.logger.info('child{}'.format(children_apply.TLPid)) + children_apply.update({"TLAstatus": ApplyStatus.lose_agree.value}) + db.session.add(children_apply) + break else: current_apply.update({"TLAstatus": ApplyStatus.lose_agree.value}) db.session.add(current_apply) From dd7eceee7013a2e1b2f87515f23e38926e4218a9 Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Sat, 1 Jun 2019 21:37:47 +0800 Subject: [PATCH 18/20] =?UTF-8?q?=E8=AF=95=E7=94=A8=E5=95=86=E5=93=81?= =?UTF-8?q?=E8=87=AA=E6=B5=8B=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/control/CApproval.py | 50 +++-- planet/control/CTrialCommodity.py | 316 +++++++++++++++--------------- 2 files changed, 196 insertions(+), 170 deletions(-) diff --git a/planet/control/CApproval.py b/planet/control/CApproval.py index af37ec91..eaeb39cf 100644 --- a/planet/control/CApproval.py +++ b/planet/control/CApproval.py @@ -1387,15 +1387,24 @@ def agree_trialcommodity(self, approval_model): tc.AgreeEndTime = tc.ApplyEndTime # todo 同意时自动填写申请时间,后期可能需要管理同意时输入灵活时间 parent_apply = tc while parent_apply.ParentTCid != None: + current_apply = TrialCommodity.query.filter(TrialCommodity.TCid == parent_apply.ParentTCid, + TrialCommodity.TCstatus.in_( + [TrialCommodityStatus.lose_upper.value, + TrialCommodityStatus.lose_effect.value]), + TrialCommodity.isdelete == False).first() + if current_apply: + if current_apply.TCstatus == TrialCommodityStatus.lose_effect.value: + child = TrialCommodity.query.filter( + TrialCommodity.ParentTCid == current_apply.TCid, + TrialCommodity.TCstatus == TrialCommodityStatus.lose_upper.value, + TrialCommodity.isdelete == False).first() + if child: + child.update({"TCstatus": TrialCommodityStatus.lose_effect.value}) + db.session.add(child) + else: + current_apply.TCstatus = TrialCommodityStatus.lose_effect.value parent_apply = TrialCommodity.query.filter( - TrialCommodity.TCid == parent_apply.ParentTCid, - TrialCommodity.TCstatus == TrialCommodityStatus.lose_upper.value, - TrialCommodity.isdelete == False).first() - if parent_apply: - parent_apply.TCstatus = ApplyStatus.lose_effect.value - break - parent_apply = TimeLimitedProduct.query.filter( - TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() + TrialCommodity.TCid == parent_apply.ParentTCid).first() def refuse_trialcommodity(self, approval_model, refuse_abo): tc = TrialCommodity.query.filter_by_(TCid=approval_model.AVcontent).first() @@ -1405,15 +1414,24 @@ def refuse_trialcommodity(self, approval_model, refuse_abo): tc.TCrejectReason = refuse_abo parent_apply = tc while parent_apply.ParentTCid != None: + current_apply = TrialCommodity.query.filter(TrialCommodity.TCid == parent_apply.ParentTCid, + TrialCommodity.TCstatus.in_( + [TrialCommodityStatus.lose_upper.value, + TrialCommodityStatus.lose_effect.value]), + TrialCommodity.isdelete == False).first() + if current_apply: + if current_apply.TCstatus == TrialCommodityStatus.lose_effect.value: + child = TrialCommodity.query.filter( + TrialCommodity.ParentTCid == current_apply.TCid, + TrialCommodity.TCstatus == TrialCommodityStatus.lose_upper.value, + TrialCommodity.isdelete == False).first() + if child: + child.update({"TCstatus": TrialCommodityStatus.upper.value}) + db.session.add(child) + else: + current_apply.TCstatus = TrialCommodityStatus.upper.value parent_apply = TrialCommodity.query.filter( - TrialCommodity.TCid == parent_apply.ParentTCid, - TrialCommodity.TCstatus == ApplyStatus.lose_upper.value, - TrialCommodity.isdelete == False).first() - if parent_apply: - parent_apply.TCstatus = ApplyStatus.agree.value - break - parent_apply = TimeLimitedProduct.query.filter( - TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() + TrialCommodity.TCid == parent_apply.ParentTCid).first() def agree_activationcode(self, approval_model): aca = ActivationCodeApply.query.filter_by_(ACAid=approval_model.AVcontent).first_('激活码申请数据异常') diff --git a/planet/control/CTrialCommodity.py b/planet/control/CTrialCommodity.py index ac6baf09..a708a6dd 100644 --- a/planet/control/CTrialCommodity.py +++ b/planet/control/CTrialCommodity.py @@ -303,7 +303,7 @@ def add_commodity(self): super().create_approval('totrialcommodity', request.user.id, tcid, tcfrom) return Success("添加成功", {'tcid': tcid}) - def readd_commodity(self): + def readd_commodity(self,commodity): """添加试用商品""" if is_supplizer(): usid = request.user.id @@ -326,60 +326,14 @@ def readd_commodity(self): tcdesc = data.get('tcdesc') tcdeposit = data.get('tcdeposit') tcstocks = 0 - pbid = data.get('pbid') - images = data.get('images') - skus = data.get('skus') tskuvalue = data.get('tskuvalue') - tcid = data.get('tcid') - commodity = TrialCommodity.query.filter(TrialCommodity.TCid == tcid, - TrialCommodity.TCstatus.in_([TrialCommodityStatus.upper.value, - TrialCommodityStatus.reject.value, - TrialCommodityStatus.cancle.value]), - TrialCommodity.isdelete == False - ).first_('该试用申请不能被重新申请') - if sup: - assert commodity.CreaterId == usid, '供应商只能修改自己上传的商品' - if not isinstance(images, list) or not isinstance(skus, list): - raise ParamsError('images/skus, 参数错误') - ProductBrand.query.filter_by_(PBid=pbid).first_('未找到该品牌信息') tcid = str(uuid.uuid1()) pbid = data.get('pbid') images = data.get('images') skus = data.get('skus') - if not isinstance(images, list) or not isinstance(skus, list): - raise ParamsError('images/skus, 参数错误') ProductBrand.query.filter_by_(PBid=pbid).first_('pbid 参数错误, 未找到相应品牌') with db.auto_commit(): session_list = [] - # 是否能再次申请 - starttime = commodity.AgreeStartTime - endtime = commodity.AgreeEndtime - if endtime < date.today: - raise StatusError('已结束的活动不能再次发起申请') - elif starttime <= date.today: - raise StatusError('已开始的活动不能再次发起申请') - # 父活动不能是活动开始状态 - parent_apply = commodity - while parent_apply.ParentFMFAid != None: - parent_apply = TrialCommodity.query.filter(TrialCommodity.TCid == parent_apply.ParentTCid, - TrialCommodity.TCstatus == TrialCommodityStatus.agree.value, - TrialCommodity.isdelete == False).first() - if parent_apply: - starttime = parent_apply.AgreeStartime - endtime = parent_apply.AgreeEndtime - if endtime < date.today: - raise StatusError('已结束的活动不能再次发起申请') - elif starttime <= date.today: - raise StatusError('已开始的活动不能再次发起申请') - parent_apply.update({"TCstatus": ApplyStatus.lose_upper.value}) - session_list.append(parent_apply) - break - parent_apply = TrialCommodity.query.filter( - TrialCommodity.TCid == parent_apply.ParentTCid).first() - if commodity.TCstatus == ApplyStatus.reject.value: - commodity.update({'isdelete': True}) - session_list.append(commodity) - for image in images: parameter_required(('tcipic', 'tcisort'), datafrom=image) image_info = TrialCommodityImage.create({ @@ -426,7 +380,6 @@ def readd_commodity(self): 'TSKUvalue': json.dumps(tskuvalue) }) session_list.append(sku_value_instance) - new_commodity = TrialCommodity.create({ 'TCid': tcid, 'TCtitle': data.get('tctitle'), @@ -442,22 +395,23 @@ def readd_commodity(self): 'TCremarks': data.get('tcremarks'), 'CreaterId': request.user.id, 'PBid': pbid, - 'TCfrom': tcfrom, + 'TCfrom': commodity.TCfrom, 'ApplyStartTime': data.get('applystarttime'), 'ApplyEndTime': data.get('applyendtime'), 'ParentTCid': commodity.TCid }) session_list.append(new_commodity) + # db.session.add(new_commodity) db.session.add_all(session_list) + current_app.logger.info('tcid{},usid{},tcfrom{}'.format(tcid,usid,tcfrom)) if is_admin(): BASEADMIN().create_action(AdminActionS.insert.value, 'TrialCommodity', tcid) - # 添加进审批流 + # 重新创建一个审批流 super().create_approval('totrialcommodity', request.user.id, tcid, tcfrom) - return Success("添加成功", {'tcid': tcid}) + return tcid def update_commodity(self): """修改试用商品""" - self.readd_commodity() if is_supplizer(): usid = request.user.id sup = self._check_supplizer(usid) @@ -483,117 +437,171 @@ def update_commodity(self): skus = data.get('skus') tskuvalue = data.get('tskuvalue') tcid = data.get('tcid') - commodity = TrialCommodity.query.filter_by_(TCid=tcid).first_('未找到该试用商品信息') + commodity = TrialCommodity.query.filter(TrialCommodity.TCid == tcid, + TrialCommodity.TCstatus.in_([TrialCommodityStatus.upper.value, + TrialCommodityStatus.reject.value, + TrialCommodityStatus.cancel.value]), + TrialCommodity.isdelete == False + ).first_('该试用申请不能被重新申请') if sup: assert commodity.CreaterId == usid, '供应商只能修改自己上传的商品' if not isinstance(images, list) or not isinstance(skus, list): raise ParamsError('images/skus, 参数错误') ProductBrand.query.filter_by_(PBid=pbid).first_('未找到该品牌信息') - with db.auto_commit(): - session_list = [] - if images: - old_tciids = list() - [old_tciids.append(id.TCIid) for id in TrialCommodityImage.query.filter_by_(TCid=tcid).all()] - current_app.logger.info("Exist old tciids is {}".format(old_tciids)) - for image in images: - if 'tciid' in image: - tciid = image.get('tciid') - old_tciids.remove(tciid) - - else: - new_tciid = str(uuid.uuid1()) - new_img_instance = TrialCommodityImage.create({ - 'TCIid': new_tciid, - 'TCid': tcid, - 'TCIpic': image.get('tcipic'), - 'TCIsort': image.get('tcisort') - }) - session_list.append(new_img_instance) - current_app.logger.info("Delete old exist tciids is {}".format(old_tciids)) - [TrialCommodityImage.query.filter_by_(TCIid=old_tciid).delete_() for old_tciid in old_tciids] - if skus: - sku_detail_list = list() # 一个临时的列表, 使用记录的sku_detail来检测sku_value是否符合规范 - for sku in skus: - parameter_required(('skupic', 'skustock', 'skuattritedetail'), datafrom=sku) - skuattritedetail = sku.get('skuattritedetail') - if not isinstance(skuattritedetail, list) or len(skuattritedetail) != len(tcattribute): - raise ParamsError('skuattritedetail与tcattribute不符') - sku_detail_list.append(skuattritedetail) - skustock = sku.get('skustock') - assert int(skustock) >= 0, '库存数量不能小于0' - skus_list = list() - if 'skuid' in sku: - skuid = sku.get('skuid') - skus_list.append(skuid) - sku_instance = TrialCommoditySku.query.filter_by({'SKUid': skuid}).first_('sku不存在') - sku_instance.update({ - 'TCid': tcid, - 'SKUpic': sku.get('skupic'), - 'SKUattriteDetail': json.dumps(skuattritedetail), - 'SKUstock': int(skustock), - 'SKUprice': tcdeposit + # 是否能再次申请 + if commodity.TCstatus == TrialCommodityStatus.upper.value: + starttime = commodity.ApplyStartTime + endtime = commodity.ApplyEndTime + if endtime < date.today(): + raise StatusError('已结束的活动不能再次发起申请') + elif starttime <= date.today(): + raise StatusError('已开始的活动不能再次发起申请') + commodity.update({'TCstatus':TrialCommodityStatus.lose_upper.value}) + db.session.add(commodity) + # 父活动不能是活动开始状态 + parent_apply = commodity + while parent_apply.ParentTCid != None: + current_apply = TrialCommodity.query.filter(TrialCommodity.TCid == parent_apply.ParentTCid, + TrialCommodity.TCstatus .in_([TrialCommodityStatus.upper.value,ApplyStatus.lose_effect.value]), + TrialCommodity.isdelete == False).first() + if current_apply: + if current_apply.TCstatus == TrialCommodityStatus.lose_effect.value: + children_apply = TrialCommodity.query.filter( + TrialCommodity.ParentTCid == current_apply.TCid, + TrialCommodity.TCstatus == TrialCommodityStatus.upper.value, + TrialCommodity.isdelete == False).first() + if children_apply: + starttime = parent_apply.ApplyStartTime + endtime = parent_apply.ApplyEndTime + if endtime < date.today(): + raise StatusError('已结束的活动不能再次发起申请') + elif starttime <= date.today(): + raise StatusError('已开始的活动不能再次发起申请') + children_apply.update({"TCstatus": TrialCommodityStatus.lose_upper.value}) + db.session.add(children_apply) + break + else: + starttime = current_apply.ApplyStartTime + endtime = current_apply.ApplyStartTime + current_app.logger.info('开始时间{} 结束时间{}'.format(starttime, endtime)) + if endtime < date.today(): + raise StatusError('已结束的活动不能再次发起申请') + elif starttime <= date.today(): + raise StatusError('已开始的活动不能再次发起申请') + current_apply.update({"TCstatus": TrialCommodityStatus.lose_upper.value}) + db.session.add(current_apply) + break + parent_apply = TrialCommodity.query.filter( + TrialCommodity.TCid == parent_apply.ParentTCid).first() + if commodity.TCstatus == TrialCommodityStatus.cancel.value or commodity.TCstatus == TrialCommodityStatus.reject.value: + with db.auto_commit(): + session_list = [] + if images: + old_tciids = list() + [old_tciids.append(id.TCIid) for id in TrialCommodityImage.query.filter_by_(TCid=tcid).all()] + current_app.logger.info("Exist old tciids is {}".format(old_tciids)) + for image in images: + if 'tciid' in image: + tciid = image.get('tciid') + old_tciids.remove(tciid) + + else: + new_tciid = str(uuid.uuid1()) + new_img_instance = TrialCommodityImage.create({ + 'TCIid': new_tciid, + 'TCid': tcid, + 'TCIpic': image.get('tcipic'), + 'TCIsort': image.get('tcisort') + }) + session_list.append(new_img_instance) + current_app.logger.info("Delete old exist tciids is {}".format(old_tciids)) + [TrialCommodityImage.query.filter_by_(TCIid=old_tciid).delete_() for old_tciid in old_tciids] + if skus: + sku_detail_list = list() # 一个临时的列表, 使用记录的sku_detail来检测sku_value是否符合规范 + for sku in skus: + parameter_required(('skupic', 'skustock', 'skuattritedetail'), datafrom=sku) + skuattritedetail = sku.get('skuattritedetail') + if not isinstance(skuattritedetail, list) or len(skuattritedetail) != len(tcattribute): + raise ParamsError('skuattritedetail与tcattribute不符') + sku_detail_list.append(skuattritedetail) + skustock = sku.get('skustock') + assert int(skustock) >= 0, '库存数量不能小于0' + skus_list = list() + if 'skuid' in sku: + skuid = sku.get('skuid') + skus_list.append(skuid) + sku_instance = TrialCommoditySku.query.filter_by({'SKUid': skuid}).first_('sku不存在') + sku_instance.update({ + 'TCid': tcid, + 'SKUpic': sku.get('skupic'), + 'SKUattriteDetail': json.dumps(skuattritedetail), + 'SKUstock': int(skustock), + 'SKUprice': tcdeposit + }) + session_list.append(sku_instance) + else: + new_sku_instance = TrialCommoditySku.create({ + 'SKUid': str(uuid.uuid1()), + 'TCid': tcid, + 'SKUpic': sku.get('skupic'), + 'SKUprice': tcdeposit, + 'SKUstock': int(skustock), + 'SKUattriteDetail': json.dumps(skuattritedetail) + }) + session_list.append(new_sku_instance) + tcstocks += int(skustock) # 计算总库存 + + # 剩下的就是删除 + TrialCommoditySku.query.filter(TrialCommoditySku.isdelete == False, + TrialCommoditySku.TCid == tcid, + TrialCommoditySku.SKUid.notin_(skus_list) + ).delete_(synchronize_session=False) + if tskuvalue: + # todo 与sku校验 + if not isinstance(tskuvalue, list) or len(tskuvalue) != len(tcattribute): + raise ParamsError('tskuvalue与prattribute不符') + exists_skuvalue = TrialCommoditySkuValue.query.filter_by_(TCid=tcid).first() + if exists_skuvalue: + exists_skuvalue.update({ + 'TSKUvalue': json.dumps(tskuvalue) }) - session_list.append(sku_instance) + session_list.append(exists_skuvalue) else: - new_sku_instance = TrialCommoditySku.create({ - 'SKUid': str(uuid.uuid1()), + new_sku_value_instance = TrialCommoditySkuValue.create({ + 'TSKUid': str(uuid.uuid1()), 'TCid': tcid, - 'SKUpic': sku.get('skupic'), - 'SKUprice': tcdeposit, - 'SKUstock': int(skustock), - 'SKUattriteDetail': json.dumps(skuattritedetail) + 'TSKUvalue': json.dumps(tskuvalue) }) - session_list.append(new_sku_instance) - tcstocks += int(skustock) # 计算总库存 - - # 剩下的就是删除 - TrialCommoditySku.query.filter(TrialCommoditySku.isdelete == False, - TrialCommoditySku.TCid == tcid, - TrialCommoditySku.SKUid.notin_(skus_list) - ).delete_(synchronize_session=False) - if tskuvalue: - # todo 与sku校验 - if not isinstance(tskuvalue, list) or len(tskuvalue) != len(tcattribute): - raise ParamsError('tskuvalue与prattribute不符') - exists_skuvalue = TrialCommoditySkuValue.query.filter_by_(TCid=tcid).first() - if exists_skuvalue: - exists_skuvalue.update({ - 'TSKUvalue': json.dumps(tskuvalue) - }) - session_list.append(exists_skuvalue) + session_list.append(new_sku_value_instance) else: - new_sku_value_instance = TrialCommoditySkuValue.create({ - 'TSKUid': str(uuid.uuid1()), - 'TCid': tcid, - 'TSKUvalue': json.dumps(tskuvalue) + TrialCommoditySkuValue.query.filter_by_(TCid=tcid).delete_() # 如果不传就删除原来的 + + upinfo = commodity.update( + { + 'TCtitle': data.get('tctitle'), + 'TCdescription': tcdescription, + 'TCdeposit': tcdeposit, + 'TCdeadline': data.get('tcdeadline'), # 暂时先按天为单位 + 'TCfreight': data.get('tcfreight'), + 'TCstocks': tcstocks, + # 'TCstatus': TrialCommodityStatus.auditing.value, # 修改时状态暂不做更改,重新添加个单独提交的接口 + 'TCmainpic': data.get('tcmainpic'), + 'TCattribute': json.dumps(tcattribute or '[]'), + 'TCdesc': tcdesc or [], + 'TCremarks': data.get('tcremarks'), + 'CreaterId': request.user.id, + 'PBid': pbid, + 'ApplyStartTime': data.get('applystarttime'), + 'ApplyEndTime': data.get('applyendtime') }) - session_list.append(new_sku_value_instance) - else: - TrialCommoditySkuValue.query.filter_by_(TCid=tcid).delete_() # 如果不传就删除原来的 - - upinfo = commodity.update( - { - 'TCtitle': data.get('tctitle'), - 'TCdescription': tcdescription, - 'TCdeposit': tcdeposit, - 'TCdeadline': data.get('tcdeadline'), # 暂时先按天为单位 - 'TCfreight': data.get('tcfreight'), - 'TCstocks': tcstocks, - # 'TCstatus': TrialCommodityStatus.auditing.value, # 修改时状态暂不做更改,重新添加个单独提交的接口 - 'TCmainpic': data.get('tcmainpic'), - 'TCattribute': json.dumps(tcattribute or '[]'), - 'TCdesc': tcdesc or [], - 'TCremarks': data.get('tcremarks'), - 'CreaterId': request.user.id, - 'PBid': pbid, - 'ApplyStartTime': data.get('applystarttime'), - 'ApplyEndTime': data.get('applyendtime') - }) - session_list.append(upinfo) - db.session.add_all(session_list) - if is_admin(): - BASEADMIN().create_action(AdminActionS.update.value, 'TrialCommodity', tcid) - return Success('修改成功', {'tcid': tcid}) + session_list.append(upinfo) + db.session.add_all(session_list) + if is_admin(): + BASEADMIN().create_action(AdminActionS.update.value, 'TrialCommodity', tcid) + return Success('修改成功', {'tcid': tcid}) + else: + tcid = self.readd_commodity(commodity) + return Success('修改成功', {'tcid': tcid}) def cancel_commodity_apply(self): """撤销自己的申请""" @@ -671,8 +679,8 @@ def resubmit_apply(self): with db.auto_commit(): commodity = TrialCommodity.query.filter_by_(TCid=tcid).first_('无此商品信息') - if commodity.TCstatus not in [TrialCommodityStatus.cancel.value, TrialCommodityStatus.reject.value]: - raise StatusError('只有撤销或已下架状态的申请可以重新提交') + if commodity.TCstatus not in [TrialCommodityStatus.cancel.value, TrialCommodityStatus.reject.value,TrialCommodityStatus.upper.value]: + raise StatusError('该申请状态不可以重新提交') if sup: if commodity.CreaterId != usid: raise AuthorityError('仅可重新提交自己上传的商品') From e80b76c164ae02b954a71809eb19d72648b6acb9 Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Sat, 1 Jun 2019 23:33:37 +0800 Subject: [PATCH 19/20] =?UTF-8?q?=E6=98=9F=E5=B8=81=E8=87=AA=E6=B5=8B?= =?UTF-8?q?=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/api/v2/ATimeLimited.py | 1 - planet/api/v2/ATrialCommodity.py | 1 - planet/control/CApproval.py | 73 ++++++++++++++- planet/control/CIntegralStore.py | 154 ++++++++++++++++++++++--------- planet/models/product.py | 1 + 5 files changed, 183 insertions(+), 47 deletions(-) diff --git a/planet/api/v2/ATimeLimited.py b/planet/api/v2/ATimeLimited.py index d8aba2fe..d837f173 100644 --- a/planet/api/v2/ATimeLimited.py +++ b/planet/api/v2/ATimeLimited.py @@ -23,7 +23,6 @@ def post(self, timelimited): 'update_activity': self.ctl.update_activity, 'shelf_award': self.ctl.shelf_award, 'del_award': self.ctl.del_award, - 'reapply_award': self.ctl.reapply_award, 'update_award': self.ctl.update_award } return apis diff --git a/planet/api/v2/ATrialCommodity.py b/planet/api/v2/ATrialCommodity.py index 2f2446ea..6a9e5004 100644 --- a/planet/api/v2/ATrialCommodity.py +++ b/planet/api/v2/ATrialCommodity.py @@ -17,7 +17,6 @@ def get(self, commodity): def post(self, commodity): apis = { 'add': self.ctrialcommodity.add_commodity, - 'readd': self.ctrialcommodity.readd_commodity, 'create_order': self.ctrialcommodity.create_order, 'update': self.ctrialcommodity.update_commodity, 'del': self.ctrialcommodity.del_commodity, diff --git a/planet/control/CApproval.py b/planet/control/CApproval.py index eaeb39cf..3033478b 100644 --- a/planet/control/CApproval.py +++ b/planet/control/CApproval.py @@ -1555,7 +1555,57 @@ def refuse_timelimited(self, approval_model, refuse_abo): def agree_tointegral(self, approval_model): ip = IntegralProduct.query.filter_by_(IPid=approval_model.AVcontent).first_('星币商品申请数据异常') - ip.IPstatus = ApplyStatus.agree.value + ip.IPstatus = ApplyStatus.agrlee.value + parent_apply = ip + while parent_apply.ParentIpid != None: + current_apply = IntegralProduct.query.filter(IntegralProduct.IPid == parent_apply.ParentIpid, + IntegralProduct.IPstatus.in_( + [ApplyStatus.lose_agree.value, + ApplyStatus.lose_effect.value]), + IntegralProduct.isdelete == False).first() + if current_apply: + if current_apply.IPstatus == ApplyStatus.lose_effect.value: + child = IntegralProduct.query.filter( + IntegralProduct.ParentIpid == current_apply.ParentIpid, + IntegralProduct.IPstatus == ApplyStatus.lose_agree.value, + IntegralProduct.isdelete == False).first() + if child: + child.update({"IPstatus": ApplyStatus.lose_effect.value}) + db.session.add(child) + # 获取原商品属性 + product = Products.query.filter_by(PRid=child.PRid, isdelete=False).first() + # 获取原sku属性 + ips_old = IntegralProductSku.query.filter( + IntegralProductSku.IPid == child.IPid, + IntegralProductSku.isdelete == False, + IntegralProduct.isdelete == False, + ).all() + from planet.control.COrder import COrder + co = COrder() + # 遍历原sku 将库存退出去 + for sku in ips_old: + sku_instance = ProductSku.query.filter_by(isdelete=False, PRid=product.PRid, + SKUid=sku.SKUid).first_('商品sku信息不存在') + co._update_stock(int(sku.IPSstock), product, sku_instance) + else: + current_apply.IPstatus = ApplyStatus.lose_effect.value + # 获取原商品属性 + product = Products.query.filter_by(PRid=ip.PRid, isdelete=False).first() + # 获取原sku属性 + ips_old = IntegralProductSku.query.filter( + IntegralProductSku.IPid == current_apply.IPid, + IntegralProductSku.isdelete == False, + IntegralProduct.isdelete == False, + ).all() + from planet.control.COrder import COrder + co = COrder() + # 遍历原sku 将库存退出去 + for sku in ips_old: + sku_instance = ProductSku.query.filter_by(isdelete=False, PRid=product.PRid, + SKUid=sku.SKUid).first_('商品sku信息不存在') + co._update_stock(int(sku.IPSstock), product, sku_instance) + parent_apply = IntegralProduct.query.filter( + IntegralProduct.IPid == parent_apply.ParentIpid).first() def refuse_tointegral(self, approval_model, refuse_abo): ip = IntegralProduct.query.filter_by_(IPid=approval_model.AVcontent).first() @@ -1578,6 +1628,27 @@ def refuse_tointegral(self, approval_model, refuse_abo): sku_instance = ProductSku.query.filter_by(isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') co._update_stock(int(sku.IPSstock), product, sku_instance) + parent_apply = ip + while parent_apply.ParentIpid != None: + current_apply = IntegralProduct.query.filter(IntegralProduct.IPid == parent_apply.ParentIpid, + IntegralProduct.IPstatus.in_( + [ApplyStatus.lose_agree.value, + ApplyStatus.lose_effect.value]), + IntegralProduct.isdelete == False).first() + if current_apply: + if current_apply.IPstatus == ApplyStatus.lose_effect.value: + child = IntegralProduct.query.filter( + IntegralProduct.ParentIpid == current_apply.ParentIpid, + IntegralProduct.IPstatus == ApplyStatus.lose_agree.value, + IntegralProduct.isdelete == False).first() + if child: + child.update({"IPstatus": ApplyStatus.agree.value}) + db.session.add(child) + else: + current_apply.IPstatus = ApplyStatus.agree.value + parent_apply = IntegralProduct.query.filter( + IntegralProduct.IPid == parent_apply.ParentIpid).first() + def get_avstatus(self): data = {level.name: level.zh_value for level in ApplyStatus} diff --git a/planet/control/CIntegralStore.py b/planet/control/CIntegralStore.py index 6bdd4204..e0d4985d 100644 --- a/planet/control/CIntegralStore.py +++ b/planet/control/CIntegralStore.py @@ -102,6 +102,7 @@ def update(self): IntegralProduct.IPid == ipid, IntegralProduct.IPstatus.in_([ApplyStatus.cancle.value, ApplyStatus.reject.value, + ApplyStatus.agree.value, ApplyStatus.shelves.value]) ).first_("当前状态不可进行编辑") if ip.SUid != uid: @@ -112,43 +113,108 @@ def update(self): if is_supplizer(): filter_args.append(Products.CreaterId == uid) product = Products.query.filter(*filter_args).first_("当前商品状态不允许编辑") - instance_list = list() - with db.auto_commit(): - ip_dict = { - 'IPstatus': ApplyStatus.wait_check.value, - 'IPprice': ipprice - } - ip.update(ip_dict) - instance_list.append(ip) - - # 原sku全部删除 - old_ips = IntegralProductSku.query.filter_by_(IPid=ip.IPid).all() - for old_ipsku in old_ips: - old_ipsku.isdelete = True - # super(CIntegralStore, self)._update_stock(int(old_ipsku.IPSstock), skuid=old_ipsku.SKUid) - # 接收新sku并重新扣除库存 - for sku in skus: - parameter_required(('skuid', 'skuprice', 'ipsstock'), datafrom=sku) - skuid, skuprice, ipsstock = sku.get('skuid'), sku.get('skuprice'), sku.get('ipsstock') - skuprice = self._check_price(skuprice) - ipsstock = self._check_price(ipsstock) - sku_instance = ProductSku.query.filter_by(isdelete=False, PRid=ip.PRid, - SKUid=skuid).first_('商品sku信息不存在') - - # 从商品sku中减库存 - super(CIntegralStore, self)._update_stock(-int(ipsstock), product, sku_instance) - ipsku_instance = IntegralProductSku.create({ - 'IPSid': str(uuid.uuid1()), - 'IPid': ip.IPid, - 'IPSstock': ipsstock, - 'SKUid': skuid, - 'SKUprice': skuprice + parent_apply = ip + while parent_apply.ParentIpid: + current_apply = IntegralProduct.query.filter(IntegralProduct.IPid == parent_apply.ParentIpid, + IntegralProduct.IPstatus.in_([ApplyStatus.agree.value, + ApplyStatus.lose_effect.value]), + IntegralProduct.isdelete == False).first() + if current_apply: + current_app.logger.info('current_apply{}'.format(current_apply.IPid)) + if current_apply.IPstatus == ApplyStatus.lose_effect.value: + children_apply = IntegralProduct.query.filter( + IntegralProduct.ParentIpid == current_apply.IPid, + IntegralProduct.IPstatus == ApplyStatus.agree.value, + IntegralProduct.isdelete == False).first() + if children_apply: + current_app.logger.info('child{}'.format(children_apply.IPid)) + children_apply.update({"IPstatus": ApplyStatus.lose_agree.value}) + db.session.add(children_apply) + break + else: + current_apply.update({"IPstatus": ApplyStatus.lose_agree.value}) + db.session.add(current_apply) + break + parent_apply = IntegralProduct.query.filter( + IntegralProduct.IPid == parent_apply.ParentIpid).first() + if ip.IPstatus != ApplyStatus.agree.value and ip.IPstatus != ApplyStatus.lose_agree.value: + instance_list = list() + with db.auto_commit(): + ip_dict = { + 'IPstatus': ApplyStatus.wait_check.value, + 'IPprice': ipprice + } + ip.update(ip_dict) + instance_list.append(ip) + + # 原sku全部删除 + old_ips = IntegralProductSku.query.filter_by_(IPid=ip.IPid).all() + for old_ipsku in old_ips: + old_ipsku.isdelete = True + # super(CIntegralStore, self)._update_stock(int(old_ipsku.IPSstock), skuid=old_ipsku.SKUid) + # 接收新sku并重新扣除库存 + for sku in skus: + parameter_required(('skuid', 'skuprice', 'ipsstock'), datafrom=sku) + skuid, skuprice, ipsstock = sku.get('skuid'), sku.get('skuprice'), sku.get('ipsstock') + skuprice = self._check_price(skuprice) + ipsstock = self._check_price(ipsstock) + sku_instance = ProductSku.query.filter_by(isdelete=False, PRid=ip.PRid, + SKUid=skuid).first_('商品sku信息不存在') + + # 从商品sku中减库存 + super(CIntegralStore, self)._update_stock(-int(ipsstock), product, sku_instance) + ipsku_instance = IntegralProductSku.create({ + 'IPSid': str(uuid.uuid1()), + 'IPid': ip.IPid, + 'IPSstock': ipsstock, + 'SKUid': skuid, + 'SKUprice': skuprice + }) + instance_list.append(ipsku_instance) + db.session.add_all(instance_list) + if is_admin(): + BASEADMIN().create_action(AdminActionS.update.value, 'IntegralProduct', ip.IPid) + super(CIntegralStore, self).create_approval('tointegral', uid, ip.IPid, applyfrom=ipfrom) + else: + ip.update({"IPstatus": ApplyStatus.lose_agree.value}) + db.session.add(ip) + instance_list = list() + with db.auto_commit(): + product = Products.query.filter(*filter_args).first_('只能选择自己的商品') + prid = data.get('prid') + ip_instance = IntegralProduct.create({ + 'IPid': str(uuid.uuid1()), + 'SUid': uid, + 'IPfrom': ipfrom, + 'PRid': prid, + 'IPstatus': ApplyStatus.wait_check.value, + 'IPprice': ipprice, + 'ParentIpid':ip.IPid }) - instance_list.append(ipsku_instance) - db.session.add_all(instance_list) - if is_admin(): - BASEADMIN().create_action(AdminActionS.update.value, 'IntegralProduct', ip.IPid) - super(CIntegralStore, self).create_approval('tointegral', uid, ip.IPid, applyfrom=ipfrom) + instance_list.append(ip_instance) + current_app.logger.info("正在增加新ip {}".format(ip_instance.IPid)) + for sku in skus: + parameter_required(('skuid', 'skuprice', 'ipsstock'), datafrom=sku) + skuid, skuprice, ipsstock = sku.get('skuid'), sku.get('skuprice'), sku.get('ipsstock') + skuprice = self._check_price(skuprice) + ipsstock = self._check_price(ipsstock) + sku_instance = ProductSku.query.filter_by(isdelete=False, PRid=product.PRid, + SKUid=skuid).first_('商品sku信息不存在') + # 从商品sku中减库存 + super(CIntegralStore, self)._update_stock(-int(ipsstock), product, sku_instance) + ipsku_instance = IntegralProductSku.create({ + 'IPSid': str(uuid.uuid1()), + 'IPid': ip_instance.IPid, + 'IPSstock': ipsstock, + 'SKUid': skuid, + 'SKUprice': skuprice + }) + instance_list.append(ipsku_instance) + db.session.add_all(instance_list) + if is_admin(): + BASEADMIN().create_action(AdminActionS.insert.value, 'IntegralProduct', ip_instance.IPid) + super(CIntegralStore, self).create_approval('tointegral', uid, ip_instance.IPid, applyfrom=ipfrom) + return Success('更新成功', data=dict(IPid=ip.IPid)) def get(self): @@ -167,6 +233,10 @@ def list(self): args = parameter_required() prtitle = args.get('prtitle') ipstatus = args.get('status') + filter_args = [IntegralProduct.isdelete == False, + Products.isdelete == False, + Products.PRstatus == ProductStatus.usual.value + ] try: ipstatus = getattr(ApplyStatus, ipstatus).value except Exception as e: @@ -174,17 +244,13 @@ def list(self): ipstatus = None integral_balance = 0 if common_user(): - ipstatus = ApplyStatus.agree.value user = User.query.filter_by_(USid=request.user.id).first() integral_balance = getattr(user, 'USintegral', 0) + filter_args.append(IntegralProduct.IPstatus.in_([ApplyStatus.agree.value,ApplyStatus.lose_agree.value])) elif is_tourist(): - ipstatus = ApplyStatus.agree.value - - filter_args = [IntegralProduct.isdelete == False, - IntegralProduct.IPstatus == ipstatus, - Products.isdelete == False, - Products.PRstatus == ProductStatus.usual.value - ] + filter_args.append(IntegralProduct.IPstatus.in_([ApplyStatus.agree.value,ApplyStatus.lose_agree.value])) + else: + filter_args.append(IntegralProduct.IPstatus == ipstatus) if is_supplizer(): filter_args.append(Products.CreaterId == request.user.id), if prtitle: diff --git a/planet/models/product.py b/planet/models/product.py index e4359ff6..a1c235dc 100644 --- a/planet/models/product.py +++ b/planet/models/product.py @@ -286,6 +286,7 @@ class IntegralProduct(Base): IPprice = Column(BIGINT, comment='商品星币价格') IPsaleVolume = Column(BIGINT, default=0, comment='销量') IPaverageScore = Column(Float(precision=10, scale=2), default=10.00, comment='商品评价平均分') + ParentIpid = Column(String(64), default=None) class IntegralProductSku(Base): From cddc8b2833e162db1f40187372cf4dd6849f8413 Mon Sep 17 00:00:00 2001 From: oneflybird <1361569005@qq.com> Date: Sun, 2 Jun 2019 14:41:43 +0800 Subject: [PATCH 20/20] =?UTF-8?q?=E5=B0=86=E5=86=8D=E6=AC=A1=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=E7=8A=B6=E6=80=81=E6=94=B9=E4=B8=BA=E5=B7=B2=E5=90=8C?= =?UTF-8?q?=E6=84=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planet/control/CFreshManFirstOrder.py | 29 +++++++++++++++++++++++++++ planet/control/CGuessNum.py | 28 ++++++++++++++++++++++++++ planet/control/CTrialCommodity.py | 6 +++--- 3 files changed, 60 insertions(+), 3 deletions(-) diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index 3807ddbc..36007ed8 100644 --- a/planet/control/CFreshManFirstOrder.py +++ b/planet/control/CFreshManFirstOrder.py @@ -707,6 +707,35 @@ def list_apply(self): applys = query.filter(FreshManFirstApply.FMFAstartTime >= starttime, FreshManFirstApply.FMFAendTime <= endtime).order_by( FreshManFirstApply.createtime.desc()).all_with_page() + # 修改开始活动的重新审核状态 + time_now = date.today() + fresh_man_applys = FreshManFirstApply.query.filter( + FreshManFirstApply.FMFAstatus == ApplyStatus.lose_agree.value, + FreshManFirstApply.AgreeStartime <= time_now, + FreshManFirstApply.AgreeEndtime >= time_now, + FreshManFirstApply.isdelete == False, + ).all() + if fresh_man_applys: + with db.auto_commit(): + for fresh_man_apply in fresh_man_applys: + fresh_man_apply.update({'FMFAstatus': ApplyStatus.agree.value}) + db.session.add(fresh_man_apply) + fresh_child_apply = FreshManFirstApply.query.filter( + FreshManFirstApply.ParentFMFAid == fresh_man_apply.FMFAid, + FreshManFirstApply.FMFAstatus == ApplyStatus.wait_check.value, + FreshManFirstApply.isdelete == False).first() + if fresh_child_apply: + fresh_child_apply.update({'FMFAstatus': ApplyStatus.lose_effect.value}) + db.session.add(fresh_child_apply) + # 进行库存恢复 + apply_skus = FreshManFirstSku.query.join( + FreshManFirstProduct, FreshManFirstProduct.FMFPid == FreshManFirstSku.FMFPid).filter( + FreshManFirstProduct.FMFAid == fresh_child_apply.FMFAid).all() + from planet.control.COrder import COrder + for apply_sku in apply_skus: + sku = ProductSku.query.filter(ProductSku.SKUid == apply_sku.SKUid).first() + product = Products.query.filter(Products.PRid == sku.PRid).first() + COrder()._update_stock(apply_sku.FMFPstock, product, sku) for apply in applys: # 状态中文 apply.fill('FMFAstatus_zh', ApplyStatus(apply.FMFAstatus).zh_value) diff --git a/planet/control/CGuessNum.py b/planet/control/CGuessNum.py index 3d19cfd6..526b24be 100644 --- a/planet/control/CGuessNum.py +++ b/planet/control/CGuessNum.py @@ -403,6 +403,34 @@ def list(self): GuessNumAwardApply.SUid == suid ).order_by(GuessNumAwardApply.GNAAstarttime.desc()).all() for gnaa in gnaa_list: + if gnaa.GNAAstatus == ApplyStatus.lose_agree.value: + gnaa.update({'GNAAstatus' : ApplyStatus.agree.value}) + db.session.add(gnaa) + gna_child_apply = GuessNumAwardApply.query.filter( + GuessNumAwardApply.ParentGNAAid == gnaa.GNAAid, + GuessNumAwardApply.GNAAstatus == ApplyStatus.wait_check.value, + GuessNumAwardApply.isdelete == False).first() + if gna_child_apply: + gna_child_apply.update({'GNAAstatus' : ApplyStatus.lose_effect.value}) + db.session.add(gna_child_apply) + # 获取原商品属性 + gnap_old = GuessNumAwardProduct.query.filter(GuessNumAwardProduct.GNAAid == gna_child_apply.GNAAid, + GuessNumAwardProduct.isdelete == False).first() + product = Products.query.filter_by(PRid=gnap_old.PRid, isdelete=False).first_('商品信息出错') + # 获取原sku属性 + gnas_old = GuessNumAwardSku.query.filter( + gna_child_apply.GNAAid == GuessNumAwardProduct.GNAAid, + GuessNumAwardSku.GNAPid == GuessNumAwardProduct.GNAPid, + GuessNumAwardSku.isdelete == False, + GuessNumAwardProduct.isdelete == False, + ).all() + from planet.control.COrder import COrder + + # 遍历原sku 将库存退出去 + for sku in gnas_old: + sku_instance = ProductSku.query.filter_by( + isdelete=False, PRid=product.PRid, SKUid=sku.SKUid).first_('商品sku信息不存在') + COrder()._update_stock(int(sku.SKUstock), product, sku_instance) self._fill_apply(gnaa) if gnaa.GNAAfrom == ApplyFrom.supplizer.value: sup = Supplizer.query.filter_by(SUid=gnaa.SUid).first() diff --git a/planet/control/CTrialCommodity.py b/planet/control/CTrialCommodity.py index a708a6dd..24b0f536 100644 --- a/planet/control/CTrialCommodity.py +++ b/planet/control/CTrialCommodity.py @@ -80,9 +80,9 @@ def get_commodity_list(self): TrialCommodity.TCstatus == TrialCommodityStatus.auditing.value ).all() if old_commoditys: - for commodity in old_commoditys: - commodity.update({'TCstatus': TrialCommodityStatus.lose_effect.value}) - instance_list.append(commodity) + for old_commodity in old_commoditys: + old_commodity.update({'TCstatus': TrialCommodityStatus.lose_effect.value}) + instance_list.append(old_commodity) if tcstatus is not None: commodity_query = commodity_query.filter(TrialCommodity.TCstatus == tcstatus)