Nav apraksta

staff_views.py 17KB

    # -*- coding: utf-8 -*- import json from django.conf import settings from django.db import transaction from django_logit import logit from django_response import response from account.models import UserInfo from coupon.models import CouponInfo, UserCouponInfo from integral.models import SaleclerkIntegralIncomeExpensesInfo, SaleclerkSubmitLogInfo from mch.models import AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo, SaleclerkInfo from member.models import RightInfo from staff.models import StaffDeleteClerkSaleSubmitLogInfo, StaffDeleteConsumerSubmitLogInfo from statistic.models import (ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo, DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo, SaleclerkSaleStatisticInfo, SaleStatisticInfo) from utils.error.errno_utils import (AdministratorStatusCode, ProductBrandStatusCode, ProductDistributorStatusCode, ProductModelStatusCode, SaleclerkStatusCode, UserStatusCode) def exec_del_clerk_sale_submit(pk, admin_id): try: ssli = SaleclerkSubmitLogInfo.objects.select_for_update().get(pk=pk) except SaleclerkSubmitLogInfo.DoesNotExist: return response() if not ssli.status: return response() ssli.status = False ssli.is_staff_delete = True ssli.save() try: brand = BrandInfo.objects.get(pk=ssli.brand_pk) except BrandInfo.DoesNotExist: return response(ProductBrandStatusCode) try: model = ModelInfo.objects.get(pk=ssli.model_pk) except ModelInfo.DoesNotExist: return response(ProductModelStatusCode) try: clerk = SaleclerkInfo.objects.select_for_update().get(clerk_id=ssli.clerk_id, status=True) except SaleclerkInfo.DoesNotExist: return response(SaleclerkStatusCode.CLERK_NOT_FOUND) try: distributor = DistributorInfo.objects.get(distributor_id=clerk.distributor_id) except DistributorInfo.DoesNotExist: return response(ProductDistributorStatusCode.DISTRIBUTOR_NOT_FOUND) ymd = str(ssli.ymd) if not clerk.test_user and not ssli.dupload: # 删除积分 try: income = SaleclerkIntegralIncomeExpensesInfo.objects.select_for_update().get(model_id=model.model_id, code=ssli.code, clerk_id=ssli.clerk_id) except SaleclerkIntegralIncomeExpensesInfo.DoesNotExist: return response() income.status = False income.save() integral = model.integral clerk.num -= 1 clerk.integral -= integral clerk.total_integral -= integral clerk.save() # 记录删除日志 StaffDeleteClerkSaleSubmitLogInfo.objects.create( admin_id=admin_id, log_pk=pk, model_name=model.model_name, code=ssli.code ) # 日销量统计 ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, ymd=ymd, ) ssi.num -= 1 ssi.save() # 月销量统计 ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, ymd=ymd[:6], ) ssi.num -= 1 ssi.save() # 年销量统计 ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, ymd=ymd[:4], ) ssi.num -= 1 ssi.save() # 型号销量统计 mssi, _ = ModelSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, model_name=model.model_uni_name, ymd=ymd, ) try: mssi.saleclerks.remove(clerk.clerk_id) except ValueError: pass mssi.num = len(mssi.saleclerks) mssi.save() mssi, _ = ModelSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, model_name=model.model_uni_name, ymd=ymd[:6], ) try: mssi.saleclerks.remove(clerk.clerk_id) except ValueError: pass mssi.num = len(mssi.saleclerks) mssi.save() mssi, _ = ModelSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, model_name=model.model_uni_name, ymd=ymd[:4], ) try: mssi.saleclerks.remove(clerk.clerk_id) except ValueError: pass mssi.num = len(mssi.saleclerks) mssi.save() # 经销商销量统计 dssi, _ = DistributorSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, distributor_id=distributor.distributor_id, ymd=ymd, ) dssi.distributor_name = distributor.distributor_name dssi.num -= 1 dssi.save() dssi2, _ = DistributorSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, distributor_id=distributor.distributor_id, ymd=0, ) dssi2.distributor_name = distributor.distributor_name dssi2.num -= 1 dssi2.save() # 日省份销量统计 pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, province_code=distributor.distributor_province_code, ymd=ymd, ) pssi.province_name = distributor.distributor_province_name pssi.num -= 1 pssi.save() # 月省份销量统计 pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, province_code=distributor.distributor_province_code, ymd=ymd[:6], ) pssi.province_name = distributor.distributor_province_name pssi.num -= 1 pssi.save() # 年省份销量统计 pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, province_code=distributor.distributor_province_code, ymd=ymd[:4], ) pssi.province_name = distributor.distributor_province_name pssi.num -= 1 pssi.save() # 日销售员销量统计 sssi, _ = SaleclerkSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, clerk_id=clerk.clerk_id, ymd=ymd, ) sssi.distributor_id = distributor.distributor_id sssi.distributor_name = distributor.distributor_name sssi.distributor_short_name = distributor.distributor_short_name sssi.clerk_name = clerk.clerk_name sssi.num -= 1 sssi.save() # 月销售员销量统计 sssi, _ = SaleclerkSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, clerk_id=clerk.clerk_id, ymd=ymd[:6], ) sssi.distributor_id = distributor.distributor_id sssi.distributor_name = distributor.distributor_name sssi.distributor_short_name = distributor.distributor_short_name sssi.clerk_name = clerk.clerk_name sssi.num -= 1 sssi.save() # 年销售员销量统计 sssi, _ = SaleclerkSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, clerk_id=clerk.clerk_id, ymd=ymd[:4], ) sssi.distributor_id = distributor.distributor_id sssi.distributor_name = distributor.distributor_name sssi.distributor_short_name = distributor.distributor_short_name sssi.clerk_name = clerk.clerk_name sssi.num -= 1 sssi.save() @logit @transaction.atomic def del_clerk_sale_submit_api(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) admin_id = request.POST.get('admin_id', '') pk = int(request.POST.get('pk', '')) try: administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) exec_del_clerk_sale_submit(pk, admin_id) return response(200, 'Del Success', u'删除成功') @logit @transaction.atomic def batch_del_clerk_sale_submit_api(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) admin_id = request.POST.get('admin_id', '') pks = json.loads(request.POST.get('pks', [])) try: administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) for pk in pks: exec_del_clerk_sale_submit(pk, admin_id) return response(200, 'Del Success', u'删除成功') def exec_del_consumer_submit(pk, admin_id): try: ssli = ConsumeInfoSubmitLogInfo.objects.select_for_update().get(pk=pk) except ConsumeInfoSubmitLogInfo.DoesNotExist: return response() if not ssli.status: return response() sn = ssli.serialNo ssli.status = False ssli.save() ConsumeInfoSubmitLogInfo.objects.filter(serialNo=sn, model_id=ssli.model_id, dupload=True, status=True).update(status=False) if ssli.dupload: return response() try: brand = BrandInfo.objects.get(brand_id=ssli.brand_id) except BrandInfo.DoesNotExist: return response(ProductBrandStatusCode.BRAND_NOT_FOUND) try: model = ModelInfo.objects.get(model_id=ssli.model_id) except ModelInfo.DoesNotExist: return response(ProductModelStatusCode.MODEL_NOT_FOUND) try: user = UserInfo.objects.select_for_update().get(user_id=ssli.user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) # 记录删除日志 StaffDeleteConsumerSubmitLogInfo.objects.create( admin_id=admin_id, log_pk=pk, model_name=model.model_name, code=ssli.serialNo ) # 消除用户劵 if user.shots_num <= 5: rights = RightInfo.objects.filter(is_send_coupon=True, status=True) for right in rights: if user.level == UserInfo.MEMBER_LRC: coupon_id = right.coupon_level1_id coupon_num = right.coupon_level1_num elif user.level == UserInfo.MEMBER_SILVER: coupon_id = right.coupon_level2_id coupon_num = right.coupon_level2_num elif user.level == UserInfo.MEMBER_GOLD: coupon_id = right.coupon_level3_id coupon_num = right.coupon_level3_num elif user.level == UserInfo.MEMBER_WHITE_GOLD: coupon_id = right.coupon_level4_id coupon_num = right.coupon_level4_num elif user.level == UserInfo.MEMBER_BLACK_GOLD: coupon_id = right.coupon_level5_id coupon_num = right.coupon_level5_num else: continue try: coupon = CouponInfo.objects.get(coupon_id=coupon_id) except CouponInfo.DoesNotExist: continue user_coupons = UserCouponInfo.objects.filter(user_id=user.user_id, coupon_id=coupon_id, coupon_from='MEMBER_BENEFITS', status=True, has_used=False).values_list('pk', flat=True) # 防止用户部分劵已使用,不够消除 UserCouponInfo.objects.filter(pk__in=list(user_coupons)[0:min(coupon_num, len(user_coupons))]).update(status=False) # 消除活动劵 if ssli.submit_during_activity: UserCouponInfo.objects.filter(user_id=user.user_id, coupon_from='PROMOTION', submit_pk=ssli.pk).update(status=False) # 消除积分及会员等级 integral = model.shot_member_integral if user.shots_num <= 5: user.level -= 1 user.shots_num -= 1 user.integral -= integral user.integral = max(user.integral, 0) user.save() # 消除统计记录 ymd = str(ssli.ymd) if not user.test_user: # 日销量统计 ssi, _ = ConsumeSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, ymd=ymd, ) ssi.num -= 1 ssi.save() # 月销量统计 ssi, _ = ConsumeSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, ymd=ymd[:6], ) ssi.num -= 1 ssi.save() # 年销量统计 ssi, _ = ConsumeSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, ymd=ymd[:4], ) ssi.num -= 1 ssi.save() # 日用户统计 ussi, _ = ConsumeUserStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, ymd=ymd, ) try: ussi.users.remove(user.user_id) except ValueError: pass ussi.num = len(ussi.users) ussi.save() # 月用户统计 ussi, _ = ConsumeUserStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, ymd=ymd[:6], ) try: ussi.users.remove(user.user_id) except ValueError: pass ussi.num = len(ussi.users) ussi.save() # 年用户统计 ussi, _ = ConsumeUserStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, ymd=ymd[:4], ) try: ussi.users.remove(user.user_id) except ValueError: pass ussi.num = len(ussi.users) ussi.save() # 型号日销量统计 mssi, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, model_name=model.model_uni_name, ymd=ymd, ) try: mssi.users.remove(user.user_id) except ValueError: pass mssi.num = len(mssi.users) mssi.save() # 型号月销量统计 mssi, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, model_name=model.model_uni_name, ymd=ymd[:6], ) try: mssi.users.remove(user.user_id) except ValueError: pass mssi.num = len(mssi.users) mssi.save() # 型号年销量统计 mssi, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, model_name=model.model_uni_name, ymd=ymd[:4], ) try: mssi.users.remove(user.user_id) except ValueError: pass mssi.num = len(mssi.users) mssi.save() # 省份日销量统计 pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, province_name=ssli.province, ymd=ymd, ) pssi.province_name = ssli.province pssi.num -= 1 pssi.save() # 省份月销量统计 pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, province_name=ssli.province, ymd=ymd[:6], ) pssi.province_name = ssli.province pssi.num -= 1 pssi.save() # 省份年销量统计 pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create( brand_id=brand.brand_id, province_name=ssli.province, ymd=ymd[:4], ) pssi.province_name = ssli.province pssi.num -= 1 pssi.save() @logit @transaction.atomic def del_consumer_submit_api(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) admin_id = request.POST.get('admin_id', '') pk = int(request.POST.get('pk', '')) try: administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) exec_del_consumer_submit(pk, admin_id) return response(200, 'Del Success', u'删除成功') @logit @transaction.atomic def batch_del_consumer_submit_api(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) admin_id = request.POST.get('admin_id', '') pks = json.loads(request.POST.get('pks', [])) try: administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) for pk in pks: exec_del_consumer_submit(pk, admin_id) return response(200, 'Del Success', u'删除成功')