136
-        sql.append(PHOTO_INFO_COLUMNS.COMMENT_NUM).append(" INTEGER, ");
137
-        sql.append(PHOTO_INFO_COLUMNS.THUMBUP_NUM).append(" INTEGER, ");
138
-        sql.append(PHOTO_INFO_COLUMNS.GROUP_FROM).append(" INTEGER, ");
139
-        sql.append(PHOTO_INFO_COLUMNS.THUMB_UP).append(" INTEGER, ");
140
-        sql.append(PHOTO_INFO_COLUMNS.PHOTO_FROM).append(" INTEGER, ");
141
-        sql.append(PHOTO_INFO_COLUMNS.THUMBNAIL_WIDTH).append(" SHORT, ");
142
-        sql.append(PHOTO_INFO_COLUMNS.THUMBNAIL_HEIGHT).append(" SHORT, ");
143
-        sql.append(PHOTO_INFO_COLUMNS.BIG_THUMBNAIL_URL).append(" VARCHAR, ");
144
-        sql.append(PHOTO_INFO_COLUMNS.MEDIUM_PHOTO_URL).append(" VARCHAR, ");
145
-        sql.append(PHOTO_INFO_COLUMNS.RAW_PHOTO_URL).append(" VARCHAR, ");
146
-        sql.append(PHOTO_INFO_COLUMNS.SHARE_PHOTO_URL).append(" VARCHAR, ");
147
-        sql.append(PHOTO_INFO_COLUMNS.THUMBNAIL_URL).append(" VARCHAR ");
148
-        sql.append(")");
149
-        db.execSQL(sql.toString());
150
-    }
151
-
152
-
153
-    private void createUploadTable(SQLiteDatabase db){
154
-        StringBuilder sql = new StringBuilder();
155
-        sql.append("CREATE TABLE IF NOT EXISTS ");
156
-        sql.append(UPLOAD_PHOTO_TABLE).append("(");
157
-        sql.append(UPLOAD_PHOTO_COLUMNS.PHOTO_PATH).append(" VARCHAR PRIMARY KEY, ");
158
-        sql.append(UPLOAD_PHOTO_COLUMNS.GROUP_ID).append(" VARCHAR, ");
159
-        sql.append(UPLOAD_PHOTO_COLUMNS.USER_ID).append(" VARCHAR, ");
160
-        sql.append(UPLOAD_PHOTO_COLUMNS.CREATE_TIME).append(" LONG, ");
161
-        sql.append(UPLOAD_PHOTO_COLUMNS.NICK_NAME).append(" VARCHAR ");
60
+        sql.append(PHOTO_INFO_COLUMNS.PHOTO_PATH).append(" VARCHAR, ");
61
+        sql.append(PHOTO_INFO_COLUMNS.LENSMAN_ID).append(" VARCHAR, ");
62
+        sql.append(PHOTO_INFO_COLUMNS.SESSION_ID).append(" VARCHAR, ");
63
+        sql.append(PHOTO_INFO_COLUMNS.IS_RAW_PHOTO).append(" INTEGER, ");
64
+        sql.append(PHOTO_INFO_COLUMNS.IS_UPLOADED).append(" INTEGER, ");
65
+        sql.append(PHOTO_INFO_COLUMNS.CAPTURE_TIME).append(" LONG ");
162 66
         sql.append(")");
163 67
         db.execSQL(sql.toString());
164 68
     }
165 69
 
166
-
167 70
 }

+ 43 - 1
app/src/main/java/ai/pai/lensman/db/DBService.java

@@ -1,9 +1,12 @@
1 1
 package ai.pai.lensman.db;
2 2
 
3
+import android.content.ContentValues;
3 4
 import android.content.Context;
4 5
 import android.database.Cursor;
5 6
 import android.database.sqlite.SQLiteDatabase;
6 7
 
8
+import ai.pai.lensman.bean.PhotoBean;
9
+
7 10
 
