| @@ -29,10 +29,11 @@ from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityContribution | ||
| 29 | 29 | MemberActivityGroupShareInfo, MemberActivityInfo, MemberActivitySignupInfo) | 
| 30 | 30 | from pre.custom_message import sendtemplatemessage, sendwxasubscribemessage | 
| 31 | 31 | from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo | 
| 32 | -from utils.error.errno_utils import (AdministratorStatusCode, ComplementCodeStatusCode, | |
| 32 | +from utils.error.errno_utils import (AdministratorStatusCode, ComplementCodeStatusCode, CouponStatusCode, | |
| 33 | 33 | MemberActivityContributionStatusCode, MemberActivityContributionWelfareStatusCode, | 
| 34 | - MemberActivityContributionWelfareUnblockingStatusCode, ProductBrandStatusCode, | |
| 35 | - ProductCouponStatusCode, ProductMachineStatusCode, UserStatusCode) | |
| 34 | + MemberActivityContributionWelfareUnblockingStatusCode, MemberActivityStatusCode, | |
| 35 | + MemberGoodStatusCode, ProductCouponStatusCode, ProductMachineStatusCode, | |
| 36 | + UserStatusCode) | |
| 36 | 37 |  | 
| 37 | 38 |  | 
| 38 | 39 | WECHAT = settings.WECHAT | 
| @@ -791,7 +792,7 @@ def member_activity_detail(request, administrator): | ||
| 791 | 792 | try: | 
| 792 | 793 | log = MemberActivityInfo.objects.get(activity_id=activity_id) | 
| 793 | 794 | except MemberActivityInfo.DoesNotExist: | 
| 794 | - return response() | |
| 795 | + return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND) | |
| 795 | 796 |  | 
| 796 | 797 |      return response(200, 'Get Member Activity Record Details Success', u'获取会员活动详情成功', data={ | 
| 797 | 798 | 'log': log.admindetails, | 
| @@ -804,10 +805,10 @@ def member_activity_update(request, administrator): | ||
| 804 | 805 |      activity_type = int(request.POST.get('activity_type', 0)) | 
| 805 | 806 |      title = request.POST.get('title', '') | 
| 806 | 807 |      subtitle = request.POST.get('subtitle', '') | 
| 807 | -    start_date = request.POST.get('start_date', '') or settings.DEFAULT_START_DATE | |
| 808 | -    end_date = date = request.POST.get('date', '') or request.POST.get('end_date', '') or settings.DEFAULT_END_DATE | |
| 809 | -    start_display_date = request.POST.get('start_display_date', '') or settings.DEFAULT_START_DATE | |
| 810 | -    end_display_date = request.POST.get('end_display_date', '') or settings.DEFAULT_END_DATE | |
| 808 | +    start_date = tc.to_date(request.POST.get('start_date', '') or settings.DEFAULT_START_DATE) | |
| 809 | +    end_date = date = tc.to_date(request.POST.get('date', '') or request.POST.get('end_date', '') or settings.DEFAULT_END_DATE) | |
| 810 | +    start_display_date = tc.to_date(request.POST.get('start_display_date', '') or settings.DEFAULT_START_DATE) | |
| 811 | +    end_display_date = tc.to_date(request.POST.get('end_display_date', '') or settings.DEFAULT_END_DATE) | |
| 811 | 812 |      city = request.POST.get('city', '') | 
| 812 | 813 |      location = request.POST.get('location', '') | 
| 813 | 814 |      integral = int(request.POST.get('integral', 0)) | 
| @@ -828,7 +829,7 @@ def member_activity_update(request, administrator): | ||
| 828 | 829 | try: | 
| 829 | 830 | log = MemberActivityInfo.objects.get(activity_id=activity_id, status=True) | 
| 830 | 831 | except MemberActivityInfo.DoesNotExist: | 
| 831 | - return response() | |
| 832 | + return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND) | |
| 832 | 833 |  | 
| 833 | 834 | log.activity_type = activity_type | 
| 834 | 835 | log.title = title | 
| @@ -1246,7 +1247,7 @@ def coupon_detail(request, administrator): | ||
| 1246 | 1247 | try: | 
| 1247 | 1248 | log = CouponInfo.objects.get(coupon_id=coupon_id) | 
| 1248 | 1249 | except CouponInfo.DoesNotExist: | 
| 1249 | - return response() | |
| 1250 | + return response(CouponStatusCode.COUPON_NOT_FOUND) | |
| 1250 | 1251 |  | 
| 1251 | 1252 | log = log.admindetails | 
| 1252 | 1253 |  | 
| @@ -1299,7 +1300,7 @@ def coupon_update(request, administrator): | ||
| 1299 | 1300 | try: | 
| 1300 | 1301 | log = CouponInfo.objects.get(coupon_id=coupon_id, status=True) | 
| 1301 | 1302 | except CouponInfo.DoesNotExist: | 
| 1302 | - return response() | |
| 1303 | + return response(CouponStatusCode.COUPON_NOT_FOUND) | |
| 1303 | 1304 |  | 
| 1304 | 1305 | log.brand_id = administrator.brand_id | 
| 1305 | 1306 | log.coupon_title = coupon_title | 
| @@ -1323,7 +1324,7 @@ def coupon_delete(request, administrator): | ||
| 1323 | 1324 | try: | 
| 1324 | 1325 | log = CouponInfo.objects.get(coupon_id=coupon_id, status=True) | 
| 1325 | 1326 | except CouponInfo.DoesNotExist: | 
| 1326 | - return response() | |
| 1327 | + return response(CouponStatusCode.COUPON_NOT_FOUND) | |
| 1327 | 1328 |  | 
| 1328 | 1329 | log.status = False | 
| 1329 | 1330 | log.save() | 
| @@ -1357,7 +1358,7 @@ def member_goods_detail(request, administrator): | ||
| 1357 | 1358 | try: | 
| 1358 | 1359 | log = GoodsInfo.objects.get(good_id=good_id) | 
| 1359 | 1360 | except GoodsInfo.DoesNotExist: | 
| 1360 | - return response() | |
| 1361 | + return response(MemberGoodStatusCode.GOOD_NOT_FOUND) | |
| 1361 | 1362 |  | 
| 1362 | 1363 | log = log.admindetails | 
| 1363 | 1364 |  | 
| @@ -1382,7 +1383,7 @@ def member_goods_update(request, administrator): | ||
| 1382 | 1383 | try: | 
| 1383 | 1384 | log = GoodsInfo.objects.get(good_id=good_id, status=True) | 
| 1384 | 1385 | except GoodsInfo.DoesNotExist: | 
| 1385 | - return response() | |
| 1386 | + return response(MemberGoodStatusCode.GOOD_NOT_FOUND) | |
| 1386 | 1387 |  | 
| 1387 | 1388 | log.title = title | 
| 1388 | 1389 | log.desc = desc | 
| @@ -1519,7 +1520,7 @@ def complement_code_audit(request, administrator): | ||
| 1519 | 1520 | try: | 
| 1520 | 1521 | user = UserInfo.objects.get(user_id=log.user_id, status=True) | 
| 1521 | 1522 | except UserInfo.DoesNotExist: | 
| 1522 | - return response() | |
| 1523 | + return response(UserStatusCode.USER_NOT_FOUND) | |
| 1523 | 1524 |  | 
| 1524 | 1525 | # Send template_message | 
| 1525 | 1526 |          data = { | 
| @@ -422,7 +422,7 @@ def activity_signup_info(request): | ||
| 422 | 422 | try: | 
| 423 | 423 | contribution = MemberActivityContributionInfo.objects.get(user_id=user_id, activity_id=activity_id, content_type=0, status=True) | 
| 424 | 424 | except MemberActivityContributionInfo.DoesNotExist: | 
| 425 | - return response() | |
| 425 | + return response(MemberActivityContributionStatusCode.ACTIVITY_CONTRIBUTION_NOT_FOUND) | |
| 426 | 426 |  | 
| 427 | 427 |      return response(data={ | 
| 428 | 428 | 'signup_info': signup_info.data, | 
| @@ -16,7 +16,8 @@ from staff.models import StaffDeleteClerkSaleSubmitLogInfo, StaffDeleteConsumerS | ||
| 16 | 16 | from statistic.models import (ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo, | 
| 17 | 17 | DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo, | 
| 18 | 18 | SaleclerkSaleStatisticInfo, SaleStatisticInfo) | 
| 19 | -from utils.error.errno_utils import AdministratorStatusCode | |
| 19 | +from utils.error.errno_utils import (AdministratorStatusCode, ProductBrandStatusCode, ProductDistributorStatusCode, | |
| 20 | + ProductModelStatusCode, SaleclerkStatusCode, UserStatusCode) | |
| 20 | 21 |  | 
| 21 | 22 |  | 
| 22 | 23 | def exec_del_clerk_sale_submit(pk, admin_id): | 
| @@ -35,22 +36,22 @@ def exec_del_clerk_sale_submit(pk, admin_id): | ||
| 35 | 36 | try: | 
| 36 | 37 | brand = BrandInfo.objects.get(pk=ssli.brand_pk) | 
| 37 | 38 | except BrandInfo.DoesNotExist: | 
| 38 | - return response() | |
| 39 | + return response(ProductBrandStatusCode) | |
| 39 | 40 |  | 
| 40 | 41 | try: | 
| 41 | 42 | model = ModelInfo.objects.get(pk=ssli.model_pk) | 
| 42 | 43 | except ModelInfo.DoesNotExist: | 
| 43 | - return response() | |
| 44 | + return response(ProductModelStatusCode) | |
| 44 | 45 |  | 
| 45 | 46 | try: | 
| 46 | 47 | clerk = SaleclerkInfo.objects.select_for_update().get(clerk_id=ssli.clerk_id, status=True) | 
| 47 | 48 | except SaleclerkInfo.DoesNotExist: | 
| 48 | - return response() | |
| 49 | + return response(SaleclerkStatusCode.CLERK_NOT_FOUND) | |
| 49 | 50 |  | 
| 50 | 51 | try: | 
| 51 | 52 | distributor = DistributorInfo.objects.get(distributor_id=clerk.distributor_id) | 
| 52 | 53 | except DistributorInfo.DoesNotExist: | 
| 53 | - return response() | |
| 54 | + return response(ProductDistributorStatusCode.DISTRIBUTOR_NOT_FOUND) | |
| 54 | 55 |  | 
| 55 | 56 | ymd = str(ssli.ymd) | 
| 56 | 57 |  | 
| @@ -280,17 +281,17 @@ def exec_del_consumer_submit(pk, admin_id): | ||
| 280 | 281 | try: | 
| 281 | 282 | brand = BrandInfo.objects.get(brand_id=ssli.brand_id) | 
| 282 | 283 | except BrandInfo.DoesNotExist: | 
| 283 | - return response() | |
| 284 | + return response(ProductBrandStatusCode.BRAND_NOT_FOUND) | |
| 284 | 285 |  | 
| 285 | 286 | try: | 
| 286 | 287 | model = ModelInfo.objects.get(model_id=ssli.model_id) | 
| 287 | 288 | except ModelInfo.DoesNotExist: | 
| 288 | - return response() | |
| 289 | + return response(ProductModelStatusCode.MODEL_NOT_FOUND) | |
| 289 | 290 |  | 
| 290 | 291 | try: | 
| 291 | 292 | user = UserInfo.objects.select_for_update().get(user_id=ssli.user_id) | 
| 292 | 293 | except UserInfo.DoesNotExist: | 
| 293 | - return response() | |
| 294 | + return response(UserStatusCode.USER_NOT_FOUND) | |
| 294 | 295 |  | 
| 295 | 296 | # 记录删除日志 | 
| 296 | 297 | StaffDeleteConsumerSubmitLogInfo.objects.create( | 
| @@ -8,6 +8,78 @@ class ParamStatusCode(BaseStatusCode): | ||
| 8 | 8 | PARAM_NOT_FOUND = StatusCodeField(400000, 'Param Not Found', description=u'参数不存在') | 
| 9 | 9 |  | 
| 10 | 10 |  | 
| 11 | +class PermissionStatusCode(BaseStatusCode): | |
| 12 | + """ 4099xx 权限相关错误码 """ | |
| 13 | + PERMISSION_DENIED = StatusCodeField(409900, 'Permission Denied', description=u'权限不足') | |
| 14 | + | |
| 15 | + | |
| 16 | +class AdministratorStatusCode(BaseStatusCode): | |
| 17 | + """ 操作员相关错误码 4002xx """ | |
| 18 | + ADMINISTRATOR_NOT_FOUND = StatusCodeField(400201, 'Administrator Not Found', description=u'管理员不存在') | |
| 19 | + ADMINISTRATOR_PERMISSION_DENIED = StatusCodeField(508002, 'Administrator Permission Denied', description=u'管理员权限不足') | |
| 20 | + | |
| 21 | + # 密码 | |
| 22 | + ADMINISTRATOR_PASSWORD_ERROR = StatusCodeField(400202, 'Administrator Password Error', description=u'管理员密码错误') | |
| 23 | + # 手机号 | |
| 24 | + ADMINISTRATOR_PHONE_ALREADY_EXISTS = StatusCodeField(400205, 'Administrator Phone Already Exists', description=u'管理员手机号已经存在') | |
| 25 | + # 状态 | |
| 26 | + ADMINISTRATOR_NOT_ACTIVATED = StatusCodeField(400215, 'Administrator Not Activated', description=u'管理员未激活') | |
| 27 | + ADMINISTRATOR_HAS_DISABLED = StatusCodeField(400216, 'Administrator Has Disabled', description=u'管理员已禁用') | |
| 28 | + ADMINISTRATOR_HAS_DELETED = StatusCodeField(400217, 'Administrator Has Deleted', description=u'管理员已删除') | |
| 29 | + # 管理员 | |
| 30 | + MAINTENANCE_NOT_FOUND = StatusCodeField(400251, 'Maintenance Not Found', description=u'核销员不存在') | |
| 31 | + | |
| 32 | + | |
| 33 | +class OperatorStatusCode(BaseStatusCode): | |
| 34 | + """ 操作员相关错误码 4003xx """ | |
| 35 | + OPERATOR_NOT_FOUND = StatusCodeField(400301, 'Operator Not Found', description=u'操作员不存在') | |
| 36 | + # 密码 | |
| 37 | + OPERATOR_PASSWORD_ERROR = StatusCodeField(400302, 'Operator Password Error', description=u'操作员密码错误') | |
| 38 | + # 手机号 | |
| 39 | + OPERATOR_PHONE_ALREADY_EXISTS = StatusCodeField(400305, 'Operator Phone Already Exists', description=u'操作员手机号已经存在') | |
| 40 | + # 状态 | |
| 41 | + OPERATOR_NOT_ACTIVATED = StatusCodeField(400315, 'Operator Not Activated', description=u'操作员未激活') | |
| 42 | + OPERATOR_HAS_DISABLED = StatusCodeField(400316, 'Operator Has Disabled', description=u'操作员已禁用') | |
| 43 | + OPERATOR_HAS_DELETED = StatusCodeField(400317, 'Operator Has Deleted', description=u'操作员已删除') | |
| 44 | + | |
| 45 | + | |
| 46 | +class UserStatusCode(BaseStatusCode): | |
| 47 | + """ 用户相关错误码 4005xx """ | |
| 48 | + USER_NOT_FOUND = StatusCodeField(400501, 'User Not Found', description=u'用户不存在') | |
| 49 | + USER_PASSWORD_ERROR = StatusCodeField(400502, 'User Password Error', description=u'用户密码错误') | |
| 50 | + USERNAME_HAS_REGISTERED = StatusCodeField(400503, 'Username Has Registered', description=u'用户名已注册') | |
| 51 | + # 游客 | |
| 52 | + GUEST_NOT_ALLOWED = StatusCodeField(400511, 'Guest Not ALLOWED', description=u'游客登录未开启') | |
| 53 | + # 身份 | |
| 54 | + USER_NOT_LENSMAN = StatusCodeField(400521, 'User Not Lensman', description=u'用户非摄影师') | |
| 55 | + USER_NOT_TOURGUIDE = StatusCodeField(400522, 'User Not Tourguide', description=u'用户非导游') | |
| 56 | + | |
| 57 | + | |
| 58 | +class PhoneStatusCode(BaseStatusCode): | |
| 59 | + """ 手机相关错误码 4006xx """ | |
| 60 | + PHONE_NOT_FOUND = StatusCodeField(400601, 'Phone Not Found', description=u'手机不存在') | |
| 61 | + | |
| 62 | + | |
| 63 | +class WechatStatusCode(BaseStatusCode): | |
| 64 | + """ 微信相关错误码 4007xx """ | |
| 65 | + WECHAT_NOT_FOUND = StatusCodeField(400701, 'Wechat Not Found', description=u'微信不存在') | |
| 66 | + UNIONID_NOT_FOUND = StatusCodeField(400702, 'Unionid Not Found', description=u'微信 UNIONID 不存在') | |
| 67 | + OPENID_NOT_FOUND = StatusCodeField(400703, 'OPENID Not Found', description=u'微信 OPENID 不存在') | |
| 68 | + | |
| 69 | + | |
| 70 | +class ScreenStatusCode(BaseStatusCode): | |
| 71 | + """ 群组/团相关错误码 4030xx """ | |
| 72 | + QRCODE_NOT_SCAN = StatusCodeField(403001, 'QRCode Not Scan', description=u'二维码未扫描') | |
| 73 | + | |
| 74 | + | |
| 75 | +class CouponStatusCode(BaseStatusCode): | |
| 76 | + """ 4050xx 优惠劵相关错误码 """ | |
| 77 | + COUPON_NOT_FOUND = StatusCodeField(405001, 'Coupon Not Found', description=u'劵不存在') | |
| 78 | + COUPON_EXPIRED = StatusCodeField(405002, 'Coupon Expired', description=u'劵已过期') | |
| 79 | + COUPON_PERMISSION_DENIED = StatusCodeField(405003, 'Permission Denied', description=u'核销劵权限不足') | |
| 80 | + COUPON_HAS_USED = StatusCodeField(405004, 'Coupon Has Used', description=u'劵已核销') | |
| 81 | + | |
| 82 | + | |
| 11 | 83 | class SaleclerkStatusCode(BaseStatusCode): | 
| 12 | 84 | """ 店员相关错误码 5001xx """ | 
| 13 | 85 | CLERK_NOT_FOUND = StatusCodeField(500101, 'Clerk Not Found', description=u'店员不存在') | 
| @@ -138,75 +210,3 @@ class MaintenanceStatusCode(BaseStatusCode): | ||
| 138 | 210 | """ 维修相关错误码 5080xx """ | 
| 139 | 211 | MAINTENACE_NOT_FOUND = StatusCodeField(508001, 'Maintenance Not Found', description=u'维修不存在') | 
| 140 | 212 | MAINTENACE_PERMISSION_DENIED = StatusCodeField(508002, 'Maintenance Permission Denied', description=u'维修权限不足') | 
| 141 | - | |
| 142 | - | |
| 143 | -class AdministratorStatusCode(BaseStatusCode): | |
| 144 | - """ 操作员相关错误码 4002xx """ | |
| 145 | - ADMINISTRATOR_NOT_FOUND = StatusCodeField(400201, 'Administrator Not Found', description=u'管理员不存在') | |
| 146 | - ADMINISTRATOR_PERMISSION_DENIED = StatusCodeField(508002, 'Administrator Permission Denied', description=u'管理员权限不足') | |
| 147 | - | |
| 148 | - # 密码 | |
| 149 | - ADMINISTRATOR_PASSWORD_ERROR = StatusCodeField(400202, 'Administrator Password Error', description=u'管理员密码错误') | |
| 150 | - # 手机号 | |
| 151 | - ADMINISTRATOR_PHONE_ALREADY_EXISTS = StatusCodeField(400205, 'Administrator Phone Already Exists', description=u'管理员手机号已经存在') | |
| 152 | - # 状态 | |
| 153 | - ADMINISTRATOR_NOT_ACTIVATED = StatusCodeField(400215, 'Administrator Not Activated', description=u'管理员未激活') | |
| 154 | - ADMINISTRATOR_HAS_DISABLED = StatusCodeField(400216, 'Administrator Has Disabled', description=u'管理员已禁用') | |
| 155 | - ADMINISTRATOR_HAS_DELETED = StatusCodeField(400217, 'Administrator Has Deleted', description=u'管理员已删除') | |
| 156 | - # 管理员 | |
| 157 | - MAINTENANCE_NOT_FOUND = StatusCodeField(400251, 'Maintenance Not Found', description=u'核销员不存在') | |
| 158 | - | |
| 159 | - | |
| 160 | -class OperatorStatusCode(BaseStatusCode): | |
| 161 | - """ 操作员相关错误码 4003xx """ | |
| 162 | - OPERATOR_NOT_FOUND = StatusCodeField(400301, 'Operator Not Found', description=u'操作员不存在') | |
| 163 | - # 密码 | |
| 164 | - OPERATOR_PASSWORD_ERROR = StatusCodeField(400302, 'Operator Password Error', description=u'操作员密码错误') | |
| 165 | - # 手机号 | |
| 166 | - OPERATOR_PHONE_ALREADY_EXISTS = StatusCodeField(400305, 'Operator Phone Already Exists', description=u'操作员手机号已经存在') | |
| 167 | - # 状态 | |
| 168 | - OPERATOR_NOT_ACTIVATED = StatusCodeField(400315, 'Operator Not Activated', description=u'操作员未激活') | |
| 169 | - OPERATOR_HAS_DISABLED = StatusCodeField(400316, 'Operator Has Disabled', description=u'操作员已禁用') | |
| 170 | - OPERATOR_HAS_DELETED = StatusCodeField(400317, 'Operator Has Deleted', description=u'操作员已删除') | |
| 171 | - | |
| 172 | - | |
| 173 | -class UserStatusCode(BaseStatusCode): | |
| 174 | - """ 用户相关错误码 4005xx """ | |
| 175 | - USER_NOT_FOUND = StatusCodeField(400501, 'User Not Found', description=u'用户不存在') | |
| 176 | - USER_PASSWORD_ERROR = StatusCodeField(400502, 'User Password Error', description=u'用户密码错误') | |
| 177 | - USERNAME_HAS_REGISTERED = StatusCodeField(400503, 'Username Has Registered', description=u'用户名已注册') | |
| 178 | - # 游客 | |
| 179 | - GUEST_NOT_ALLOWED = StatusCodeField(400511, 'Guest Not ALLOWED', description=u'游客登录未开启') | |
| 180 | - # 身份 | |
| 181 | - USER_NOT_LENSMAN = StatusCodeField(400521, 'User Not Lensman', description=u'用户非摄影师') | |
| 182 | - USER_NOT_TOURGUIDE = StatusCodeField(400522, 'User Not Tourguide', description=u'用户非导游') | |
| 183 | - | |
| 184 | - | |
| 185 | -class PhoneStatusCode(BaseStatusCode): | |
| 186 | - """ 手机相关错误码 4006xx """ | |
| 187 | - PHONE_NOT_FOUND = StatusCodeField(400601, 'Phone Not Found', description=u'手机不存在') | |
| 188 | - | |
| 189 | - | |
| 190 | -class WechatStatusCode(BaseStatusCode): | |
| 191 | - """ 微信相关错误码 4007xx """ | |
| 192 | - WECHAT_NOT_FOUND = StatusCodeField(400701, 'Wechat Not Found', description=u'微信不存在') | |
| 193 | - UNIONID_NOT_FOUND = StatusCodeField(400702, 'Unionid Not Found', description=u'微信 UNIONID 不存在') | |
| 194 | - OPENID_NOT_FOUND = StatusCodeField(400703, 'OPENID Not Found', description=u'微信 OPENID 不存在') | |
| 195 | - | |
| 196 | - | |
| 197 | -class ScreenStatusCode(BaseStatusCode): | |
| 198 | - """ 群组/团相关错误码 4030xx """ | |
| 199 | - QRCODE_NOT_SCAN = StatusCodeField(403001, 'QRCode Not Scan', description=u'二维码未扫描') | |
| 200 | - | |
| 201 | - | |
| 202 | -class PermissionStatusCode(BaseStatusCode): | |
| 203 | - """ 4099xx 权限相关错误码 """ | |
| 204 | - PERMISSION_DENIED = StatusCodeField(409900, 'Permission Denied', description=u'权限不足') | |
| 205 | - | |
| 206 | - | |
| 207 | -class CouponStatusCode(BaseStatusCode): | |
| 208 | - """ 4050xx 优惠劵相关错误码 """ | |
| 209 | - COUPON_NOT_FOUND = StatusCodeField(405001, 'Coupon Not Found', description=u'劵不存在') | |
| 210 | - COUPON_EXPIRED = StatusCodeField(405002, 'Coupon Expired', description=u'劵已过期') | |
| 211 | - COUPON_PERMISSION_DENIED = StatusCodeField(405003, 'Permission Denied', description=u'核销劵权限不足') | |
| 212 | - COUPON_HAS_USED = StatusCodeField(405004, 'Coupon Has Used', description=u'劵已核销') |