116 lines
3.8 KiB
Python
116 lines
3.8 KiB
Python
import asyncio
|
|
import hashlib
|
|
from typing import Optional
|
|
|
|
from fastapi import APIRouter, Form, Response
|
|
from fastapi.responses import PlainTextResponse
|
|
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.post("/api/service/interface/invokeService/LSFXXHS")
|
|
async def query_enterprise(
|
|
entName: Optional[str] = Form(None),
|
|
serialNum: Optional[str] = Form(None),
|
|
runType: Optional[str] = Form(None),
|
|
orgCode: Optional[str] = Form(None),
|
|
):
|
|
missing = next((name for name, value in {
|
|
"entName": entName,
|
|
"serialNum": serialNum,
|
|
"runType": runType,
|
|
"orgCode": orgCode,
|
|
}.items() if not value), None)
|
|
if missing:
|
|
return business_error(f"缺少参数: {missing}")
|
|
|
|
name = entName.strip()
|
|
if name == "MOCK_HTTP_500":
|
|
return Response(content="mock server error", status_code=500)
|
|
if name == "MOCK_TIMEOUT":
|
|
await asyncio.sleep(5)
|
|
return success_wrapper(build_profile(name))
|
|
if name == "MOCK_EMPTY_RESPONSE":
|
|
return Response(content="", media_type="application/json")
|
|
if name == "MOCK_INVALID_JSON":
|
|
return PlainTextResponse("not-json")
|
|
if name == "MOCK_OUTER_FAILURE":
|
|
return {"success": False, "code": 50000, "data": None}
|
|
if name == "MOCK_BUSINESS_FAILURE":
|
|
return business_error("工商查询失败")
|
|
if name == "MOCK_MAPPING_MISSING":
|
|
return success_wrapper(None, include_mapping=False)
|
|
if name == "MOCK_MAPPING_NULL":
|
|
return success_wrapper(None)
|
|
if name == "MOCK_MAPPING_EMPTY":
|
|
return success_wrapper({})
|
|
|
|
profile = build_profile(name)
|
|
if name == "MOCK_NAME_MISMATCH":
|
|
profile["enterpriseName"] = "其他企业有限公司"
|
|
if name == "MOCK_CREDIT_CODE_MISSING":
|
|
profile["creditCode"] = " "
|
|
return success_wrapper(profile)
|
|
|
|
|
|
def success_wrapper(profile, include_mapping=True):
|
|
data = {
|
|
"reasonMessage": "Running successfully",
|
|
"reasonCode": 200,
|
|
"status": 1,
|
|
"extensionMap": {},
|
|
}
|
|
if include_mapping:
|
|
data["mappingOutputFields"] = profile
|
|
return {"success": True, "code": 10000, "data": data}
|
|
|
|
|
|
def business_error(message):
|
|
return {
|
|
"success": True,
|
|
"code": 10000,
|
|
"data": {
|
|
"mappingOutputFields": None,
|
|
"reasonMessage": message,
|
|
"reasonCode": 500,
|
|
"status": 0,
|
|
"extensionMap": {},
|
|
},
|
|
}
|
|
|
|
|
|
def build_profile(name):
|
|
digest = hashlib.sha1(name.encode("utf-8")).hexdigest()
|
|
credit_code = "91" + "".join(str(int(ch, 16) % 10) for ch in digest[:16])
|
|
holders = [] if "空股东" in name else [
|
|
{"stock_name": "张三", "stock_percent": "60%", "should_capi": "600"},
|
|
{"stock_name": "李四", "stock_percent": "40%", "should_capi": "400"},
|
|
]
|
|
if "多股东" in name:
|
|
holders = [
|
|
{"stock_name": f"股东{i}", "stock_percent": f"{i}%", "should_capi": str(i * 10)}
|
|
for i in range(1, 8)
|
|
]
|
|
|
|
individual = "个体" in name
|
|
return {
|
|
"creditCode": credit_code,
|
|
"enterpriseName": name,
|
|
"baseCity": {
|
|
"province": "浙江省",
|
|
"province_code": "330000",
|
|
"city": "杭州市" if individual else None,
|
|
"county": "西湖区" if individual else None,
|
|
},
|
|
"regCapitalAmount": {"regist_capi_value": "1000", "regist_capi_unit": "万元"},
|
|
"estiblishTime": "2020-01-02",
|
|
"fromTime": "2020-01-01",
|
|
"companyOrgType": "个体" if individual else {"econ_kind": "有限责任公司", "econ_kind_code": "1100"},
|
|
"industry": {"industry_code": "I65", "industry": "软件和信息技术服务业"},
|
|
"regLocation": "浙江省杭州市西湖区测试路1号",
|
|
"employeeCount": None if individual else 25,
|
|
"legalPersonName": "王五",
|
|
"holders": holders,
|
|
}
|