Commit f413e134 by lixinming

no message

parent 59eb3e6d
......@@ -116,7 +116,7 @@ export async function outPutEnterpriseData(createType:number, fuHuaQiUscc:string
/**根据表头与key的顺序 生成小数组 */
let subList = [];
KeyList.forEach( keyStr => {
subList.push(info[keyStr] || '');
subList.push(changeData[keyStr] || '');
});
dataList.push(subList);
});
......
/**内部开放接口 */
import * as monthTableData from "../../data/fuHuaQi/monthTable";
import * as taskData from "../../data/fuHuaQi/task";
import * as enterpriseData from "../../data/enterprise/enterprise";
import { FUHUASTATE, TASKTYPEENUM } from "../../config/enum";
import { ERRORENUM } from "../../config/errorEnum";
import { findAllNotDisabledFuHuaQi } from "../../data/fuHuaQi/fuhuaqi";
import { BizError } from "../../util/bizError";
import { logHandle } from "../../util/log";
/**
* 发放1月数据
*/
export async function provideLastTask() {
const TimeKey = '20232';
let addList = [];//任务列表
let monthList = [];//月度填报列表
const MonthNumber = 1;//数据填报月份
const YearNumber = 2023
const MonthTableName = `${MonthNumber}月孵化器月度填报`;
let fuHuaQiList = await findAllNotDisabledFuHuaQi();
fuHuaQiList.forEach(info => {
let { uscc } = info;
let taskId = `${uscc}${TimeKey}`;
addList.push( { key:TimeKey, type:TASKTYPEENUM.孵化器月度填报, month:1, taskId, fuHuaQiUscc:uscc, isSubmit:false},
{ key:TimeKey, type:TASKTYPEENUM.新注册或迁入企业登记, month:1, taskId, fuHuaQiUscc:uscc, isSubmit:false },
{ key:TimeKey, type:TASKTYPEENUM.融资企业填报, month:1, 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);
logHandle(`添加了${addList.length} 任务`);
/**初始化 月度填报表 */
await monthTableData.createMonthTableToList(monthList);
logHandle(`添加了${monthList.length} 月度任务`);
} catch (err) {
new BizError(ERRORENUM.系统错误, '添加任务和月度报表的时候 出现了异常 请检查数据库 ', err);
}
}
export async function updateEnterpriseFuHuaState() {
await enterpriseData.updateEnterpriseState(FUHUASTATE.实体孵化);
return {};
}
\ No newline at end of file
......@@ -177,18 +177,45 @@ export async function deleteEnterpriseByDraftId(draftId:string) {
/**
* 我的企业
* 我的企业列表
* 小程序端 2.0
* @param uscc 孵化器统一信用代码
* @param state 孵化器状态 遵循 枚举FUHUASTATE
* @param name 孵化器名称
* @param page 当前页面
*/
export async function myEnterprise(uscc:string, state:number, name:string) {
export async function myEnterprise(uscc:string, state:number, name:string, page:number) {
let selectParam:any = { state, fuHuaQiUscc:uscc};
let result:any = {};
let selectParam:any = { fuHuaQiUscc:uscc};
if (name) selectParam.name = name;
if (state == configEnum.INSIDESTATE.全部) {
selectParam.state = {"$lt":4};
} else selectParam.state = state;
let dataList = await enterpriseData.findEnterpriseListToPage(selectParam, (page-1)*10);
/**当前条件数据量 */
let dataCount = await enterpriseData.findEnterpriseCount(selectParam);
/**当前条件页面数量 */
result.dataCount = dataCount;
result.pageCount = Math.ceil(dataCount/10);
let dataList = await enterpriseData.findEnterpriseList(selectParam);
if (state != configEnum.FUHUASTATE.迁出) {
/**查询所有的数据量 */
let allCount = await enterpriseData.findEnterpriseCount({ fuHuaQiUscc:uscc });
let virtualCount = 0;
if (state == configEnum.FUHUASTATE.虚拟孵化) virtualCount = dataCount;
else virtualCount = await enterpriseData.findEnterpriseCount({ fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.虚拟孵化 });
result.dataNumberList = [
{key:configEnum.INSIDESTATE.全部, value:`全部(${allCount})`},
{key:configEnum.INSIDESTATE.实体孵化, value:`实体孵化(${allCount-virtualCount})`},
{key:configEnum.INSIDESTATE.虚拟孵化, value:`虚拟孵化(${virtualCount})`},
];
}
let enterpriseList = [];
......@@ -198,5 +225,86 @@ export async function myEnterprise(uscc:string, state:number, name:string) {
enterpriseList.push(changeData);
});
return {enterpriseList};
result.enterpriseList = enterpriseList;
return result;
}
/**
* 修改企业孵化状态 修改为实体
* 小程序端 2.0
* @param fuHuaQiUscc 孵化器统一信用代码
* @param uscc 企业统一信用代码
* @param leasedArea 租赁面积
* @returns {isSuccess:true/false}
*/
export async function updatePhysicalInfo(fuHuaQiUscc:string, uscc:string, leasedArea:number) {
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo) throw new BizError(ERRORENUM.该企业不存在, "修改企业孵化状态 修改为实体",`孵化器 ${fuHuaQiUscc} -> 企业${uscc}`);
if (enterpriseInfo.fuHuaQiUscc != fuHuaQiUscc) throw new BizError(ERRORENUM.无法操作其他孵化器的企业, "修改企业孵化状态 修改为实体",`孵化器 ${fuHuaQiUscc} -> 企业${uscc}`);
enterpriseInfo.leasedArea = leasedArea;
await enterpriseInfo.save();
return {isUsccess:true};
}
/**
* 修改企业孵化状态 修改为虚拟
* 小程序端 2.0
* @param fuHuaQiUscc 孵化器统一信用代码
* @param uscc 企业统一信用代码
* @param virtualCauseDes 虚拟孵化其他原因
* @param virtualCause 虚拟孵化模式
* @returns {isSuccess:true/false}
*/
export async function updateVirtualInfo(fuHuaQiUscc:string, uscc:string, virtualCauseDes:string, virtualCause:number) {
verificationEnumTools.eccEnumValue('修改企业孵化状态', '修改为虚拟', configEnum.VIRTUALCAUSE, virtualCause);
if (virtualCause != configEnum.VIRTUALCAUSE.其他 && !virtualCauseDes) {
throw new BizError(ERRORENUM.请填入其他原因, "修改企业孵化状态 修改为虚拟");
}
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo) throw new BizError(ERRORENUM.该企业不存在, "修改企业孵化状态 修改为实体",`孵化器 ${fuHuaQiUscc} -> 企业${uscc}`);
if (enterpriseInfo.fuHuaQiUscc != fuHuaQiUscc) throw new BizError(ERRORENUM.无法操作其他孵化器的企业, "修改企业孵化状态 修改为实体",`孵化器 ${fuHuaQiUscc} -> 企业${uscc}`);
enterpriseInfo.virtualCause = virtualCause;
if (virtualCauseDes) enterpriseInfo.virtualCauseDes = virtualCauseDes;
await enterpriseInfo.save();
return {isUsccess:true};
}
/**
* 修改企业孵化状态 修改为迁出
* 小程序端 2.0
* @param fuHuaQiUscc 孵化器统一信用代码
* @param uscc 企业统一信用代码
* @param moveOutType 迁出类型
* @param moveOutCause 迁出原因 多选
* @returns {isSuccess:true/false}
*/
export async function updateMoveOutInfo(fuHuaQiUscc:string, uscc:string, moveOutType:number, moveOutCause ) {
verificationEnumTools.eccEnumValue('修改企业孵化状态', '修改为迁出', configEnum.MOVEOUTTYPE, moveOutType);
verificationEnumTools.eccEnumValue('修改企业孵化状态', '修改为迁出', configEnum.MOVEOUTCAUSE, moveOutCause);
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo) throw new BizError(ERRORENUM.该企业不存在, "修改企业孵化状态 修改为实体",`孵化器 ${fuHuaQiUscc} -> 企业${uscc}`);
if (enterpriseInfo.fuHuaQiUscc != fuHuaQiUscc) throw new BizError(ERRORENUM.无法操作其他孵化器的企业, "修改企业孵化状态 修改为实体",`孵化器 ${fuHuaQiUscc} -> 企业${uscc}`);
enterpriseInfo.moveOutType = moveOutType;
enterpriseInfo.moveOutCause = moveOutCause;
await enterpriseInfo.save();
return {isUsccess:true};
}
\ No newline at end of file
......@@ -109,14 +109,18 @@ export async function fuHuaQiCompletedList(uscc:string, selectTime:number) {
if (isNaN(anyKey)) {
const ValueStr = TASKTYPEENUM[key];//字符型的枚举值 也就是 "1"或者"2"或者"3"
const ValueNumber = parseInt(ValueStr);//number型的枚举值 也就是 1或者2或者3
let onceObj = {
let onceObj:any = {
key:ValueNumber,
title:anyKey, //标题
enterpriseList:[] //相关的列表 这里不应该用这个字段名称 当时不能修改前端 沿用了这个字段名称
};
/**当选中了系统上线时间前的时间 任务不存在 就是空列表 */
if (!taskMap[ValueStr]) continue;
/**获取提交的任务 */
if (taskMap[ValueStr].isSubmit) {
if ( taskMap[ValueStr].isSubmit ) {
onceObj.month = taskMap[ValueStr].month + '月';
let dataList = [];
switch(ValueNumber) {
......@@ -159,7 +163,6 @@ export async function fuHuaQiCompletedList(uscc:string, selectTime:number) {
export async function fuHuaQiPastdueList(uscc:string, selectTime:number) {
/**得到查询月的任务map taskMap格式为{type:{isSubmit}} */
const TaskId = getTaskIdByTime(uscc, selectTime);
let editable = getTaskId(uscc) == TaskId;//如果是本月,就是可以编辑的
let taskMap = await taskData.findFuHuaQiTaskByTaskId(TaskId);
......@@ -170,14 +173,18 @@ export async function fuHuaQiPastdueList(uscc:string, selectTime:number) {
if (isNaN(anyKey)) {
const ValueStr = TASKTYPEENUM[key];//字符型的枚举值 也就是 "1"或者"2"或者"3"
const ValueNumber = parseInt(ValueStr);//number型的枚举值 也就是 1或者2或者3
let onceObj = {
let onceObj:any = {
key:ValueNumber,
title:anyKey, //标题
enterpriseList:[] //相关的列表 这里不应该用这个字段名称 当时不能修改前端 沿用了这个字段名称
};
/**未提交的任务 */
/**当选中了系统上线时间前的时间 任务不存在 就是空列表 */
if (!taskMap[ValueStr]) continue;
/**未提交的数据 */
if (!taskMap[ValueStr].isSubmit) {
onceObj.month = taskMap[ValueStr].month + '月';
let dataList = [];
switch(ValueNumber) {
......@@ -301,39 +308,3 @@ export async function provideTask() {
}
/**
* 发放1月数据
*/
export async function provideLastTask() {
const TimeKey = '20232';
let addList = [];//任务列表
let monthList = [];//月度填报列表
const MonthNumber = 1;//数据填报月份
const YearNumber = 2023
const MonthTableName = `${MonthNumber}月孵化器月度填报`;
let fuHuaQiList = await findAllNotDisabledFuHuaQi();
fuHuaQiList.forEach(info => {
let { uscc } = info;
let taskId = `${uscc}${TimeKey}`;
addList.push( { key:TimeKey, type:TASKTYPEENUM.孵化器月度填报, month:1, taskId, fuHuaQiUscc:uscc, isSubmit:false},
{ key:TimeKey, type:TASKTYPEENUM.新注册或迁入企业登记, month:1, taskId, fuHuaQiUscc:uscc, isSubmit:false },
{ key:TimeKey, type:TASKTYPEENUM.融资企业填报, month:1, 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);
logHandle(`添加了${addList.length} 任务`);
/**初始化 月度填报表 */
await monthTableData.createMonthTableToList(monthList);
logHandle(`添加了${monthList.length} 月度任务`);
} catch (err) {
new BizError(ERRORENUM.系统错误, '添加任务和月度报表的时候 出现了异常 请检查数据库 ', err);
}
}
\ No newline at end of file
......@@ -73,7 +73,7 @@ export async function firstLoginChangePwd(uscc:string, pwd:string, confirmPwd:st
/**
* 重置密码
* 小程序端
* 小程序端 2.0
* @param uscc 信用代码
* @param pwd 原密码 md5之后的
* @param newPwd 新密码 未md5
......@@ -119,3 +119,20 @@ export async function logout(uscc:string){
return {isSuccess:true};
}
export async function bindFuHuaQi(uscc:string, bindUscc:string, bindPwd:string) {
let fuhuaqiInfo = await fuhuaqiData.findFuHuaQiByUSCC(uscc);
// if ( !fuhuaqiInfo ) throw new BizError(ERRORENUM.);
}
/**
* 切换账号列表
* 小程序端 2.0
* @param uscc
*/
export async function changeUserList(uscc:string) {
}
\ No newline at end of file
......@@ -155,9 +155,16 @@ export enum FINANCINGROUNDS {
* 孵化状态
*/
export enum FUHUASTATE {
实体孵化 = 1,
实体孵化 = 2,
虚拟孵化 = 3,
迁出= 4
}
/**入孵状态 只用于前端*/
export enum INSIDESTATE {
全部 = 1,
实体孵化,
虚拟孵化,
迁出
}
......
......@@ -26,7 +26,9 @@ export enum ERRORENUM {
统一社会信用代码不合法,
统一社会信用代码重复,
系统错误,
该任务已提交
该任务已提交,
无法操作其他孵化器的企业,
请填入其他原因,
}
export enum ERRORCODEENUM {
......
......@@ -27,7 +27,11 @@ const enterpriseSchema = new Schema({
enterpriseIsInPut:{type:Boolean, default:false},//是否是初始数据 todo 后续要弃用 兼容原始数据无法判断是否是迁入企业这个问题加的字段
draftId:{type:String, index:true},//草稿id 编辑的时候使用这个id 保存之后就不认这个id了
mainBusiness:{type:String, default:""},//主营业务
state:Number,//孵化状态 遵循枚举 FUHUASTATE 值
state:Number,//孵化状态 遵循枚举 FUHUASTATE 值 ----2.0
virtualCause:[Number],//虚拟孵化原因 遵循 VIRTUALCAUSE 的值 ----2.0
virtualCauseDes:String,//虚拟孵化描述 ----2.0
moveOutType:Number,// 迁出类型 遵循 MOVEOUTTYPE 的值 ----2.0
moveOutCause:[Number],//迁出原因 遵循 MOVEOUTCAUSE 的值 ----2.0
});
var enterpriseModel;
......@@ -217,3 +221,12 @@ export async function findAllBindFuHuaQiUsccList() {
export async function createEnterpriseToList(fuHuaQiList:object) {
await enterpriseModel.insertMany(fuHuaQiList);
}
/**
* 将所有企业数据的孵化状态改变
* @param state 孵化状态
*/
export async function updateEnterpriseState(state:number) {
return await enterpriseModel.updateMany({}, {$set:{state}});
}
......@@ -54,7 +54,8 @@ const fuHuaQiSchema = new Schema({
tokenMs:Number,
firstLoginIsChangePwd:{type:Boolean, default:false},//首次登录是否修改密码
createTime:Number,
userState:{type:Boolean, default:false} //是否禁用
userState:{type:Boolean, default:false}, //是否禁用
bindId:{type:String}//绑定标识
});
var fuHuaQiModel;
......
......@@ -4,12 +4,14 @@ import { initDB } from "./db/mongo/dbInit";
import { httpServer } from "./net/http_server";
import { initBasicData } from "./tools/dataInit";
async function lanuch() {
await initConfig();//初始化配置解析
await initDB();
await initBasicData();
// await initSystemTask();
httpServer.createServer(systemConfig.port);
console.log('This indicates that the server is started successfully.');
}
......
......@@ -6,6 +6,7 @@ import * as asyncHandler from 'express-async-handler';
import * as monthAdminBiz from '../../biz/admin/fuHuaQi/month';
import * as fuHuaQiAdminBiz from '../../biz/admin/fuHuaQi/fuHuaQi';
import * as taskBiz from '../../biz/mobileFuHuaQi/fuHuaQi/task';
import * as provideBiz from '../../biz/admin/provide';
import { getTimeKey } from '../../tools/system';
import { checkGuanWeiHuiToken, checkInterior } from '../../middleware/user';
import { eccReqParamater } from '../../util/verificationParam';
......@@ -20,12 +21,18 @@ export function setRouter(httpServer) {
httpServer.post('/admin/data/output/fuhuaqi',checkGuanWeiHuiToken, asyncHandler(outPutFuHuaQiData));
httpServer.post('/admin/data/output/month',checkGuanWeiHuiToken, asyncHandler(outPutMonthData));
/**测试接口 用于发放1月份任务 */
httpServer.post('/admin/admin/task/add12',checkInterior, asyncHandler(provideLastTask));
httpServer.post('/admin/provide/task/add12',checkInterior, asyncHandler(provideLastTask));
httpServer.post('/admin/provide/enterprise/updatestate',checkInterior, asyncHandler(updateEnterpriseState));
}
async function updateEnterpriseState(req, res) {
let data = await provideBiz.updateEnterpriseFuHuaState();
res.success({isUsccess:true});
}
async function provideLastTask(req, res) {
await taskBiz.provideLastTask();
await provideBiz.provideLastTask();
res.success({isUsccess:true});
}
......
......@@ -6,6 +6,7 @@ import * as asyncHandler from 'express-async-handler';
import * as enterpriseBiz from '../../biz/mobileFuHuaQi/enterprise/enterprise';
import { checkFuHuaQiToken } from '../../middleware/user';
import { eccReqParamater } from '../../util/verificationParam';
import { FUHUASTATE } from '../../config/enum';
export function setRouter(httpServer) {
/**新注册企业 或 新迁入企业 */
......@@ -16,9 +17,13 @@ export function setRouter(httpServer) {
httpServer.post('/fuhuaqi/enterprise/select', checkFuHuaQiToken, asyncHandler(selectEnterpriseInfo));
httpServer.post('/fuhuaqi/enterprise/delete', checkFuHuaQiToken, asyncHandler(delEnterpriseInfo));
/**我的企业 */
httpServer.post('/fuhuaqi/myenterprise/list', checkFuHuaQiToken, asyncHandler(myEnterpriseList));//todo 新加
httpServer.post('/fuhuaqi/myenterprise/info', checkFuHuaQiToken, asyncHandler(myEnterpriseInfo));//todo 新加
httpServer.post('/fuhuaqi/myenterprise/info', checkFuHuaQiToken, asyncHandler(myEnterpriseInfo));//todo 新加
httpServer.post('/fuhuaqi/myenterprise/list', checkFuHuaQiToken, asyncHandler(myEnterpriseList));
httpServer.post('/fuhuaqi/myenterprise/info', checkFuHuaQiToken, asyncHandler(myEnterpriseInfo));
httpServer.post('/fuhuaqi/myenterprise/moveoutlist', checkFuHuaQiToken, asyncHandler(myEnterpriseMoveOutList));
/**我的企业 修改 */
httpServer.post('/fuhuaqi/myenterprise/update/physical', checkFuHuaQiToken, asyncHandler(updatePhysical));//todo 实体
httpServer.post('/fuhuaqi/myenterprise/update/virtual', checkFuHuaQiToken, asyncHandler(updateVirtual));//todo 虚拟
httpServer.post('/fuhuaqi/myenterprise/update/moveout', checkFuHuaQiToken, asyncHandler(updateMoveOut));//todo 迁出
}
......@@ -121,15 +126,31 @@ async function delEnterpriseInfo(req, res) {
/**
* 我的企业列表
* 2.0
* 小程序端 2.0
* @param req
* @param res
*/
async function myEnterpriseList(req, res) {
let reqConf = {name: 'String', state:"Number" };
let { name, state } = eccReqParamater(reqConf, req.body);
let reqConf = {name: 'String', state:"Number", page:"Number" };
let { name, state, page } = eccReqParamater(reqConf, req.body, ["name"]);
const Uscc = req.headers.uscc;
let data = await enterpriseBiz.myEnterprise(Uscc, state, name, page);
res.success(data);
}
/**
* 我的企业列表迁出列表
* 小程序端 2.0
* @param req
* @param res
*/
async function myEnterpriseMoveOutList(req, res) {
let reqConf = {name: 'String', page:"Number" };
let { name, page } = eccReqParamater(reqConf, req.body, ["name"]);
const Uscc = req.headers.uscc;
let data = await enterpriseBiz.myEnterprise(Uscc, state, name);
let data = await enterpriseBiz.myEnterprise(Uscc, FUHUASTATE.迁出, name, page);
res.success(data);
}
......@@ -147,3 +168,54 @@ async function myEnterpriseInfo(req, res) {
let { uscc } = eccReqParamater(reqConf, req.body);
const FuHuaQiUscc = req.headers.uscc;
}
/**
* 修改企业孵化状态 修改为实体
* 2.0
* @param req
* @param res
*/
async function updatePhysical(req, res) {
let reqConf = {leasedArea: 'Number', uscc:"String" };
let { leasedArea, uscc } = await eccReqParamater(reqConf, req.body);
const FuHuaQiUscc = req.headers.uscc;
let result = await enterpriseBiz.updatePhysicalInfo(FuHuaQiUscc, uscc, leasedArea);
res.success(result);
}
/**
* 修改企业孵化状态 修改为虚拟
* 2.0
* @param req
* @param res
*/
async function updateVirtual(req, res) {
let reqConf = {virtualCause: 'Number', uscc:"String" , virtualCauseDes:"String"};
let { virtualCause, uscc, virtualCauseDes} = await eccReqParamater(reqConf, req.body, ["virtualCauseDes"]);
const FuHuaQiUscc = req.headers.uscc;
let result = await enterpriseBiz.updateVirtualInfo(FuHuaQiUscc, uscc, virtualCauseDes, virtualCause);
res.success(result);
}
/**
* 修改企业孵化状态 修改为迁出
* 2.0
* @param req
* @param res
*/
async function updateMoveOut(req, res) {
let reqConf = {moveOutType: 'Number', uscc:"String" , moveOutCause:"[Number]"};
let { moveOutType, uscc, moveOutCause} = await eccReqParamater(reqConf, req.body, );
const FuHuaQiUscc = req.headers.uscc;
let result = await enterpriseBiz.updateMoveOutInfo(FuHuaQiUscc, uscc, moveOutType, moveOutCause);
res.success(result);
}
......@@ -138,8 +138,7 @@ async function submitTask(req, res) {
*/
async function completedList(req, res) {
let reqConf = {selectTime:'Number'};
const NotMustHaveKeys = ["selectTime"];
let { selectTime } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let { selectTime } = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
......@@ -156,9 +155,8 @@ async function completedList(req, res) {
* @param res
*/
async function pastDueList(req, res) {
let reqConf = {taskType:'Number'};
const NotMustHaveKeys = ["selectTime"];
let { selectTime } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let reqConf = {selectTime:'Number'};
let { selectTime } = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let result = await taskBiz.fuHuaQiPastdueList(Uscc, selectTime);
......
......@@ -12,6 +12,7 @@ export function setRouter(httpServer) {
httpServer.post('/fuhuaqi/logout', checkFuHuaQiToken, asyncHandler(logout));
httpServer.post('/fuhuaqi/login/firstupdate', checkFuHuaQiToken, asyncHandler(firstUpdatePwd));
httpServer.post('/fuhuaqi/changepwd', checkFuHuaQiToken, asyncHandler(changePwd));
httpServer.post('/fuhuaqi/binduser', checkFuHuaQiToken, asyncHandler(bindUser));
}
......@@ -59,6 +60,11 @@ async function firstUpdatePwd(req, res) {
}
/**
* 修改密码
* @param req
* @param res
*/
async function changePwd(req, res) {
let reqConf = {confirmPwd:'String', newPwd:'String', pwd:'String' };
let {confirmPwd, newPwd, pwd} = eccReqParamater(reqConf, req.body);
......@@ -68,3 +74,7 @@ async function changePwd(req, res) {
res.success(result);
}
async function bindUser() {
}
\ No newline at end of file
......@@ -3,7 +3,7 @@
*/
import * as asyncHandler from 'express-async-handler';
import { FUHUAQILV, INSTITUTIONALNATURE, FUHUAINDUSTRY, INDUSTRY, FUHUAQILNVESTMENTSTYLE, OPERATIONMODEL, TEAM, DEGREE, FINANCINGROUNDS } from '../config/enum';
import { FUHUAQILV, INSTITUTIONALNATURE, FUHUAINDUSTRY, INDUSTRY, FUHUAQILNVESTMENTSTYLE, OPERATIONMODEL, TEAM, DEGREE, FINANCINGROUNDS, INSIDESTATE, VIRTUALCAUSE, MOVEOUTTYPE, MOVEOUTCAUSE } from '../config/enum';
export function setRouter(httpServer) {
httpServer.post('/public/fuhuaqilv', asyncHandler(getFuHuaQiLv));
......@@ -15,6 +15,72 @@ export function setRouter(httpServer) {
httpServer.post('/public/fuhuaqiteam', asyncHandler(fuHuaQiTeam));
httpServer.post('/public/degree', asyncHandler(degree));
httpServer.post('/public/financingrounds', asyncHandler(financingRounds));
/**2.0 */
httpServer.post('/public/insidestate', asyncHandler(insidestate));
httpServer.post('/public/virtualcause', asyncHandler(virtualCause));
httpServer.post('/public/moveouttype', asyncHandler(moveOutType));
httpServer.post('/public/moveoutcause', asyncHandler(moveOutCause));
}
/**
* 迁出类型
*/
function moveOutType(req, res) {
let dataList = [];
for (let key in MOVEOUTTYPE) {
let anyKey:any = key;
if (isNaN(anyKey)) {
dataList.push({key, value:MOVEOUTTYPE[key]});
}
}
res.success({dataList});
}
/**
* 迁出原因
*/
function moveOutCause(req, res) {
let dataList = [];
for (let key in MOVEOUTCAUSE) {
let anyKey:any = key;
if (isNaN(anyKey)) {
dataList.push({key, value:MOVEOUTCAUSE[key]});
}
}
res.success({dataList});
}
/**
* 虚拟孵化模式
* @param req
* @param res
*/
function virtualCause(req, res) {
let dataList = [];
for (let key in VIRTUALCAUSE) {
let anyKey:any = key;
if (isNaN(anyKey)) {
dataList.push({key, value:VIRTUALCAUSE[key]});
}
}
res.success({dataList});
}
/**
* 入孵状态
*/
function insidestate(req, res) {
let dataList = [];
for (let key in INSIDESTATE) {
let anyKey:any = key;
if (isNaN(anyKey)) {
dataList.push({key, value:INSIDESTATE[key]});
}
}
res.success({dataList});
}
......
const xlsx = require('node-xlsx');
const path = require('path');
/**
* onceSheetBecomeOfblockData 将excel文件的指定sheet解析成数据块数据
* @param fileName 文件名称
* @param sheetName 表名称
* @returns [ {blockData:数据块(二维数组), blockTitle:"数据标题"}]
*/
export function onceSheetBecomeOfblockData(fileName, sheetName) {
let {sheetMap} = getExcel( path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", fileName ));
return sheetMap;
let thisBlockData = getBlockData(sheetMap[sheetName]);
return thisBlockData;
}
/**
* excelBecomeOfBlockData 将excel所有的sheet解析成数据块
* @param fileName 文件名称
* @returns {"sheetName1":[ {blockData:数据块(二维数组), blockTitle:"数据标题"}], ...}
*/
export function excelBecomeOfBlockData(fileName) {
let {sheetMap} = getExcel( path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", fileName ));
let result = {};
for (let sheetName in sheetMap) {
result[sheetName] = getBlockData(sheetMap[sheetName]);
}
return result;
}
/**
* planaryArrayBecomeOfBlockData 将符合excel规则的sheet二维数组转为 数据块
* @param dataList excel解出来的数据
* @returns thisBlockData 返回数据块集合 格式:blockList = [ {blockData:数据块(二维数组), blockTitle:"数据标题"}]
*/
export function planaryArrayBecomeOfBlockData(planaryArray) {
return getBlockData(planaryArray);;
}
//===
/**
* getBlockData 数据分块
* @param dataList 解析出来的excel二维数组
* @returns 返回数据块集合 格式:blockList = [ {blockData:数据块(二维数组), blockTitle:"数据标题"}]
*/
function getBlockData(dataList) {
let blockList = [];
for (let i = 0; i < 999; i++) {
let {blockData, blockTitle, notItem, delDataList} = checkBlock(dataList);
if (notItem) break;
dataList = delDataList;
if (blockTitle) blockList.push({blockData, blockTitle});
}
return blockList;
}
function getListFristNotNullItemIndex(list) { //获取起始坐标
if (!list.length) return null;
for (let i = 0; i < list.length; i++) {
if (list[i]) return i;
}
}
function getListFirstNullItemIndex(startX, list) { //获取第一个为空的坐标
if (!list.length) return null;
let checkItem = false;
let firstItemIndex = 0;
for (let i = startX; i <= list.length; i++) {
let item = list[i];
if (!checkItem && item) checkItem = true;
if (checkItem && !item) {
firstItemIndex = i;
break;
}
}
return firstItemIndex;
}
function listRegionIsNull(list, startX, endX) { //指定区间内数据是否未空
let isNull = true;
if ( !list.length ) return isNull;
for (let i = startX; i < endX; i++) {
let item = list[i];
if (item) {
isNull = false;
break;
}
}
return isNull;
}
function thisListNotItem(list) {
for (let i = 0; i < list.length; i++) {
if (list[i]) return false;
}
return true
}
function checkBlock(dataList) {
//纵向有效起始点
let startY = 0;
let startX = 0;
let isNotBlockTitle = false; //没有块标题
let isLook = false;
let endX = 0;//x轴最长结束下标 【包括下标】
let blockTitle = ''; //标题块名称
let notItem = true;
for (let i = 0; i < dataList.length; i++) {
let childList = dataList[i] || [];
if (!thisListNotItem(childList)) {
if ( !isLook ) {
let thisRoowStartX = getListFristNotNullItemIndex(childList);
let thisRoowLastItem = childList[thisRoowStartX + 1];
let LastList = dataList[i+1] || [];
// let lastRoowStartX = getListFristNotNullItemIndex(LastList);
let lastRoowHaveItem = LastList[thisRoowStartX];
if ( thisRoowLastItem || (LastList.length && lastRoowHaveItem) ) {
if (lastRoowHaveItem && thisRoowLastItem ) {
isNotBlockTitle = true; //不存在标题块
blockTitle = `${thisRoowStartX}_${i}`;
startY = i;
startX = thisRoowStartX;
}
else {
blockTitle = dataList[i][thisRoowStartX];
dataList[i][thisRoowStartX] = null;
if ( thisRoowLastItem ) { // 同行存在元素 标题在y轴上
startY = i;
startX = thisRoowStartX + 1;
} else { // 同行存在元素 标题在x轴上
startY = i + 1;
startX = thisRoowStartX;
}
}
isLook = true;
} else { //只有标题 无内容
console.log(dataList[i][thisRoowStartX]);
dataList[i][thisRoowStartX] = null;
}
} else {
//测量最大连续长度
let firstNullX = getListFirstNullItemIndex(startX, childList);
if (firstNullX) endX = Math.max(endX, firstNullX-1);
break;
}
notItem = false;
}
}
let endY = 0;//y轴连续下标 【包括下标】
let yInfoStart = false;
let yInfoEnd = false;
for (let y = startY; y < dataList.length; y++) {
//纵向找连续性
let thisRoow = dataList[y];
let regionIsNull = listRegionIsNull(thisRoow, startX, endX);
if (!regionIsNull) {
endY = y;
if (!yInfoStart) yInfoStart = true;
}
if (yInfoStart && regionIsNull) yInfoEnd = true;
if (yInfoEnd) break;
}
let blockData = [];
for (let y = startY; y <= endY; y++) {
let onceList = [];
for (let x = startX; x <= endX; x++) {
onceList.push(dataList[y][x]);
dataList[y][x] = null;
}
blockData.push(onceList);
}
return {blockData, blockTitle, delDataList:dataList,notItem};
}
//获取单个excel文件的数据
function getExcel(filePath) {
const workSheetsFromFile = xlsx.parse(filePath);
let sheetMap = {};
let sheetList = [];
for (let i = 0; i < workSheetsFromFile.length; i++) {
let sheetInfo = workSheetsFromFile[i];
sheetMap[sheetInfo.name] = sheetInfo.data;
sheetList.push(sheetInfo);
}
return {sheetMap, sheetList}
}
\ No newline at end of file
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