Browse Source

五兴API新增退订套餐、导出兑换码增加编号

zhangdongming 2 years ago
parent
commit
8e80166a3e

+ 15 - 2
AdminController/UnicomManageController.py

@@ -555,13 +555,16 @@ class UnicomManageControllerView(View):
             # 获取默认的工作表
             sheet = wb.active
             sheet.title = '周视国内流量年卡兑换码'
-            sheet.column_dimensions['A'].width = 20
+            sheet.column_dimensions['A'].width = 15
+            sheet.column_dimensions['B'].width = 20
             exchange_code = ExchangeCode.objects.filter(status=False, is_down=False)
             if not exchange_code.exists():
                 return response.json(173)
             # 将兑换码写入到excel表
             for i, vo in enumerate(list(exchange_code)):
-                sheet.cell(row=i + 1, column=1, value=vo.code)
+                code_no = cls.fix_string_length(str(vo.id))
+                sheet.cell(row=i + 1, column=1, value=code_no)
+                sheet.cell(row=i + 1, column=2, value=vo.code)
             filename = '国内流量年卡兑换码-{}.xlsx'.format(exchange_code.count())
             # 创建一个http响应
             res = HttpResponse(content_type='application/vnd.ms-excel')
@@ -576,6 +579,16 @@ class UnicomManageControllerView(View):
                         .format(e.__traceback__.tb_lineno, repr(e)))
             return response.json(500, repr(e))
 
+    @staticmethod
+    def fix_string_length(code_no):
+        """
+        将兑换码编号生成固定6位长度
+        """
+        if len(code_no) < 6:
+            return 'NO.' + code_no.rjust(6, '0')
+        else:
+            return 'NO.' + code_no
+
     @classmethod
     def create_package_cdk(cls, request_dict, response):
         """

+ 47 - 9
Controller/UnicomCombo/WXTechController.py

@@ -54,6 +54,8 @@ class WXTechController(View):
         def validation(self, request_dict, request, operation):
             if operation == 'deleteCardPackage':
                 return self.delete_card_package(request_dict, ResponseObject('cn'))
+            elif operation == 'packageRefund':
+                return self.wx_package_refund(request_dict, ResponseObject('cn'))
             token_code, user_id, response = CommonService \
                 .verify_token_get_user_id(request_dict, request)
             if token_code != 0:
@@ -65,7 +67,37 @@ class WXTechController(View):
             elif operation == 'createOrder':
                 return self.create_order_package(request_dict, response)
             elif operation == 'exchangePackage':
-                return self.wx_exchange_package(request_dict, response, request)
+                return self.wx_exchange_package(request_dict, response, request, user_id)
+
+        @classmethod
+        def wx_package_refund(cls, request_dict, response):
+            """
+            五兴套餐退订
+            """
+            try:
+                serial_number = request_dict.get('serialNumber', None)
+                if not serial_number:
+                    return response(444)
+                device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number).values('iccid')
+                if not device_qs.exists():
+                    return response(173)
+                uid = CommonService.query_uid_with_serial(serial_number)
+                order_info_qs = Order_Model.objects.filter(UID=uid, order_type=3).values('trade_no') \
+                    .order_by('-payTime')
+                if not order_info_qs.exists():
+                    return response(173)
+                iccid = device_qs[0]['iccid']
+                trade_no = order_info_qs[0]['trade_no']
+                data = {'iccid': iccid, 'operator': 3, 'orderNumber': trade_no}
+                wx_tech = WXTechObject()
+                res = wx_tech.package_refund(**data)
+                if res['code'] == '0':
+                    return response.json(0)
+                return response.json(10059)
+            except Exception as e:
+                LOGGER.info('*****WXTechController.get_cards_info:errLine:{}, errMsg:{}'
+                            .format(e.__traceback__.tb_lineno, repr(e)))
+                return response.json(500, repr(e))
 
         @classmethod
         def get_cards_info(cls, request_dict, response):
@@ -160,12 +192,17 @@ class WXTechController(View):
                 return response.json(500, repr(e))
 
         @classmethod
-        def created_order(cls, serial_no, user_id, trade_no):
+        def created_order(cls, serial_no, user_id, trade_no, combo_id=None):
             """
             创建系统订单
             """
-            combo_info_qs = UnicomCombo.objects.filter(combo_type=1, status=0, is_del=False) \
-                .values('id', 'combo_name', 'price', 'virtual_price', 'remark').order_by('sort')
+            combo_info_qs = UnicomCombo.objects.filter(is_del=False)
+            if combo_id:
+                combo_info_qs = combo_info_qs.filter(id=int(combo_id))
+            else:
+                combo_info_qs = combo_info_qs.filter(combo_type=1, status=0)
+            combo_info_qs = combo_info_qs.values('id', 'combo_name', 'price', 'virtual_price', 'remark') \
+                .order_by('sort')
             if not combo_info_qs.exists():
                 return False
             combo_info_vo = combo_info_qs[0]
@@ -216,7 +253,7 @@ class WXTechController(View):
                 return response.json(500, repr(e))
 
         @classmethod
-        def wx_exchange_package(cls, request_dict, response, request):
+        def wx_exchange_package(cls, request_dict, response, request, user_id):
             """
             使用兑换码订购五兴五年流量套餐包
             """
@@ -240,8 +277,9 @@ class WXTechController(View):
                     .values('package_id', 'expire_time')
                 if not exchange_code_qs.exists():
                     return response.json(10040)  # 兑换码无效
+                combo_id = exchange_code_qs[0]['package_id']
                 # 获取五兴套餐套餐编码
-                package_info_qs = UnicomCombo.objects.filter(id=exchange_code_qs[0]['package_id'], is_del=False) \
+                package_info_qs = UnicomCombo.objects.filter(id=combo_id, is_del=False) \
                     .values('package_id')
                 if not package_info_qs.exists():
                     return response.json(173)
@@ -255,9 +293,9 @@ class WXTechController(View):
                 res = wx_tech.create_order_package(**data)
                 LOGGER.info('*****五兴订购年卡套餐结果:{}'.format(res))
                 if res['code'] == '0':
-                    experience_history_vo = {'iccid': iccid, 'experience_type': 1, 'do_time': int(time.time())}
-                    UnicomComboExperienceHistory.objects.create(**experience_history_vo)
-                    exchange_code_qs.update(status=True)
+                    trade_no = res['data']['orderNumber']
+                    cls.created_order(serial_number, user_id, trade_no, combo_id)
+                    exchange_code_qs.update(status=True, updated_time=int(time.time()))
                     cls.save_log(ip, 200, '兑换成功{},{}'.format(serial_number, code))
                     return response.json(0)
                 cls.save_log(ip, 10040, '兑换失败{},{}'.format(serial_number, code))

+ 9 - 0
Object/WXTechObject.py

@@ -79,6 +79,15 @@ class WXTechObject:
         url = WX_TECH_URL + '/api/v2/package/orderPackage'
         return self.wx_service_api(url, **params)
 
+    def package_refund(self, **params):
+        """
+        根据套餐订购记录ID,退订套餐(不退款)
+        @param params: operator、iccid、orderNumber
+        @return:
+        """
+        url = WX_TECH_URL + '/api/v2/outputApi/packageRefund'
+        return self.wx_service_api(url, **params)
+
     def delete_card_package(self, **params):
         """
         清空卡片的所有套餐订购记录