73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
# -*- coding: utf-8 -*-
|
||
|
||
"""
|
||
就excel工作表进行处理,包括就指定字段解析JSON
|
||
"""
|
||
|
||
from json import loads
|
||
|
||
from pandas import DataFrame, read_excel
|
||
|
||
from utils.pandas_extension import save_as_workbook
|
||
|
||
# 打开并读取指定工作表(默认以字符串读取)
|
||
sheet = read_excel(io="dataset.xlsx", sheet_name="Sheet1", dtype=str)
|
||
|
||
dataset = []
|
||
|
||
for index, row in sheet.iterrows():
|
||
# 就指定字段解析为JSON
|
||
response = loads(row["response"])
|
||
|
||
data = {}
|
||
|
||
# 根据深圳快瞳票据查验要求解析查验结果
|
||
# 状态码
|
||
status = response.get("status", "")
|
||
# 错误码
|
||
code = response.get("code", "")
|
||
# 若状态码为200且错误码为10000,则定义为响应成功
|
||
if status == 200 and code == 10000:
|
||
# 查验类型,若查验类型为003081则为医疗收费票据=,003082则为增值税发票
|
||
match response.get("data").get(
|
||
"productCode"
|
||
):
|
||
# 解析医疗收费票据
|
||
case "003081":
|
||
data["发票号"] = response.get("data").get(
|
||
"billNumber"
|
||
)
|
||
# 查验结果
|
||
match response.get("data").get("flushedRed"):
|
||
case "true":
|
||
data["查验结果"] = "正常"
|
||
case "false":
|
||
data["查验结果"] = "已红冲"
|
||
|
||
# 解析增值税发票
|
||
case "003082":
|
||
data["发票号"] = (
|
||
response.get("data").get("details").get("number")
|
||
)
|
||
# 查验结果
|
||
match response.get("data").get("details").get(
|
||
"invoiceTypeNo"
|
||
):
|
||
case "0":
|
||
data["查验结果"] = "正常"
|
||
case "1":
|
||
data["查验结果"] = "无法查验"
|
||
case "2" | "3" | "7" | "8":
|
||
data["查验结果"] = "已红冲"
|
||
|
||
# 若状态码为400且错误码为10001或10100,则定义为假票
|
||
elif status == 400 and (code == 10001 or code == 10100):
|
||
data["查验结果"] = "假票"
|
||
|
||
else:
|
||
data["查验结果"] = "无法查验"
|
||
|
||
dataset.append(data)
|
||
|
||
# 本地保存
|
||
save_as_workbook(worksheets=[("Sheet1", DataFrame(data=dataset, dtype=str))], workbook_name="results.xlsx") |