import {
|
ParkCustomersCountEnum,
|
ServiceWorkerCountEnum,
|
ParkCustomersCountTextToEnum,
|
ServiceWorkerCountTextToEnum,
|
} from '@/constants';
|
import dayjs from 'dayjs';
|
import axios from 'axios';
|
import { loadEnv } from '@build/index';
|
import { setOSSLink as boleSetOSSLink } from '@bole-core/core';
|
import _ from 'lodash';
|
|
export const CompanyXLSXHeaderMap = {
|
belongPark: '所属园区',
|
enterpriseName: '企业名称',
|
societyCreditCode: '社会统一信用代码',
|
contact: '联系人',
|
contactPhone: '联系电话(手机号)',
|
legalPersonName: '法人姓名',
|
address: '所属区域(省/市/地)',
|
setUpDate: '成立时间',
|
parkCustomersCount: '服务客户数量【家数】',
|
serviceWorkerCount: '服务劳工数量【人数】',
|
serveSetting: '企业服务类型',
|
hrLicenseUrl: '人力资源服务许可证(图片)',
|
licenseUrl: '营业执照(图片)',
|
};
|
|
type CompanyXLSXItem = {
|
belongPark: string;
|
enterpriseName: string;
|
societyCreditCode: string;
|
contact: string;
|
contactPhone: string;
|
legalPersonName: string;
|
address: API.HRAreaDto[];
|
setUpDate: number;
|
parkCustomersCount: ParkCustomersCountEnum;
|
serviceWorkerCount: ServiceWorkerCountEnum;
|
serveSetting: string[];
|
hrLicenseUrl: string;
|
licenseUrl: string;
|
};
|
|
type CompanyXLSXItemV2 = {
|
[key in keyof typeof CompanyXLSXHeaderMap]: string;
|
};
|
|
export type YZALLCompanyListRes = {
|
AlternativeName1: string;
|
RZSrc: string;
|
YYSrc: string;
|
CertificateTypeId: YZCertificateType;
|
}[];
|
|
enum YZCertificateType {
|
HRLicense = '10',
|
License = '30',
|
}
|
|
export async function getYZALLCompanyList() {
|
try {
|
let res = await axios.get<YZALLCompanyListRes>('/1823555004544454656');
|
return res.data;
|
} catch (error) {}
|
}
|
|
const { VITE_WEMAP_KEY } = loadEnv();
|
|
interface AddressResolveByWeMapRes {
|
status: number;
|
message: 'Success';
|
request_id: string;
|
result: {
|
title: string;
|
location: {
|
lng: number;
|
lat: number;
|
};
|
ad_info: {
|
adcode: string;
|
};
|
address_components: {
|
province: string;
|
city: string;
|
district: string;
|
street: string;
|
street_number: string;
|
};
|
similarity: number;
|
deviation: number;
|
reliability: number;
|
level: number;
|
};
|
}
|
|
const DefaultAddress = {
|
provinceName: '浙江省',
|
cityName: '宁波市',
|
areaName: '鄞州区',
|
};
|
|
export async function getAddressResolveByWeMap(address: string) {
|
try {
|
let res = await axios.get<AddressResolveByWeMapRes>('/v1', {
|
params: {
|
key: VITE_WEMAP_KEY,
|
address: address,
|
},
|
});
|
const address_components = res.data.result?.address_components;
|
if (
|
res.data.status === 0 &&
|
address_components.province &&
|
address_components.city &&
|
address_components.district
|
) {
|
return {
|
provinceName: address_components.province,
|
cityName: address_components.city,
|
areaName: address_components.district,
|
};
|
} else {
|
return DefaultAddress;
|
}
|
} catch (error) {
|
return DefaultAddress;
|
}
|
}
|
|
function getAddressResolve(address: string) {
|
let nameList = address.match(
|
/.+?(省|行政区|市|自治区|自治州|行政单位|盟|市辖区|旗|海域|岛|县|区)/g
|
);
|
if (nameList) {
|
if (nameList?.length === 2) {
|
return {
|
provinceName: nameList[0],
|
cityName: nameList[0],
|
areaName: nameList[1],
|
};
|
} else {
|
return {
|
provinceName: nameList[0],
|
cityName: nameList[1],
|
areaName: nameList[2],
|
};
|
}
|
}
|
return DefaultAddress;
|
}
|
|
type ConvertCompanyXLSXDataOptions = {
|
companyXLSXList: { [K in keyof typeof CompanyXLSXHeaderMap]: string }[];
|
parkServeType?: API.GetTypeSearchSettingList[];
|
findAreaCodeFromName: (areaName: string) => number;
|
YZALLCompanyList: YZALLCompanyListRes;
|
};
|
|
export function exportCompanyXLSXV2({
|
companyXLSXList,
|
findAreaCodeFromName,
|
YZALLCompanyList,
|
}: ConvertCompanyXLSXDataOptions) {
|
const resolveSuccessList: CompanyXLSXItemV2[] = [];
|
const resolveFailList: Record<string, string>[] = [];
|
|
const companyXLSXListChunks = _.chunk(companyXLSXList, 20);
|
|
for (const chunk of companyXLSXListChunks) {
|
for (const companyXLSXListItem of chunk) {
|
let _address = getAddressResolve(companyXLSXListItem.address);
|
// let _address = await new Promise<{
|
// provinceName: string;
|
// cityName: string;
|
// areaName: string;
|
// }>((resolve) => {
|
// resolve({
|
// provinceName: '',
|
// cityName: '',
|
// areaName: '',
|
// });
|
// });
|
|
let address: API.HRAreaDto = {
|
provinceCode: findAreaCodeFromName(_address.provinceName),
|
cityCode: findAreaCodeFromName(_address.cityName),
|
areaCode: findAreaCodeFromName(_address.areaName),
|
provinceName: _address.provinceName,
|
cityName: _address.cityName,
|
areaName: _address.areaName,
|
sort: 1,
|
};
|
if (Object.values(address).some((x) => !x)) {
|
address.provinceCode = findAreaCodeFromName(DefaultAddress.provinceName);
|
address.cityCode = findAreaCodeFromName(DefaultAddress.cityName);
|
address.areaCode = findAreaCodeFromName(DefaultAddress.areaName);
|
address.provinceName = DefaultAddress.provinceName;
|
address.cityName = DefaultAddress.cityName;
|
address.areaName = DefaultAddress.areaName;
|
}
|
|
const address2 = [address.provinceName, address.cityName, address.areaName]
|
.filter(Boolean)
|
.join(',');
|
|
const YZCompany = YZALLCompanyList.find(
|
(c) => c.AlternativeName1 === companyXLSXListItem.enterpriseName && c.RZSrc && c.YYSrc
|
);
|
|
if (!YZCompany) {
|
resolveFailList.push(companyXLSXListItem);
|
continue;
|
}
|
|
resolveSuccessList.push({
|
...companyXLSXListItem,
|
setUpDate: dayjs(companyXLSXListItem.setUpDate).year() + '',
|
hrLicenseUrl: YZCompany?.RZSrc
|
? boleSetOSSLink(YZCompany.RZSrc, 'https://waterdropcloud.oss-cn-hangzhou.aliyuncs.com/')
|
: '',
|
licenseUrl: YZCompany?.YYSrc
|
? boleSetOSSLink(YZCompany.YYSrc, 'https://waterdropcloud.oss-cn-hangzhou.aliyuncs.com/')
|
: '',
|
address: address2,
|
} as CompanyXLSXItemV2);
|
}
|
|
// await new Promise((resolve) => setTimeout(resolve, 2000));
|
}
|
|
return {
|
resolveSuccessList,
|
resolveFailList,
|
};
|
}
|
|
export function convertCompanyXLSXData({
|
companyXLSXList,
|
parkServeType,
|
findAreaCodeFromName,
|
}: ConvertCompanyXLSXDataOptions) {
|
const resolveSuccessList: CompanyXLSXItem[] = [];
|
const resolveFailList: Record<string, string>[] = [];
|
|
for (const companyXLSXListItem of companyXLSXList) {
|
let _address = companyXLSXListItem.address.split(',');
|
let address: API.HRAreaDto = {
|
provinceCode: findAreaCodeFromName(_address[0]),
|
cityCode: findAreaCodeFromName(_address[1]),
|
areaCode: findAreaCodeFromName(_address[2]),
|
provinceName: _address[0],
|
cityName: _address[1],
|
areaName: _address[2],
|
sort: 1,
|
};
|
if (Object.values(address).some((x) => !x)) {
|
address.provinceCode = findAreaCodeFromName(DefaultAddress.provinceName);
|
address.cityCode = findAreaCodeFromName(DefaultAddress.cityName);
|
address.areaCode = findAreaCodeFromName(DefaultAddress.areaName);
|
address.provinceName = DefaultAddress.provinceName;
|
address.cityName = DefaultAddress.cityName;
|
address.areaName = DefaultAddress.areaName;
|
}
|
|
resolveSuccessList.push({
|
...companyXLSXListItem,
|
setUpDate: dayjs(companyXLSXListItem.setUpDate).year(),
|
parkCustomersCount: ParkCustomersCountTextToEnum[companyXLSXListItem.parkCustomersCount],
|
serviceWorkerCount: ServiceWorkerCountTextToEnum[companyXLSXListItem.serviceWorkerCount],
|
serveSetting: companyXLSXListItem.serveSetting
|
.split('、')
|
.map((s) => parkServeType.find((p) => p.name === s)?.id ?? ''),
|
address: [address],
|
} as CompanyXLSXItem);
|
}
|
|
return {
|
resolveSuccessList,
|
resolveFailList,
|
};
|
}
|