diff --git a/planet/api/v2/AFreshManFirstOrder.py b/planet/api/v2/AFreshManFirstOrder.py index 7b187372..624bab50 100644 --- a/planet/api/v2/AFreshManFirstOrder.py +++ b/planet/api/v2/AFreshManFirstOrder.py @@ -24,4 +24,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..6a9e5004 100644 --- a/planet/api/v2/ATrialCommodity.py +++ b/planet/api/v2/ATrialCommodity.py @@ -24,4 +24,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 be6f2f24..1f09322b 100644 --- a/planet/config/enums.py +++ b/planet/config/enums.py @@ -104,11 +104,13 @@ class ApplyFrom(Enum): class ApplyStatus(Enum): + lose_effect = -40, '已失效' shelves = -30, '已下架' cancle = -20, '已撤销' reject = -10, '已拒绝' wait_check = 0, '审核中' agree = 10, '已同意' + lose_agree = 20, '重新审核中' class OrderRefundOrstatus(Enum): @@ -279,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/CActivationCode.py b/planet/control/CActivationCode.py index 175d7f7f..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', str(uuid.uuid1())) + 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 a3a12434..3033478b 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 @@ -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)) @@ -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 @@ -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', 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', str(uuid.uuid1())) + 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', str(uuid.uuid1())) + 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') @@ -1123,6 +1123,59 @@ 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改为失效 + while parent_apply.ParentGNAAid != None: + current_apply = GuessNumAwardApply.query.filter(GuessNumAwardApply.GNAAid == parent_apply.ParentGNAAid, + GuessNumAwardApply.GNAAstatus.in_([ApplyStatus.lose_agree.value,ApplyStatus.lose_effect.value]), + GuessNumAwardApply.isdelete == False).first() + if current_apply: + 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 + # 获取原商品属性 + 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, @@ -1160,9 +1213,54 @@ 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 .in_( + [ApplyStatus.lose_agree.value, + ApplyStatus.lose_effect.value]), + GuessNumAwardApply.isdelete == False).first() + if current_apply: + 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_('魔盒商品申请数据异常') + parent_apply = mba + # 将父id改为失效 + while parent_apply.ParentMBAid != None: + current_apply = MagicBoxApply.query.filter(MagicBoxApply.MBAid == parent_apply.ParentMBAid, + 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, + MagicBoxApply.MBAid != current_apply.MBAid, + MagicBoxApply.MBAstatus.notin_( + [ApplyStatus.cancle.value, ApplyStatus.reject.value, + 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 == 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 + else: + parent_apply = MagicBoxApply.query.filter( + MagicBoxApply.MBAid == parent_apply.ParentMBAid).first() + mba.MBAstatus = ApplyStatus.agree.value mba_other = MagicBoxApply.query.filter( MagicBoxApply.isdelete == False, @@ -1185,7 +1283,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: @@ -1194,9 +1292,56 @@ 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: + current_apply = MagicBoxApply.query.filter(MagicBoxApply.MBAid == current_apply.ParentMBAid, + MagicBoxApply.MBAstatus == ApplyStatus.lose_agree.value, + MagicBoxApply.isdelete == False).first() + if current_apply: + current_apply.MBAstatus = ApplyStatus.agree.value + break + 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_('新人商品申请数据异常') + parent_apply = ffa + # 将父id改为失效 + while parent_apply.ParentFMFAid != None: + current_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, + FreshManFirstApply.FMFAstatus.in_([ApplyStatus.lose_agree.value,ApplyStatus.lose_effect.value]), + FreshManFirstApply.isdelete == False).first() + if current_apply: + # 进行库存恢复 + 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() + 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( + 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): @@ -1214,12 +1359,52 @@ 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: + current_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == parent_apply.ParentFMFAid, + FreshManFirstApply.FMFAstatus.in_( + [ApplyStatus.lose_agree.value, + ApplyStatus.lose_effect.value]), + FreshManFirstApply.isdelete == False).first() + if current_apply: + 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() + if child: + 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_('试用商品申请数据异常') tc.TCstatus = TrialCommodityStatus.upper.value tc.AgreeStartTime = tc.ApplyStartTime 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).first() def refuse_trialcommodity(self, approval_model, refuse_abo): tc = TrialCommodity.query.filter_by_(TCid=approval_model.AVcontent).first() @@ -1227,6 +1412,26 @@ 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: + 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).first() def agree_activationcode(self, approval_model): aca = ActivationCodeApply.query.filter_by_(ACAid=approval_model.AVcontent).first_('激活码申请数据异常') @@ -1253,6 +1458,55 @@ 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: + 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: + child = TimeLimitedProduct.query.filter( + TimeLimitedProduct.ParentTLPid == current_apply.TLPid, + TimeLimitedProduct.TLAstatus == ApplyStatus.lose_agree.value, + TimeLimitedProduct.isdelete == False).first() + 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 + # 获取原商品属性 + 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) + parent_apply = TimeLimitedProduct.query.filter( + TimeLimitedProduct.TLPid == parent_apply.ParentTLPid).first() tla.TLAstatus = ApplyStatus.agree.value def refuse_timelimited(self, approval_model, refuse_abo): @@ -1276,10 +1530,82 @@ 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: + 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: + 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_('星币商品申请数据异常') - 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() @@ -1302,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/CCategory.py b/planet/control/CCategory.py index 67a52d82..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', str(uuid.uuid4())) + BASEADMIN().create_action(AdminActionS.insert.value, 'ProductCategory', category_instance.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 1793cd13..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: - current_app.logger.info('get colletcion type {} error '.format(c)) c = 0 ctid = self._check_type_id(c, ctid) diff --git a/planet/control/CFreshManFirstOrder.py b/planet/control/CFreshManFirstOrder.py index 51329131..36007ed8 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 @@ -27,10 +28,37 @@ 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() + 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) fresh_man_products = FreshManFirstProduct.query.join( FreshManFirstApply, FreshManFirstApply.FMFAid == FreshManFirstProduct.FMFAid ).filter_( - FreshManFirstApply.FMFAstatus == ApplyStatus.agree.value, + FreshManFirstApply.FMFAstatus==ApplyStatus.agree.value, FreshManFirstApply.AgreeStartime <= time_now, FreshManFirstApply.AgreeEndtime >= time_now, FreshManFirstApply.isdelete == False, @@ -59,7 +87,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 @@ -133,25 +161,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 != '开店大礼包', + OrderMain.OMfrom == OrderFrom.fresh_man.value, OrderPart.OMid == OrderMain.OMid, OrderMain.OMstatus > OrderMainStatus.wait_pay.value ).first() - # cuser = CUser() - # cuser._check_gift_order() + cuser = CUser() + cuser._check_gift_order() if exists_order: - raise StatusError('您不是新人') + raise StatusError('您不是第一次参加此活动') try: opaytype = int(data.get('opaytype')) except ValueError: @@ -219,7 +242,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 +262,11 @@ 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, + OrderMain.OMstatus > OrderMainStatus.wait_pay.value, ).first() current_app.logger.info('get share user order = {}'.format(from_user_order)) @@ -345,8 +368,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({ @@ -360,7 +383,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, @@ -415,42 +438,36 @@ def apply_award(self): fresh_first_apply.FMFAid, apply_from) return Success('申请添加成功', data=fresh_first_apply.FMFAid) - def update_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_('商品所在信息不全') + def reapply_award(self,fresh_first_apply): + """重新申请添加奖品""" + data = parameter_required(('prid', 'fmfaendtime', 'fmfastarttime', 'prprice', 'skus', 'fmfaid')) with db.auto_commit(): - fresh_first_apply = FreshManFirstApply.query.filter(FreshManFirstApply.FMFAid == fmfaid, - FreshManFirstApply.isdelete == False).first_('申请单不存在') - fresh_first_apply.update({ + 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()), 'SUid': request.user.id, + 'FMFAstartTime': data.get('fmfastarttime'), + 'FMFAendTime': data.get('fmfaendtime'), 'FMFAfrom': apply_from, - 'FMFAstatus': ApplyStatus.wait_check.value + 'AgreeStartime': data.get('fmfastarttime'), + 'AgreeEndtime': data.get('fmfaendtime'), + 'ParentFMFAid': fmfaid }) - db.session.add(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_( + [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, - 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, + fresh_first_product = FreshManFirstProduct.create({ + 'FMFPid': str(uuid.uuid1()), + 'FMFAid': apply.FMFAid, 'PRid': prid, 'PRmainpic': product.PRmainpic, 'PRtitle': product.PRtitle, @@ -461,28 +478,20 @@ def update_award(self): 'PRprice': data.get('prprice') }) 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') - 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, @@ -490,27 +499,171 @@ def update_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_() + if is_admin(): + BASEADMIN().create_action(AdminActionS.update.value, 'FreshManFirstApply', fmfaid) BASEAPPROVAL().create_approval('tofreshmanfirstproduct', request.user.id, - fresh_first_apply.FMFAid, apply_from) - return Success('申请单修改成功', data=fresh_first_apply.FMFAid) + apply.FMFAid, apply_from) + return apply + + def update_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') + # 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]) + ).first_('当前商品状态不允许进行申请') + product_brand = ProductBrand.query.filter(ProductBrand.PBid == product.PBid).first_('商品所在信息不全') + 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_('已下架或审核中的申请不可以进行修改') + # 是否能再次申请 + 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('已开始的活动不能再次发起申请') + 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.in_([ApplyStatus.agree.value,ApplyStatus.lose_effect.value]), + FreshManFirstApply.isdelete == False).first() + if current_apply: + 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(): + fresh_first_apply.update({ + 'SUid': request.user.id, + 'FMFAfrom': apply_from, + 'FMFAstatus': ApplyStatus.wait_check.value, + 'FMFAstartTime':data.get('fmfastarttime'), + 'FMFAendTime':data.get('fmfaendtime'), + }) + 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 + ).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) + else: + apply = self.reapply_award(fresh_first_apply) + return Success('申请单修改成功', data=apply.FMFAid) 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() @@ -554,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 fd3b36d7..526b24be 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 @@ -32,7 +33,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 +112,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 +200,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详情 @@ -310,12 +311,41 @@ 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() - 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) current_app.logger.info('获取到申请 {}'.format(gnaa.GNAAid)) self._fill_gnaa(gnaa, gn, now) @@ -337,7 +367,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, @@ -374,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() @@ -404,6 +461,97 @@ def list(self): request.mount = total_count return Success(data=ad_return_list) + def reapply_award(self,apply_info): + """修改猜数字奖品申请, 一次只能处理一天的一个商品""" + with db.auto_commit(): + data = parameter_required(('prid', 'prprice', 'skus', 'gnaastarttime', 'gnaaid')) + 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')[0] or apply_info.GNAAstarttime + gnaafrom = ApplyFrom.supplizer.value if is_supplizer() else ApplyFrom.platform.value + # 申请的sku list + skus = data.get('skus') + # 系统实际生成的申请id列表, 按日期不同生成不同的申请单 + exist_apply_list = list() + apply_info.update({'GNAAstatus':ApplyStatus.lose_agree.value}) + db.session.add(apply_info) + 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(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): """申请添加奖品""" if not (is_supplizer() or is_admin()): @@ -425,7 +573,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() @@ -442,6 +589,8 @@ def apply_award(self): 'GNAAstatus': ApplyStatus.wait_check.value, }) db.session.add(gnaa) + if is_admin(): + BASEADMIN().create_action(AdminActionS.insert.value, 'GuessNumAwardApply', gnaa.GNAAid) gnaaid_list.append(gnaa.GNAAid) # 活动商品 gnap = GuessNumAwardProduct.create({ @@ -471,7 +620,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, @@ -496,96 +644,145 @@ 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')) - 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('仅可修改自己提交的申请') + # 获取申请单 + 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('仅可修改自己提交的申请') + # 进行时间校验 + # # 更改后的时间限制 + # 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('不能在该活动时间发起申请') + 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.in_([ApplyStatus.agree.value,ApplyStatus.lose_effect.value]), + GuessNumAwardApply.isdelete == False).first() + if current_apply: + 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 # 解除和原商品属性的绑定 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信息不存在') + with db.auto_commit(): + # 重新添加商品属性 + # 如果没有修改时间,则用之前时间 + 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()), + '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') + }) + current_app.logger.info('{}'.format(gnap)) + 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() - 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) + super(CGuessNum, self).create_approval('toguessnum', request.user.id, apply_info.GNAAid, gnaafrom) + return Success('修改成功', {'gnaaid': apply_info.GNAAid, 'skus': exist_apply_list}) + else: + gna = self.reapply_award(apply_info) + return Success('申请添加成功', gna) def award_detail(self): """查看申请详情""" @@ -614,7 +811,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( @@ -635,7 +832,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): @@ -657,11 +854,12 @@ 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(): - BASEADMIN.create_action(AdminActionS.delete.value, 'GuessNumAwardApply', gnaaid) + BASEADMIN().create_action(AdminActionS.delete.value, 'GuessNumAwardApply', gnaaid) return Success('删除成功', {'gnaaid': gnaaid}) def shelves(self): @@ -687,7 +885,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 @@ -703,7 +901,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 '{}') diff --git a/planet/control/CIntegralStore.py b/planet/control/CIntegralStore.py index bad5ff82..e0d4985d 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)) @@ -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', str(uuid.uuid1())) - 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/control/CMagicBox.py b/planet/control/CMagicBox.py index 69dc323f..88388654 100644 --- a/planet/control/CMagicBox.py +++ b/planet/control/CMagicBox.py @@ -438,81 +438,161 @@ 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] return Success('申请添加成功', {'mbaid': mbaid_list}) - def update_apply(self): - """修改魔盒申请""" - if not (is_supplizer() or is_admin()): - raise AuthorityError() + 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') + 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('档次变化金额只能填写数字') - 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与商品信息不对应' + ).first_('仅可将已上架的商品用于申请') + 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(): + # 创建新记录 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'), + '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, - # 'SKUstock': int(skustock), + "OSid": str(uuid.uuid1()), 'MBAstatus': ApplyStatus.wait_check.value, 'MBAfrom': mbafrom, + 'ParentMBAid': mbaid } - 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) + award_instance = MagicBoxApply.create(award_dict) + db.session.add(award_instance) if is_admin(): - BASEADMIN.create_action(AdminAction.update.value, 'MagicBoxApply', mbaid) + BASEADMIN().create_action(AdminAction.insert.value, 'MagicBoxApply', award_instance.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}) + super(CMagicBox, self).create_approval('tomagicbox', request.user.id, award_instance.MBAid, mbafrom) + + return award_instance.MBAid + + def update_apply(self): + """修改魔盒申请""" + if not (is_supplizer() or is_admin()): + raise AuthorityError() + data = parameter_required(('skuid', 'prid', 'mbastarttime', 'skuprice', + 'skuminprice', 'gearsone', 'gearstwo', 'gearsthree')) + 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('档次变化金额只能填写数字') + 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('仅可修改自己提交的申请') + # 已通过的父活动不能是活动开始状态 + 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() + 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}) + else: + mbaid = self.reapply_award(apply_info) + return Success('修改成功', {'mbaid': mbaid}) def award_detail(self): """查看申请详情""" @@ -572,7 +652,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( @@ -609,7 +689,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): @@ -635,7 +715,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 11d3250a..3b8b24c6 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 @@ -14,7 +15,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 @@ -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) @@ -116,7 +117,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('本次是供应商进行查询') @@ -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): @@ -236,7 +243,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: @@ -314,62 +321,36 @@ 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) return Success('申请成功', {'tlpid': tlp.TLPid}) - def update_award(self): - """修改""" + def reapply_award(self,apply_info,tlp_from,suid,product): + """重新申请""" 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_('商品不存在') - 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() + apply_info.update({"TLAstatus": ApplyStatus.lose_agree.value}) + 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_('活动已停止报名') - apply_info.update({ + new_tlp = TimeLimitedProduct.create({ + 'TLPid': str(uuid.uuid1()), 'TLAid': tla.TLAid, 'TLAfrom': tlp_from, + 'TLAstatus': ApplyStatus.wait_check.value, 'SUid': suid, 'PRid': product.PRid, 'PRprice': data.get('prprice'), - 'TLAstatus': ApplyStatus.wait_check.value + 'ParentTLPid': apply_info.TLPid }) - instance_list = [apply_info] - skuids = list() - new_skuid = list() - # todo 撤销或者拒绝时 退还库存 + db.session.add(new_tlp) for sku in skus: skuid = sku.get('skuid') skuprice = sku.get('skuprice') @@ -377,53 +358,153 @@ def update_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 = TimeLimitedSku.create({ + 'TLSid': str(uuid.uuid1()), + 'TLPid': new_tlp.TLPid, + 'TLSstock': skustock, + 'SKUid': skuid, + 'SKUprice': skuprice + }) - tls.update({ - 'TLPid': apply_info.TLPid, - 'TLSstock': skustock, - 'SKUid': skuid, - 'SKUprice': skuprice - }) - skuids.append(skuid) + db.session.add(tls) + # prstock += skustock + if is_admin(): + BASEADMIN().create_action(AdminActionS.insert.value, 'TimeLimitedProduct', new_tlp.TLPid) - 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 + # todo 添加到审批流 + super(CTimeLimited, self).create_approval('totimelimited', request.user.id, new_tlp.TLPid, applyfrom=tlp_from) - current_app.logger.info('本次修改 sku {} 个 新增 {} 删除 {} '.format( - len(skuids), len(new_skuid), len(delete_sku))) - # prstock += skustock + return new_tlp.TLPid - db.session.add_all(instance_list) - if is_admin(): - BASEADMIN().create_action(AdminActionS.update.value, 'TimeLimitedProduct', data.get('tlpid')) + def update_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 + 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_('活动已停止报名') + if tla.TLAstatus == TimeLimitedStatus.starting.value: + raise StatusError('此申请不可以进行修改') + product = Products.query.filter(*filter_args).first_('商品未上架') + # 修改父商品状态 + parent_apply = apply_info + 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_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).first() + 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) + 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: + with db.auto_commit(): + # 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, + 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 - super(CTimeLimited, self).create_approval('totimelimited', request.user.id, apply_info.TLPid, - applyfrom=tlp_from) - return Success('修改成功') + 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('修改成功') + else: + tlpid = self.reapply_award(apply_info,tlp_from,suid,product) + return Success('修改成功',{'tlpid': tlpid}) @admin_required def update_activity(self): @@ -665,6 +746,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 266dd6c6..24b0f536 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.value + ).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.value + ).all() + if old_commoditys: + 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) 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,113 @@ def add_commodity(self): super().create_approval('totrialcommodity', request.user.id, tcid, tcfrom) return Success("添加成功", {'tcid': tcid}) + def readd_commodity(self,commodity): + """添加试用商品""" + 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 + tskuvalue = data.get('tskuvalue') + tcid = str(uuid.uuid1()) + pbid = data.get('pbid') + images = data.get('images') + skus = data.get('skus') + ProductBrand.query.filter_by_(PBid=pbid).first_('pbid 参数错误, 未找到相应品牌') + with db.auto_commit(): + session_list = [] + 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': 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 tcid + def update_commodity(self): """修改试用商品""" if is_supplizer(): @@ -307,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) + # 是否能再次申请 + 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 + 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) - }) - session_list.append(new_sku_value_instance) - else: - TrialCommoditySkuValue.query.filter_by_(TCid=tcid).delete_() # 如果不传就删除原来的 + 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}) + 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}) + else: + tcid = self.readd_commodity(commodity) + return Success('修改成功', {'tcid': tcid}) def cancel_commodity_apply(self): """撤销自己的申请""" @@ -494,8 +678,9 @@ 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 commodity.TCstatus not in [TrialCommodityStatus.cancel.value, TrialCommodityStatus.reject.value,TrialCommodityStatus.upper.value]: + raise StatusError('该申请状态不可以重新提交') if sup: if commodity.CreaterId != usid: raise AuthorityError('仅可重新提交自己上传的商品') @@ -553,7 +738,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 # 地址拼接 @@ -570,17 +756,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 @@ -650,7 +839,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/control/CUser.py b/planet/control/CUser.py index 4599ab00..b1134ee7 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() # 创建审批流 diff --git a/planet/extensions/loggers.py b/planet/extensions/loggers.py index ed2f2728..c365a32b 100644 --- a/planet/extensions/loggers.py +++ b/planet/extensions/loggers.py @@ -64,6 +64,7 @@ def error404(e): def framework_error(e): if isinstance(e, Success): return e + # gennerc_log(e) current_app.logger.error(e) if isinstance(e, BaseError): return e diff --git a/planet/extensions/tasks.py b/planet/extensions/tasks.py index 82c990d7..13d2ec1e 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,37 @@ 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.update({'TLAstatus': TimeLimitedStatus.lose_effect.value}) + db.session.add(tlp) + # 获取原商品属性 + 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/planet/models/activity.py b/planet/models/activity.py index 18076135..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): @@ -119,6 +120,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): @@ -174,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): @@ -232,7 +235,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): """新人首单申请商品""" @@ -318,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): 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): 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` 可监听 ## 日志