123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- from __future__ import division
- from django.conf import settings
- from django.contrib.auth.hashers import check_password
- from django_logit import logit
- from django_response import response
- from pywe_miniapp import get_phone_number
- from pywe_storage import RedisStorage
- from TimeConvert import TimeConvert as tc
- from account.models import UserInfo
- from mch.models import (AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, LatestAppInfo,
- LatestAppScreenInfo, ModelInfo, OperatorInfo)
- from statistic.models import (ConsumeDistributorSaleStatisticInfo, ConsumeModelSaleStatisticInfo,
- ConsumeProvinceSaleStatisticInfo, ConsumeSaleStatisticInfo)
- from utils.error.errno_utils import (AdministratorStatusCode, OperatorStatusCode, ProductBrandStatusCode,
- ProductDistributorStatusCode, ProductModelStatusCode, SaleclerkStatusCode,
- UserStatusCode)
- from utils.redis.connect import r
- WECHAT = settings.WECHAT
- @logit
- def optor_login_api(request):
- brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
- if brand_id != settings.KODO_DEFAULT_BRAND_ID:
- return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
- phone = request.POST.get('phone', '')
- password = request.POST.get('password', '')
- try:
- operator = OperatorInfo.objects.get(phone=phone, status=True)
- except OperatorInfo.DoesNotExist:
- return response(OperatorStatusCode.OPERATOR_NOT_FOUND)
- if operator.user_status == OperatorInfo.DISABLED:
- return response(OperatorStatusCode.OPERATOR_NOT_ACTIVATED)
- elif operator.user_status == OperatorInfo.DELETED:
- return response(OperatorStatusCode.OPERATOR_HAS_DELETED)
- if not check_password(password, operator.encryption):
- return response(OperatorStatusCode.OPERATOR_PASSWORD_ERROR)
- return response(200, 'Optor Login Success', u'操作员登录成功', data=operator.kododata)
- @logit
- def admin_login_api(request):
- brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
- if brand_id != settings.KODO_DEFAULT_BRAND_ID:
- return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
- phone = request.POST.get('phone', '')
- password = request.POST.get('password', '')
- try:
- administrator = AdministratorInfo.objects.get(phone=phone, status=True)
- except AdministratorInfo.DoesNotExist:
- return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
- if administrator.user_status == AdministratorInfo.DISABLED:
- return response(AdministratorStatusCode.ADMINISTRATOR_NOT_ACTIVATED)
- elif administrator.user_status == AdministratorInfo.DELETED:
- return response(AdministratorStatusCode.ADMINISTRATOR_HAS_DELETED)
- if not check_password(password, administrator.encryption):
- return response(AdministratorStatusCode.ADMINISTRATOR_PASSWORD_ERROR)
- request.session['admin_id'] = administrator.admin_id
- return response(200, 'Admin Login Success', u'管理员登录成功', data={
- 'qrurl': settings.KODO_CLERK_AUTH_URL.format(administrator.brand_id),
- })
- @logit
- def bmd_infos(request):
- optor_id = request.POST.get('optor_id', '')
- try:
- operator = OperatorInfo.objects.get(operator_id=optor_id, status=True)
- except OperatorInfo.DoesNotExist:
- return response(OperatorStatusCode.OPERATOR_NOT_FOUND)
- if operator.user_status == OperatorInfo.DISABLED:
- return response(OperatorStatusCode.OPERATOR_NOT_ACTIVATED)
- brands = BrandInfo.objects.filter(brand_id=operator.brand_id, status=True).order_by('position')
- brands = [brand.data for brand in brands]
- tmpmodels = ModelInfo.objects.filter(brand_id=operator.brand_id, display=True, status=True).order_by('position')
- models = [model.data for model in tmpmodels]
-
- distributors = DistributorInfo.objects.filter(brand_id=operator.brand_id, status=True).order_by('position')
- distributors = [distributor.data for distributor in distributors]
- return response(200, data={
- 'optor_id': operator.operator_id,
- 'brands': brands,
- 'models': models,
-
- 'distributors': distributors,
- })
- @logit
- def brands_list(request):
- brands = BrandInfo.objects.filter(status=True).order_by('position')
- brands = [brand.data for brand in brands]
- return response(200, data={
- 'brands': brands,
- })
- @logit
- def models_list(request):
- models = ModelInfo.objects.filter(status=True).order_by('position')
- models = [model.data for model in models]
- return response(200, data={
- 'models': models,
- })
- @logit
- def distributors_list(request):
- distributors = DistributorInfo.objects.filter(status=True).order_by('position')
- distributors = [distributor.data for distributor in distributors]
- return response(200, data={
- 'distributors': distributors,
- })
- @logit
- def upgrade_api(request):
- """ APP 升级 """
- src = request.POST.get('src', '')
- if src == 'datascreen':
- latestappmodel = LatestAppScreenInfo
- else:
- latestappmodel = LatestAppInfo
- try:
- appinfo = latestappmodel.objects.filter(status=True)[0].adr
- except IndexError:
- appinfo = {
- 'latest_version_code': '',
- 'latest_version_name': '',
- 'latest_url': '',
- }
- return response(200, 'Get Latest App Success', u'获取最新版信息成功', {
- 'appinfo': appinfo,
- })
- def getPhoneNumber(request):
- user_id = request.POST.get('user_id', '')
-
- if not user_id:
- return ''
- wxcfg = WECHAT.get('MINIAPP', {})
- appid = wxcfg.get('appID')
- secret = wxcfg.get('appsecret')
- iv = request.POST.get('iv', '')
- encryptedData = request.POST.get('encryptedData', '')
-
-
-
-
-
-
-
-
-
-
- phone_number = get_phone_number(appid=appid, secret=secret, unid=user_id, encryptedData=encryptedData, iv=iv, storage=RedisStorage(r))
- return phone_number.get('purePhoneNumber', '')
- @logit(res=True)
- def consumer_phone_api(request):
- return response(200, 'Get Consumer Phone Success', u'获取消费者手机号成功', {
- 'purePhoneNumber': getPhoneNumber(request),
- })
- @logit(res=True)
- def consumer_info_api(request):
- user_id = request.POST.get('user_id', '')
- iv = request.POST.get('iv', '')
- encryptedData = request.POST.get('encryptedData', '')
- lat = request.POST.get('lat', '')
- lon = request.POST.get('lon', '')
- brandID = request.POST.get('BrandID', '')
- modelID = request.POST.get('ModelID', '')
- distributorID = request.POST.get('DistributorID', '')
- serialNo = request.POST.get('SerialNo', '')
- verifyResult = request.POST.get('verifyResult', '')
- purePhoneNumber = request.POST.get('purePhoneNumber', '')
- purePhoneNumber = purePhoneNumber or getPhoneNumber(request)
-
- try:
- user = UserInfo.objects.get(user_id=user_id)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
-
- user.phone = purePhoneNumber
- user.save()
- try:
- brand = BrandInfo.objects.get(pk=brandID)
- except BrandInfo.DoesNotExist:
- brand = None
- except ValueError:
- brand = None
- if not brand:
- try:
- brand = BrandInfo.objects.get(brand_id=brandID)
- except BrandInfo.DoesNotExist:
- return response(ProductBrandStatusCode.BRAND_NOT_FOUND)
- try:
- model = ModelInfo.objects.get(pk=modelID)
- except ModelInfo.DoesNotExist:
- return response(ProductModelStatusCode.MODEL_NOT_FOUND)
- except ValueError:
- return response(ProductModelStatusCode.MODEL_NOT_FOUND)
-
-
-
-
-
-
-
- ConsumeInfoSubmitLogInfo.objects.create(
- user_id=user_id,
- phone=purePhoneNumber,
- iv=iv,
- encryptedData=encryptedData,
- lat=lat,
- lon=lon,
- brand_id=brand.brand_id,
- brand_name=brand.brand_name,
- model_id=model.model_id,
- model_name=model.model_name,
-
-
- distributor_id='',
- distributor_name='',
- serialNo=serialNo,
- verifyResult=verifyResult,
- test_user=user.test_user,
- )
- if not user.test_user:
-
- if ConsumeInfoSubmitLogInfo.objects.filter(
- brand_id=brand.brand_id,
- model_id=model.model_id,
-
- distributor_id='',
- serialNo=serialNo,
- verifyResult=1,
- test_user=False,
- ).count() == 1:
- ymd = int(tc.local_string(format='%Y%m%d'))
-
- ssi, _ = ConsumeSaleStatisticInfo.objects.select_for_update().get_or_create(
- brand_id=brand.brand_id,
- ymd=ymd,
- )
- ssi.num += 1
- ssi.save()
-
- mssi, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create(
- brand_id=brand.brand_id,
- model_id=model.model_id,
- ymd=ymd,
- )
- mssi.model_name = model.model_name
- mssi.num += 1
- mssi.save()
- mssi2, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create(
- brand_id=brand.brand_id,
- model_id=model.model_id,
- ymd=0,
- )
- mssi2.model_name = model.model_name
- mssi2.num += 1
- mssi2.save()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- return response(200, 'Submit Consumer Info Success', u'提交消费者信息成功')
|