8 11
 public class DBService {
9 12
 
@@ -11,7 +14,7 @@ public class DBService {
11 14
     private static Object DB_LOCK = new Object();
12 15
     private DBHelper dbHelper;
13 16
 
14
-    private static final String TAG = "czy";
17
+    private static final String TAG = "DBService";
15 18
 
16 19
     private DBService(Context context) {
17 20
         dbHelper = DBHelper.getInstance(context);
@@ -39,4 +42,43 @@ public class DBService {
39 42
         }
40 43
     }
41 44
 
45
+
46
+    private PhotoBean cursor2PhotoBean(Cursor c) {
47
+        PhotoBean item = new PhotoBean();
48
+        item.lensmanId = c.getString(c.getColumnIndex(DBHelper.PHOTO_INFO_COLUMNS.LENSMAN_ID));
49
+        item.sessionId = c.getString(c.getColumnIndex(DBHelper.PHOTO_INFO_COLUMNS.SESSION_ID));
50
+        item.isRawPhoto =(c.getInt(c.getColumnIndex(DBHelper.PHOTO_INFO_COLUMNS.IS_RAW_PHOTO))>0);
51
+        item.isUploaded = (c.getInt(c.getColumnIndex(DBHelper.PHOTO_INFO_COLUMNS.IS_UPLOADED))>0);
52
+        item.captureTime = c.getLong(c.getColumnIndex(DBHelper.PHOTO_INFO_COLUMNS.CAPTURE_TIME));
53
+        item.photoId = c.getLong(c.getColumnIndex(DBHelper.PHOTO_INFO_COLUMNS.PHOTO_ID));
54
+        item.photoName = c.getString(c.getColumnIndex(DBHelper.PHOTO_INFO_COLUMNS.PHOTO_NAME));
55
+        item.photoPath = c.getString(c.getColumnIndex(DBHelper.PHOTO_INFO_COLUMNS.PHOTO_PATH));
56
+        return item;
57
+    }
58
+
59
+    private ContentValues photoBean2ContentValues(PhotoBean item) {
60
+        ContentValues cv = new ContentValues();
61
+        cv.put(DBHelper.PHOTO_INFO_COLUMNS.CAPTURE_TIME, item.captureTime);
62
+        cv.put(DBHelper.PHOTO_INFO_COLUMNS.IS_RAW_PHOTO, item.isRawPhoto ? 1: 0);
63
+        cv.put(DBHelper.PHOTO_INFO_COLUMNS.PHOTO_ID, item.photoId);
64
+        cv.put(DBHelper.PHOTO_INFO_COLUMNS.PHOTO_NAME, item.photoName);
65
+        cv.put(DBHelper.PHOTO_INFO_COLUMNS.PHOTO_PATH, item.photoPath);
66
+        cv.put(DBHelper.PHOTO_INFO_COLUMNS.SESSION_ID, item.sessionId);
67
+        cv.put(DBHelper.PHOTO_INFO_COLUMNS.LENSMAN_ID,item.lensmanId);
68
+        cv.put(DBHelper.PHOTO_INFO_COLUMNS.IS_UPLOADED,item.isUploaded);
69
+        return cv;
70
+    }
71
+
72
+    public void addPhotoBean(PhotoBean bean){
73
+
74
+    }
75
+
76
+    public void updatePhotoBean(PhotoBean bean){
77
+
78
+    }
79
+
80
+    public void deletePhotoBean(PhotoBean bean){
81
+
82
+    }
83
+
42 84
 }

+ 19 - 0
app/src/main/java/ai/pai/lensman/service/UploadService.java

@@ -0,0 +1,19 @@
1
+package ai.pai.lensman.service;
2
+
3
+import android.app.IntentService;
4
+import android.content.Intent;
5
+
6
+public class UploadService extends IntentService {
7
+
8
+    private static final String TAG = "UploadService";
9
+
10
+    public UploadService(){
11
+        super(TAG);
12
+    }
13
+
14
+    @Override
15
+    protected void onHandleIntent(Intent intent) {
16
+
17
+    }
18
+
19
+}

+ 0 - 10
app/src/main/java/ai/pai/lensman/session/PhotoBean.java

@@ -1,10 +0,0 @@
1
-package ai.pai.lensman.session;
2
-
3
-
4
-import java.io.Serializable;
5
-
6
-public class PhotoBean implements Serializable{
7
-
8
-    public String photoPath;
9
-
10
-}

+ 1 - 0
app/src/main/java/ai/pai/lensman/session/PhotoRecyclerAdapter.java

@@ -12,6 +12,7 @@ import com.android.common.utils.DeviceUtils;
12 12
 import java.util.ArrayList;
13 13
 
14 14
 import ai.pai.lensman.R;
15
+import ai.pai.lensman.bean.PhotoBean;
15 16
 import butterknife.BindView;
16 17
 import butterknife.ButterKnife;
17 18
 

+ 2 - 1
app/src/main/java/ai/pai/lensman/session/SessionActivity.java

@@ -10,8 +10,9 @@ import android.widget.TextView;
10 10
 
11 11
 import ai.pai.lensman.R;
12 12
 import ai.pai.lensman.base.BaseActivity;
13
+import ai.pai.lensman.bean.PhotoBean;
13 14
 import ai.pai.lensman.qrcode.QRCaptureActivity;
14
-import ai.pai.lensman.upload.SessionBean;
15
+import ai.pai.lensman.bean.SessionBean;
15 16
 import butterknife.BindView;
16 17
 import butterknife.ButterKnife;
17 18
 import butterknife.OnClick;

+ 2 - 0
app/src/main/java/ai/pai/lensman/session/SessionContract.java

@@ -1,5 +1,7 @@
1 1
 package ai.pai.lensman.session;
2 2
 
3
+import ai.pai.lensman.bean.PhotoBean;
4
+
3 5
 /**
4 6
  * Created by chengzhenyu on 2016/7/7.
5 7
  */

+ 1 - 0
app/src/main/java/ai/pai/lensman/session/SessionInteractor.java

@@ -6,6 +6,7 @@ import java.util.List;
6 6
 import java.util.Timer;
7 7
 import java.util.TimerTask;
8 8
 
9
+import ai.pai.lensman.bean.PhotoBean;
9 10
 import ai.pai.lensman.box.ApiClient;
10 11
 import ai.pai.lensman.db.Preferences;
11 12
 import retrofit2.Call;

+ 2 - 0
app/src/main/java/ai/pai/lensman/session/SessionPresenterImpl.java

@@ -4,6 +4,8 @@ import android.content.Context;
4 4
 
5 5
 import java.util.ArrayList;
6 6
 
7
+import ai.pai.lensman.bean.PhotoBean;
8
+
7 9
 public class SessionPresenterImpl implements SessionContract.SessionPresenter ,SessionInteractor.SessionListener{
8 10
 
9 11
     private Context context;

+ 1 - 0
app/src/main/java/ai/pai/lensman/upload/SessionRecyclerAdapter.java

@@ -13,6 +13,7 @@ import com.android.common.utils.DeviceUtils;
13 13
 import java.util.ArrayList;
14 14
 
15 15
 import ai.pai.lensman.R;
16
+import ai.pai.lensman.bean.SessionBean;
16 17
 import butterknife.BindView;
17 18
 import butterknife.ButterKnife;
18 19
 

+ 1 - 0
app/src/main/java/ai/pai/lensman/upload/UploadActivity.java

@@ -13,6 +13,7 @@ import java.util.ArrayList;
13 13
 
14 14
 import ai.pai.lensman.R;
15 15
 import ai.pai.lensman.base.BaseActivity;
16
+import ai.pai.lensman.bean.SessionBean;
16 17
 import ai.pai.lensman.briefs.BriefsActivity;
17 18
 import butterknife.BindView;
18 19
 import butterknife.ButterKnife;

+ 2 - 0
app/src/main/java/ai/pai/lensman/upload/UploadContract.java

@@ -2,6 +2,8 @@ package ai.pai.lensman.upload;
2 2
 
3 3
 import java.util.ArrayList;
4 4
 
5
+import ai.pai.lensman.bean.SessionBean;
6
+
5 7
 /**
6 8
  * Created by chengzhenyu on 2016/7/7.
7 9
  */

+ 1 - 0
app/src/main/java/ai/pai/lensman/upload/UploadPresenterImpl.java

@@ -5,6 +5,7 @@ import android.content.Intent;
5 5
 
6 6
 import java.util.ArrayList;
7 7
 
8
+import ai.pai.lensman.bean.SessionBean;
8 9
 import ai.pai.lensman.session.SessionActivity;
9 10
 
10 11
 public class UploadPresenterImpl implements UploadContract.UploadPresenter {

kodo - Gogs: Go Git Service

説明なし

sale_views.py 19KB

    # -*- coding: utf-8 -*- from __future__ import division import os import string import sys from django.conf import settings from django.db import transaction from django_logit import logit from django_response import response from paginator import pagination from TimeConvert import TimeConvert as tc from account.models import UserInfo from coupon.models import UserCouponInfo from integral.models import SaleclerkIntegralIncomeExpensesInfo, SaleclerkSubmitLogInfo from logs.models import MchInfoEncryptLogInfo from mch.models import BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo, SaleclerkInfo from statistic.models import (DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo, SaleclerkSaleStatisticInfo, SaleStatisticInfo) from utils.error.errno_utils import (CouponStatusCode, ProductBrandStatusCode, ProductDistributorStatusCode, ProductMachineStatusCode, ProductModelStatusCode, SaleclerkStatusCode) @logit @transaction.atomic def clerk_sale_submit_api(request): user_id = request.POST.get('user_id', '') iv = request.POST.get('iv', '') encryptedData = request.POST.get('encryptedData', '') lat = request.POST.get('lat', .0) lon = request.POST.get('lon', .0) brandID = request.POST.get('BrandID', settings.KODO_DEFAULT_BRAND_PK) modelID = request.POST.get('ModelID', '') distributorID = request.POST.get('DistributorID', '') serialNo = request.POST.get('SerialNo', '') verifyResult = request.POST.get('verifyResult', '') remark = request.POST.get('remark', '') is_wxwork = request.POST.get('is_wxwork', False) consumer_name = request.POST.get('consumer_name', '') consumer_phone = request.POST.get('consumer_phone', '') file_path = request.POST.get('file_path', '') code_image_path = request.POST.get('code_image_path', '') trackingNo = request.POST.get('trackingNo', '') code_version = request.POST.get('code_version', 0) test_sn = serialNo in settings.TESTING_SNS if lat == 'undefined': lat = .0 if lon == 'undefined': lon = .0 try: user = UserInfo.objects.get(user_id=user_id, status=True) except UserInfo.DoesNotExist: return response(SaleclerkStatusCode.CLERK_NOT_FOUND) 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) try: clerk = SaleclerkInfo.objects.select_for_update().get(brand_id=brand.brand_id, unionid=user.unionid, status=True) except SaleclerkInfo.DoesNotExist: return response(SaleclerkStatusCode.CLERK_NOT_FOUND) if not clerk.is_auth: return response(SaleclerkStatusCode.CLERK_NOT_AUTH) try: distributor = DistributorInfo.objects.get(distributor_id=clerk.distributor_id) except DistributorInfo.DoesNotExist: return response(ProductDistributorStatusCode.DISTRIBUTOR_NOT_FOUND) except ValueError: return response(ProductDistributorStatusCode.DISTRIBUTOR_NOT_FOUND) ymd = tc.local_string(format='%Y%m%d') # 是否被消费者扫过 has_scan = ConsumeInfoSubmitLogInfo.objects.filter(model_id=model.model_id, serialNo=serialNo, status=True).exists() # 是否是新二维码,即统览码2 if not code_version: code_version = 1 code = filter(lambda ch: ch in '0123456789', serialNo) encrypt_logs = MchInfoEncryptLogInfo.objects.filter(model_pk=model.pk, sn=code) if encrypt_logs: code_version = encrypt_logs[0].version # 店员提交记录 ssli = SaleclerkSubmitLogInfo.objects.create( brand_pk=brand.pk, brand_name=brand.brand_name, model_pk=modelID, model_name=model.model_name, model_uni_name=model.model_uni_name, distributor_pk=distributorID, distributor_name=distributor.distributor_name, clerk_id=clerk.clerk_id, clerk_name=clerk.clerk_name, code=serialNo, consumer_name=consumer_name, consumer_phone=consumer_phone, remark=remark, lat=lat, lon=lon, image=file_path, code_image=code_image_path, test_user=clerk.test_user, test_sn=test_sn, ym=ymd[:6], ymd=ymd, has_scan=has_scan, trackingNo=trackingNo, is_wxwork=is_wxwork, code_version=code_version, ) if test_sn: return response(200, data={ 'integral': 0, 'total_integral': clerk.integral, }) try: sci = SaleclerkIntegralIncomeExpensesInfo.objects.get( brand_id=brand.brand_id, model_id=model.model_id, code=serialNo, status=True ) except SaleclerkIntegralIncomeExpensesInfo.DoesNotExist: sci = None if sci: ssli.dupload = True ssli.save() try: clerk = SaleclerkInfo.objects.get(clerk_id=sci.clerk_id, status=True) except SaleclerkInfo.DoesNotExist: clerk = None return response(SaleclerkStatusCode.DUPLICATE_SUBMIT, data={ 'franchiser_name': clerk.distributor_name, 'clerk_name': clerk.clerk_name, } if clerk else {}) # 店员积分 integral = model.integral clerk.num += 1 clerk.integral += integral clerk.total_integral += integral clerk.save() # 店员积分记录 if integral > 0: SaleclerkIntegralIncomeExpensesInfo.objects.create( clerk_id=clerk.clerk_id, type=SaleclerkIntegralIncomeExpensesInfo.INCOME, brand_id=brand.brand_id, brand_name=brand.brand_name, model_id=model.model_id, model_name=model.model_name, distributor_id=distributor.distributor_id, distributor_name=distributor.distributor_name, code=serialNo, consumer_name=consumer_name, consumer_phone=consumer_phone, lat=lat, lon=lon, image=file_path, integral=integral, left_integral=clerk.total_integral, test_user=clerk.test_user, ) # TODO: Make statistic async if not clerk.test_user and not sci: # 日销量统计 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, ) mssi.saleclerks += [clerk.clerk_id] 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], ) mssi.saleclerks += [clerk.clerk_id] 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], ) mssi.saleclerks += [clerk.clerk_id] 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() return response(200, data={ 'integral': integral, 'total_integral': clerk.integral, }) @logit def clerk_integral_list_api(request): brandID = request.POST.get('BrandID', settings.KODO_DEFAULT_BRAND_PK) user_id = request.POST.get('user_id', '') ftime = request.POST.get('ftime', '') ttime = request.POST.get('ttime', '') page = int(request.POST.get('page', 1)) num = int(request.POST.get('num', settings.GROUP_NUM_PER_PAGE)) try: user = UserInfo.objects.get(user_id=user_id, status=True) except UserInfo.DoesNotExist: return response(SaleclerkStatusCode.CLERK_NOT_FOUND) 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: clerk = SaleclerkInfo.objects.get(brand_id=brand.brand_id, unionid=user.unionid, status=True) except SaleclerkInfo.DoesNotExist: return response(SaleclerkStatusCode.CLERK_NOT_FOUND) integrals = SaleclerkIntegralIncomeExpensesInfo.objects.filter(clerk_id=clerk.clerk_id).order_by('-pk') if ftime: integrals = integrals.filter(created_at__gte=tc.string_to_utc_datetime(ftime)) if ttime: integrals = integrals.filter(created_at__lte=tc.string_to_utc_datetime(ttime)) integrals, left = pagination(integrals, page, num) integrals = [integral.data for integral in integrals] return response(200, data={ 'integrals': integrals, 'total_integral': clerk.integral, 'left_integral': clerk.integral, }) @logit def clerk_model_list_api(request): brandID = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_PK) user_id = request.POST.get('user_id', '') try: user = UserInfo.objects.get(user_id=user_id, status=True) except UserInfo.DoesNotExist: return response(SaleclerkStatusCode.CLERK_NOT_FOUND) 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: clerk = SaleclerkInfo.objects.get(brand_id=brand.brand_id, unionid=user.unionid, status=True) except SaleclerkInfo.DoesNotExist: return response(SaleclerkStatusCode.CLERK_NOT_FOUND) models = ModelInfo.objects.filter(status=True).order_by('position') models = [model.data for model in models] return response(200, data={ 'models': models, }) @logit def clerk_query_coupon(request): brandID = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_PK) user_id = request.POST.get('user_id', '') user_coupon_id = request.POST.get('user_coupon_id', '') try: user = UserInfo.objects.get(user_id=user_id, status=True) except UserInfo.DoesNotExist: return response(SaleclerkStatusCode.CLERK_NOT_FOUND) 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: clerk = SaleclerkInfo.objects.get(brand_id=brand.brand_id, unionid=user.unionid, status=True) except SaleclerkInfo.DoesNotExist: return response(SaleclerkStatusCode.CLERK_NOT_FOUND) try: user_coupon = UserCouponInfo.objects.get(user_coupon_id=user_coupon_id) except UserCouponInfo.DoesNotExist: return response(CouponStatusCode.COUPON_NOT_FOUND) return response(200, data={ 'user_coupon': user_coupon.data }) @logit def clerk_writeoff_coupon(request): brandID = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_PK) user_id = request.POST.get('user_id', '') user_coupon_id = request.POST.get('user_coupon_id', '') try: user = UserInfo.objects.get(user_id=user_id, status=True) except UserInfo.DoesNotExist: return response(SaleclerkStatusCode.CLERK_NOT_FOUND) 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: clerk = SaleclerkInfo.objects.get(brand_id=brand.brand_id, unionid=user.unionid, status=True) except SaleclerkInfo.DoesNotExist: return response(SaleclerkStatusCode.CLERK_NOT_FOUND) try: user_coupon = UserCouponInfo.objects.get(user_coupon_id=user_coupon_id) if user_coupon.has_used: return response(CouponStatusCode.COUPON_HAS_USED) elif user_coupon.is_coupon_admin_writeoff: return response(CouponStatusCode.COUPON_PERMISSION_DENIED) elif not user_coupon.has_expired: user_coupon.clerk_id = clerk.clerk_id user_coupon.clerk_name = clerk.clerk_name user_coupon.distributor_id = clerk.distributor_id user_coupon.distributor_name = clerk.distributor_name user_coupon.has_used = True user_coupon.used_at = tc.utc_datetime() user_coupon.save() else: return response(CouponStatusCode.COUPON_EXPIRED) except UserCouponInfo.DoesNotExist: return response(CouponStatusCode.COUPON_NOT_FOUND) return response(200, 'Write Off Coupon Success', u'劵核销成功') @logit def clerk_checkout_serialNo_api(request): brandID = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_PK) user_id = request.POST.get('user_id', '') serialNo = request.POST.get('serial', '') model_pk = request.POST.get('model_pk', '') try: user = UserInfo.objects.get(user_id=user_id, status=True) except UserInfo.DoesNotExist: return response(SaleclerkStatusCode.CLERK_NOT_FOUND) 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: clerk = SaleclerkInfo.objects.get(brand_id=brand.brand_id, unionid=user.unionid, status=True) except SaleclerkInfo.DoesNotExist: return response(SaleclerkStatusCode.CLERK_NOT_FOUND) log = MchInfoEncryptLogInfo.objects.filter(model_pk=model_pk, sn=serialNo).order_by('-created_at') if not log: return response(ProductMachineStatusCode.SN_NOT_FOUND) return response(200, 'SerialNo Checkout Success', u'序列号校验成功', data={ 'code_version': log[0].version })