1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699 |
- from __future__ import division
- import json
- from collections import defaultdict
- from datetime import datetime
- from django.conf import settings
- from django.contrib.auth.hashers import make_password
- from django.db import transaction
- from django.db.models import Count, Q, Sum
- from django_logit import logit
- from django_query import get_query_value
- from django_response import response
- from paginator import pagination
- from pysnippets.strsnippets import strip
- from TimeConvert import TimeConvert as tc
- from account.models import UserInfo
- from api.encrypt_views import get_ciphertext
- from coupon.models import CouponInfo, UserCouponInfo
- from integral.models import SaleclerkSubmitLogInfo
- from kodo.decorators import check_admin
- from logs.models import AdministratorLoginLogInfo, ComplementCodeLogInfo, MchInfoEncryptLogInfo
- from mch.models import AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo
- from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityContributionInfo,
- MemberActivityContributionWelfareInfo, MemberActivityContributionWelfareUnlockingInfo,
- MemberActivityGroupShareInfo, MemberActivityInfo, MemberActivitySignupInfo)
- from pre.custom_message import sendtemplatemessage, sendwxasubscribemessage
- from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo
- from utils.error.errno_utils import (AdministratorStatusCode, ComplementCodeStatusCode, CouponStatusCode,
- MemberActivityContributionStatusCode, MemberActivityContributionWelfareStatusCode,
- MemberActivityContributionWelfareUnblockingStatusCode, MemberActivityStatusCode,
- MemberGoodStatusCode, ProductCouponStatusCode, ProductMachineStatusCode,
- UserStatusCode)
- WECHAT = settings.WECHAT
- @logit
- @check_admin
- def querysn(request, administrator):
- model_id = request.POST.get('model_id', '')
- sn = request.POST.get('sn', '')
- if administrator.admin_type != AdministratorInfo.MAINTENANCE:
- return response(AdministratorStatusCode.MAINTENANCE_NOT_FOUND)
- log = ConsumeInfoSubmitLogInfo.objects.filter(brand_id=administrator.brand_id, model_id=model_id, serialNo=sn, submit_during_activity=True, status=True).order_by('has_used', '-pk').first()
- if not log:
- log = ConsumeInfoSubmitLogInfo.objects.filter(brand_id=administrator.brand_id, model_id=model_id, serialNo=sn, status=True).order_by('-submit_during_activity', 'dupload').first()
- if not log:
- return response(ProductMachineStatusCode.SN_NOT_FOUND)
- return response(200, 'Query SN Success', u'查询序列号成功', data=log.data)
- @logit
- @check_admin
- def queryusedsn(request, administrator):
- if administrator.admin_type != AdministratorInfo.MAINTENANCE:
- return response(AdministratorStatusCode.MAINTENANCE_NOT_FOUND)
- logs = ConsumeInfoSubmitLogInfo.objects.filter(brand_id=administrator.brand_id, admin_id=administrator.admin_id, has_used=True, status=True).order_by('-used_at')
- logs = [log.data for log in logs]
- return response(200, 'Query Used SN Success', u'查询核销序列号成功', data={
- 'logs': logs,
- })
- @logit
- @check_admin
- @transaction.atomic
- def usecoupon(request, administrator):
- model_id = request.POST.get('model_id', '')
- sn = request.POST.get('sn', '')
- if administrator.admin_type != AdministratorInfo.MAINTENANCE:
- return response(AdministratorStatusCode.MAINTENANCE_NOT_FOUND)
- log = ConsumeInfoSubmitLogInfo.objects.filter(
- brand_id=administrator.brand_id,
- model_id=model_id,
- serialNo=sn,
- submit_during_activity=True,
- has_used=False,
- status=True
- ).first()
- if not log:
- return response(ProductMachineStatusCode.SN_NOT_FOUND)
- logdata = log.data
- if logdata.get('final_coupon_info', {}).get('coupon_has_expired', True):
- return response(ProductCouponStatusCode.COUPON_HAS_EXPIRED)
- log.has_used = True
- log.used_at = tc.utc_datetime()
- log.save()
- return response(200, 'Use Coupon Success', u'核销优惠券成功')
- @logit
- @check_admin
- def userinfo(request, administrator):
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- userinfos = UserInfo.objects.filter(status=True).order_by('-pk')
- count = userinfos.count()
- userinfos, left = pagination(userinfos, page, num)
- userinfos = [userinfo.admindata for userinfo in userinfos]
- return response(200, 'Userinfo Success', u'用户列表获取成功', data={
- 'userinfos': userinfos,
- 'count': count,
- 'left': left,
- })
- @logit
- @check_admin
- def query_usercoupons(request, administrator):
- user_id = request.POST.get('user_id', '')
-
- try:
- user = UserInfo.objects.get(user_id=user_id)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
- coupons = UserCouponInfo.objects.filter(brand_id=administrator.brand_id, user_id=user_id, status=True).order_by('-pk')
- coupons = [coupon.admindata for coupon in coupons]
- return response(200, 'User Coupon Success', u'用户劵列表获取成功', data={
- 'coupons': coupons,
- })
- @logit
- @check_admin
- def query_usergoods(request, administrator):
- user_id = request.POST.get('user_id', '')
- dupload = request.POST.get('dupload', '')
-
- try:
- user = UserInfo.objects.get(user_id=user_id)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
- logs = ConsumeInfoSubmitLogInfo.objects.filter(brand_id=administrator.brand_id, user_id=user_id, status=True).order_by('-pk')
- if dupload:
- logs = logs.filter(dupload=dupload)
- logs = [log.adminuserdata for log in logs]
- return response(200, 'Userinfo Goods Success', u'用户商品列表获取成功', data={
- 'logs': logs,
- })
- @logit
- @check_admin
- def query_userinfo(request, administrator):
- query = request.POST.get('query', '')
- level = request.POST.get('level', '')
- is_member = request.POST.get('is_member', '')
- code_version = request.POST.get('code_version', 0)
- sex = request.POST.get('sex', '')
- subscribe = request.POST.get('subscribe', '')
- has_membercard = request.POST.get('has_membercard', '')
- province = request.POST.get('province', '')
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- userinfos = UserInfo.objects.filter(Q(status=True) & (Q(user_id__icontains=query) | Q(nickname__icontains=query) | Q(phone__icontains=query) | Q(memberusercardcode__icontains=query))).order_by('-pk')
- if level:
- userinfos = userinfos.filter(level=level)
- if code_version:
- userinfos = userinfos.filter(code_version=code_version)
- if subscribe:
- userinfos = userinfos.filter(subscribe=subscribe)
- if has_membercard:
- userinfos = userinfos.filter(has_membercard=has_membercard)
- if is_member:
- userinfos = userinfos.filter(level__gte=1)
- if sex:
- userinfos = userinfos.filter(sex=sex)
- if province:
- userinfos = userinfos.filter(province_name=province)
- if start_time and end_time:
- ftime = datetime.strptime(start_time + ' 00:00:00', '%Y%m%d %H:%M:%S')
- ttime = datetime.strptime(end_time + ' 23:59:59', '%Y%m%d %H:%M:%S')
- userinfos = userinfos.filter(created_at__range=[ftime, ttime])
- count = userinfos.count()
- userinfos, left = pagination(userinfos, page, num)
- userinfos = [userinfo.admindata for userinfo in userinfos]
- return response(200, 'Userinfo Success', u'用户列表获取成功', data={
- 'userinfos': userinfos,
- 'count': count,
- 'left': left
- })
- @logit
- @check_admin
- @transaction.atomic
- def userinfo_update(request, administrator):
- user_id = request.POST.get('user_id', '')
- integral = int(request.POST.get('integral', 0))
-
- try:
- user = UserInfo.objects.select_for_update().get(user_id=user_id, status=True)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
- user.integral = integral
- user.save()
- return response(200, 'Userinfo Update Success', u'修改用户信息成功', data={})
- @check_admin
- def statistic_userprofile(request, administrator):
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- model_name = request.POST.get('model_name', '')
- if model_name:
- logs = ConsumeModelSaleStatisticInfo.objects.filter(model_name=model_name, ymd__gte=start_time, ymd__lte=end_time)
- else:
- logs = ConsumeModelSaleStatisticInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time)
- sexs = {0: 0, 1: 0, 2: 0}
- subscribes = {0: 0, 1: 0}
- has_membercards = {0: 0, 1: 0}
- provinces = defaultdict(int)
- for log in logs:
- for user in log.users:
- try:
- user = UserInfo.objects.get(user_id=user, status=True)
- except UserInfo.DoesNotExist:
- continue
- provinces[user.province_name] += 1
- sexs[user.sex] += 1
- subscribes[user.subscribe] += 1
- has_membercards[user.has_membercard] += 1
- return response(200, 'Get User Profile Success', u'获取用户画像成功', data={
- 'provinces': provinces,
- 'sexs': sexs,
- 'subscribe': subscribes,
- 'has_membercards': has_membercards,
- })
- @check_admin
- def statistic_daily(request, administrator):
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- sale_logs = ConsumeSaleStatisticInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time)
- user_logs = ConsumeUserStatisticInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time)
- sale_logs = [log.data for log in sale_logs]
- user_logs = [log.data for log in user_logs]
- return response(200, 'Get User Sales Statistic Success', u'获取销量统计成功', data={
- 'sale_logs': sale_logs,
- 'user_logs': user_logs,
- })
- @check_admin
- def statistic_model(request, administrator):
- brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
- admin_id = request.POST.get('admin_id', '')
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- logs = ConsumeModelSaleStatisticInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time).values_list('model_name').annotate(Sum('num'))
- logs = [{'model_name': log[0], 'num': log[1]} for log in logs]
- return response(200, 'Get Model Statistic Success', u'获取型号统计成功', data={
- 'logs': logs
- })
- @check_admin
- def statistic_distributor(request, administrator):
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- model_name = request.POST.get('model_name', '')
- distributor_name = request.POST.get('distributor_name', '')
- daily_sql = 'select id, Count(*) AS num, Count(code_version=1 or NULL) AS code1 , Count(code_version=2 or NULL) AS code2, Count((code_version=1 AND has_scan=True) or NULL) AS has_code1_scan_num, Count((code_version=2 AND has_scan=True) or NULL) AS has_code2_scan_num FROM integral_saleclerksubmitloginfo where ymd >= %s AND ymd <= %s AND test_user=False AND dupload=False AND test_sn=False AND status=True %s %s GROUP BY ymd;' % (start_time, end_time, ('AND model_uni_name="%s"' % (model_name)) if model_name else '', ('AND distributor_name="%s"' % (distributor_name)) if distributor_name else '')
- daily_logs = SaleclerkSubmitLogInfo.objects.raw(daily_sql)
- daily_logs = [{'ymd': log.ymd, 'num': log.num, 'code1': log.code1, 'code2': log.code2, 'has_code1_scan_num': log.has_code1_scan_num, 'has_code2_scan_num': log.has_code2_scan_num} for log in daily_logs]
- model_logs = []
- if model_name == '':
- model_sql = 'select id, model_uni_name, Count(*) AS num, Count(code_version=1 or NULL) AS code1 , Count(code_version=2 or NULL) AS code2, Count((code_version=1 AND has_scan=True) or NULL) AS has_code1_scan_num, Count((code_version=2 AND has_scan=True) or NULL) AS has_code2_scan_num FROM integral_saleclerksubmitloginfo where ymd >= %s AND ymd <= %s AND test_user=False AND dupload=False AND test_sn=False AND status=True %s GROUP BY model_uni_name;' % (start_time, end_time, ('AND distributor_name="%s"' % (distributor_name)) if distributor_name else '')
- model_logs = SaleclerkSubmitLogInfo.objects.raw(model_sql)
- model_logs = [{'model_uni_name': log.model_uni_name, 'num': log.num, 'code1': log.code1, 'code2': log.code2, 'has_code1_scan_num': log.has_code1_scan_num, 'has_code2_scan_num': log.has_code2_scan_num} for log in model_logs]
- distributor_logs = []
- if distributor_name == '':
- distributor_sql = 'select id, distributor_name, Count(*) AS num, Count(code_version=1 or NULL) AS code1 , Count(code_version=2 or NULL) AS code2, Count((code_version=1 AND has_scan=True) or NULL) AS has_code1_scan_num, Count((code_version=2 AND has_scan=True) or NULL) AS has_code2_scan_num FROM integral_saleclerksubmitloginfo where ymd >= %s AND ymd <= %s AND test_user=False AND dupload=False AND test_sn=False AND status=True %s GROUP BY distributor_name;' % (start_time, end_time, ('AND model_uni_name="%s"' % (model_name)) if model_name else '')
- distributor_logs = SaleclerkSubmitLogInfo.objects.raw(distributor_sql)
- distributor_logs = [{'distributor_name': log.distributor_name, 'num': log.num, 'code1': log.code1, 'code2': log.code2, 'has_code1_scan_num': log.has_code1_scan_num, 'has_code2_scan_num': log.has_code2_scan_num} for log in distributor_logs]
- return response(200, 'Get Distributor Statistic Success', u'获取经销商统计成功', data={
- 'daily_logs': daily_logs,
- 'model_logs': model_logs,
- 'distributor_logs': distributor_logs
- })
- @check_admin
- def dashboard(request, administrator):
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
-
- sale_logs = SaleclerkSubmitLogInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time, test_user=False, dupload=False, test_sn=False, status=True)
- sale_count = sale_logs.count()
- sale_daily_logs = list(sale_logs.values('ymd').annotate(num=Count('pk')))
- sale_model_logs = list(sale_logs.values('model_uni_name').annotate(num=Count('pk')).order_by('-num'))[:10]
- sale_distributor_logs = list(sale_logs.values('distributor_name').annotate(num=Count('pk')).order_by('-num'))[:10]
-
- logs = ConsumeInfoSubmitLogInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time, test_user=False, dupload=False, status=True)
- consumer_count = logs.count()
- consumer_daily_logs = list(logs.values('ymd').annotate(num=Count('pk')).order_by('ymd'))
- consumer_model_logs = list(logs.values('model_uni_name').annotate(num=Count('pk')).order_by('-num'))[:10]
- consumer_province_logs = list(logs.values('province').annotate(num=Count('pk')).order_by('-num'))[:10]
- return response(200, 'Get Distributor Statistic Success', u'获取经销商统计成功', data={
- 'sale_daily_logs': sale_daily_logs,
- 'sale_model_logs': sale_model_logs,
- 'sale_distributor_logs': sale_distributor_logs,
- 'consumer_daily_logs': consumer_daily_logs,
- 'consumer_model_logs': consumer_model_logs,
- 'consumer_province_logs': consumer_province_logs,
- 'sale_count': sale_count,
- 'consumer_count': consumer_count,
- })
- @check_admin
- def statistic_consumer(request, administrator):
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- model_name = request.POST.get('model_name', '')
-
- daily_sql = 'select id, Count(id) AS num, Count(code_version=1 or NULL) AS code1 , Count(code_version=2 or NULL) AS code2 FROM mch_consumeinfosubmitloginfo where ymd >= %s AND ymd <= %s AND test_user=False AND dupload=False AND status=True %s GROUP BY ymd;' % (start_time, end_time, ('AND model_uni_name="%s"' % (model_name)) if model_name else '')
- daily_logs = ConsumeInfoSubmitLogInfo.objects.raw(daily_sql)
- daily_logs = [{'ymd': log.ymd, 'num': log.num, 'code1': log.code1, 'code2': log.code2} for log in daily_logs]
- model_logs = []
- if model_name == '':
- model_sql = 'select id, model_uni_name, Count(id) AS num, Count(code_version=1 or NULL) AS code1 , Count(code_version=2 or NULL) AS code2 FROM mch_consumeinfosubmitloginfo where ymd >= %s AND ymd <= %s AND test_user=False AND dupload=False AND status=True GROUP BY model_uni_name ORDER BY num desc;' % (start_time, end_time)
- model_logs = ConsumeInfoSubmitLogInfo.objects.raw(model_sql)
- model_logs = [{'model_uni_name': log.model_uni_name, 'num': log.num, 'code1': log.code1, 'code2': log.code2} for log in model_logs]
- province_sql = 'select id, province, Count(id) AS num, Count(code_version=1 or NULL) AS code1, Count(code_version=2 or NULL) AS code2 FROM mch_consumeinfosubmitloginfo where ymd >= %s AND ymd <= %s AND test_user=False AND dupload=False AND status=True %s GROUP BY province ORDER BY num desc;' % (start_time, end_time, ('AND model_uni_name="%s"' % (model_name)) if model_name else '')
- province_logs = ConsumeInfoSubmitLogInfo.objects.raw(province_sql)
- province_logs = [{'province': log.province, 'num': log.num, 'code1': log.code1, 'code2': log.code2} for log in province_logs]
- return response(200, 'Get Consumer Statistic Success', u'获取消费者统计成功', data={
- 'daily_logs': daily_logs,
- 'model_logs': model_logs,
- 'province_logs': province_logs,
- })
- @check_admin
- def statistic_member(request, administrator):
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
-
- if start_time and end_time:
- start_time = datetime.strptime(start_time, '%Y%m%d')
- end_time = datetime.strptime(end_time + ' 23:59:59', '%Y%m%d %H:%M:%S')
- userinfos = UserInfo.objects.filter(test_user=False, level__gte=1, resgister_at__range=(start_time, end_time))
- else:
- userinfos = UserInfo.objects.filter(test_user=False, level__gte=1, status=True)
-
- mp_num = userinfos.filter(subscribe=True).count()
-
- membercard_num = userinfos.filter(has_membercard=True).count()
-
- level_logs = list(userinfos.values('level').annotate(num=Count('user_id')))
-
- integral_logs = list(userinfos.values('integral').annotate(num=Count('user_id')))
-
- shot_logs = list(userinfos.values('shots_num').annotate(num=Count('user_id')))
-
- sex_logs = list(userinfos.values('sex').annotate(num=Count('user_id')))
-
- province_logs = list(userinfos.values('province_name').annotate(num=Count('user_id')).order_by('-num'))
- return response(200, 'Get Consumer Statistic Success', u'获取消费者统计成功', data={
- 'mp_num': mp_num,
- 'membercard_num': membercard_num,
- 'level_logs': level_logs,
- 'integral_logs': integral_logs,
- 'shot_logs': shot_logs,
- 'sex_logs': sex_logs,
- 'province_logs': province_logs,
- })
- @check_admin
- def statistic_coupon(request, administrator):
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- if start_time and end_time:
- start_time = datetime.strptime(start_time, '%Y%m%d')
- end_time = datetime.strptime(end_time + ' 23:59:59', '%Y%m%d %H:%M:%S')
- coupons = UserCouponInfo.objects.filter(active_at__range=(start_time, end_time), status=True)
- else:
- coupons = UserCouponInfo.objects.filter(status=True)
- froms_logs = list(coupons.values('coupon_from').annotate(num=Count('user_coupon_id')))
- type_logs = list(coupons.values('coupon_title', 'coupon_value').annotate(num=Count('user_coupon_id')))
- if start_time and end_time:
- used_coupons = UserCouponInfo.objects.filter(used_at__range=(start_time, end_time), status=True)
- else:
- used_coupons = UserCouponInfo.objects.filter(has_used=True, status=True)
- type_has_used_logs = list(used_coupons.values('coupon_title', 'coupon_value').annotate(num=Count('user_coupon_id')))
- return response(200, 'Get Consumer Statistic Success', u'获取用户劵统计成功', data={
- 'froms_logs': froms_logs,
- 'type_logs': type_logs,
- 'type_has_used_logs': type_has_used_logs,
- })
- @check_admin
- def record_consumer(request, administrator):
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- query = request.POST.get('query', '')
- dupload = request.POST.get('dupload', '')
- code_version = request.POST.get('code_version', 0)
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- logs = ConsumeInfoSubmitLogInfo.objects.filter(Q(status=True) & Q(test_user=False) & (Q(model_name__icontains=query) | Q(phone__icontains=query) | Q(serialNo__icontains=query))).order_by('-pk')
- if dupload:
- logs = logs.filter(dupload=dupload)
- if code_version:
- logs = logs.filter(code_version=code_version)
- if start_time and end_time:
- logs = logs.filter(ymd__gte=start_time, ymd__lte=end_time)
- count = logs.count()
- logs, left = pagination(logs, page, num)
- logs = [log.admindata for log in logs]
- return response(200, 'Get Consumer Record Success', u'获取消费者销售记录成功', data={
- 'logs': logs,
- 'count': count,
- 'left': left
- })
- @check_admin
- def record_consumer_batch(request, administrator):
- logs = json.loads(request.POST.get('logs', '[]'))
- infos = []
- unknows = []
- for log in logs:
- try:
- infos.append(ConsumeInfoSubmitLogInfo.objects.get(model_name__icontains=log['model_name'], serialNo=log['code'], status=True, dupload=False).admindata)
- except ConsumeInfoSubmitLogInfo.DoesNotExist:
- unknows.append(log)
- return response(200, 'Batch Get Record Sale Success', u'批量获取销售员销售记录', data={
- 'logs': infos,
- 'unknows': unknows
- })
- @check_admin
- def record_sale(request, administrator):
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- query = request.POST.get('query', '')
- dupload = request.POST.get('dupload', '')
- has_scan = request.POST.get('has_scan', '')
- code_version = request.POST.get('code_version', 0)
- is_online_sale = request.POST.get('is_online_sale', '')
- logs = SaleclerkSubmitLogInfo.objects.filter(Q(status=True) & Q(test_user=False) & Q(test_sn=False) & (Q(model_name__icontains=query) | Q(clerk_name__icontains=query) | Q(distributor_name__icontains=query) | Q(code__icontains=query))).order_by('-created_at')
- if dupload:
- logs = logs.filter(dupload=dupload)
- if code_version:
- logs = logs.filter(code_version=code_version)
- if has_scan:
- logs = logs.filter(has_scan=has_scan)
- if start_time and end_time:
- logs = logs.filter(ymd__gte=start_time, ymd__lte=end_time)
- if is_online_sale:
- logs = logs.filter(remark=('扫描条形码' if is_online_sale == '1' else ''))
- count = logs.count()
- logs, left = pagination(logs, page, num)
- logs = [log.admindata for log in logs]
- return response(200, 'Get Sale Record Success', u'获取销售员销售记录成功', data={
- 'logs': logs,
- 'count': count,
- 'left': left
- })
- @check_admin
- def record_sale_batch(request, administrator):
- logs = json.loads(request.POST.get('logs', '[]'))
- infos = []
- unknows = []
- for log in logs:
- try:
- infos.append(SaleclerkSubmitLogInfo.objects.get(model_name__icontains=log['model_name'], code=log['code'], status=True, dupload=False).admindata)
- except SaleclerkSubmitLogInfo.DoesNotExist:
- unknows.append(log)
- return response(200, 'Batch Get Record Sale Success', u'批量获取销售员销售记录', data={
- 'logs': infos,
- 'unknows': unknows
- })
- @check_admin
- def model_list(request, administrator):
- infos = list(ModelInfo.objects.filter(status=True).values_list('model_uni_name', flat=True).distinct().order_by('model_uni_name'))
- return response(200, 'Get Model List Success', u'获取型号列表成功', data={
- 'models': infos
- })
- @check_admin
- def distributor_list(request, administrator):
- infos = list(DistributorInfo.objects.filter(status=True).values_list('distributor_name', flat=True).distinct().order_by('distributor_name'))
- return response(200, 'Get Model List Success', u'获取经销商列表成功', data={
- 'distributors': infos
- })
- @check_admin
- def member_goods_order(request, administrator):
- query = request.POST.get('query', '')
- good_type = request.POST.get('good_type', '')
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- order_status = int(request.POST.get('order_status', 0))
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- orders = GoodsOrderInfo.objects.filter(Q(phone__icontains=query) | Q(user_id=query) | Q(title__icontains=query) & Q(status=True)).order_by('-pk')
- if good_type:
- orders = orders.filter(good_type=good_type)
- if start_time and end_time:
- start_time = datetime.strptime(start_time, '%Y%m%d')
- end_time = datetime.strptime(end_time + ' 23:59:59', '%Y%m%d %H:%M:%S')
- orders = orders.filter(created_at__range=(start_time, end_time))
-
- if order_status == 1:
- orders = orders.filter(Q(tracking_number__isnull=True) | Q(tracking_number=''))
- elif order_status == 2:
- orders = orders.filter(tracking_number__isnull=False).exclude(tracking_number='')
- count = orders.count()
- orders, left = pagination(orders, page, num)
- orders = [order.admindata for order in orders]
- return response(200, 'Get Member Goods Order List Success', u'获取会员商品订单列表成功', data={
- 'orders': orders,
- 'left': left,
- 'count': count
- })
- @check_admin
- def member_goods_order_update(request, administrator):
- order_id = request.POST.get('order_id', '')
- tracking_number = request.POST.get('tracking_number', '')
- remark = request.POST.get('remark', u'您的礼品正在快马加鞭赶来,请耐心等待呦~')
- if not send_trackingNumber_message(order_id, tracking_number, remark):
- return response(400001, 'Member Goods Order Update Failure', u'会员商品订单修改失败')
- return response(200, 'Member Goods Order Update Success', u'会员商品订单修改成功')
- @check_admin
- def member_goods_order_batch_update(request, administrator):
- orders = json.loads(request.POST.get('orders', '[]'))
- err_orders = []
- for order in orders:
- if not send_trackingNumber_message(order.get('order_id', ''), order.get('tracking_number', ''), order.get('remark', u'您的礼品正在快马加鞭赶来,请耐心等待呦~')):
- err_orders.append(order.get('order_id', ''))
- if err_orders:
- return response(40001, 'Member Goods Order Update Error', u'部分会员商品订单修改失败', data={
- 'orders': err_orders
- })
- return response(200, 'Member Goods Order Update Success', u'会员商品订单修改成功')
- def send_trackingNumber_message(order_id, tracking_number, remark):
- try:
- order = GoodsOrderInfo.objects.get(order_id=order_id, status=True)
- order.remark = remark
- order.tracking_number = tracking_number
- if tracking_number and order.good_type == GoodsInfo.PHYSICAL and not order.has_send_template_message:
- order.has_send_template_message = True
-
- user = UserInfo.objects.get(user_id=order.user_id)
- data = {
- "thing6": {
- "value": order.title,
- "color": "#173177"
- },
- "character_string7": {
- "value": tracking_number,
- "color": "#173177"
- },
- "number2": {
- "value": order.integral,
- "color": "#173177"
- },
- "thing5": {
- "value": order.remark,
- "color": "#173177"
- },
- }
- res = sendwxasubscribemessage(openid=user.openid_miniapp, template_id=settings.TEMPLATE_ID_TRACKING, data=data, miniprogram_state=None, lang=None, page=None)
- order.send_template_message_res = json.dumps(res)
- order.save()
- return True
- except Exception:
- return False
- @check_admin
- def record_warehouse(request, administrator):
- model_name = request.POST.get('model_name', '')
- sn = request.POST.get('sn', '')
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- models = ModelInfo.objects.filter(model_name__icontains=model_name, status=True).values_list('pk', flat=True)
- logs = MchInfoEncryptLogInfo.objects.filter(model_pk__in=models, sn__icontains=sn, status=True)
- if start_time and end_time:
- start_time = datetime.strptime(start_time, '%Y%m%d')
- end_time = datetime.strptime(end_time + ' 23:59:59', '%Y%m%d %H:%M:%S')
- logs = logs.filter(created_at__range=(start_time, end_time))
- logs = logs.order_by('-pk')
- count = logs.count()
- logs, left = pagination(logs, page, num)
- logs = [log.admindata for log in logs]
- return response(200, 'Get Warehouse Record Success', u'获取入库记录成功', data={
- 'logs': logs,
- 'left': left,
- 'count': count
- })
- @check_admin
- def member_activity_list(request, administrator):
- activity_type = request.POST.get('activity_type', '')
- title = request.POST.get('title', '')
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- logs = MemberActivityInfo.objects.filter(status=True)
- if activity_type:
- logs = logs.filter(activity_type=activity_type)
- if title:
- logs = logs.filter(title__icontains=title)
- if start_time and end_time:
- start_time = datetime.strptime(start_time, '%Y%m%d')
- end_time = datetime.strptime(end_time + ' 23:59:59', '%Y%m%d %H:%M:%S')
- logs = logs.filter(created_at__range=(start_time, end_time))
- logs = logs.order_by('-pk')
- count = logs.count()
- logs, left = pagination(logs, page, num)
- logs = [log.admindata for log in logs]
- return response(200, 'Get Member Activity Record Success', u'获取会员活动成功', data={
- 'logs': logs,
- 'left': left,
- 'count': count
- })
- @check_admin
- def member_activity_detail(request, administrator):
- activity_id = request.POST.get('activity_id', '')
- try:
- log = MemberActivityInfo.objects.get(activity_id=activity_id)
- except MemberActivityInfo.DoesNotExist:
- return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
- return response(200, 'Get Member Activity Record Details Success', u'获取会员活动详情成功', data={
- 'log': log.admindetails,
- })
- @check_admin
- def member_activity_update(request, administrator):
- activity_id = request.POST.get('activity_id', '')
- activity_type = int(request.POST.get('activity_type', 0))
- title = request.POST.get('title', '')
- subtitle = request.POST.get('subtitle', '')
- start_date = tc.to_date(request.POST.get('start_date', '') or settings.DEFAULT_START_DATE)
- end_date = date = tc.to_date(request.POST.get('date', '') or request.POST.get('end_date', '') or settings.DEFAULT_END_DATE)
- start_display_date = tc.to_date(request.POST.get('start_display_date', '') or settings.DEFAULT_START_DATE)
- end_display_date = tc.to_date(request.POST.get('end_display_date', '') or settings.DEFAULT_END_DATE)
- city = request.POST.get('city', '')
- location = request.POST.get('location', '')
- integral = int(request.POST.get('integral', 0))
- is_slider = request.POST.get('is_slider', 0)
- slider_image_path = request.POST.get('banner_path', '') or request.POST.get('slider_image_path', '')
- cover_path = request.POST.get('cover_path', '')
-
- limit_image_num = int(request.POST.get('limit_image_num', 3))
- is_signup = request.POST.get('is_signup', 0)
- group_share_max_integral = int(request.POST.get('share_max_integral', 0))
- group_share_integral = int(request.POST.get('share_integral', 0))
- content_rich_text = request.POST.get('content_rich_text', '')
- share_h5_link = request.POST.get('share_h5_link', '')
- activity_state = int(request.POST.get('activity_state', 0))
- poster_kv_img_url = request.POST.get('poster_kv_img_url', '')
- poster_content = request.POST.get('poster_content', '')
- try:
- log = MemberActivityInfo.objects.get(activity_id=activity_id, status=True)
- except MemberActivityInfo.DoesNotExist:
- return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
- log.activity_type = activity_type
- log.title = title
- log.subtitle = subtitle
- log.date = date
- log.start_date = start_date
- log.end_date = end_date
- log.start_display_date = start_display_date
- log.end_display_date = end_display_date
- log.city = city
- log.location = location
- log.integral = integral
- log.is_slider = is_slider
- log.slider_image = slider_image_path
- log.cover = cover_path
-
- log.limit_image_num = limit_image_num
- log.is_signup = is_signup
- log.group_share_integral = group_share_integral
- log.group_share_max_integral = group_share_max_integral
- log.content_rich_text = content_rich_text
- log.share_h5_link = share_h5_link
- log.activity_state = activity_state
- log.poster_kv_img_url = poster_kv_img_url
- log.poster_content = poster_content
- log.save()
- return response(200, 'MemberActivityInfo Update Success', u'会员活动更新成功')
- @check_admin
- def member_activity_create(request, administrator):
- activity_type = int(request.POST.get('activity_type', 0))
- title = request.POST.get('title', '')
- subtitle = request.POST.get('subtitle', '')
- start_date = tc.to_date(request.POST.get('start_date', '') or settings.DEFAULT_START_DATE)
- end_date = date = tc.to_date(request.POST.get('date', '') or request.POST.get('end_date', '') or settings.DEFAULT_END_DATE)
- start_display_date = tc.to_date(request.POST.get('start_display_date', '') or settings.DEFAULT_START_DATE)
- end_display_date = tc.to_date(request.POST.get('end_display_date', '') or settings.DEFAULT_END_DATE)
- city = request.POST.get('city', '')
- location = request.POST.get('location', '')
- integral = int(request.POST.get('integral', 0))
- is_slider = request.POST.get('is_slider', 0)
- slider_image_path = request.POST.get('banner_path', '') or request.POST.get('slider_image_path', '')
- cover_path = request.POST.get('cover_path', '')
-
- limit_image_num = int(request.POST.get('limit_image_num', 3))
- is_signup = request.POST.get('is_signup', 0)
- group_share_max_integral = int(request.POST.get('share_max_integral', 0))
- group_share_integral = int(request.POST.get('share_integral', 0))
- content_rich_text = request.POST.get('content_rich_text', '')
- share_h5_link = request.POST.get('share_h5_link', '')
- activity_state = int(request.POST.get('activity_state', 0))
- poster_kv_img_url = request.POST.get('poster_kv_img_url', '')
- poster_content = request.POST.get('poster_content', '')
- act = MemberActivityInfo.objects.create(
- brand_id=administrator.brand_id,
- activity_type=activity_type,
- title=title,
- subtitle=subtitle,
- date=date,
- start_date=start_date,
- end_date=end_date,
- start_display_date=start_display_date,
- end_display_date=end_display_date,
- city=city,
- location=location,
- integral=integral,
- is_slider=is_slider,
- slider_image=slider_image_path,
- cover=cover_path,
-
- limit_image_num=limit_image_num,
- is_signup=is_signup,
- group_share_max_integral=group_share_max_integral,
- group_share_integral=group_share_integral,
- content_rich_text=content_rich_text,
- share_h5_link=share_h5_link,
- activity_state=activity_state,
- poster_kv_img_url=poster_kv_img_url,
- poster_content=poster_content
- )
- return response(200, 'MemberActivityInfo Create Success', u'会员活动创建成功', data={
- 'activity': act.admindetails
- })
- @check_admin
- def member_activity_share_list(request, administrator):
- activity_id = request.POST.get('activity_id', '')
- page = int(request.POST.get('page', 1))
- num = int(request.POST.get('num', 20))
- logs = MemberActivityGroupShareInfo.objects.filter(activity_id=activity_id, status=True)
- total_integral = logs.aggregate(Sum('integral'))['integral__sum']
- logs = logs.values('share_user_id').annotate(integral_sum=Sum('integral'), group_count=Count('open_gid'), user_count=Count('click_user_id')).order_by('-user_count')
- count = logs.count()
- logs, left = pagination(logs, page, num)
- return response(200, 'Get Member Activity Record Success', u'获取会员活动成功', data={
- 'logs': list(logs),
- 'count': count,
- 'left': left,
- 'total_integral': total_integral
- })
- @check_admin
- def member_activity_register_list(request, administrator):
- activity_id = request.POST.get('activity_id', '')
- page = int(request.POST.get('page', 1))
- num = int(request.POST.get('num', 20))
- logs = MemberActivitySignupInfo.objects.filter(activity_id=activity_id, status=True)
- count = logs.count()
- logs, left = pagination(logs, page, num)
- logs = [log.admindata for log in logs]
- return response(200, 'Get Member Activity Record Success', u'获取会员活动成功', data={
- 'logs': list(logs),
- 'count': count,
- 'left': left,
- })
- @check_admin
- @transaction.atomic
- def member_activity_contribute_audit(request, administrator):
- contribution_id = request.POST.get('contribution_id', '')
- audit_status = get_query_value(request, 'audit_status', val_cast_type='int')
- try:
- contribution = MemberActivityContributionInfo.objects.select_for_update().get(contribution_id=contribution_id, status=True)
- except MemberActivityContributionInfo.DoesNotExist:
- return response(MemberActivityContributionStatusCode.ACTIVITY_CONTRIBUTION_NOT_FOUND)
- contribution.audit_status = audit_status
- contribution.save()
- return response(200, 'Member Activity Contribution Audit Success', u'会员活动投稿审批成功')
- @check_admin
- @transaction.atomic
- def member_activity_contribute_selected(request, administrator):
- contribution_id = request.POST.get('contribution_id', '')
- selected = get_query_value(request, 'selected', val_cast_type='int')
- try:
- contribution = MemberActivityContributionInfo.objects.select_for_update().get(contribution_id=contribution_id, status=True)
- except MemberActivityContributionInfo.DoesNotExist:
- return response(MemberActivityContributionStatusCode.ACTIVITY_CONTRIBUTION_NOT_FOUND)
- contribution.is_selected = selected
- contribution.save()
- return response(200, 'Member Activity Contribution Selected Success', u'会员活动投稿入围成功')
- @check_admin
- def member_activity_contribute_welfare_list(request, administrator):
- welfare_type = request.POST.get('welfare_type', '')
- welfare_title = request.POST.get('welfare_title', '')
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- welfares = MemberActivityContributionWelfareInfo.objects.filter(status=True)
- if welfare_type:
- welfares = welfares.filter(welfare_type=welfare_type)
- if welfare_title:
- welfares = welfares.filter(welfare_title__icontains=welfare_title)
- welfares = welfares.order_by('-pk')
- count = welfares.count()
- welfares, left = pagination(welfares, page, num)
- welfares = [welfare.data for welfare in welfares]
- return response(200, 'Get Member Activity Contribute Welfare List Success', u'获取会员活动投稿福利列表成功', data={
- 'welfares': welfares,
- 'left': left,
- 'count': count
- })
- @check_admin
- def member_activity_contribute_welfare_detail(request, administrator):
- welfare_id = request.POST.get('welfare_id', '')
- try:
- welfare = MemberActivityContributionWelfareInfo.objects.get(welfare_id=welfare_id)
- except MemberActivityContributionWelfareInfo.DoesNotExist:
- return response(MemberActivityContributionWelfareStatusCode.ACTIVITY_CONTRIBUTION_WELFARE_NOT_FOUND)
- return response(200, 'Get Member Activity Contribute Welfare Detail Success', u'获取会员活动投稿福利详情成功', data={
- 'welfare': welfare.data,
- })
- @check_admin
- def member_activity_contribute_welfare_update(request, administrator):
- activity_id = request.POST.get('activity_id', '')
- welfare_id = request.POST.get('welfare_id', '')
- welfare_type = int(request.POST.get('welfare_type', 0))
- welfare_title = request.POST.get('welfare_title', '')
- welfare_detail = request.POST.get('welfare_detail', '')
- welfare_value = request.POST.get('welfare_value', 0)
- welfare_image_path = request.POST.get('welfare_image_path', '')
- try:
- welfare = MemberActivityContributionWelfareInfo.objects.get(welfare_id=welfare_id, status=True)
- except MemberActivityContributionWelfareInfo.DoesNotExist:
- return response(MemberActivityContributionWelfareStatusCode.ACTIVITY_CONTRIBUTION_WELFARE_NOT_FOUND)
- welfare.activity_id = activity_id
- welfare.welfare_type = welfare_type
- welfare.welfare_title = welfare_title
- welfare.welfare_detail = welfare_detail
- welfare.welfare_value = welfare_value if welfare_value else 0
- welfare.welfare_image = welfare_image_path
- welfare.save()
- return response(200, 'Update Member Activity Contribute Welfare Success', u'更新会员活动投稿福利成功')
- @check_admin
- def member_activity_contribute_welfare_create(request, administrator):
- activity_id = request.POST.get('activity_id', '')
- welfare_type = int(request.POST.get('welfare_type', 0))
- welfare_title = request.POST.get('welfare_title', '')
- welfare_detail = request.POST.get('welfare_detail', '')
- welfare_value = request.POST.get('welfare_value', 0)
- welfare_image_path = request.POST.get('welfare_image_path', None)
- MemberActivityContributionWelfareInfo.objects.create(
- brand_id=administrator.brand_id,
- activity_id=activity_id,
- welfare_type=welfare_type,
- welfare_title=welfare_title,
- welfare_detail=welfare_detail,
- welfare_value=welfare_value if welfare_value else 0,
- welfare_image=welfare_image_path,
- )
- return response(200, 'Create Member Activity Contribute Welfare Success', u'创建会员活动投稿福利成功')
- @check_admin
- def member_activity_contribute_welfare_delete(request, administrator):
- welfare_id = request.POST.get('welfare_id', '')
- try:
- welfare = MemberActivityContributionWelfareInfo.objects.get(welfare_id=welfare_id, status=True)
- except MemberActivityContributionWelfareInfo.DoesNotExist:
- return response(MemberActivityContributionWelfareStatusCode.ACTIVITY_CONTRIBUTION_WELFARE_NOT_FOUND)
- welfare.status = False
- welfare.save()
- return response(200, 'Delete Member Activity Contribute Welfare Success', u'删除会员活动投稿福利成功')
- @check_admin
- def member_activity_contribute_welfare_unlock(request, administrator):
- admin_id = request.POST.get('admin_id', '')
- contribution_id = request.POST.get('contribution_id', '')
- welfare_id = request.POST.get('welfare_id', '')
- try:
- contribution = MemberActivityContributionInfo.objects.get(contribution_id=contribution_id, status=True)
- except MemberActivityContributionInfo.DoesNotExist:
- return response(MemberActivityContributionStatusCode.ACTIVITY_CONTRIBUTION_NOT_FOUND)
- try:
- welfare = MemberActivityContributionWelfareInfo.objects.get(welfare_id=welfare_id, status=True)
- except MemberActivityContributionWelfareInfo.DoesNotExist:
- return response(MemberActivityContributionWelfareStatusCode.ACTIVITY_CONTRIBUTION_WELFARE_NOT_FOUND)
- MemberActivityContributionWelfareUnlockingInfo.objects.create(
- brand_id=administrator.brand_id,
- admin_id=admin_id,
- user_id=contribution.user_id,
- activity_id=contribution.activity_id,
- contribution_id=contribution_id,
- welfare_id=welfare_id,
- welfare_type=welfare.welfare_type,
- welfare_value=welfare.welfare_value,
- )
- return response(200, 'Unlock Member Activity Contribute Welfare Success', u'解锁会员活动投稿福利成功')
- @logit
- @check_admin
- def member_activity_contribute_welfare_unlocking_list(request, administrator):
- user_id = request.POST.get('user_id', '')
- activity_id = request.POST.get('activity_id', '')
- contribution_id = request.POST.get('contribution_id', '')
- welfare_id = request.POST.get('welfare_id', '')
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- unlockings = MemberActivityContributionWelfareUnlockingInfo.objects.filter(status=True)
- if user_id:
- unlockings = unlockings.filter(user_id=user_id)
- if activity_id:
- unlockings = unlockings.filter(activity_id=activity_id)
- if contribution_id:
- unlockings = unlockings.filter(contribution_id=contribution_id)
- if welfare_id:
- unlockings = unlockings.filter(welfare_id=welfare_id)
- unlockings = unlockings.order_by('-pk')
- count = unlockings.count()
- unlockings, left = pagination(unlockings, page, num)
- unlockings = [unlocking.data for unlocking in unlockings]
- return response(data={
- 'unlockings': unlockings,
- 'left': left,
- 'count': count,
- })
- @logit
- @check_admin
- def member_activity_contribute_welfare_unlocking_detail(request, administrator):
- unlocking_id = request.POST.get('unlocking_id', '')
- try:
- unlocking = MemberActivityContributionWelfareUnlockingInfo.objects.get(unlocking_id=unlocking_id, status=True)
- except MemberActivityContributionWelfareUnlockingInfo.DoesNotExist:
- return response(MemberActivityContributionWelfareUnblockingStatusCode.ACTIVITY_CONTRIBUTION_WELFARE_UNBLOCKING_NOT_FOUND)
- return response(data=unlocking.data)
- @logit
- @check_admin
- @transaction.atomic
- def member_activity_contribute_welfare_unlocking_update(request, administrator):
- unlocking_id = request.POST.get('unlocking_id', '')
- name = request.POST.get('name', '')
- phone = request.POST.get('phone', '')
- address = request.POST.get('address', '')
- tracking_number = request.POST.get('tracking_number', '')
- try:
- unlocking = MemberActivityContributionWelfareUnlockingInfo.objects.select_for_update().get(unlocking_id=unlocking_id, status=True)
- except MemberActivityContributionWelfareUnlockingInfo.DoesNotExist:
- return response(MemberActivityContributionWelfareUnblockingStatusCode.ACTIVITY_CONTRIBUTION_WELFARE_UNBLOCKING_NOT_FOUND)
- if name:
- unlocking.name = name
- if phone:
- unlocking.phone = phone
- if address:
- unlocking.address = address
- if tracking_number:
- unlocking.tracking_number = tracking_number
- unlocking.save()
- return response(200, 'Update Member Activity Contribute Welfare Unblocking Success', u'更新会员活动投稿福利解锁成功')
- @logit
- @check_admin
- @transaction.atomic
- def member_activity_contribute_welfare_unlocking_delete(request, administrator):
- unlocking_id = request.POST.get('unlocking_id', '')
- try:
- unlocking = MemberActivityContributionWelfareUnlockingInfo.objects.select_for_update().get(unlocking_id=unlocking_id, status=True)
- except MemberActivityContributionWelfareUnlockingInfo.DoesNotExist:
- return response(MemberActivityContributionWelfareUnblockingStatusCode.ACTIVITY_CONTRIBUTION_WELFARE_UNBLOCKING_NOT_FOUND)
- unlocking.status = False
- unlocking.save()
- return response(200, 'Delete Member Activity Contribute Welfare Unblocking Success', u'删除会员活动投稿福利解锁成功')
- @check_admin
- def coupon_list(request, administrator):
- title = request.POST.get('title', '')
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- logs = CouponInfo.objects.filter(coupon_title__icontains=title, status=True)
- if start_time and end_time:
- start_time = datetime.strptime(start_time, '%Y%m%d')
- end_time = datetime.strptime(end_time + ' 23:59:59', '%Y%m%d %H:%M:%S')
- logs = logs.filter(created_at__range=(start_time, end_time))
- logs = logs.order_by('-pk')
- count = logs.count()
- logs, left = pagination(logs, page, num)
- logs = [log.admindata for log in logs]
- return response(200, 'Get CouponInfo List Success', u'获取劵列表成功', data={
- 'logs': logs,
- 'left': left,
- 'count': count
- })
- @check_admin
- def coupon_detail(request, administrator):
- coupon_id = request.POST.get('coupon_id', '')
- try:
- log = CouponInfo.objects.get(coupon_id=coupon_id)
- except CouponInfo.DoesNotExist:
- return response(CouponStatusCode.COUPON_NOT_FOUND)
- log = log.admindetails
- return response(200, 'Get Member Activity Record Details Success', u'获取会员活动详情成功', data={
- 'log': log,
- })
- @check_admin
- def coupon_create(request, administrator):
- coupon_title = request.POST.get('coupon_title', '')
- coupon_detail = request.POST.get('coupon_detail', '')
- coupon_value = int(request.POST.get('coupon_value', 0))
- coupon_image = request.POST.get('coupon_image', '')
- coupon_expire_type = int(request.POST.get('coupon_expire_type', 0))
- coupon_valid_period = int(request.POST.get('coupon_valid_period', 0))
- coupon_expire_at = request.POST.get('coupon_expire_at', '')
- is_coupon_admin_writeoff = int(request.POST.get('is_coupon_admin_writeoff', 1))
- info = CouponInfo.objects.create(
- brand_id=administrator.brand_id,
- coupon_title=coupon_title,
- coupon_detail=coupon_detail,
- coupon_value=coupon_value,
- coupon_image=coupon_image,
- coupon_expire_type=coupon_expire_type,
- coupon_valid_period=coupon_valid_period,
- is_coupon_admin_writeoff=is_coupon_admin_writeoff,
- )
- if coupon_expire_at:
- info.coupon_expire_at = datetime.strptime(coupon_expire_at + ' 23:59:59', '%Y-%m-%d %H:%M:%S')
- info.save()
- return response(200, 'CouponInfo Create Success', u'劵创建成功')
- @check_admin
- def coupon_update(request, administrator):
- coupon_id = request.POST.get('coupon_id', '')
- coupon_title = request.POST.get('coupon_title', '')
- coupon_detail = request.POST.get('coupon_detail', '')
- coupon_value = int(request.POST.get('coupon_value', 0))
- coupon_image = request.POST.get('coupon_image', '')
- coupon_expire_type = int(request.POST.get('coupon_expire_type', 0))
- coupon_valid_period = int(request.POST.get('coupon_valid_period', 0))
- coupon_expire_at = request.POST.get('coupon_expire_at', '')
- is_coupon_admin_writeoff = int(request.POST.get('is_coupon_admin_writeoff', 1))
- try:
- log = CouponInfo.objects.get(coupon_id=coupon_id, status=True)
- except CouponInfo.DoesNotExist:
- return response(CouponStatusCode.COUPON_NOT_FOUND)
- log.brand_id = administrator.brand_id
- log.coupon_title = coupon_title
- log.coupon_detail = coupon_detail
- log.coupon_value = coupon_value
- log.coupon_image = coupon_image
- log.coupon_expire_type = coupon_expire_type
- log.coupon_valid_period = coupon_valid_period
- if coupon_expire_at:
- log.coupon_expire_at = datetime.strptime(coupon_expire_at + ' 23:59:59', '%Y-%m-%d %H:%M:%S')
- log.is_coupon_admin_writeoff = is_coupon_admin_writeoff
- log.save()
- return response(200, 'CouponInfo Update Success', u'劵更新成功')
- @check_admin
- def coupon_delete(request, administrator):
- coupon_id = request.POST.get('activity_id', '')
- try:
- log = CouponInfo.objects.get(coupon_id=coupon_id, status=True)
- except CouponInfo.DoesNotExist:
- return response(CouponStatusCode.COUPON_NOT_FOUND)
- log.status = False
- log.save()
- return response(200, 'CouponInfo Delete Success', u'劵删除成功')
- @check_admin
- def member_goods_list(request, administrator):
- title = request.POST.get('title', '')
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- logs = GoodsInfo.objects.filter(title__icontains=title, only_for_member=False).order_by('-pk')
- count = logs.count()
- logs, left = pagination(logs, page, num)
- logs = [log.admindata for log in logs]
- return response(200, 'Get Member Goods Success', u'获取会员商品成功', data={
- 'logs': logs,
- 'left': left,
- 'count': count
- })
- @check_admin
- def member_goods_detail(request, administrator):
- good_id = request.POST.get('good_id', '')
- try:
- log = GoodsInfo.objects.get(good_id=good_id)
- except GoodsInfo.DoesNotExist:
- return response(MemberGoodStatusCode.GOOD_NOT_FOUND)
- log = log.admindetails
- return response(200, 'Get Member Goods Details Success', u'获取积分商品详情成功', data={
- 'log': log,
- })
- @check_admin
- def member_goods_update(request, administrator):
- good_id = request.POST.get('good_id', '')
- title = request.POST.get('title', '')
- desc = request.POST.get('desc', '')
- value = int(request.POST.get('value', 0))
- left_num = int(request.POST.get('left_num', 0))
- image = request.POST.get('image_path', '')
- coupon_id = request.POST.get('coupon_id', '')
- slider_image = request.POST.get('slider_path', '')
- integral = int(request.POST.get('integral', 0))
- fee = int(request.POST.get('fee', 0))
- try:
- log = GoodsInfo.objects.get(good_id=good_id, status=True)
- except GoodsInfo.DoesNotExist:
- return response(MemberGoodStatusCode.GOOD_NOT_FOUND)
- log.title = title
- log.desc = desc
- log.value = value
- log.left_num = left_num
- log.image = image
- log.coupon_id = coupon_id
- log.slider_image = slider_image
- log.integral = integral
- log.fee = fee
- log.save()
- return response(200, 'GoodsInfo Update Success', u'积分商品更新成功')
- @check_admin
- def member_goods_create(request, administrator):
- good_type = int(request.POST.get('good_type', 0))
- title = request.POST.get('title', '')
- desc = request.POST.get('desc', '')
- value = int(request.POST.get('value', 0))
- left_num = int(request.POST.get('left_num', 0))
- image = request.POST.get('image_path', '')
- coupon_id = request.POST.get('coupon_id', '')
- slider_image = request.POST.get('slider_path', '')
- integral = int(request.POST.get('integral', 0))
- fee = int(request.POST.get('fee', 0))
- GoodsInfo.objects.create(
- brand_id=administrator.brand_id,
- good_type=good_type,
- title=title,
- desc=desc,
- value=value,
- left_num=left_num,
- image=image,
- coupon_id=coupon_id,
- slider_image=slider_image,
- integral=integral,
- fee=fee,
- )
- return response(200, 'GoodsInfo Create Success', u'积分商品创建成功')
- @check_admin
- def complement_code_list(request, administrator):
- start_time = request.POST.get('start_time', '')
- end_time = request.POST.get('end_time', '')
- type_ = request.POST.get('type', '')
- query = request.POST.get('query', '')
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- logs = ComplementCodeLogInfo.objects.filter(status=True)
- if start_time and end_time:
- start_time = datetime.strptime(start_time, '%Y%m%d')
- end_time = datetime.strptime(end_time + ' 23:59:59', '%Y%m%d %H:%M:%S')
- logs = logs.filter(created_at__range=(start_time, end_time))
- if type_ == 'todo':
- logs = logs.filter(audit_status=ComplementCodeLogInfo.AUDIT_TODO)
- elif type_ == 'pass':
- logs = logs.filter(audit_status=ComplementCodeLogInfo.AUDIT_PASS)
- elif type_ == 'refused':
- logs = logs.filter(audit_status=ComplementCodeLogInfo.AUDIT_REFUSED)
- logs = logs.order_by('audit_status', '-pk')
- if query:
- logs = logs.filter(Q(phone=query) | Q(name__icontains=query) | Q(sn=query))
- count = logs.count()
- logs, left = pagination(logs, page, num)
- logs = [log.data for log in logs]
- return response(200, 'Get Complement Code List Success', u'获取补码列表成功', data={
- 'logs': logs,
- 'left': left,
- 'count': count
- })
- @check_admin
- @transaction.atomic
- def complement_code_audit(request, administrator):
- brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
- admin_id = request.POST.get('admin_id', '')
- log_id = request.POST.get('log_id', '')
- audit_status = int(request.POST.get('audit_status', 0))
- if audit_status not in [ComplementCodeLogInfo.AUDIT_REFUSED, ComplementCodeLogInfo.AUDIT_PASS]:
- return response(ComplementCodeStatusCode.COMPLEMENT_CODE_STATUS_INVALID)
- try:
- log = ComplementCodeLogInfo.objects.select_for_update().get(log_id=log_id, status=True)
- except ComplementCodeLogInfo.DoesNotExist:
- return response(ComplementCodeStatusCode.COMPLEMENT_CODE_NOT_FOUND)
- if log.audit_status != ComplementCodeLogInfo.AUDIT_TODO:
- return response(ComplementCodeStatusCode.COMPLEMENT_CODE_HAS_AUDITED)
- log.audit_status = audit_status
- log.save()
-
- if log.audit_status == ComplementCodeLogInfo.AUDIT_PASS:
- try:
- brand = BrandInfo.objects.get(brand_id=brand_id)
- except BrandInfo.DoesNotExist:
- brand = None
- try:
- model = ModelInfo.objects.get(model_id=log.model_id)
- except ModelInfo.DoesNotExist:
- model = None
-
-
-
- plaintext = '{}#{}#{}#{}#{}'.format(
- brand.pk if brand else 0,
- model.pk if model else 0,
- 0,
- log.sn,
- tc.local_string(format='%Y%m%d')[2:],
- )
- ciphertext = get_ciphertext(plaintext, admin_id, True)
- log.ciphertext = ciphertext
- log.save()
- try:
- user = UserInfo.objects.get(user_id=log.user_id, status=True)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
-
- data = {
- "first": {
- "value": u'你的补码申请已通过,请点击消息绑定您的电子保修卡',
- "color": "#173177"
- },
- "keyword1": {
- "value": log.name,
- "color": "#173177"
- },
- "keyword2": {
- "value": log.model_name,
- "color": "#173177"
- },
- "keyword3": {
- "value": log.sn,
- "color": "#173177"
- },
- "remark": {
- "value": u'感谢您的使用',
- "color": "#173177"
- }
- }
- wxcfg = WECHAT.get('MINIAPP', {})
- appid = wxcfg.get('appID')
- sendtemplatemessage(openid=user.openid, template_id=settings.TEMPLATE_ID_COMPLEMENT, data=data, miniappid=appid, minipagepath='/pages/register/consumer/consumer?q={}&marketcode=1'.format(ciphertext))
- return response(data={
- 'ciphertext': ciphertext,
- })
- return response()
- @check_admin
- @transaction.atomic
- def complement_code_contacted(request, administrator):
- log_id = request.POST.get('log_id', '')
- is_contacted = int(request.POST.get('is_contacted', 0))
- try:
- log = ComplementCodeLogInfo.objects.select_for_update().get(log_id=log_id, status=True)
- except ComplementCodeLogInfo.DoesNotExist:
- return response(ComplementCodeStatusCode.COMPLEMENT_CODE_NOT_FOUND)
- log.is_contacted = is_contacted
- log.save()
- return response()
- @check_admin
- def administrator_list(request, administrator):
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- if administrator.admin_type != AdministratorInfo.ADMINISTRATOR:
- return response(AdministratorStatusCode.ADMINISTRATOR_PERMISSION_DENIED)
- logs = AdministratorInfo.objects.filter(status=True).order_by('-created_at')
- count = logs.count()
- logs, left = pagination(logs, page, num)
- logs = [log.admindata for log in logs]
- return response(200, 'Get Admin List Success', u'获取后台管理员成功', data={
- 'logs': logs,
- 'left': left,
- 'count': count
- })
- @check_admin
- def administrator_create(request, administrator):
- admin_type = request.POST.get('admin_type', '')
- phone = request.POST.get('phone', '')
- name = request.POST.get('name', '')
- password = request.POST.get('password', '')
- brand_name = request.POST.get('brand_name', '')
- if administrator.admin_type != AdministratorInfo.ADMINISTRATOR:
- return response(AdministratorStatusCode.ADMINISTRATOR_PERMISSION_DENIED)
- encryption = make_password(strip(password), settings.MAKE_PASSWORD_SALT, settings.MAKE_PASSWORD_HASHER)
- AdministratorInfo.objects.create(
- brand_id=administrator.brand_id,
- brand_name=brand_name or administrator.brand_name,
- admin_type=admin_type,
- phone=phone,
- name=name,
- password='',
- encryption=encryption,
- )
- return response(200, 'Create Admin Success', u'创建后台管理员成功')
- @check_admin
- def administrator_update(request, administrator):
- target_admin_id = request.POST.get('target_admin_id', '')
- admin_type = int(request.POST.get('admin_type', -1))
- phone = request.POST.get('phone', '')
- name = request.POST.get('name', '')
- password = request.POST.get('password', '')
- if administrator.admin_type != AdministratorInfo.ADMINISTRATOR:
- return response(AdministratorStatusCode.ADMINISTRATOR_PERMISSION_DENIED)
- target_admin = AdministratorInfo.objects.get(admin_id=target_admin_id, status=True)
- if admin_type != -1:
- target_admin.admin_type = admin_type
- if phone:
- target_admin.phone = phone
- if name:
- target_admin.name = name
- AdministratorLoginLogInfo.objects.filter(admin_id=target_admin_id).update(admin_name=name)
- if password:
- encryption = make_password(strip(password), settings.MAKE_PASSWORD_SALT, settings.MAKE_PASSWORD_HASHER)
- target_admin.encryption = encryption
- target_admin.save()
- return response(200, 'Update Admin Success', u'更新后台管理员成功')
- @check_admin
- def administrator_delete(request, administrator):
- target_admin_id = request.POST.get('target_admin_id', '')
- if administrator.admin_type != AdministratorInfo.ADMINISTRATOR:
- return response(AdministratorStatusCode.ADMINISTRATOR_PERMISSION_DENIED)
- AdministratorInfo.objects.filter(admin_id=target_admin_id).update(status=False)
- return response(200, 'Delete Admin Success', u'删除后台管理员成功')
- @check_admin
- def administrator_login_list(request, administrator):
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- target_admin_id = request.POST.get('target_admin_id', '')
- if administrator.admin_type != AdministratorInfo.ADMINISTRATOR:
- return response(AdministratorStatusCode.ADMINISTRATOR_PERMISSION_DENIED)
- logs = AdministratorLoginLogInfo.objects.filter(status=True).order_by('-login_at')
- if target_admin_id:
- logs = logs.filter(admin_id=target_admin_id)
- count = logs.count()
- logs, left = pagination(logs, page, num)
- logs = [log.admindata for log in logs]
- return response(200, 'Get Administrator Login List Success', u'获取后台管理员登录日志成功', data={
- 'logs': logs,
- 'left': left,
- 'count': count
- })
|