Commit c8ff749a by chenjinjing

bug修复

parent b8e90c2a
No preview for this file type
No preview for this file type
No preview for this file type
<config> <config>
<port>7071</port> <port>7071</port>
<excelModelUrl>http://192.168.0.71:7071/template/</excelModelUrl> <excelModelUrl>http://127.0.0.1:7071/template/</excelModelUrl>
<!-- <excelModelUrl>http://101.89.111.202:7071/template/</excelModelUrl> -->
<mongodb> <mongodb>
<path>192.168.0.105</path> <path>192.168.0.71</path>
<!-- <path>127.0.0.1</path> -->
<port>27017</port> <port>27017</port>
<w>1</w> <w>1</w>
<!-- <dataBase>baseDB</dataBase> --> <!-- <dataBase>baseDB</dataBase> -->
......
...@@ -31,24 +31,44 @@ export async function activityList(title:string, startTime:number, endTime:numbe ...@@ -31,24 +31,44 @@ export async function activityList(title:string, startTime:number, endTime:numbe
selectParam.title = {"$regex":`${title}`}; selectParam.title = {"$regex":`${title}`};
} }
if (startTime && endTime) { if (startTime && endTime) {
selectParam.startTime = { "$gte": startTime }; selectParam.startTime = { "$lte": endTime };
selectParam.endTime = { "$lte": endTime }; selectParam.endTime = { "$gte": startTime };
} }
if (target) { if (target) {
verificationEnumTools.eccEnumValue('管理后台获取园区活动列表', 'target', configEnum.ACTIVITYTARGET, target); verificationEnumTools.eccEnumValue('管理后台获取园区活动列表', 'target', configEnum.ACTIVITYTARGET, target);
selectParam.target = {"$in":target}; selectParam.target = {"$in":target};
} }
// if (state) {
// verificationEnumTools.eccEnumValue('管理后台获取园区活动列表', 'state', configEnum.ACTIVITYSTATE, state);
// selectParam.state = state;
// }
/**需要用到的查询数据 */
let activityDbList = await activityData.findActivityListToPage(selectParam, (page - 1) * 10);
let allActivityDbList = await activityData.findActivityListByParam(selectParam);
// 如果有状态筛选,过滤数据
let filteredActivityDbList = activityDbList;
if (state) { if (state) {
verificationEnumTools.eccEnumValue('管理后台获取园区活动列表', 'state', configEnum.ACTIVITYSTATE, state); verificationEnumTools.eccEnumValue('管理后台获取园区活动列表', 'state', configEnum.ACTIVITYSTATE, state);
selectParam.state = state; filteredActivityDbList = activityDbList.filter(info => {
const activityState = calculateActivityState(info.startTime, info.endTime);
return activityState === state;
});
}
// 重新计算总数
let count = allActivityDbList.length;
if (state) {
count = allActivityDbList.filter(info => {
const activityState = calculateActivityState(info.startTime, info.endTime);
return activityState === state;
}).length;
} }
/**需要用到的查询数据 */
let activityDbList = await activityData.findActivityListToPage(selectParam, (page - 1) * 10);
let count = await activityData.findActivityCount(selectParam);//符合查询条件的数据总数
/**组合返回结果 */ /**组合返回结果 */
let dataList = []; let dataList = [];
activityDbList.forEach( info => { filteredActivityDbList.forEach( info => {
/**截取返回数据 */ /**截取返回数据 */
let changeData:any = extractData(splitResultConfig.activityListConfig, info, true); let changeData:any = extractData(splitResultConfig.activityListConfig, info, true);
...@@ -58,7 +78,10 @@ export async function activityList(title:string, startTime:number, endTime:numbe ...@@ -58,7 +78,10 @@ export async function activityList(title:string, startTime:number, endTime:numbe
target.push(verificationEnumTools.changeEnumValue(configEnum.ACTIVITYTARGET, info)) target.push(verificationEnumTools.changeEnumValue(configEnum.ACTIVITYTARGET, info))
}) })
changeData.target = target; changeData.target = target;
changeData.state = verificationEnumTools.changeEnumValue(configEnum.ACTIVITYSTATE, changeData.state);
// 计算活动状态
let stateType = calculateActivityState(info.startTime, info.endTime)
changeData.state = verificationEnumTools.changeEnumValue(configEnum.ACTIVITYSTATE, stateType);
dataList.push(changeData); dataList.push(changeData);
}) })
...@@ -79,15 +102,18 @@ export async function activityCreate(param) { ...@@ -79,15 +102,18 @@ export async function activityCreate(param) {
if (param.target && param.target.length > 0) { if (param.target && param.target.length > 0) {
verificationEnumTools.eccEnumValue('管理后台新增园区活动', 'target', configEnum.ACTIVITYTARGET, param.target); verificationEnumTools.eccEnumValue('管理后台新增园区活动', 'target', configEnum.ACTIVITYTARGET, param.target);
} }
verificationEnumTools.eccEnumValue('管理后台新增园区活动', 'state', configEnum.ACTIVITYSTATE, param.state);
// 校验时间
if (param.startTime >= param.endTime) {
throw new BizError(ERRORENUM.参数错误, '活动开始时间不能晚于或等于结束时间');
}
let enterpriseInfo = await activityData.findActivityByParam({title:param.title}); let enterpriseInfo = await activityData.findActivityByParam({title:param.title, startTime:param.startTime});
if (enterpriseInfo && enterpriseInfo.title) throw new BizError(ERRORENUM.该活动已存在, `${param.title}已经在库中存在`); if (enterpriseInfo && enterpriseInfo.title) throw new BizError(ERRORENUM.该活动已存在, `${param.title}已经在库中存在`);
let activityInfo = { let activityInfo = {
id: randomId(TABLEID.活动), id: randomId(TABLEID.活动),
title: param.title, title: param.title,
state: param.state,
startTime: param.startTime, startTime: param.startTime,
endTime: param.endTime, endTime: param.endTime,
target: param.target, target: param.target,
...@@ -106,13 +132,12 @@ export async function activityCreate(param) { ...@@ -106,13 +132,12 @@ export async function activityCreate(param) {
* @param uscc * @param uscc
*/ */
export async function activityInfo(id:string) { export async function activityInfo(id:string) {
/**校验企业 */ /**校验活动 */
let activityDbInfo = await activityData.findActivityByParam({id}); let activityDbInfo = await activityData.findActivityByParam({id});
if (!activityDbInfo || !activityDbInfo.id) throw new BizError(ERRORENUM.未找到数据, `库中不存在id=${id}这个活动`); if (!activityDbInfo || !activityDbInfo.id) throw new BizError(ERRORENUM.未找到数据, `库中不存在id=${id}这个活动`);
let dataInfo = { let dataInfo = {
title: activityDbInfo.title, title: activityDbInfo.title,
state: activityDbInfo.state,
startTime: activityDbInfo.startTime, startTime: activityDbInfo.startTime,
endTime: activityDbInfo.endTime, endTime: activityDbInfo.endTime,
target: activityDbInfo.target, target: activityDbInfo.target,
...@@ -126,7 +151,7 @@ export async function activityInfo(id:string) { ...@@ -126,7 +151,7 @@ export async function activityInfo(id:string) {
/** /**
* 园区活动-修改 * 园区活动-修改
* @param uscc * @param id
* @param param * @param param
*/ */
export async function activityUpdate(id:string, param) { export async function activityUpdate(id:string, param) {
...@@ -137,15 +162,19 @@ export async function activityUpdate(id:string, param) { ...@@ -137,15 +162,19 @@ export async function activityUpdate(id:string, param) {
if (param.target && param.target.length > 0) { if (param.target && param.target.length > 0) {
verificationEnumTools.eccEnumValue('管理后台新增园区活动', 'target', configEnum.ACTIVITYTARGET, param.target); verificationEnumTools.eccEnumValue('管理后台新增园区活动', 'target', configEnum.ACTIVITYTARGET, param.target);
} }
verificationEnumTools.eccEnumValue('管理后台新增园区活动', 'state', configEnum.ACTIVITYSTATE, param.state);
// 校验时间
if (param.startTime >= param.endTime) {
throw new BizError(ERRORENUM.参数错误, '活动开始时间不能晚于或等于结束时间');
}
/**校验企业 */ /**校验活动 */
let activityDbInfo = await activityData.findActivityByParam({id}); let activityDbInfo = await activityData.findActivityByParam({id});
if (!activityDbInfo || !activityDbInfo.id) throw new BizError(ERRORENUM.未找到数据, `库中不存在id=${id}这个活动`); if (!activityDbInfo || !activityDbInfo.id) throw new BizError(ERRORENUM.未找到数据, `库中不存在id=${id}这个活动`);
/**修改字段 */ /**修改字段 */
let changeList = checkChange(param, activityDbInfo); let changeList = checkChange(param, activityDbInfo);
if (!changeList.length) throw new BizError(ERRORENUM.数据无更新, `${param.name}数据无更新`); if (!changeList.length) throw new BizError(ERRORENUM.数据无更新, `${param.title}数据无更新`);
changeList.forEach(key => { changeList.forEach(key => {
activityDbInfo[key] = param[key]; activityDbInfo[key] = param[key];
}); });
...@@ -179,29 +208,39 @@ export async function activityDelete(id:string) { ...@@ -179,29 +208,39 @@ export async function activityDelete(id:string) {
* @param state 活动状态 * @param state 活动状态
* @returns 二维数组,第一行为表头,后续行为数据 * @returns 二维数组,第一行为表头,后续行为数据
*/ */
export async function outPutActivityData(title: string, startTime: number, endTime: number, target: number[], state: number) { export async function outPutActivityData(title: string, startTime: number, endTime: number, target: number[], state: number, id:string[]) {
/** 拼接查询条件 */ /** 拼接查询条件 */
let selectParam: any = {}; let selectParam: any = {};
if (title) { if (title) {
selectParam.title = { "$regex": `${title}` }; selectParam.title = { "$regex": `${title}` };
} }
if (startTime && endTime) { if (startTime && endTime) {
selectParam.startTime = { "$gte": startTime }; selectParam.startTime = { "$lte": endTime };
selectParam.endTime = { "$lte": endTime }; selectParam.endTime = { "$gte": startTime };
} else if (startTime) { } else if (startTime) {
selectParam.startTime = { "$gte": startTime }; selectParam.startTime = { "$lte": endTime };
} else if (endTime) { } else if (endTime) {
selectParam.endTime = { "$lte": endTime }; selectParam.endTime = { "$gte": startTime };
} }
if (target && target.length > 0) { if (target && target.length > 0) {
selectParam.target = { "$in": target }; selectParam.target = { "$in": target };
} }
if (state) {
selectParam.state = state;
}
/** 查询园区活动数据 */ /** 查询园区活动数据 */
let activityDbList = await activityData.findActivityListByParam(selectParam); let activityDbList = await activityData.findActivityListByParam(selectParam);
// 如果有状态筛选,在内存中过滤
if (state) {
activityDbList = activityDbList.filter(info => {
const activityState = calculateActivityState(info.startTime, info.endTime);
return activityState === state;
});
}
// 如果有ID筛选
if (id) {
activityDbList = activityDbList.filter(info => id.includes(info.id));
}
/** 表头定义 */ /** 表头定义 */
const titleList = [ const titleList = [
...@@ -211,7 +250,7 @@ export async function outPutActivityData(title: string, startTime: number, endTi ...@@ -211,7 +250,7 @@ export async function outPutActivityData(title: string, startTime: number, endTi
"结束时间", "结束时间",
"活动类型", "活动类型",
"活动地点", "活动地点",
"活动描述" // "活动描述"
]; ];
let dataList = [titleList]; // 第一行为表头 let dataList = [titleList]; // 第一行为表头
...@@ -233,8 +272,9 @@ export async function outPutActivityData(title: string, startTime: number, endTi ...@@ -233,8 +272,9 @@ export async function outPutActivityData(title: string, startTime: number, endTi
} }
changeData.target = targetTexts.join("、") || "未选择"; changeData.target = targetTexts.join("、") || "未选择";
// 活动状态 // 计算活动状态并转为文本
changeData.state = verificationEnumTools.changeEnumValue(configEnum.ACTIVITYSTATE, changeData.state) || "未选择"; const activityState = calculateActivityState(info.startTime, info.endTime);
changeData.state = verificationEnumTools.changeEnumValue(configEnum.ACTIVITYSTATE, activityState) || "未选择";
/** 时间格式化 */ /** 时间格式化 */
changeData.startTime = changeData.startTime ? formatDateTime(changeData.startTime) : "-"; changeData.startTime = changeData.startTime ? formatDateTime(changeData.startTime) : "-";
...@@ -253,7 +293,7 @@ export async function outPutActivityData(title: string, startTime: number, endTi ...@@ -253,7 +293,7 @@ export async function outPutActivityData(title: string, startTime: number, endTi
changeData.endTime, changeData.endTime,
changeData.target, changeData.target,
changeData.location || "-", changeData.location || "-",
changeData.desc || "-" // changeData.desc || "-"
]; ];
dataList.push(row); dataList.push(row);
...@@ -280,4 +320,25 @@ function formatDateTime(timestamp: number): string { ...@@ -280,4 +320,25 @@ function formatDateTime(timestamp: number): string {
} }
/**
* 根据活动时间计算活动状态
* @param startTime 开始时间戳
* @param endTime 结束时间戳
* @returns 活动状态枚举值
*/
function calculateActivityState(startTime:number, endTime:number) {
const now = Date.now();
if (now < startTime) {
return configEnum.ACTIVITYSTATE.未开始;
} else if (now >= startTime && now <= endTime) {
return configEnum.ACTIVITYSTATE.活动中;
} else {
return configEnum.ACTIVITYSTATE.已结束;
}
}
...@@ -17,7 +17,8 @@ export async function getLabel(labelType?) { ...@@ -17,7 +17,8 @@ export async function getLabel(labelType?) {
labelDbList.forEach( info => { labelDbList.forEach( info => {
dataList.push({ dataList.push({
key: info.id, key: info.id,
value: info.labelName value: info.labelName,
type: info.labelType
}) })
}) })
......
...@@ -6,7 +6,7 @@ import * as verificationEnumTools from "../util/verificationEnum"; ...@@ -6,7 +6,7 @@ import * as verificationEnumTools from "../util/verificationEnum";
import * as configEnum from "../config/enum"; import * as configEnum from "../config/enum";
import * as industryEnum from "../config/enum/industryEnum"; import * as industryEnum from "../config/enum/industryEnum";
import * as manageData from "../data/manage"; import * as manageData from "../data/manage";
import { checkChange, extractData } from "../util/piecemeal"; import { checkChange, extractData, getManageData } from "../util/piecemeal";
import * as splitResultConfig from '../config/splitResultConfig'; import * as splitResultConfig from '../config/splitResultConfig';
import { eccFormParam } from "../util/verificationParam"; import { eccFormParam } from "../util/verificationParam";
import { ManageAddConfig, ManageUpdateConfig } from "../config/eccParam/admin"; import { ManageAddConfig, ManageUpdateConfig } from "../config/eccParam/admin";
...@@ -38,7 +38,7 @@ export async function manageList(name:string, year:number, period:number, page:n ...@@ -38,7 +38,7 @@ export async function manageList(name:string, year:number, period:number, page:n
} }
/**需要用到的查询数据 */ /**需要用到的查询数据 */
let manageDbList = await manageData.findManageListToPage(selectParam, (page - 1) * 10); let manageDbList = await manageData.findManageListToPageSort(selectParam, (page - 1) * 10, {year: -1});
let count = await manageData.findManageCount(selectParam);//符合查询条件的数据总数 let count = await manageData.findManageCount(selectParam);//符合查询条件的数据总数
/**组合返回结果 */ /**组合返回结果 */
...@@ -67,8 +67,9 @@ export async function manageCreate(param) { ...@@ -67,8 +67,9 @@ export async function manageCreate(param) {
/**校验枚举 */ /**校验枚举 */
verificationEnumTools.eccEnumValue('管理后台新增经营数据', 'period', configEnum.PERIOD, param.period); verificationEnumTools.eccEnumValue('管理后台新增经营数据', 'period', configEnum.PERIOD, param.period);
let enterpriseInfo = await manageData.findManageByParam({name:param.name}); /**校验经营数据是否重复 */
if (enterpriseInfo && enterpriseInfo.name) throw new BizError(ERRORENUM.该企业已存在, `${param.name}已经在库中存在`); let isAdd = await getManageData(param.uscc, param.year, param.period);
if (!isAdd) throw new BizError(ERRORENUM.请勿重复提交填报数据, `${param.uscc}已有${param.year}${param.period}时间经营数据`);
let manageInfo = { let manageInfo = {
id: randomId(TABLEID.企业经营数据), id: randomId(TABLEID.企业经营数据),
...@@ -168,7 +169,7 @@ export async function manageDelete(id:string) { ...@@ -168,7 +169,7 @@ export async function manageDelete(id:string) {
* @param period 数据期间 上半年、下半年、全年 * @param period 数据期间 上半年、下半年、全年
* @returns 二维数组,第一行为表头,后续行为数据 * @returns 二维数组,第一行为表头,后续行为数据
*/ */
export async function outPutManageData(name: string, year: number, period: number) { export async function outPutManageData(name: string, year: number, period: number, id:string[]) {
/** 拼接查询条件 */ /** 拼接查询条件 */
let selectParam: any = {}; let selectParam: any = {};
if (name) { if (name) {
...@@ -180,6 +181,9 @@ export async function outPutManageData(name: string, year: number, period: numbe ...@@ -180,6 +181,9 @@ export async function outPutManageData(name: string, year: number, period: numbe
if (period) { if (period) {
selectParam.period = period; selectParam.period = period;
} }
if (id) {
selectParam.id = {"$in": id};
}
/** 查询经营数据 */ /** 查询经营数据 */
let manageDbList = await manageData.findManageListByParam(selectParam); let manageDbList = await manageData.findManageListByParam(selectParam);
...@@ -220,7 +224,7 @@ export async function outPutManageData(name: string, year: number, period: numbe ...@@ -220,7 +224,7 @@ export async function outPutManageData(name: string, year: number, period: numbe
/** 枚举值转文本 */ /** 枚举值转文本 */
changeData.period = verificationEnumTools.changeEnumValue(configEnum.PERIOD, changeData.period) || "未选择"; changeData.period = verificationEnumTools.changeEnumValue(configEnum.PERIOD, changeData.period) || "未选择";
changeData.isSubmit = changeData.isSubmit ? "已提交" : "未提交"; changeData.isSubmit = info.isSubmit ? "已提交" : "未提交";
/** 数字格式化(保留两位小数) */ /** 数字格式化(保留两位小数) */
const numberKeys = ["BI", "VAT", "CIT", "PIT", "RD"]; const numberKeys = ["BI", "VAT", "CIT", "PIT", "RD"];
......
...@@ -187,7 +187,7 @@ export async function negotiationDelete(id:string) { ...@@ -187,7 +187,7 @@ export async function negotiationDelete(id:string) {
* @param contactDepartment 对接部门 * @param contactDepartment 对接部门
* @returns 二维数组,第一行为表头,后续行为数据 * @returns 二维数组,第一行为表头,后续行为数据
*/ */
export async function outPutNegotiationData(name:string, industry:string[], registrationStatus:number, primaryContact:string, contactDepartment:string) { export async function outPutNegotiationData(name:string, industry:string[], registrationStatus:number, primaryContact:string, contactDepartment:string, id:string[]) {
/** 拼接查询条件 */ /** 拼接查询条件 */
let selectParam: any = {}; let selectParam: any = {};
if (name) { if (name) {
...@@ -207,6 +207,9 @@ export async function outPutNegotiationData(name:string, industry:string[], regi ...@@ -207,6 +207,9 @@ export async function outPutNegotiationData(name:string, industry:string[], regi
if (contactDepartment) { if (contactDepartment) {
selectParam.contactDepartment = {"$regex": `${contactDepartment}`}; selectParam.contactDepartment = {"$regex": `${contactDepartment}`};
} }
if (id) {
selectParam.id = {"$in": id};
}
/** 查询在谈在跟数据 */ /** 查询在谈在跟数据 */
let negotiationDbList = await negotiationData.findNegotiationListByParam(selectParam); let negotiationDbList = await negotiationData.findNegotiationListByParam(selectParam);
...@@ -219,7 +222,7 @@ export async function outPutNegotiationData(name:string, industry:string[], regi ...@@ -219,7 +222,7 @@ export async function outPutNegotiationData(name:string, industry:string[], regi
"注册情况", "注册情况",
"负责人/首谈人", "负责人/首谈人",
"对接部门", "对接部门",
"创建时间" // "创建时间"
]; ];
/** 字段映射 */ /** 字段映射 */
...@@ -230,7 +233,7 @@ export async function outPutNegotiationData(name:string, industry:string[], regi ...@@ -230,7 +233,7 @@ export async function outPutNegotiationData(name:string, industry:string[], regi
"registrationStatus", "registrationStatus",
"primaryContact", "primaryContact",
"contactDepartment", "contactDepartment",
"createTime" // "createTime"
]; ];
let dataList = [titleList]; // 第一行为表头 let dataList = [titleList]; // 第一行为表头
...@@ -249,7 +252,7 @@ export async function outPutNegotiationData(name:string, industry:string[], regi ...@@ -249,7 +252,7 @@ export async function outPutNegotiationData(name:string, industry:string[], regi
changeData.progressStatus = verificationEnumTools.changeEnumValue(configEnum.PROGRESSSTATUS, changeData.progressStatus) || "未选择"; changeData.progressStatus = verificationEnumTools.changeEnumValue(configEnum.PROGRESSSTATUS, changeData.progressStatus) || "未选择";
/** 时间格式化 */ /** 时间格式化 */
changeData.createTime = changeData.createTime ? moment(changeData.createTime).format("YYYY-MM-DD HH:mm:ss") : "-"; // changeData.createTime = changeData.createTime ? moment(changeData.createTime).format("YYYY-MM-DD HH:mm:ss") : "-";
/** 生成一行数据 */ /** 生成一行数据 */
let row = []; let row = [];
......
...@@ -17,9 +17,9 @@ import { ERRORENUM } from "../config/errorEnum"; ...@@ -17,9 +17,9 @@ import { ERRORENUM } from "../config/errorEnum";
/** /**
* 政策-列表 * 政策-列表
* @param title 活动标题 * @param title 政策标题
* @param startTime 活动开始时间 * @param startTime 政策开始时间
* @param endTime 活动结束时间 * @param endTime 政策结束时间
* @param policyType 政策类型 财政补贴 资质申报 政策扶持 * @param policyType 政策类型 财政补贴 资质申报 政策扶持
* @param page 页 * @param page 页
*/ */
...@@ -29,15 +29,16 @@ export async function policyList(title:string, startTime:number, endTime:number, ...@@ -29,15 +29,16 @@ export async function policyList(title:string, startTime:number, endTime:number,
selectParam.title = {"$regex":`${title}`}; selectParam.title = {"$regex":`${title}`};
} }
if (startTime && endTime) { if (startTime && endTime) {
selectParam.startTime = { "$gte": startTime }; // 条件:政策开始时间 <= 传入结束时间 且 政策结束时间 >= 传入开始时间
selectParam.endTime = { "$lte": endTime }; selectParam.startTime = { "$lte": endTime };
selectParam.endTime = { "$gte": startTime };
} }
if (policyType) { if (policyType) {
verificationEnumTools.eccEnumValue('管理后台获取政策列表', 'policyType', configEnum.POLICYTYPE, policyType); verificationEnumTools.eccEnumValue('管理后台获取政策列表', 'policyType', configEnum.POLICYTYPE, policyType);
selectParam.policyType = policyType; selectParam.policyType = policyType;
} }
/**需要用到的查询数据 */ /**需要用到的查询数据 */
let policyDbList = await policyData.findPolicyListToPage(selectParam, (page - 1) * 10); let policyDbList = await policyData.findPolicyListToPageSort(selectParam, (page - 1) * 10, {createTime: -1});
let count = await policyData.findPolicyCount(selectParam);//符合查询条件的数据总数 let count = await policyData.findPolicyCount(selectParam);//符合查询条件的数据总数
/**组合返回结果 */ /**组合返回结果 */
...@@ -78,6 +79,7 @@ export async function policyCreate(param) { ...@@ -78,6 +79,7 @@ export async function policyCreate(param) {
endTime: param.endTime, endTime: param.endTime,
source: param.source, source: param.source,
desc:param.desc, desc:param.desc,
createTime: new Date().valueOf(),
} }
await policyData.createDataByParam(policyInfo); await policyData.createDataByParam(policyInfo);
...@@ -159,26 +161,29 @@ export async function policyDelete(id:string) { ...@@ -159,26 +161,29 @@ export async function policyDelete(id:string) {
* @param policyType 政策类型 * @param policyType 政策类型
* @returns 二维数组,第一行为表头,后续行为数据 * @returns 二维数组,第一行为表头,后续行为数据
*/ */
export async function outPutPolicyData(title: string, startTime: number, endTime: number, policyType: number) { export async function outPutPolicyData(title: string, startTime: number, endTime: number, policyType: number, id: string[]) {
/** 拼接查询条件 */ /** 拼接查询条件 */
let selectParam: any = {}; let selectParam: any = {};
if (title) { if (title) {
selectParam.title = { "$regex": `${title}` }; selectParam.title = { "$regex": `${title}` };
} }
if (startTime && endTime) { if (startTime && endTime) {
selectParam.startTime = { "$gte": startTime }; selectParam.startTime = { "$lte": endTime };
selectParam.endTime = { "$lte": endTime }; selectParam.endTime = { "$gte": startTime };
} else if (startTime) { } else if (startTime) {
selectParam.startTime = { "$gte": startTime }; selectParam.startTime = { "$lte": endTime };
} else if (endTime) { } else if (endTime) {
selectParam.endTime = { "$lte": endTime }; selectParam.endTime = { "$gte": startTime };
} }
if (policyType) { if (policyType) {
selectParam.policyType = policyType; selectParam.policyType = policyType;
} }
if (id) {
selectParam.id = {"$in": id};
}
/** 查询政策数据 */ /** 查询政策数据 */
let policyDbList = await policyData.findPolicyListByParam(selectParam); let policyDbList = await policyData.findPolicyByParamSort(selectParam, {createTime: -1});
/** 表头定义 */ /** 表头定义 */
const titleList = [ const titleList = [
...@@ -187,7 +192,7 @@ export async function outPutPolicyData(title: string, startTime: number, endTime ...@@ -187,7 +192,7 @@ export async function outPutPolicyData(title: string, startTime: number, endTime
"生效时间", "生效时间",
"失效时间", "失效时间",
"政策来源", "政策来源",
"政策内容" // "政策内容"
]; ];
let dataList = [titleList]; // 第一行为表头 let dataList = [titleList]; // 第一行为表头
...@@ -216,7 +221,7 @@ export async function outPutPolicyData(title: string, startTime: number, endTime ...@@ -216,7 +221,7 @@ export async function outPutPolicyData(title: string, startTime: number, endTime
changeData.startTime, changeData.startTime,
changeData.endTime, changeData.endTime,
changeData.source || "-", changeData.source || "-",
descText // descText
]; ];
dataList.push(row); dataList.push(row);
......
...@@ -382,7 +382,7 @@ export async function trackDelete(id:string) { ...@@ -382,7 +382,7 @@ export async function trackDelete(id:string) {
* @param trackType 需求跟进状态 * @param trackType 需求跟进状态
* @returns 二维数组,第一行为表头,后续行为数据(空行分隔) * @returns 二维数组,第一行为表头,后续行为数据(空行分隔)
*/ */
export async function outPutTrackDetailsData(name: string, demand: number, trackType: number) { export async function outPutTrackDetailsData(name: string, demand: number, trackType: number, id:string[]) {
/** 拼接查询条件 */ /** 拼接查询条件 */
let selectParam: any = {}; let selectParam: any = {};
if (name) { if (name) {
...@@ -394,6 +394,9 @@ export async function outPutTrackDetailsData(name: string, demand: number, track ...@@ -394,6 +394,9 @@ export async function outPutTrackDetailsData(name: string, demand: number, track
if (trackType) { if (trackType) {
selectParam.trackType = trackType; selectParam.trackType = trackType;
} }
if (id) {
selectParam.id = {"$in": id};
}
/** 查询服务追踪数据 */ /** 查询服务追踪数据 */
let trackDbList = await trackData.findTrackListByParam(selectParam); let trackDbList = await trackData.findTrackListByParam(selectParam);
......
...@@ -87,7 +87,7 @@ export const EnterpriseUpdateConfig = { ...@@ -87,7 +87,7 @@ export const EnterpriseUpdateConfig = {
labels:{type:"[String]"}, //企业标签 labels:{type:"[String]"}, //企业标签
industry:{type:"[Number]"}, //行业领域 industry:{type:"[Number]"}, //行业领域
property:{type:"Number"}, //企业所属物业 property:{type:"Number"}, //企业所属物业
enterpriseNature:{type:"Number"}, //企业性质 enterpriseNature:{type:"String"}, //企业性质
leasedArea:{type:"Number"}, //租赁面积(㎡) leasedArea:{type:"Number"}, //租赁面积(㎡)
RAS:{type:"Number"}, //登记状态 RAS:{type:"Number"}, //登记状态
jingYingFanWei:{type:"String"}, //经营范围 jingYingFanWei:{type:"String"}, //经营范围
...@@ -147,7 +147,7 @@ export const TrackAddConfig = { ...@@ -147,7 +147,7 @@ export const TrackAddConfig = {
contactUs:{type:"String"}, //企业联系方式 contactUs:{type:"String"}, //企业联系方式
// trackType:{type:"Number"}, //需求跟进状态 同步详情记录的跟进状态 // trackType:{type:"Number"}, //需求跟进状态 同步详情记录的跟进状态
createTime:{type:"Number"}, //创建服务追踪时间 createTime:{type:"Number"}, //创建服务追踪时间
details:{type:"Array"}, //服务追踪记录 details:{type:"Array", notMustHave:true}, //服务追踪记录
}; };
...@@ -178,7 +178,7 @@ export const TrackUpdateConfig = { ...@@ -178,7 +178,7 @@ export const TrackUpdateConfig = {
contactUs:{type:"String"}, //企业联系方式 contactUs:{type:"String"}, //企业联系方式
// trackType:{type:"Number"}, //需求跟进状态 同步详情记录的跟进状态 // trackType:{type:"Number"}, //需求跟进状态 同步详情记录的跟进状态
createTime:{type:"Number"}, //创建服务追踪时间 createTime:{type:"Number"}, //创建服务追踪时间
details:{type:"Array"}, //服务追踪记录 details:{type:"Array", notMustHave:true}, //服务追踪记录
}; };
...@@ -202,7 +202,7 @@ export const TrackDetailsUpdateConfig = { ...@@ -202,7 +202,7 @@ export const TrackDetailsUpdateConfig = {
*/ */
export const ActivityAddConfig = { export const ActivityAddConfig = {
title:{type:"String"}, //活动标题 title:{type:"String"}, //活动标题
state:{type:"Number"}, //活动状态 // state:{type:"Number"}, //活动状态
startTime:{type:"Number"}, //活动开始时间 startTime:{type:"Number"}, //活动开始时间
endTime:{type:"Number"}, //活动结束时间 endTime:{type:"Number"}, //活动结束时间
target:{type:"[Number]"}, //活动类型 target:{type:"[Number]"}, //活动类型
...@@ -218,7 +218,7 @@ export const ActivityAddConfig = { ...@@ -218,7 +218,7 @@ export const ActivityAddConfig = {
*/ */
export const ActivityUpdateConfig = { export const ActivityUpdateConfig = {
title:{type:"String"}, //活动标题 title:{type:"String"}, //活动标题
state:{type:"Number"}, //活动状态 // state:{type:"Number"}, //活动状态
startTime:{type:"Number"}, //活动开始时间 startTime:{type:"Number"}, //活动开始时间
endTime:{type:"Number"}, //活动结束时间 endTime:{type:"Number"}, //活动结束时间
target:{type:"[Number]"}, //活动类型 target:{type:"[Number]"}, //活动类型
......
...@@ -2,8 +2,6 @@ ...@@ -2,8 +2,6 @@
* 事件标签枚举 * 事件标签枚举
* *
*/ */
export enum LABELTYPE { export enum LABELTYPE {
基础标签 = 1, 基础标签 = 1,
入驻年份 = 2, 入驻年份 = 2,
...@@ -13,7 +11,6 @@ export enum LABELTYPE { ...@@ -13,7 +11,6 @@ export enum LABELTYPE {
} }
/** /**
* 企业系统标签 * 企业系统标签
*/ */
......
...@@ -81,7 +81,10 @@ export enum ERRORENUM { ...@@ -81,7 +81,10 @@ export enum ERRORENUM {
该账号已存在, 该账号已存在,
该标签不存在, 该标签不存在,
该活动已存在, 该活动已存在,
该政策已存在 该政策已存在,
企业性质不可多选,
所属物业不可多选,
入驻年份不可多选
} }
export enum ERRORCODEENUM { export enum ERRORCODEENUM {
......
...@@ -39,6 +39,9 @@ export const enterpriseListConfig = { ...@@ -39,6 +39,9 @@ export const enterpriseListConfig = {
zhuceziben:{key:"注册资本"}, zhuceziben:{key:"注册资本"},
property:{key:"所属物业"}, property:{key:"所属物业"},
enterpriseNature:{key:"企业性质"}, enterpriseNature:{key:"企业性质"},
logonAddress:{key:"注册地址"},
legalPerson:{key:"法人"},
dianHua:{key:"联系电话"},
}; };
......
...@@ -8,7 +8,7 @@ import {sasp} from '../db/mongo/dbInit'; ...@@ -8,7 +8,7 @@ import {sasp} from '../db/mongo/dbInit';
const activitySchema = new Schema({ const activitySchema = new Schema({
id:{type:String, index:true}, //唯一标识 id:{type:String, index:true}, //唯一标识
title:String, //活动标题 title:String, //活动标题
state:{type:Number, default:1}, //活动状态 未开始、活动中、已结束 // state:{type:Number, default:1}, //活动状态 未开始、活动中、已结束 -- 移除state字段,根据startTime和endTime动态计算状态
startTime:Number, //活动开始时间 startTime:Number, //活动开始时间
endTime:Number, //活动结束时间 endTime:Number, //活动结束时间
target:{type:[Number], default:[]}, //活动类型 target:{type:[Number], default:[]}, //活动类型
......
...@@ -161,6 +161,17 @@ export async function save(throwError=false) { ...@@ -161,6 +161,17 @@ export async function save(throwError=false) {
/** /**
* 分页获取所有企业-排序
* @param selectParam 查询参数
* @param skipCount 跳过数量
* @returns [] 在跟在谈企业列表
*/
export async function findEnterpriseListToPageSort(selectParam, skipCount, sortParam) {
return await enterpriseModel.find(selectParam).sort(sortParam).skip(skipCount).limit(10);
}
/**
* 分页获取所有企业 * 分页获取所有企业
* @param selectParam 查询参数 * @param selectParam 查询参数
* @param skipCount 跳过数量 * @param skipCount 跳过数量
...@@ -202,6 +213,15 @@ export async function findEnterpriseListByParam(selectParam) { ...@@ -202,6 +213,15 @@ export async function findEnterpriseListByParam(selectParam) {
/** /**
* 获取按时间排序的符合条件的企业列表
* @param selectParam
*/
export async function findEnterpriseListByParamSort(selectParam, sortParam) {
return await enterpriseModel.find(selectParam).sort(sortParam);
}
/**
* 获取符合条件的单个企业 * 获取符合条件的单个企业
* @param selectParam * @param selectParam
*/ */
......
...@@ -56,6 +56,17 @@ export async function findManageListToPage(selectParam, skipCount) { ...@@ -56,6 +56,17 @@ export async function findManageListToPage(selectParam, skipCount) {
/** /**
* 分页获取所有经营数据
* @param selectParam 查询参数
* @param skipCount 跳过数量
* @returns [] 经营数据列表
*/
export async function findManageListToPageSort(selectParam, skipCount, sortParam) {
return await manageModel.find(selectParam).sort(sortParam).skip(skipCount).limit(10);
}
/**
* 获取符合条件的经营数据数量 * 获取符合条件的经营数据数量
* @param selectParam 查询参数 * @param selectParam 查询参数
* @returns number 数据数量 * @returns number 数据数量
......
...@@ -14,6 +14,7 @@ const policySchema = new Schema({ ...@@ -14,6 +14,7 @@ const policySchema = new Schema({
endTime:Number, //政策结束时间 endTime:Number, //政策结束时间
source:String, //来源,发布单位 source:String, //来源,发布单位
desc:String, //政策详情 desc:String, //政策详情
createTime:Number, //创建时间
}) })
...@@ -43,7 +44,7 @@ export async function save(throwError=false) { ...@@ -43,7 +44,7 @@ export async function save(throwError=false) {
* 分页获取所有政策 * 分页获取所有政策
* @param selectParam 查询参数 * @param selectParam 查询参数
* @param skipCount 跳过数量 * @param skipCount 跳过数量
* @returns [] 在跟在谈政策列表 * @returns [] 政策列表
*/ */
export async function findPolicyListToPage(selectParam, skipCount) { export async function findPolicyListToPage(selectParam, skipCount) {
return await policyModel.find(selectParam).skip(skipCount).limit(10); return await policyModel.find(selectParam).skip(skipCount).limit(10);
...@@ -51,6 +52,17 @@ export async function findPolicyListToPage(selectParam, skipCount) { ...@@ -51,6 +52,17 @@ export async function findPolicyListToPage(selectParam, skipCount) {
/** /**
* 分页获取所有政策-排序
* @param selectParam 查询参数
* @param skipCount 跳过数量
* @returns [] 政策列表
*/
export async function findPolicyListToPageSort(selectParam, skipCount, sortParam) {
return await policyModel.find(selectParam).sort(sortParam).skip(skipCount).limit(10);
}
/**
* 获取符合条件的政策数量 * 获取符合条件的政策数量
* @param selectParam 查询参数 * @param selectParam 查询参数
* @returns number 数据数量 * @returns number 数据数量
...@@ -70,6 +82,15 @@ export async function findPolicyByParam(selectParam) { ...@@ -70,6 +82,15 @@ export async function findPolicyByParam(selectParam) {
/** /**
* 获取符合条件的政策
* @param selectParam
*/
export async function findPolicyByParamSort(selectParam, sortParam) {
return await policyModel.find(selectParam).sort(sortParam);
}
/**
* 获取符合条件的政策列表 * 获取符合条件的政策列表
* @param selectParam * @param selectParam
*/ */
......
import { updateQCCDataTask } from "./biz/qccInit"; import { initApiDataStorage } from "./biz/qccInit";
import { initConfig, systemConfig} from "./config/serverConfig"; import { initConfig, systemConfig} from "./config/serverConfig";
import { initDB } from "./db/mongo/dbInit"; import { initDB } from "./db/mongo/dbInit";
import { httpServer } from "./net/http_server"; import { httpServer } from "./net/http_server";
...@@ -10,14 +10,13 @@ async function lanuch() { ...@@ -10,14 +10,13 @@ async function lanuch() {
/**初始化数据库 */ /**初始化数据库 */
await initDB(); await initDB();
/**初始化底表数据 */ /**初始化底表数据 */
// await initBasicData(); await initBasicData();
/**创建http服务 */ /**创建http服务 */
httpServer.createServer(systemConfig.port); httpServer.createServer(systemConfig.port);
console.log('This indicates that the server is started successfully.'); console.log('This indicates that the server is started successfully.');
/**初始化企查查数据 */ /**初始化企查查数据 */
// await updateQCCDataTask(); await initApiDataStorage();
} }
......
...@@ -5,7 +5,7 @@ import compression = require('compression'); ...@@ -5,7 +5,7 @@ import compression = require('compression');
import { watch } from '../middleware/watch'; import { watch } from '../middleware/watch';
import { httpErrorHandler } from '../middleware/httpErrorHandler'; import { httpErrorHandler } from '../middleware/httpErrorHandler';
import * as path from "path"; import * as path from "path";
// import * as fallback from 'express-history-api-fallback'; import fallback from 'express-history-api-fallback';
export class httpServer { export class httpServer {
static createServer(port:number) { static createServer(port:number) {
...@@ -34,7 +34,7 @@ export class httpServer { ...@@ -34,7 +34,7 @@ export class httpServer {
httpServer.use(express.static("./files") ); httpServer.use(express.static("./files") );
const root = path.join(__dirname, "../../public"); const root = path.join(__dirname, "../../public");
httpServer.use(express.static(root)); httpServer.use(express.static(root));
// httpServer.use(fallback('index.html', { root })); httpServer.use(fallback('index.html', { root }));
httpServer.use(compression()); httpServer.use(compression());
httpServer.use(watch); httpServer.use(watch);
httpServer.use(bodyParser.json({limit:"5000kb"})); httpServer.use(bodyParser.json({limit:"5000kb"}));
......
...@@ -94,11 +94,11 @@ async function delActivity(req, res) { ...@@ -94,11 +94,11 @@ async function delActivity(req, res) {
* @param res * @param res
*/ */
async function outPutActivityList(req, res) { async function outPutActivityList(req, res) {
let reqConf = {title:'String', startTime:'Number', endTime:'Number', target:'[Number]', state:'Number'}; let reqConf = {title:'String', startTime:'Number', endTime:'Number', target:'[Number]', state:'Number', id:'[String]'};
const NotMustHaveKeys = ['title', 'startTime', 'endTime', 'target', 'state']; const NotMustHaveKeys = ['title', 'startTime', 'endTime', 'target', 'state', 'id'];
let {title, startTime, endTime, target, state} = eccReqParamater(reqConf, req.body, NotMustHaveKeys); let {title, startTime, endTime, target, state, id} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await activityBiz.outPutActivityData(title, startTime, endTime, target, state); let result = await activityBiz.outPutActivityData(title, startTime, endTime, target, state, id);
res.success(result); res.success(result);
} }
......
...@@ -94,11 +94,11 @@ async function delEnterprise(req, res) { ...@@ -94,11 +94,11 @@ async function delEnterprise(req, res) {
* @param res * @param res
*/ */
async function outPutEnterprise(req, res) { async function outPutEnterprise(req, res) {
let reqConf = {name:'String', industry:'[Number]', parkEntryTime:'Number', logonTime:'Number', labelIdList:'[String]', dataType:'Number'}; let reqConf = {name:'String', industry:'[Number]', parkEntryTime:'Number', logonTime:'Number', labelIdList:'[String]', dataType:'Number', uscc:'[String]'};
const NotMustHaveKeys = ['name', 'industry', 'parkEntryTime', 'logonTime', 'labelIdList', 'dataType']; const NotMustHaveKeys = ['name', 'industry', 'parkEntryTime', 'logonTime', 'labelIdList', 'dataType', 'uscc'];
let {name, industry, parkEntryTime, logonTime, labelIdList, dataType} = eccReqParamater(reqConf, req.body, NotMustHaveKeys); let {name, industry, parkEntryTime, logonTime, labelIdList, dataType, uscc} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await enterpriseBiz.outPutEnterpriseData(name, industry, parkEntryTime, logonTime, labelIdList, dataType); let result = await enterpriseBiz.outPutEnterpriseData(name, industry, parkEntryTime, logonTime, labelIdList, dataType, uscc);
res.success(result); res.success(result);
} }
......
...@@ -94,11 +94,11 @@ async function delManage(req, res) { ...@@ -94,11 +94,11 @@ async function delManage(req, res) {
* @param res * @param res
*/ */
async function outPutManageList(req, res) { async function outPutManageList(req, res) {
let reqConf = {name:'String', year:'Number', period:'Number'}; let reqConf = {name:'String', year:'Number', period:'Number', id:'[String]'};
const NotMustHaveKeys = ['name', 'year', 'period']; const NotMustHaveKeys = ['name', 'year', 'period', 'id'];
let {name, year, period} = eccReqParamater(reqConf, req.body, NotMustHaveKeys); let {name, year, period, id} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await manageBiz.outPutManageData(name, year, period); let result = await manageBiz.outPutManageData(name, year, period, id);
res.success(result); res.success(result);
} }
......
...@@ -89,16 +89,16 @@ async function delNegotiation(req, res) { ...@@ -89,16 +89,16 @@ async function delNegotiation(req, res) {
/** /**
* 在谈在跟-列表 * 在谈在跟-导出
* @param req * @param req
* @param res * @param res
*/ */
async function outPutNegotiation(req, res) { async function outPutNegotiation(req, res) {
let reqConf = {name:'String', industry:'[Number]', registrationStatus:'Number', primaryContact:'String', contactDepartment:'String'}; let reqConf = {name:'String', industry:'[Number]', registrationStatus:'Number', primaryContact:'String', contactDepartment:'String', id:'[String]'};
const NotMustHaveKeys = ['name', 'industry', 'registrationStatus', 'primaryContact', 'contactDepartment']; const NotMustHaveKeys = ['name', 'industry', 'registrationStatus', 'primaryContact', 'contactDepartment', 'id'];
let {name, industry, registrationStatus, primaryContact, contactDepartment} = eccReqParamater(reqConf, req.body, NotMustHaveKeys); let {name, industry, registrationStatus, primaryContact, contactDepartment, id} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await negotiationBiz.outPutNegotiationData(name, industry, registrationStatus, primaryContact, contactDepartment); let result = await negotiationBiz.outPutNegotiationData(name, industry, registrationStatus, primaryContact, contactDepartment, id);
res.success(result); res.success(result);
} }
......
...@@ -94,11 +94,11 @@ async function delPolicy(req, res) { ...@@ -94,11 +94,11 @@ async function delPolicy(req, res) {
* @param res * @param res
*/ */
async function outPutPolicyList(req, res) { async function outPutPolicyList(req, res) {
let reqConf = {title:'String', startTime:'Number', endTime:'Number', policyType:'Number'}; let reqConf = {title:'String', startTime:'Number', endTime:'Number', policyType:'Number', id:'[String]'};
const NotMustHaveKeys = ['title', 'startTime', 'endTime', 'policyType']; const NotMustHaveKeys = ['title', 'startTime', 'endTime', 'policyType', 'id'];
let {title, startTime, endTime, policyType} = eccReqParamater(reqConf, req.body, NotMustHaveKeys); let {title, startTime, endTime, policyType, id} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await policyBiz.outPutPolicyData(title, startTime, endTime, policyType); let result = await policyBiz.outPutPolicyData(title, startTime, endTime, policyType, id);
res.success(result); res.success(result);
} }
......
...@@ -109,11 +109,11 @@ async function delTrack(req, res) { ...@@ -109,11 +109,11 @@ async function delTrack(req, res) {
* @param res * @param res
*/ */
async function outPutTrackList(req, res) { async function outPutTrackList(req, res) {
let reqConf = {name:'String', demand:'Number', trackType:'Number'}; let reqConf = {name:'String', demand:'Number', trackType:'Number', id:'[String]'};
const NotMustHaveKeys = ['name', 'demand', 'trackType']; const NotMustHaveKeys = ['name', 'demand', 'trackType', 'id'];
let {name, demand, trackType} = eccReqParamater(reqConf, req.body, NotMustHaveKeys); let {name, demand, trackType, id} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await trackBiz.outPutTrackDetailsData(name, demand, trackType); let result = await trackBiz.outPutTrackDetailsData(name, demand, trackType, id);
res.success(result); res.success(result);
} }
......
...@@ -10,6 +10,7 @@ import * as labelEnum from "../config/enum/labelEnum"; ...@@ -10,6 +10,7 @@ import * as labelEnum from "../config/enum/labelEnum";
import { createDataByParam, findEnterpriseByUscc } from "../data/enterprise"; import { createDataByParam, findEnterpriseByUscc } from "../data/enterprise";
import { formatAddress, getPwdMd5, randomId } from "./system"; import { formatAddress, getPwdMd5, randomId } from "./system";
import { TABLEID } from "../config/enum/dbEnum"; import { TABLEID } from "../config/enum/dbEnum";
import moment from "moment";
let xlsx = require('node-xlsx'); let xlsx = require('node-xlsx');
let path = require('path'); let path = require('path');
let md5 = require("md5"); let md5 = require("md5");
...@@ -151,6 +152,7 @@ function parseIndustry(industryCategoryGb, industryMajorGb) { ...@@ -151,6 +152,7 @@ function parseIndustry(industryCategoryGb, industryMajorGb) {
}; };
} }
/** /**
* 处理日期字符串 * 处理日期字符串
* @param {string} dateStr * @param {string} dateStr
...@@ -160,8 +162,36 @@ function parseDateString(dateStr) { ...@@ -160,8 +162,36 @@ function parseDateString(dateStr) {
if (!dateStr || dateStr === '-') return null; if (!dateStr || dateStr === '-') return null;
try { try {
// 处理"2024年"格式的日期
if (typeof dateStr === 'string' && dateStr.includes('年')) {
// 提取年份数字,例如:"2024年" -> 2024
const yearMatch = dateStr.match(/(\d{4})年/);
if (yearMatch && yearMatch[1]) {
const year = parseInt(yearMatch[1], 10);
// 返回该年份1月1日的时间戳
return new Date(`${year}-01-01`).getTime();
}
}
// 处理Excel日期格式(如:2020-07-16) // 处理Excel日期格式(如:2020-07-16)
if (typeof dateStr === 'string') { if (typeof dateStr === 'string') {
// 尝试多种日期格式
const dateFormats = [
'YYYY-MM-DD',
'YYYY/MM/DD',
'YYYY年MM月DD日',
'YYYY-MM',
'YYYY年'
];
for (const format of dateFormats) {
const parsedDate = moment(dateStr, format, true);
if (parsedDate.isValid()) {
return parsedDate.valueOf();
}
}
// 如果上述格式都不匹配,尝试原生Date解析
let date = new Date(dateStr); let date = new Date(dateStr);
return isNaN(date.getTime()) ? null : date.getTime(); return isNaN(date.getTime()) ? null : date.getTime();
} }
...@@ -179,6 +209,7 @@ function parseDateString(dateStr) { ...@@ -179,6 +209,7 @@ function parseDateString(dateStr) {
} }
} }
/** /**
* 处理注册资本和实缴资本 * 处理注册资本和实缴资本
* @param {string} capitalStr * @param {string} capitalStr
...@@ -192,6 +223,7 @@ function parseCapital(capitalStr) { ...@@ -192,6 +223,7 @@ function parseCapital(capitalStr) {
return match ? match[1] + '万元' : capitalStr; return match ? match[1] + '万元' : capitalStr;
} }
/** /**
* 处理参保人数 * 处理参保人数
* @param {string|number} peopleStr * @param {string|number} peopleStr
...@@ -208,6 +240,7 @@ function parsePeopleCount(peopleStr) { ...@@ -208,6 +240,7 @@ function parsePeopleCount(peopleStr) {
return isNaN(num) ? 0 : num; return isNaN(num) ? 0 : num;
} }
/** /**
* 处理租赁面积 * 处理租赁面积
* @param {string|number} areaStr * @param {string|number} areaStr
...@@ -224,6 +257,7 @@ function parseLeasedArea(areaStr) { ...@@ -224,6 +257,7 @@ function parseLeasedArea(areaStr) {
return isNaN(num) ? 0 : num; return isNaN(num) ? 0 : num;
} }
/** /**
* 处理数字字段 * 处理数字字段
*/ */
...@@ -240,6 +274,7 @@ function parseNumber(value, defaultValue = 0) { ...@@ -240,6 +274,7 @@ function parseNumber(value, defaultValue = 0) {
return isNaN(num) ? defaultValue : num; return isNaN(num) ? defaultValue : num;
} }
/** /**
* 处理企业标签 * 处理企业标签
* @param {Object} rowData Excel行数据 * @param {Object} rowData Excel行数据
...@@ -295,22 +330,22 @@ function parseLabels(rowData) { ...@@ -295,22 +330,22 @@ function parseLabels(rowData) {
if (entryYear && entryYear != "-") { if (entryYear && entryYear != "-") {
let yearValue; let yearValue;
switch (entryYear.toString()) { switch (entryYear.toString()) {
case '2023': case '2023':
yearValue = labelEnum.ENTERPRISESYSTEMLABEL["2023年"]; yearValue = labelEnum.ENTERPRISESYSTEMLABEL["2023年"];
break; break;
case '2024': case '2024':
yearValue = labelEnum.ENTERPRISESYSTEMLABEL["2024年"]; yearValue = labelEnum.ENTERPRISESYSTEMLABEL["2024年"];
break; break;
case '2025': case '2025':
yearValue = labelEnum.ENTERPRISESYSTEMLABEL["2025年"]; yearValue = labelEnum.ENTERPRISESYSTEMLABEL["2025年"];
break; break;
case '2026': case '2026':
yearValue = labelEnum.ENTERPRISESYSTEMLABEL["2026年"]; yearValue = labelEnum.ENTERPRISESYSTEMLABEL["2026年"];
break; break;
case '2027': case '2027':
yearValue = labelEnum.ENTERPRISESYSTEMLABEL["2027年"]; yearValue = labelEnum.ENTERPRISESYSTEMLABEL["2027年"];
break; break;
case '2028': case '2028':
yearValue = labelEnum.ENTERPRISESYSTEMLABEL["2028年"]; yearValue = labelEnum.ENTERPRISESYSTEMLABEL["2028年"];
break; break;
// default: // default:
...@@ -659,7 +694,8 @@ async function initEnterpriseFromExcel() { ...@@ -659,7 +694,8 @@ async function initEnterpriseFromExcel() {
logonTime: parseDateString(rowData.logonTime), logonTime: parseDateString(rowData.logonTime),
parkEntryTime: parseDateString(rowData.parkEntryTime), parkEntryTime: parseDateString(rowData.parkEntryTime),
leasedArea: parseNumber(rowData.leasedArea, 0), leasedArea: parseNumber(rowData.leasedArea, 0),
enterpriseNature: EnterpriseNatureMap[rowData.enterpriseNature] || labelEnum.ENTERPRISENATURE.实体型, // enterpriseNature: EnterpriseNatureMap[rowData.enterpriseNature] || labelEnum.ENTERPRISENATURE.实体型,
enterpriseNature: EnterpriseNatureMap[rowData.enterpriseNature] || null,
property: propertyMap[rowData.property] || null, property: propertyMap[rowData.property] || null,
//用户相关 //用户相关
......
...@@ -221,5 +221,114 @@ export function formatAddress(original) { ...@@ -221,5 +221,114 @@ export function formatAddress(original) {
} }
/**
* 更完善的注册资本格式化函数
* @param {string|number} value 注册资本值
* @returns {string} 格式化后的注册资本字符串
*/
export function formatRegisteredCapital(value) {
if (value === null || value === undefined) {
return '';
}
// 如果输入是数字,转换为字符串
if (typeof value === 'number') {
value = value.toString();
}
// 确保是字符串类型
if (typeof value !== 'string') {
return String(value);
}
// 去除首尾空格
value = value.trim();
// 空字符串直接返回
if (value === '') {
return value;
}
// 特殊情况:如果是"-"或其他占位符,直接返回
if (value === '-' || value === '--' || value === 'N/A' || value === 'null' || value === 'undefined') {
return value;
}
// 判断是否已经包含单位
// 定义常见单位列表
const units = [
'万元', '万', 'w', 'W',
'元', '¥',
'亿', '亿元',
'美元', '美金', 'usd', 'USD',
'人民币', 'RMB', 'CNY',
'欧元', 'EUR', 'euro',
'日元', 'JPY', 'yen',
'港元', '港币', 'HKD',
'英镑', 'GBP', 'pound'
];
// 检查是否已包含单位(不区分大小写)
const lowerValue = value.toLowerCase();
for (const unit of units) {
if (lowerValue.endsWith(unit.toLowerCase()) ||
lowerValue.includes(unit.toLowerCase() + ' ') ||
lowerValue.includes(' ' + unit.toLowerCase())) {
return value; // 已包含单位,直接返回
}
}
// 检查常见的外币符号
const currencySymbols = ['¥', '¥', '$', '€', '£', '¥'];
for (const symbol of currencySymbols) {
if (value.includes(symbol)) {
return value; // 包含货币符号,直接返回
}
}
// 尝试提取纯数字部分
// 移除所有非数字字符(除了小数点、逗号和负号)
const numericString = value.replace(/[^0-9.,-]/g, '');
// 检查是否包含有效数字
if (numericString && /^-?\d[\d,]*\.?\d*$/.test(numericString)) {
// 移除逗号并转换为数字
const numericValue = parseFloat(numericString.replace(/,/g, ''));
// 根据数值大小选择合适的单位
if (!isNaN(numericValue)) {
// 如果数字大于等于10000万(即1亿),可以考虑使用"亿元"
if (numericValue >= 100000000) {
const billionValue = (numericValue / 100000000).toFixed(2);
// 去除末尾的.00
const formatted = billionValue.replace(/\.00$/, '');
return formatted + '亿元';
}
// 如果数字大于等于1000,使用"万元"
else if (numericValue >= 1000) {
const tenThousandValue = (numericValue / 10000).toFixed(2);
const formatted = tenThousandValue.replace(/\.00$/, '');
return formatted + '万元';
}
// 否则直接添加"万元"
else {
// 如果是整数,不显示小数位
if (Number.isInteger(numericValue)) {
return numericValue + '万元';
} else {
return numericValue.toFixed(2).replace(/\.00$/, '') + '万元';
}
}
}
}
// 如果无法解析为数字,但看起来像是金额(包含数字)
if (/\d/.test(value)) {
return value + '万元';
}
// 其他情况返回原值
return value;
}
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* 标签相关处理工具方法 * 标签相关处理工具方法
*/ */
import { LABELUPDATEROAD } from "../config/enum/labelEnum"; import { LABELTYPE, LABELUPDATEROAD } from "../config/enum/labelEnum";
import * as labelData from "../data/label"; import * as labelData from "../data/label";
...@@ -151,6 +151,7 @@ export async function generateEnterpriseLabels(enterpriseData, activeLabels = nu ...@@ -151,6 +151,7 @@ export async function generateEnterpriseLabels(enterpriseData, activeLabels = nu
if (labelInfo && labelInfo.state === false) { if (labelInfo && labelInfo.state === false) {
enterpriseLabels.push({ enterpriseLabels.push({
labelId: labelIdStr, labelId: labelIdStr,
labelType: LABELTYPE.基础标签,
state: true state: true
}); });
} }
...@@ -166,6 +167,7 @@ export async function generateEnterpriseLabels(enterpriseData, activeLabels = nu ...@@ -166,6 +167,7 @@ export async function generateEnterpriseLabels(enterpriseData, activeLabels = nu
if (labelInfo && labelInfo.state === false && !labelExists(natureLabelId, enterpriseLabels)) { if (labelInfo && labelInfo.state === false && !labelExists(natureLabelId, enterpriseLabels)) {
enterpriseLabels.push({ enterpriseLabels.push({
labelId: natureLabelId, labelId: natureLabelId,
labelType: LABELTYPE.企业性质,
state: true state: true
}); });
} }
...@@ -179,6 +181,7 @@ export async function generateEnterpriseLabels(enterpriseData, activeLabels = nu ...@@ -179,6 +181,7 @@ export async function generateEnterpriseLabels(enterpriseData, activeLabels = nu
if (labelInfo && labelInfo.state === false && !labelExists(propertyLabelId, enterpriseLabels)) { if (labelInfo && labelInfo.state === false && !labelExists(propertyLabelId, enterpriseLabels)) {
enterpriseLabels.push({ enterpriseLabels.push({
labelId: propertyLabelId, labelId: propertyLabelId,
labelType: LABELTYPE.所属物业,
state: true state: true
}); });
} }
...@@ -192,6 +195,7 @@ export async function generateEnterpriseLabels(enterpriseData, activeLabels = nu ...@@ -192,6 +195,7 @@ export async function generateEnterpriseLabels(enterpriseData, activeLabels = nu
if (labelInfo && labelInfo.state === false && !labelExists(yearLabelId, enterpriseLabels)) { if (labelInfo && labelInfo.state === false && !labelExists(yearLabelId, enterpriseLabels)) {
enterpriseLabels.push({ enterpriseLabels.push({
labelId: yearLabelId, labelId: yearLabelId,
labelType: LABELTYPE.入驻年份,
state: true state: true
}); });
} }
...@@ -234,3 +238,78 @@ export async function updateEnterpriseLabels(enterpriseData) { ...@@ -234,3 +238,78 @@ export async function updateEnterpriseLabels(enterpriseData) {
return await generateEnterpriseLabels(enterpriseData, activeLabels); return await generateEnterpriseLabels(enterpriseData, activeLabels);
} }
/**
* 转换前端传入的labels数据为数据库存储格式(基于标签表查询)
* @param {Array<string>} labelIds 前端传入的标签ID数组,如:["4", "6", "601", "2025", "el_35ee4ddafbf7eaf9191071b893adb806"]
* @returns {Promise<Array<Object>>} 数据库存储格式的标签数组
*/
export async function convertLabelsToDbFormat(labelIds) {
if (!labelIds || !Array.isArray(labelIds) || labelIds.length === 0) {
return [];
}
try {
// 批量查询标签信息,提高性能
const labelInfos = await labelData.selectLabelList({
id: { $in: labelIds }
});
// 创建标签ID到标签信息的映射
const labelInfoMap = new Map();
labelInfos.forEach(info => {
labelInfoMap.set(info.id, info);
});
const dbLabels = [];
for (const labelId of labelIds) {
if (!labelId || typeof labelId !== 'string') {
continue;
}
// 从查询结果中获取标签信息
const labelInfo = labelInfoMap.get(labelId);
let labelType = 0;
if (labelInfo) {
// 如果标签表中有定义,使用定义中的类型
labelType = labelInfo.labelType || 0;
} else {
// 如果标签表中没有定义,根据ID格式推断类型
// 1. 入驻年份标签(2023-2028年的纯数字)
if (/^\d{4}$/.test(labelId)) {
const year = parseInt(labelId);
if (year >= 2023 && year <= 2028) {
labelType = 2; // 假设2表示入驻年份标签类型
} else {
// 其他纯数字标签,可能是系统标签
labelType = 1; // 假设1表示系统标签类型
}
}
// 2. 自定义标签(以el_开头)
else if (labelId.startsWith('el_')) {
labelType = 5; // 假设5表示自定义标签类型
}
// 3. 其他情况
else {
labelType = 0; // 未知类型
}
}
dbLabels.push({
labelId: labelId,
labelType: labelType,
state: true // 默认启用状态
});
}
return dbLabels;
} catch (error) {
console.error('转换标签格式时出错:', error);
}
}
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
*/ */
import moment = require("moment"); import moment = require("moment");
import { findEnterpriseListByParam } from "../data/enterprise";
import { findManageByParam } from "../data/manage";
/** /**
* 匹配新旧对象变化 * 匹配新旧对象变化
...@@ -67,4 +69,39 @@ export function checkDataHaveNull(data:object, sensitive:boolean) { ...@@ -67,4 +69,39 @@ export function checkDataHaveNull(data:object, sensitive:boolean) {
} }
} }
return success; return success;
} }
\ No newline at end of file
/**
* 获取所有企业库已有企业Map
* @returns
*/
export async function getEnterpriseMap() {
let enterpriseDbList = await findEnterpriseListByParam({});
let enterpriseMap = {};
enterpriseDbList.forEach( info => {
enterpriseMap[info.uscc] = info.name;
})
return enterpriseMap;
}
/**
* 获取经营数据是否有相同记录
* @param uscc
* @param year
* @param period
* @returns
*/
export async function getManageData(uscc, year, period) {
let manageDbInfo = await findManageByParam({uscc, year, period});
let isAdd = true;
/**如果有数据代表重复 */
if (manageDbInfo) {
isAdd = false
}
return isAdd
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment