Commit bdeeeda7 by lixinming

逻辑优化和注释

parent b15f8d54
......@@ -13,29 +13,31 @@ import * as splitResultConfig from "../../config/splitResultConfig";
import * as fuHuaQiData from "../../data/fuHuaQi/fuhuaqi";
import * as configEnum from "../../config/enum";
import { eccFormParam } from "../../util/verificationParam";
import { changeEnumValue } from "../../util/verificationEnum";
import * as verificationEnumTools from "../../util/verificationEnum";
import { checkChange, extractData } from "../../util/piecemeal";
/**
* 新注册企业
* 添加新注册企业
* 小程序端
* @param uscc 孵化器统一信用代码
* @param param 表单参数
* @returns {isSuccess:true/false}
*/
export async function registerEnterprise(uscc:string, param) {
const TaskId = sysTools.getTaskId(uscc);
eccFormParam("新注册企业", eccFormParamConfig.RegisterEnterpriseParamConfig, param);//校验表单参数
/**校验表单参数 */
eccFormParam("新注册企业", eccFormParamConfig.RegisterEnterpriseParamConfig, param);
verificationEnumTools.eccEnumValue('添加新注册企业', 'industry', configEnum.INDUSTRY, param.industry);
if ( !sysTools.eccUscc(param.uscc) ) throw new BizError(ERRORENUM.统一社会信用代码不合法);
/**不能出现重复的统一社会信用代码 草稿的也不行 */
let dataBaseInfo = await enterpriseData.findEnterpriseByUscc(param.uscc);
if ( dataBaseInfo&& dataBaseInfo.uscc) throw new BizError(ERRORENUM.该企业已存在, `${param.uscc}已经在库中存在`);
param.draftId = sysTools.getDraftId(uscc);//草稿箱id
/**添加新注册企业标识 */
param.draftId = sysTools.getDraftId(uscc);//草稿箱id
param.isCreate = true;//标识此次操作是否是新注册企业并不是迁入企业
const TaskId = sysTools.getTaskId(uscc);
await enterpriseData.createEnterprise(uscc, TaskId, param);
return {isSuccess:true};
......@@ -50,21 +52,21 @@ export async function registerEnterprise(uscc:string, param) {
* @returns {isSuccess:true/false}
*/
export async function updateRegisterEnterprise(uscc:string, param) {
/**校验表单参数 */
eccFormParam("新注册企业表单修改", eccFormParamConfig.EnterpriseParamFormConfig, param );
let usccSelectDataBaseList = await enterpriseData.findEnterpriseList({uscc:param.uscc});
usccSelectDataBaseList.forEach(info => {
if (info.draftId != param.draftId) throw new BizError(ERRORENUM.该企业已存在, `${param.uscc}已经在库中存在 不可以修改`);
});
verificationEnumTools.eccEnumValue('修改新注册企业', 'industry', configEnum.INDUSTRY, param.industry);
if ( !sysTools.eccUscc(param.uscc) ) throw new BizError(ERRORENUM.统一社会信用代码不合法);
let dataBaseInfo = await enterpriseData.findEnterpriseByDraftId(param.draftId);
if (!dataBaseInfo || !dataBaseInfo.uscc) throw new BizError(ERRORENUM.未找到数据, `库中不存在${param.uscc}这个企业`);
let changeList = checkChange(param, dataBaseInfo);//比对修改字段
if ( !changeList.length ) throw new BizError(ERRORENUM.数据无更新, `${param.uscc}数据无更新`);
/**修改时校验uscc是否重复 */
let selectInfo = await enterpriseData.selectOneEnterpriseByParam({uscc:param.uscc, draftId:{"$ne":param.draftId} });
if (selectInfo && selectInfo.uscc) throw new BizError(ERRORENUM.统一社会信用代码重复, `${param.uscc}已经在库中存在 不可以修改为这个统一信用代码`);
/**修改字段 */
let changeList = checkChange(param, dataBaseInfo);
if ( !changeList.length ) throw new BizError(ERRORENUM.数据无更新, `${param.uscc}数据无更新`);
changeList.forEach(key => {
dataBaseInfo[key] = param[key];
});
......@@ -76,21 +78,26 @@ export async function updateRegisterEnterprise(uscc:string, param) {
/**
* 迁入企业登记
* 添加迁入企业登记
* 小程序端
* @param uscc 孵化器统一信用代码
* @param param 表单参数
* @returns {isSuccess:true/false}
*/
export async function moveInEnterprise(uscc:string, param) {
const TaskId = sysTools.getTaskId(uscc);
/**校验表单参数 */
eccFormParam("迁入企业登记", eccFormParamConfig.MoveInEnterpriseParamConfig, param );
verificationEnumTools.eccEnumValue('添加迁入企业', 'industry', configEnum.INDUSTRY, param.industry);
if ( !sysTools.eccUscc(param.uscc) ) throw new BizError(ERRORENUM.统一社会信用代码不合法);
/**不能出现重复的统一社会信用代码 草稿的也不行 */
let dataBaseInfo = await enterpriseData.findEnterpriseByUscc(param.uscc);
if ( dataBaseInfo&& dataBaseInfo.uscc) throw new BizError(ERRORENUM.该企业已存在, `${param.uscc}已经在库中存在`);
param.draftId = sysTools.getDraftId(uscc);//草稿箱id
/**添加新注册企业标识 */
param.draftId = sysTools.getDraftId(uscc);//草稿箱id
param.isCreate = false;//标识此次操作是否是迁入企业并不是新注册企业
const TaskId = sysTools.getTaskId(uscc);
await enterpriseData.createEnterprise(uscc, TaskId, param);
return {isSuccess:true};
......@@ -105,19 +112,25 @@ export async function moveInEnterprise(uscc:string, param) {
* @returns {isSuccess:true/false}
*/
export async function updateMoveInEnterprise(uscc:string, param) {
/**校验表单参数 */
eccFormParam("修改迁入企业登记信息", eccFormParamConfig.EnterpriseInPutParamFormConfig, param);
verificationEnumTools.eccEnumValue('修改迁入企业', 'industry', configEnum.INDUSTRY, param.industry);
if ( !sysTools.eccUscc(param.uscc) ) throw new BizError(ERRORENUM.统一社会信用代码不合法);
eccFormParam("修改迁入企业登记信息", eccFormParamConfig.EnterpriseInPutParamFormConfig, param);//校验表单参数
/**企业库中是否存在记录 */
let dataBaseInfo = await enterpriseData.findEnterpriseByDraftId(param.draftId);
if (!dataBaseInfo || !dataBaseInfo.uscc) throw new BizError(ERRORENUM.未找到数据, `库中不存在${param.uscc}这个企业`);
/**修改时校验uscc是否重复 */
let selectInfo = await enterpriseData.selectOneEnterpriseByParam({uscc:param.uscc, draftId:{"$ne":param.draftId} });
if (selectInfo && selectInfo.uscc) throw new BizError(ERRORENUM.统一社会信用代码重复, `${param.uscc}已经在库中存在 不可以修改为这个统一信用代码`);
/**修改数据 */
let changeList = checkChange(param, dataBaseInfo);
if ( !changeList.length ) throw new BizError(ERRORENUM.数据无更新, `${param.uscc}数据无更新`);
changeList.forEach(key => {
dataBaseInfo[key] = param[key];
});
await dataBaseInfo.save();
return {isSuccess:true};
......@@ -126,13 +139,17 @@ export async function updateMoveInEnterprise(uscc:string, param) {
/**
* 根据企业id查询企业信息
* 包括新迁入企业和新注册企业的回显
* 小程序端 回显
* @param uscc 企业统一信用代码
* @param draftId 草稿id
* @returns {data} data 返回表单
*/
export async function getEnterpriseByDraftId(draftId:string) {
let dataBaseInfo = await enterpriseData.findEnterpriseByDraftId(draftId);
if (!dataBaseInfo || !dataBaseInfo.uscc) throw new BizError(ERRORENUM.未找到数据, `库中不存在draftId=${draftId}这个企业`);
/**新注册企业和迁入企业回显信息不一样 */
let data:any = {};
if (dataBaseInfo.isCreate) extractData(splitResultConfig.EnterpriseInfoConfig, dataBaseInfo, false);
else data = extractData(splitResultConfig.EnterpriseMoveInInfoConfig, dataBaseInfo, false);
......@@ -145,11 +162,13 @@ export async function getEnterpriseByDraftId(draftId:string) {
* 根据企业id删除草稿企业
* 小程序端
* @param uscc 企业统一信用代码
* @param draftId 草稿id
* @returns {isSuccess:true/false}
*/
export async function deleteEnterpriseByDraftId(draftId:string) {
let dataBaseInfo = await enterpriseData.findEnterpriseByDraftId(draftId);
/**删除限制 */
if (!dataBaseInfo || !dataBaseInfo.uscc) throw new BizError(ERRORENUM.未找到数据, `库中不存在draftId=${draftId}这个企业`);
if (dataBaseInfo.draftLock) throw new BizError(ERRORENUM.已入库的数据不能删除, draftId);
await enterpriseData.deleteEnterprise(draftId);
......@@ -169,8 +188,8 @@ export async function deleteEnterpriseByDraftId(draftId:string) {
* @returns {dataList:[], count:0} dataList=数据列表 count:条件筛选下的数据总数
*/
export async function enterpriseList(createType:number, fuHuaQiUscc:string, industry, isNaturalPersonHolding:number, page:number) {
/**拼接查询条件 */
let selectParam:any = {};
if (createType == 2 || createType == 3) {
selectParam.isCreate = createType == 2 ? true : false;
}
......@@ -179,23 +198,28 @@ export async function enterpriseList(createType:number, fuHuaQiUscc:string, indu
if (isNaturalPersonHolding == 2 || isNaturalPersonHolding == 3) {
selectParam.isNaturalPersonHolding = isNaturalPersonHolding == 2 ? true : false;
}
selectParam.draftLock = true;
let usccMap = await fuHuaQiData.findAllFuHuaQiOperationNameMap();
selectParam.draftLock = true; //未提交的企业不能查看
/**需要用到的查询数据 */
let usccMap = await fuHuaQiData.findAllFuHuaQiOperationNameMap();//用于将孵化器uscc变成孵化器名称
let dataBaseList = await enterpriseData.findEnterpriseListToPage(selectParam, (page-1)*10 );
let count = await enterpriseData.findEnterpriseCount(selectParam);
let dataList = [];
let count = await enterpriseData.findEnterpriseCount(selectParam);//符合查询条件的数据总数
/**组合返回结果 */
let dataList = [];
dataBaseList.forEach( info => {
/**截取返回数据 */
let changeData:any = extractData(splitResultConfig.EnterpriseListConfig, info, true);
/**匹配所属孵化器名称 匹配不上时这里显示空字符串 */
changeData.fuhuaqiUscc = usccMap[info.fuHuaQiUscc] || "";
if (info.enterpriseIsInPut) {
changeData.isCreate = "";
} else {
(changeData.isCreate) ? changeData.isCreate = "新注册" : changeData.isCreate = "新迁入";
}
changeData.industry = changeEnumValue(configEnum.INDUSTRY, changeData.industry);
/** 返回的isCreate字段为字符串 当为导入数据时这里显示为空字符 */
if (info.enterpriseIsInPut) changeData.isCreate = "";
else changeData.isCreate = (changeData.isCreate) ? "新注册" : "新迁入";
/**将枚举值转为字符 */
changeData.industry = verificationEnumTools.changeEnumValue(configEnum.INDUSTRY, changeData.industry);
dataList.push(changeData);
});
......@@ -214,8 +238,8 @@ export async function enterpriseList(createType:number, fuHuaQiUscc:string, indu
* @returns 二维数组
*/
export async function outPutEnterpriseData(createType:number, fuHuaQiUscc:string, industry, isNaturalPersonHolding:number, type:Number) {
let selectParam:any = {}; //查询参数
/**拼接查询条件 */
let selectParam:any = {};
if (type == configEnum.OUTPUTTYPE.当前数据) {
if (createType == 2 || createType == 3) {
selectParam.isCreate = createType == 2 ? true : false;
......@@ -227,58 +251,68 @@ export async function outPutEnterpriseData(createType:number, fuHuaQiUscc:string
}
}
selectParam.draftLock = true;//匹配已经提交入库的企业
let usccMap = await fuHuaQiData.findAllFuHuaQiOperationNameMap();
/**查询内容 */
let usccMap = await fuHuaQiData.findAllFuHuaQiOperationNameMap();//用于将孵化器uscc变成孵化器名称
let dataBaseList = await enterpriseData.findEnterpriseList(selectParam );
let dataList = [];
dataBaseList.forEach( info => {
let changeData:any = extractData(splitResultConfig.EnterpriseListConfig, info, true);
changeData.fuhuaqiUscc = usccMap[info.fuHuaQiUscc] || "";
if (info.enterpriseIsInPut) {
changeData.isCreate = "";
} else {
(changeData.isCreate) ? changeData.isCreate = "新注册" : changeData.isCreate = "新迁入";
}
changeData.industry = changeEnumValue(configEnum.INDUSTRY, changeData.industry);
dataList.push(changeData);
});
let keyList = [
"name", "createTime", "fuhuaqiUscc", "uscc", "industry", "logonTime",
"firstIncubationTime", "timeOfImmigration", "isNaturalPersonHolding", "oldLogonAdd",
"logonAdd", "operatingAdd", "leasedArea"
];
let titleList = [
/**组合二维数组 titleList 与 keyList 要一一对应 */
const TitleList = [
"企业名称", "入库时间", "所属孵化器", "统一信用代码", "行业领域",
"注册时间", "首次入孵时间", "迁入时间", "是否自然人控股", "迁入前注册地址",
"注册地址", "经营地址", "租赁面积(平方米)"
];
let result = [titleList];
dataList.forEach(info => {
];//表头顺序 如果这里修改了 下面的keyList也要修改
const KeyList = [
"name", "createTime", "fuhuaqiUscc", "uscc", "industry", "logonTime",
"firstIncubationTime", "timeOfImmigration", "isNaturalPersonHolding", "oldLogonAdd",
"logonAdd", "operatingAdd", "leasedArea"
];//表头对应的字段顺序
let dataList = [TitleList];
dataBaseList.forEach( info => {
/**截取返回结果 */
let changeData:any = extractData(splitResultConfig.EnterpriseListConfig, info, true);
/**匹配所属孵化器名称 匹配不上时这里显示空字符串 */
changeData.fuhuaqiUscc = usccMap[info.fuHuaQiUscc] || "";
if (info.enterpriseIsInPut) changeData.isCreate = "";
else changeData.isCreate = (changeData.isCreate) ? "新注册" : "新迁入";
/**修改枚举值 */
changeData.industry = verificationEnumTools.changeEnumValue(configEnum.INDUSTRY, changeData.industry);
// dataList.push(changeData);
/**根据表头与key的顺序 生成小数组 */
let subList = [];
keyList.forEach(subInfo => {
subList.push(info[subInfo] || '');
KeyList.forEach( keyStr => {
subList.push(info[keyStr] || '');
});
result.push(subList);
dataList.push(subList);
});
return result;
return dataList;
}
/**
* 在孵企业页面的所属孵化器 下拉框
* 管理后台端
* 只返回有入孵企业的孵化器
* @returns result result类型为数组对象 对象内容为{name, uscc}
*/
export async function getAffiliationFuHuaQi() {
let dataList = [];
let list = await enterpriseData.findAllBindFuHuaQi();
/**获取已有入孵企业的孵化器统一信用代码列表 */
let bindList = await enterpriseData.findAllBindFuHuaQiUsccList();
let allList = await fuHuaQiData.findAllFuHuaQi();
let distinctMap = {}; // {uscc:name}
allList.forEach(info => {
/**限制为 非禁用状态下的孵化器 */
let notDisabledList = await fuHuaQiData.findAllNotDisabledFuHuaQi();
let distinctMap = {}; //去重用的map对象 格式为:{uscc:name}
notDisabledList.forEach(info => {
distinctMap[info.uscc] = info.name;
});
let result = [];
list.forEach(fuHuaQiUscc => {
bindList.forEach(fuHuaQiUscc => {
let fuHuaQiName = distinctMap[fuHuaQiUscc];
if ( fuHuaQiName ) {
result.push({
......@@ -288,6 +322,5 @@ export async function getAffiliationFuHuaQi() {
}
});
return {result}
}
}
\ No newline at end of file
......@@ -15,7 +15,7 @@ import * as fuhuaqiData from "../../data/fuHuaQi/fuhuaqi";
import moment = require("moment");
import * as configEnum from "../../config/enum";
import { eccFormParam } from "../../util/verificationParam";
import { changeEnumValue } from "../../util/verificationEnum";
import { changeEnumValue, eccEnumValue } from "../../util/verificationEnum";
import { checkChange, extractData } from "../../util/piecemeal";
......@@ -27,25 +27,30 @@ import { checkChange, extractData } from "../../util/piecemeal";
* @returns {isSuccess:true/false}
*/
export async function createFinancingInfo(uscc:string, param) {
/**校验表单参数*/
eccFormParam("录入企业融资信息", eccFormParamConfig.FinancingParamConfig, param);
if (param.fuHuaQiInvestment) {
/**如果当孵化器是否投资填了true 则校验 fuHuaQiInvestmentAmount, fuHuaQiInvestmentStyle 两个字段 */
let subCheckName = "录入企业融资信息_孵化器是否参与";
let subCheckData = {
fuHuaQiInvestmentAmount:param.fuHuaQiInvestmentAmount,
fuHuaQiInvestmentStyle:param.fuHuaQiInvestmentStyle,
};
eccFormParam(subCheckName, {fuHuaQiInvestmentAmount:"Number", fuHuaQiInvestmentStyle:"Number"}, subCheckData);
eccFormParam(subCheckName, eccFormParamConfig.FinancingParamSubConfig, subCheckData);
/**校验投资方式是否符合枚举规则 */
eccEnumValue("添加企业融资信息", "fuHuaQiInvestmentStyle", configEnum.FUHUAQILNVESTMENTSTYLE, param.fuHuaQiInvestmentStyle);
} else {
/**如果 没有填这里给默认数据*/
param.fuHuaQiInvestmentAmount = 0;
param.fuHuaQiInvestmentStyle = 0;
}
/**校验企业是否存在 */
let enterpriseInfo = await enterpriseData.findEnterpriseInfoByName(param.name);
if (!enterpriseInfo) throw new BizError(ERRORENUM.该企业不存在, uscc, param.name);
param.uscc = enterpriseInfo.uscc;//前端无需传入企业的uscc 库中需要企业的uscc
/** 前端无需传入企业的uscc 库中需要企业的uscc*/
param.uscc = enterpriseInfo.uscc;//
const TaskId = sysTools.getTaskId(uscc);
/**一个企业一个月只能填报一次融资信息 */
......@@ -67,24 +72,30 @@ export async function createFinancingInfo(uscc:string, param) {
* @returns {isSuccess:true/false}
*/
export async function updateFinancingInfo(uscc:string, param) {
/**校验表单参数 */
eccFormParam( "更新融资企业信息", eccFormParamConfig.FinancingParamUpdateConfig, param );
if (param.fuHuaQiInvestment) {
/**如果当孵化器是否投资填了true 则校验 fuHuaQiInvestmentAmount, fuHuaQiInvestmentStyle 两个字段 */
let subCheckName = "录入企业融资信息_孵化器是否参与";
let subCheckData = {
fuHuaQiInvestmentAmount:param.fuHuaQiInvestmentAmount,
fuHuaQiInvestmentStyle:param.fuHuaQiInvestmentStyle,
};
eccFormParam(subCheckName, {fuHuaQiInvestmentAmount:"Number", fuHuaQiInvestmentStyle:"Number"}, subCheckData);
eccFormParam(subCheckName, eccFormParamConfig.FinancingParamSubConfig, subCheckData);
/**校验投资方式是否符合枚举规则 */
eccEnumValue("修改企业融资信息", "fuHuaQiInvestmentStyle", configEnum.FUHUAQILNVESTMENTSTYLE, param.fuHuaQiInvestmentStyle);
} else {
/**如果 没有填这里给默认数据*/
param.fuHuaQiInvestmentAmount = 0;
param.fuHuaQiInvestmentStyle = 0;
}
/**找到该企业的本月融资数据 */
const TaskId = sysTools.getTaskId(uscc);
let dataBaseInfo = await financingData.findFinancingInfoByTaskIdAndSucc(TaskId, param.uscc);
if (!dataBaseInfo || !dataBaseInfo.uscc) throw new BizError(ERRORENUM.未找到数据, `库中不存在${TaskId}的任务`);
/**匹配修改 */
let changeList = checkChange(param, dataBaseInfo);
if ( !changeList.length ) throw new BizError(ERRORENUM.数据无更新, `${param.uscc}数据无更新`);
changeList.forEach(key => {
......@@ -99,17 +110,18 @@ export async function updateFinancingInfo(uscc:string, param) {
/**
* 查询本月提交的企业融资信息
* 小程序端
* 小程序端 回显
* @param fuHuaQiUscc 孵化器统一信用代码
* @param uscc 企业统一信用代码
* @returns {data:{}} 表单
*/
export async function getEnterpriseFinancingByUscc(fuHuaQiUscc:string, uscc:string) {
/**找到该企业的本月融资数据 */
const TaskId = sysTools.getTaskId(fuHuaQiUscc);
let dataBaseInfo = await financingData.findFinancingInfoByTaskIdAndSucc(TaskId, uscc);
if (!dataBaseInfo || !dataBaseInfo.uscc) throw new BizError(ERRORENUM.未找到数据, `库中不存在${uscc}这个企业的本次融资数据`);
/**截取返回字段 */
let data = extractData(splitResultConfig.EnterpriseFinancingInfoConfig, dataBaseInfo, false);
return {data};
......@@ -124,11 +136,12 @@ export async function getEnterpriseFinancingByUscc(fuHuaQiUscc:string, uscc:stri
* @returns {isSuccess:true/false}
*/
export async function deleteEnterpriseFinancingByUscc(fuHuaQiUscc:string, uscc:string) {
/**找到该企业的本月融资数据 */
const TaskId = sysTools.getTaskId(fuHuaQiUscc);
let dataBaseInfo = await financingData.findFinancingInfoByTaskIdAndSucc(TaskId, uscc);
if (!dataBaseInfo || !dataBaseInfo.uscc) throw new BizError(ERRORENUM.未找到数据, `库中不存在${uscc}这个企业`);
/**删除限制 */
if (dataBaseInfo.draftLock) throw new BizError(ERRORENUM.已入库的数据不能删除, uscc);
await financingData.deleteEnterpriseFinancing(uscc, TaskId);
......@@ -144,8 +157,10 @@ export async function deleteEnterpriseFinancingByUscc(fuHuaQiUscc:string, uscc:s
* @returns [] name:企业名称, logonAdd:注册地址, operatingAdd:经营地址
*/
export async function getFuHuaQiEnterpriseForSelect(uscc:string) {
let enterpriseList = await enterpriseData.findEnterpriseListByFuHuaQiUsccName(uscc);
/**找到该孵化器下已经提交入库的企业列表 */
let enterpriseList = await enterpriseData.findSubmittedEnterpriseListByFuHuaQiUscc(uscc);
/**拼接返回 */
let dataList = [];
enterpriseList.forEach( info => {
dataList.push({
......@@ -163,41 +178,42 @@ export async function getFuHuaQiEnterpriseForSelect(uscc:string) {
* 融资企业信息列表
* 管理后台端
* @param monthData 数据月份 目前数据库没有该字段
* @param fuHuaQiName 所属孵化器
* @param fuHuaQiName 所属孵化器 这里前端传的是孵化器的统一信用代码
* @param industry 行业领域
* @param fuHuaQiInvestment 孵化器是否参与投资
* @param page 页数
* @returns
* @returns {data, count} data:数据列表 count:符合条件的数据量
*/
export async function financingList(monthData:string, fuHuaQiName:string, industry, fuHuaQiInvestment:number, page:number) {
let fuHuaQiUscc = "";
/**拼接查询条件 */
let selectParam:any = {};
if (fuHuaQiName.length > 0) {
let fuHuaQiInfo = await fuhuaqiData.findFuHuaQiByName(fuHuaQiName);
if(fuHuaQiInfo) fuHuaQiUscc = fuHuaQiInfo.uscc;
let fuHuaQiInfo = await fuhuaqiData.findFuHuaQiByUSCC(fuHuaQiName);
if(!fuHuaQiInfo) throw new BizError(ERRORENUM.未找到数据, `管理后台查询融资列表时 ${fuHuaQiName}不存在`);
selectParam.fuHuaQiUscc = fuHuaQiInfo.uscc;
}
let selectParam:any = {};
if ( monthData.length > 0 ) {
let startT = moment(monthData).startOf('month').valueOf();
let endT = moment(monthData).endOf('month').valueOf();
selectParam.createTime = {'$gt':startT, '$lt':endT};
}
if (industry.length >0 ) selectParam.industry = industry;
if (fuHuaQiUscc.length > 0) selectParam.fuHuaQiUscc = fuHuaQiUscc;
if (fuHuaQiInvestment == 2 || fuHuaQiInvestment == 3) {
selectParam.fuHuaQiInvestment = fuHuaQiInvestment == 2 ? true : false;
}
/**查数据 */
let dataBaseList = await financingData.findFinancingListToPage(selectParam, (page-1)*10 );
let count = await financingData.findFinancingCount(selectParam);
let usccMap = await fuhuaqiData.findAllFuHuaQiOperationNameMap();
let usccMap = await fuhuaqiData.findAllFuHuaQiOperationNameMap();//用于转换所属孵化器名称
/**拼接返回值 */
let dataList = [];
dataBaseList.forEach( info => {
/**截取返回字段 */
let changeData:any = extractData(splitResultConfig.FinancingListConfig, info, true);
/** 字段的特化处理 */
changeData.fuhuaqiUscc = usccMap[info.fuHuaQiUscc] || "";
changeData.industry = changeEnumValue(configEnum.INDUSTRY, info.industry);
changeData.financingRounds = changeEnumValue(configEnum.FINANCINGROUNDS, info.financingRounds);
......@@ -217,17 +233,17 @@ export async function financingList(monthData:string, fuHuaQiName:string, indust
* @param fuHuaQiName 所属孵化器
* @param industry 行业领域
* @param fuHuaQiInvestment 孵化器是否参与投资
* @param page 页数
* @param type 页数
* @returns
*/
export async function outPutFinancingList(monthData:string, fuHuaQiName:string, industry, fuHuaQiInvestment:number, type:number) {
export async function outPutFinancingList(monthData:string, fuHuaQiName:string, industry, fuHuaQiInvestment:number, type:number) {
let selectParam:any = {};
if (type == configEnum.OUTPUTTYPE.当前数据 ) {
let fuHuaQiUscc = "";
if (type == configEnum.OUTPUTTYPE.当前数据 ) {
/**如果选择当前数据 则拼接查询条件 */
if (fuHuaQiName.length > 0) {
let fuHuaQiInfo = await fuhuaqiData.findFuHuaQiByName(fuHuaQiName);
if(fuHuaQiInfo) fuHuaQiUscc = fuHuaQiInfo.uscc;
if(!fuHuaQiInfo) throw new BizError(ERRORENUM.未找到数据, `管理后台查询融资列表时 ${fuHuaQiName}不存在`);
selectParam.fuHuaQiUscc = fuHuaQiInfo.uscc;
}
if ( monthData.length > 0 ) {
......@@ -236,23 +252,16 @@ export async function outPutFinancingList(monthData:string, fuHuaQiName:string,
selectParam.createTime = {'$gt':startT, '$lt':endT};
}
if (industry.length >0 ) selectParam.industry = industry;
if (fuHuaQiUscc.length > 0) selectParam.fuHuaQiUscc = fuHuaQiUscc;
if (fuHuaQiInvestment == 2 || fuHuaQiInvestment == 3) {
selectParam.fuHuaQiInvestment = fuHuaQiInvestment == 2 ? true : false;
}
}
/**主要查询 */
let dataBaseList = await financingData.findFinancingList(selectParam );
let dataList = [];
let usccMap = await fuhuaqiData.findAllFuHuaQiOperationNameMap();
dataBaseList.forEach( info => {
let changeData:any = extractData(splitResultConfig.FinancingListConfig, info, true);
changeData.fuhuaqiUscc = usccMap[info.fuHuaQiUscc] || "";
changeData.industry = changeEnumValue(configEnum.INDUSTRY, info.industry);
dataList.push(changeData);
});
/**拼接返回 需要注意的是 keyList要和titleList一一对应 */
let keyList = [
"name", "logonAdd", "operatingAdd", "financingAmount","investmentInstitutionsName",
"timeToObtainInvestment", "fuHuaQiInvestment", "fuHuaQiInvestmentAmount", "fuHuaQiInvestmentStyle", "createTime"
......@@ -262,10 +271,16 @@ export async function outPutFinancingList(monthData:string, fuHuaQiName:string,
"孵化器是否投资","孵化器投资金额(万元)","孵化器投资方式","录入时间",
];
let result = [titleList];
dataList.forEach(info => {
dataBaseList.forEach( info => {
/**截取返回字段 */
let changeData:any = extractData(splitResultConfig.FinancingListConfig, info, true);
changeData.fuhuaqiUscc = usccMap[info.fuHuaQiUscc] || "";
changeData.industry = changeEnumValue(configEnum.INDUSTRY, info.industry);
/**根据keyList的顺序生成小数组 */
let subList = [];
keyList.forEach(subInfo => {
subList.push(info[subInfo] || '');
keyList.forEach(keyStr => {
subList.push(changeData[keyStr] || '');
});
result.push(subList);
});
......
/**
* 孵化器基础数据相关逻辑
* 作者: 李
* 作者: 李欣鸣
* 孵化器相关逻辑 包括孵化器的增删改查
*
*/
......@@ -24,10 +24,11 @@ import { changeEnumValue } from "../../util/verificationEnum";
* @returns {} "incubatedAcreage", "acreageTotal", "acreagePersonalUse", "name", "lv", "institutionalNature"
*/
export async function homeData(uscc:string) {
/** 这里中间件已经验证过uscc的可靠性了,不需要做多余的验证*/
let dataBaseInfo = await fuhuaqiData.findFuHuaQiByUSCC(uscc);
/**根据配置截取返回的字段 */
let data:any = extractData(splitResultConfig.FuHuaQiHomeDataConfig, dataBaseInfo, false);
data.enterpriseCount = await findEnterpriseCountByFuHuaQiUscc(uscc) || 0;
data.lv = changeEnumValue(configEnum.FUHUAQILV, dataBaseInfo.lv);
data.institutionalNature = changeEnumValue(configEnum.INSTITUTIONALNATURE, dataBaseInfo.institutionalNature);
......@@ -43,13 +44,13 @@ export async function homeData(uscc:string) {
* @returns data 基础数据字段
*/
export async function selectFuHuaQiBaseData(uscc:string) {
/** 这里中间件已经验证过uscc的可靠性了,不需要做多余的验证*/
let dataBaseInfo = await fuhuaqiData.findFuHuaQiByUSCC(uscc);
let enterpriseTotal = await findEnterpriseCountByFuHuaQiUscc(uscc); //企业总数
/**截取返回 */
let data:any = extractData(splitResultConfig.FuHuaQiBaseDataConfig, dataBaseInfo, false);
data.enterpriseTotal = enterpriseTotal;
data.numOfEntities = enterpriseTotal - dataBaseInfo.virtualEnterpriseNum; //企业总数 - 虚拟企业数量
data.enterpriseTotal = await findEnterpriseCountByFuHuaQiUscc(uscc); //企业总数
data.numOfEntities = data.enterpriseTotal - dataBaseInfo.virtualEnterpriseNum; //实体企业总数 = 虚拟企业总数 - 虚拟企业数量
return data;
}
......@@ -62,8 +63,10 @@ export async function selectFuHuaQiBaseData(uscc:string) {
* @returns data 基础数据字段
*/
export async function selectOrganizationInfo(uscc:string) {
/** 这里中间件已经验证过uscc的可靠性了,不需要做多余的验证*/
let dataBaseInfo = await fuhuaqiData.findFuHuaQiByUSCC(uscc);
/** 根据配置截取返回 */
let data:any = extractData(splitResultConfig.OrganizationBaseDataConfig, dataBaseInfo, false);
return data;
......@@ -71,28 +74,22 @@ export async function selectOrganizationInfo(uscc:string) {
/**
* 更新孵化器基础数据
* 修改孵化器中我的数据信息
* 小程序端
* @param uscc 孵化器统一信用代码
* @param param 表单内容
* @returns {isSuccess:true/false};
*/
export async function updateFuHuaQiBaseData(uscc:string, param) {
/**表单校验 */
eccFormParam("更新孵化器基础数据", eccFormParamConfig.BaseParamUpdateConfig, param);
if (param.hatchingGround && param.hatchingGround.length) {
param.hatchingGround.forEach(hatchingGroundInfo => {
eccFormParam("更新孵化器基础数据 经备案孵化场地", eccFormParamConfig.BaseParamUpdateHatchingGroundConfig, hatchingGroundInfo);
});
}
let baseDataInfo = await fuhuaqiData.findFuHuaQiByUSCC(uscc);
for (let key in param) {
if (key == "hatchingGround") {
param[key].forEach (info => {
let {personInChargeAdd, siteAcreage, leasePrice} = info;
if ( typeof personInChargeAdd != 'string' && personInChargeAdd) throw new BizError(ERRORENUM.参数错误, `personInChargeAdd应是string型 而不是${typeof personInChargeAdd}`);
if ( typeof siteAcreage != 'number' && siteAcreage) throw new BizError(ERRORENUM.参数错误, `siteAcreage应是number型 而不是${typeof personInChargeAdd}`);
if ( typeof leasePrice != 'number' && leasePrice) throw new BizError(ERRORENUM.参数错误, `leasePrice应是number型 而不是${typeof personInChargeAdd}`);
})
}
}
/**这里无法判断数组里面的内容是否有变化 所以 hatchingGround 直接赋值 */
let changeList = checkChange(param, baseDataInfo);
for (let i = 0; i < changeList.length; i++) {
......@@ -115,11 +112,20 @@ export async function updateFuHuaQiBaseData(uscc:string, param) {
* @returns {isSuccess:true/false};
*/
export async function updateOrganizationData(uscc:string, param) {
eccFormParam("更新孵化器基础数据", eccFormParamConfig.OrganizationParamUpdateConfig, param);
/**校验表单内容 */
eccFormParam("更新孵化器机构信息数据", eccFormParamConfig.OrganizationParamUpdateConfig, param);
if (param.foundingTeam && param.foundingTeam.length) {
param.foundingTeam.forEach((subInfo, subIndex) => {
eccFormParam(`更新孵化器机构信息数据 创始团队 ${subIndex}`, eccFormParamConfig.OrganizationParamFoundingTeamUpdateConfig, subInfo);
});
}
if (param.operationModel && param.operationModel.length) {
if (!param.operationModelDes) throw new BizError(ERRORENUM.表单校验失败, `缺失运营模式描述`);
}
let baseDataInfo = await fuhuaqiData.findFuHuaQiByUSCC(uscc);
/**这里无法判断数组里面的内容是否有变化 所以 hatchingGround 直接赋值 */
/**这里无法判断数组里面的内容是否有变化 所以 foundingTeam 直接赋值 */
let changeList = checkChange(param, baseDataInfo);
for (let i = 0; i < changeList.length; i++) {
let key = changeList[i];
......@@ -128,6 +134,8 @@ export async function updateOrganizationData(uscc:string, param) {
baseDataInfo[key] = param[key];
}
baseDataInfo["foundingTeam"] = param.foundingTeam;
/**由于前端的创始团队是在foundingTeam里面传的 所以这里要截出来赋值给foundingTeamType */
if (param.foundingTeam && param.foundingTeam.length > 0) {
baseDataInfo.foundingTeamType = param.foundingTeam[0].type;
} else baseDataInfo.foundingTeamType = 0;
......@@ -150,6 +158,7 @@ export async function updateOrganizationData(uscc:string, param) {
* @returns
*/
export async function fuHuaQiBaseList(lv:number, institutionalNature:number, industry:number, operationModel:number, foundingTeam:number, page:number) {
/**拼接查询条件 */
let selectParam:any = {};
if (lv) selectParam.lv = lv;
if (institutionalNature) selectParam.institutionalNature = institutionalNature;
......@@ -157,35 +166,30 @@ export async function fuHuaQiBaseList(lv:number, institutionalNature:number, ind
if (operationModel) selectParam.operationModel = operationModel;
if (foundingTeam) selectParam.foundingTeamType = foundingTeam;
let enterpriseMap = await groupFindEnterpriseCount();//企业总数
let enterpriseMap = await groupFindEnterpriseCount();//计算孵化器拥有的企业总数
let dataBaseList = await fuhuaqiData.findFuHuaQiListByPage(selectParam, (page-1)*10 );
let count = await fuhuaqiData.findFuHuaQiCount(selectParam);
let dataList = [];
/**拼接返回结果 */
let dataList = [];
dataBaseList.forEach( info => {
/**截取所需字段 */
let changeData:any = extractData(splitResultConfig.FuHuaQiBaseListConfig, info, true);
// let hatchingGround = info.hatchingGround;
// hatchingGround.forEach (info => {
// let {personInChargeAdd, siteAcreage, leasePrice} = info;
// changeData.personInChargeAdd = personInChargeAdd;
// changeData.siteAcreage = siteAcreage;
// changeData.leasePrice = leasePrice;
// })
let enterpriseTotal = enterpriseMap[info.uscc] || 0;
let numOfEntities = enterpriseTotal - (info.virtualEnterpriseNum || 0 );
numOfEntities = numOfEntities < 0 ? 0 : numOfEntities;
changeData.enterpriseTotal = enterpriseTotal;
changeData.numOfEntities = numOfEntities;
const EnterpriseTotal = enterpriseMap[info.uscc] || 0; //企业总数
let numOfEntities = EnterpriseTotal - (info.virtualEnterpriseNum || 0 ); //实体企业
changeData.enterpriseTotal = EnterpriseTotal;
changeData.numOfEntities = numOfEntities < 0 ? 0 : numOfEntities;
/**枚举转换 */
changeData.lv = changeEnumValue(configEnum.FUHUAQILV, changeData.lv);
changeData.industry = changeEnumValue(configEnum.FUHUAINDUSTRY, changeData.industry);
changeData.institutionalNature = changeEnumValue(configEnum.INSTITUTIONALNATURE, changeData.institutionalNature);
changeData.operationModel = changeEnumValue(configEnum.OPERATIONMODEL, changeData.operationModel);
changeData.foundingTeamStr = "无";
changeData.foundingTeamStr = changeData.foundingTeamStr ? changeEnumValue(configEnum.TEAM, changeData.foundingTeamStr) : "无";//创始团队文字
let foundingTeam = [];
if (changeData.foundingTeam && changeData.foundingTeam.length) {
changeData.foundingTeam.forEach(item => {
......@@ -196,9 +200,7 @@ export async function fuHuaQiBaseList(lv:number, institutionalNature:number, ind
memberSex : changeEnumValue(configEnum.SEX, item.memberSex),//成员性别
memberDEGREE : changeEnumValue(configEnum.DEGREE, item.memberDEGREE),//成员最高学历
});
// item.memberDEGREE = changeEnumValue(configEnum.DEGREE, item.foundingTeamStr);//成员最高学历
/* 这里兼容了一下,团队类型数据库里存到了每一个人的信息里 以防后续要修改 */
changeData.foundingTeamStr = type;
});
changeData.foundingTeam = foundingTeam;
}
......@@ -223,8 +225,8 @@ export async function fuHuaQiBaseList(lv:number, institutionalNature:number, ind
*/
export async function outPutFuHuaQiBaseData(lv:number, institutionalNature:number, industry:number, operationModel:number, foundingTeam:number, type:Number) {
let selectParam:any = {};
if (type == configEnum.OUTPUTTYPE.当前数据) {
/**当选择了当前数据时 拼接查询条件 */
if (lv) selectParam.lv = lv;
if (operationModel) selectParam.operationModel = operationModel;
if (institutionalNature) selectParam.institutionalNature = institutionalNature;
......@@ -232,56 +234,40 @@ export async function outPutFuHuaQiBaseData(lv:number, institutionalNature:numbe
if (foundingTeam) selectParam.foundingTeamType = foundingTeam;
}
let enterpriseMap = await groupFindEnterpriseCount();//拥有的企业
let enterpriseMap = await groupFindEnterpriseCount();//计算所有孵化器拥有的企业总数
let dataBaseList = await fuhuaqiData.findFuHuaQiList(selectParam);
/**拼接二维数组 */
let keyList = [
"name",//名称
"operationName",//运营机构名称
"uscc",//统一信用代码
"enterpriseTotal",//企业总数
"virtualEnterpriseNum",//虚拟孵化
"numOfEntities",//实体孵化
"logonTime",//注册时间
"incubatedAcreage",//在孵面积
"acreageTotal",//孵化器总面积
"acreagePersonalUse",//孵化器自用面积
"lv",//孵化器级别
"identificationTime",//认定时间
"industry",//领域
"institutionalNature",//机构性质
"liaison",//联系人
"liaisonPhone",//联系电话
"personInCharge",//负责人
"personInChargePhone",//负责人联系电话
"operationModel",//运营模式
"foundingTeamType",//创业团队类型
// "hatchingGround",//经备案孵化场地
// "foundingTeam",//创业团队
"name", "operationName", "uscc", "enterpriseTotal", "virtualEnterpriseNum", "numOfEntities", "logonTime", "incubatedAcreage",
"acreageTotal", "acreagePersonalUse", "lv", "identificationTime", "industry", "institutionalNature",
"liaison", "liaisonPhone", "personInCharge", "personInChargePhone", "operationModel", "foundingTeamType",
];
let titleList = [
"名称", "运营机构名称", "统一信用代码", "企业总数", "虚拟孵化", "实体孵化",
"注册时间", "在孵面积", "孵化器总面积", "孵化器自用面积", "孵化器级别", "认定时间",
"领域", "机构性质", "联系人", "联系电话", "负责人", "负责人联系电话"
];
let dataList = [];
let maxTeamNumber = 0;//最大团队数
let maxHatching = 0;//最大场地数
dataBaseList.forEach( info => {
let changeData:any = extractData(splitResultConfig.FuHuaQiBaseListConfig, info, true);//截取特定的字段
/**截取需要的返回字段 */
let changeData:any = extractData(splitResultConfig.FuHuaQiBaseListConfig, info, true);
const EnterpriseTotal = enterpriseMap[info.uscc] || 0; //企业总数
let numOfEntities = EnterpriseTotal - (info.virtualEnterpriseNum || 0 ); //实体企业
changeData.enterpriseTotal = EnterpriseTotal;
changeData.numOfEntities = numOfEntities < 0 ? 0 : numOfEntities;
/**枚举转换 */
changeData.lv = changeEnumValue(configEnum.FUHUAQILV, changeData.lv);
changeData.industry = changeEnumValue(configEnum.FUHUAINDUSTRY, changeData.industry);
changeData.institutionalNature = changeEnumValue(configEnum.INSTITUTIONALNATURE, changeData.institutionalNature);
changeData.operationModel = changeEnumValue(configEnum.OPERATIONMODEL, changeData.operationModel);
changeData.foundingTeamType = changeEnumValue(configEnum.TEAM, changeData.foundingTeamType) || "无";
/**算出最大的创始团队和场地 用于计算x轴下标 */
if (changeData.foundingTeam && changeData.foundingTeam.length ) {
maxTeamNumber = Math.max(changeData.foundingTeam.length, maxTeamNumber);
}
......@@ -289,6 +275,7 @@ export async function outPutFuHuaQiBaseData(lv:number, institutionalNature:numbe
maxHatching = Math.max(changeData.hatchingGround.length, maxHatching);
}
/**生成除了创始团队和场地之外的 小数组 */
let subList = [];
keyList.forEach(subInfo => {
subList.push(info[subInfo] || '');
......@@ -297,35 +284,39 @@ export async function outPutFuHuaQiBaseData(lv:number, institutionalNature:numbe
dataList.push(subList);
});
/**根据最大的创始团队数量 生成标题 */
let teamKeyList = ["type", "memberName", "memberSex", "memberAge", "memberDEGREE", "memberSchool", "des"];
let teamTitleList = ["人才类型", "成员姓名", "成员性别", "成员年龄", "成员最高学历", "毕业学校", "履历描述"];
/**得到最大值之后生成下标 */
for (let i = 0; i < maxTeamNumber; i++) {
for (let i = 0; i < maxTeamNumber; i++) {//平铺的插入数据
let teamNum = i+1;
teamTitleList.forEach(title => {
titleList.push(`成员${teamNum}-${title}`);
});
}
let hatchingStartIndex = teamKeyList.length;
/**得到最大值之后生成下标 */
/**根据最大的场地数量 生成标题 */
let hatchingKeyList = [ "personInChargeAdd", "siteAcreage", "leasePrice" ];
let hatchingTitleList = ["孵化场地地址", "孵化场地面积", "孵化场地出租单价" ];
for (let i = 0; i < maxTeamNumber; i++) {
let teamNum = i+1;
for (let i = 0; i < maxHatching; i++) {
let hatchingNumber = i+1;
hatchingTitleList.forEach(title => {
titleList.push(`场地${teamNum}-${title}`);
titleList.push(`场地${hatchingNumber}-${title}`);
});
}
/**创始团队初始插入数据的x轴下标 = titleList的长度
* 场地初始插入数据的x轴下标 = titleList的长度+(创始团队长度*标题个数)
* 按照这个规则依次插入数据即可
*/
dataBaseList.forEach((info, index) => {
if (info.foundingTeam && info.foundingTeam.length ) {
info.foundingTeam.forEach(teamInfo => {
teamInfo.type = changeEnumValue(configEnum.TEAM, teamInfo.type);
teamInfo.memberSex = changeEnumValue(configEnum.SEX, teamInfo.memberSex);
teamInfo.memberDEGREE = changeEnumValue(configEnum.DEGREE, teamInfo.memberDEGREE);
teamKeyList.forEach( teamKey => {
let addValue = teamInfo[teamKey];
if (teamKey == "type") addValue = changeEnumValue(configEnum.TEAM, addValue);
if (teamKey == "memberSex") addValue = changeEnumValue(configEnum.SEX, addValue);
if (teamKey == "memberDEGREE") addValue = changeEnumValue(configEnum.DEGREE, addValue);
dataList[index].push(addValue);
dataList[index].push(teamInfo[teamKey]);
});
});
}
......@@ -333,13 +324,15 @@ export async function outPutFuHuaQiBaseData(lv:number, institutionalNature:numbe
info.hatchingGround.forEach((hatchingInfo, hatchingIndex) => {1
hatchingKeyList.forEach( (hatchingKey, hatchingKeyIndex) => {
let addIndex = hatchingStartIndex + ( (hatchingIndex * 3 ) + (hatchingKeyIndex) )
let addIndex = teamKeyList.length + ( (hatchingIndex * 3 ) + (hatchingKeyIndex) )
dataList[index][addIndex] = hatchingInfo[hatchingKey];
});
});
}
});
/**最后将标题作数组为二维数组的第一个子数组 */
dataList.unshift(titleList)
return dataList;
}
\ No newline at end of file
}
/**
* 孵化器任务相关逻辑
* 作者: 李
* 作者: 李欣鸣
* 任务相关逻辑 包括任务的增删改查 管理后台的任务列表逻辑
*
* 需求说明 1.任务一个月只下一次 不填次月失效
* 2.任务提交之后不可以修改
* 3.月度出租率的任务为必填 其他两个可以为空
* 4.完成的任务将不再列表中显示
* 5.每月1日0时0分,将任务下发至孵化器表中未被禁用的孵化器中
* 实现 1.每个月月初系统生成任务列表在task表中 由isSubmit字段控制是否提交
* 2.任务对应的数据存在各表中 当提交任务时 将draftLock 字段置为true
* 3.任务相关的id统一使用 /tools/system 中的 getTaskId() 获取
*/
import moment = require("moment");
......@@ -10,7 +17,7 @@ import { TASKTYPEENUM } from "../../config/enum";
import { ERRORENUM } from "../../config/errorEnum";
import { findEnterpriseListByTaskId, updateEnterpriseDraftLock } from "../../data/enterprise/enterprise";
import { findFinancingListByTaskId, updateFinancingDraftLock } from "../../data/enterprise/financing";
import { findAllFuHuaQi } from "../../data/fuHuaQi/fuhuaqi";
import { findAllNotDisabledFuHuaQi } from "../../data/fuHuaQi/fuhuaqi";
import * as monthTableData from "../../data/fuHuaQi/monthTable";
import * as taskData from "../../data/fuHuaQi/task";
import { BizError } from "../../util/bizError";
......@@ -19,40 +26,49 @@ import { getTaskId, getTimeKey } from "../../tools/system";
/**
* 获取孵化器的任务列表
* 孵化器的任务列表
* 小程序端
* @param uscc 孵化器统一信用
* @returns [{type:1, title:'', enterpriseList:[] }]
*/
export async function fuHuaQiTaskList(uscc:string) {
let result = [];
/**得到这个月的任务map taskMap格式为{type:{isSubmit}} */
const TaskId = getTaskId(uscc);
let taskMap = await taskData.findFuHuaQiTaskByTaskId(TaskId);
// let taskTypeMapConf = {};
let result = [];
for (let key in TASKTYPEENUM) {
let k:any = key;
if (isNaN(k)) {
const Value = k;
const KeyStr = TASKTYPEENUM[key]
let keyNumber = parseInt(KeyStr);
let onceObj = { key:keyNumber, title:Value, enterpriseList:[]};
let onceTaskInfo = taskMap[KeyStr];
if (!onceTaskInfo.isSubmit) { //没有提交任务
let anyKey:any = key;
/** 当key是枚举的键的时候 进入到逻辑 */
if (isNaN(anyKey)) {
const ValueStr = TASKTYPEENUM[key];//字符型的枚举值 也就是 "1"或者"2"或者"3"
const ValueNumber = parseInt(ValueStr);//number型的枚举值 也就是 1或者2或者3
let onceObj = {
key:ValueNumber,
title:anyKey, //标题
enterpriseList:[] //相关的列表 这里不应该用这个字段名称 当时不能修改前端 沿用了这个字段名称
};
/**没有提交任务 则获取本月提交的任务相关信息 */
if (!taskMap[ValueStr].isSubmit) {
let dataList = [];
switch(keyNumber) {
case TASKTYPEENUM.孵化器月度填报: dataList = await monthTableData.findmonthTableListByTaskId(TaskId); break;
case TASKTYPEENUM.新注册或迁入企业登记:
switch(ValueNumber) {
case TASKTYPEENUM.孵化器月度填报:
/** 这里加限制 在月度任务中 isUpdate=true代表已经修改 isUpdate=false表示没有这个任务 详细说明看./month.ts注释*/
dataList = await monthTableData.findmonthTableListByTaskId(TaskId);
break;
case TASKTYPEENUM.新注册或迁入企业登记:
/**限制 draftLock = false 即草稿数据 这里可以不用这个限制 */
dataList = await findEnterpriseListByTaskId(TaskId);
dataList.forEach(item => {
item.uscc = item.draftId;//这里转换一下,为了不改前端代码 使用uscc这个名称,但是实际是draftId
});
break;
case TASKTYPEENUM.融资企业填报: dataList = await findFinancingListByTaskId(TaskId); break;
case TASKTYPEENUM.融资企业填报:
/**限制 draftLock = false 即草稿数据 这里可以不用这个限制 */
dataList = await findFinancingListByTaskId(TaskId);
break;
}
dataList.forEach(info => {
......@@ -78,12 +94,14 @@ export async function fuHuaQiTaskList(uscc:string) {
export async function checkTask(uscc:string, taskType:number) {
const TaskId = getTaskId(uscc);
let taskInfo = await taskData.findEnterpriseByTaskIdAndType(TaskId, taskType);
/**提交限制 */
if (!taskInfo) throw new BizError(ERRORENUM.任务不存在, uscc, TaskId);
if ( taskInfo.isSubmit ) throw new BizError(ERRORENUM.不能重复提交任务, uscc, taskType);
switch (taskType) {
case TASKTYPEENUM.孵化器月度填报:
/**月度报表每个月初和任务数据一起初始化 所以只需要修改状态 */
let monthTableInfo = await monthTableData.findMonthTableByTaskId(TaskId);
if (!monthTableInfo.isUpdate) throw new BizError(ERRORENUM.该报表需要填写本月内容后提交, uscc, taskType);
if ( monthTableInfo.draftLock ) throw new BizError(ERRORENUM.不能重复提交任务, uscc, taskType, '月度表lock = true');
......@@ -92,14 +110,16 @@ export async function checkTask(uscc:string, taskType:number) {
await monthTableInfo.save();
break;
case TASKTYPEENUM.新注册或迁入企业登记:
/**将录入的企业数据 draftLock 改为 true 表示不再是草稿状态 */
await updateEnterpriseDraftLock(TaskId);
break;
case TASKTYPEENUM.融资企业填报:
/**将录入的融资数据 draftLock 改为 true 表示不再是草稿状态 */
await updateFinancingDraftLock(TaskId);
break;
}
//添加一条任务
/** 修改任务状态标识 和相关信息 */
taskInfo.isSubmit = true;
taskInfo.submitTime = new Date().valueOf();
......@@ -112,18 +132,16 @@ export async function checkTask(uscc:string, taskType:number) {
/**
* 发放任务
* 系统自发
* 需求说明:
* 每月1日0时0分,将任务下发至孵化器表中未被禁用的孵化器中
*
* 下发任务的同时初始化月度报表数据
*/
export async function provideTask() {
const TimeKey = getTimeKey();
let taskCount = await taskData.findTaskCountByKey(TimeKey);
if (taskCount) {}//todo 重复创建了任务
let fuHuaQiList = await findAllFuHuaQi();
if (taskCount) {
new BizError(ERRORENUM.系统错误, '重复创建了任务');
return;
}
const Month = new Date().getMonth() + 1;
let addList = [];//任务列表
let monthList = [];//月度填报列表
......@@ -131,48 +149,25 @@ export async function provideTask() {
const YearNumber = new Date().getFullYear();
const MonthTableName = `${MonthNumber}月孵化器月度填报`;
let fuHuaQiList = await findAllNotDisabledFuHuaQi();
fuHuaQiList.forEach(info => {
let { uscc } = info;
let taskId = getTaskId(uscc);
addList.push({
key:TimeKey,
type:TASKTYPEENUM.孵化器月度填报,
taskId,
fuHuaQiUscc:uscc,
isSubmit:false
},{
key:TimeKey,
type:TASKTYPEENUM.新注册或迁入企业登记,
taskId,
fuHuaQiUscc:uscc,
isSubmit:false
},{
key:TimeKey,
type:TASKTYPEENUM.融资企业填报,
taskId,
fuHuaQiUscc:uscc,
isSubmit:false
});
monthList.push({
taskId,
name:MonthTableName,
fuHuaQiUscc:uscc,
month:MonthNumber,
year:YearNumber,
draftLock:false
});
addList.push( { key:TimeKey, type:TASKTYPEENUM.孵化器月度填报, taskId, fuHuaQiUscc:uscc, isSubmit:false},
{ key:TimeKey, type:TASKTYPEENUM.新注册或迁入企业登记, taskId, fuHuaQiUscc:uscc, isSubmit:false },
{ key:TimeKey, type:TASKTYPEENUM.融资企业填报, taskId, fuHuaQiUscc:uscc, isSubmit:false});
/**任务报表的初始状态为 草稿(draftLock=fals) 未被编辑(isUpdate=false) */
monthList.push({ taskId, name:MonthTableName, fuHuaQiUscc:uscc, month:MonthNumber, year:YearNumber, draftLock:false, isUpdate:false });
});
try {
/**初始化 任务 */
await taskData.createTaskToList(addList);
/**添加月度填报表 */
/**初始化 月度填报表 */
await monthTableData.createMonthTableToList(monthList);
logHandle(`添加了${addList.length}`);
} catch (err) {
//todo添加异常了
new BizError(ERRORENUM.系统错误, '添加任务和月度报表的时候 出现了异常 请检查数据库 ', err);
}
}
......@@ -19,6 +19,16 @@ export const BaseParamUpdateConfig = {
acreagePersonalUse:{type:"Number", notMustHave:true},//孵化器自用面积(㎡)
hatchingGround:{type:"[Object]", notMustHave:true},//经备案孵化场地
};
/**
* 使用端: 小程序端【孵化器入口】
* 场景: 验证经备案孵化场地
* 备注: 当填了案孵化场地数据 验证经备案孵化场地
*/
export const BaseParamUpdateHatchingGroundConfig = {
personInChargeAdd:{type:"String"},//孵化场地地址
siteAcreage:{type:"Number"},//孵化场地面积(㎡)
leasePrice:{type:"Number"},//孵化场地出租单价
};
/**
......@@ -43,6 +53,21 @@ export const OrganizationParamUpdateConfig = {
personInChargePhone:{type:"String", notMustHave:true},// {key:"负责人联系电话"},
operationModelDes:{type:"String", notMustHave:true},//{key:"运营模式描述"},
};
/**
* 使用端: 小程序端【孵化器入口】
* 场景: 机构信息中的创始团队
* 备注: 更新机构信息时 当选择了创始团队
*/
export const OrganizationParamFoundingTeamUpdateConfig = {
type:{type:"Number"},//人才类型
memberName:{type:"String"},//成员姓名
memberSex:{type:"Number"},//成员性别
memberAge:{type:"Number"},//成员年龄
memberDEGREE:{type:"Number"},//成员最高学历
memberSchool:{type:"String"},//毕业学校
des:{type:"String"},//履历描述
};
/**
......@@ -164,7 +189,15 @@ export const FinancingParamUpdateConfig = {
fuHuaQiInvestmentStyle:{type:"Number", notMustHave:true },//孵化器投资方式
financingRounds:{type:"Number"},//融资轮次
};
/**
* 使用端: 小程序端【孵化器入口】
* 场景: 创建融资企业登记选择了孵化器投资
* 备注:
*/
export const FinancingParamSubConfig = {
fuHuaQiInvestmentAmount:{type:"Number"},
fuHuaQiInvestmentStyle:{type:"Number"}
}
/**
* 使用端: 管理后台
......
......@@ -23,6 +23,9 @@ export enum ERRORENUM {
该孵化器账号信息已存在,
密码不一致,
密码只能由618位字符和数字组成,
统一社会信用代码不合法,
统一社会信用代码重复,
系统错误
}
export enum ERRORCODEENUM {
......
......@@ -61,6 +61,7 @@ export async function findEnterpriseByUscc(uscc:string) {
return await enterpriseModel.selectOnceData({uscc});
}
/**
* 通过草稿箱id获取企业信息
* 支持.save方法保存对象修改
......@@ -73,12 +74,24 @@ export async function findEnterpriseByDraftId(draftId:string) {
/**
* 根据参数查询单个企业信息
* @param param
* @returns
*/
export async function selectOneEnterpriseByParam(param:object) {
return await enterpriseModel.findOne(param);
}
/**
* 通过taskId 获取此次任务添加的企业列表
* @param taskId 任务id 格式遵循tool中getTaskId
* @returns [{}]
* 限制返回 draftId name isCreate uscc 字段
* @returns [{draftId}]
*/
export async function findEnterpriseListByTaskId(taskId:string) {
return await enterpriseModel.find({taskId, draftLock:false});
return await enterpriseModel.find({taskId, draftLock:false}, 'draftId name isCreate uscc');
}
......@@ -181,12 +194,15 @@ export async function findEnterpriseInfoByName(name:string) {
/**
* 获取孵化器下的所有企业信息
* 获取孵化器下的所有已经提交的企业信息
* 限制返回 name
logonAdd
operatingAdd
* @param fuHuaQiUscc 孵化器统一信用代码
* @returns []
*/
export async function findEnterpriseListByFuHuaQiUsccName(fuHuaQiUscc:string) {
return await enterpriseModel.find({fuHuaQiUscc, draftLock:true});
export async function findSubmittedEnterpriseListByFuHuaQiUscc(fuHuaQiUscc:string) {
return await enterpriseModel.find({fuHuaQiUscc, draftLock:true}, 'name logonAdd operatingAdd');
}
......@@ -194,7 +210,7 @@ export async function findEnterpriseListByFuHuaQiUsccName(fuHuaQiUscc:string) {
* 查询所有已绑定过的孵化器id
* @returns [孵化器id]
*/
export async function findAllBindFuHuaQi() {
export async function findAllBindFuHuaQiUsccList() {
return await enterpriseModel.distinct('fuHuaQiUscc');
}
......
......@@ -98,15 +98,6 @@ export async function findFuHuaQiByName(name:string) {
return await fuHuaQiModel.findOne({name});
}
/**
* 通过信用代码获取孵化器信息
* @param uscc 信用代码
* @returns 信用代码为uscc的孵化器信息
*/
export async function findFuHuaQiByUscc(uscc:string) {
return await fuHuaQiModel.findOne({uscc});
}
/**
* 通过token获取孵化器信息 弃用
......@@ -212,8 +203,14 @@ export async function findAllFuHuaQiOperationUsccMap() {
}
export async function findAllFuHuaQi() {
return await fuHuaQiModel.find({userState:false});
/**
* 查询所有非禁用状态下的孵化器
* 限制返回字段 uscc
* operationName
* @returns []
*/
export async function findAllNotDisabledFuHuaQi() {
return await fuHuaQiModel.find({userState:false}, 'uscc operationName');
}
......
......@@ -44,13 +44,13 @@ export async function save(throwError=false) {
/**
* 通过任务id 查询孵化器任务
* @param taskId 任务id
* @returns {1:{}, 2:{}}
* @returns {} 格式: key=type value={isSubmit}
*/
export async function findFuHuaQiTaskByTaskId(taskId:string) {
let findList = await fuHuaQiTaskModel.find({taskId}).exec() || [];
let taskMap = {};
findList.forEach(item => {
taskMap[item.type] = item;
taskMap[item.type] = {isSubmit:item.isSubmit};
});
return taskMap;
}
......
......@@ -84,7 +84,7 @@ async function updateMoveInEnterprise(req, res) {
* @param res
*/
async function selectEnterpriseInfo(req, res) {
/*这里改成了用DraftId,为了不改前端 依然使用uscc这个参数*/
/*这里改成了用DraftId,为了不改前端 依然使用uscc这个参数名称*/
let reqConf = {uscc: 'String' };
let { uscc } = eccReqMustHaveParam(reqConf, req.body);
......@@ -99,7 +99,7 @@ async function updateMoveInEnterprise(req, res) {
* @param res
*/
async function delEnterpriseInfo(req, res) {
/*这里改成了用DraftId,为了不改前端 依然使用uscc这个参数*/
/*这里改成了用DraftId,为了不改前端 依然使用uscc这个参数名称*/
let reqConf = {uscc: 'String' };
let { uscc } = eccReqMustHaveParam(reqConf, req.body);
......
......@@ -62,4 +62,17 @@ export function md5PwdStr(pwd:string) {
*/
export function getToken(uscc:string) {
return md5(`${uscc}${new Date().valueOf()}${Math.ceil(Math.random() *100)}`);
}
/**
* 校验uscc是否合法
* @param uscc
* @returns true/false
*/
export function eccUscc(uscc:string) {
let isSuccess = false;
if (uscc.search(/^[A-Za-z0-9]{16}$/) > -1) isSuccess = true;
else if (uscc.search(/^[A-Za-z0-9]{16}$/) > -1) isSuccess = true;
return isSuccess;
}
\ No newline at end of file
......@@ -3,23 +3,27 @@
*
*/
import { ERRORENUM } from "../config/errorEnum";
import { BizError } from "./bizError";
/**
* 校验value是否符合传入的枚举
* @param enumConf 目标枚举
* @param value 目标值
* @returns true/false 是否通过校验
* 无返回 有异常直接报错
*/
export function checkEnumValue(enumConf, value:any) {
if ( typeof value == 'number' ) {
return enumConf[value] ? true : false;
export function eccEnumValue(name:string, key:string, enumConf, value:any) {
let eccSuccess = true;
if ( typeof value == 'number' && !enumConf[value] ) {
eccSuccess = false;
} else {
value.forEach(item => {
if ( !enumConf[item] ) eccSuccess = false;
});
}
let checkSuccess = true;
value.forEach(item => {
if ( !enumConf[item] ) checkSuccess = false;
});
return checkSuccess;
if (!eccSuccess) throw new BizError(ERRORENUM.表单校验失败, `${name} 下的 ${key} 字段值为 ${value} 不满足枚举范围`);
}
......
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