Commit 3cd6bda6 by lixinming

3.1归档

parent 3f3c0f7f
......@@ -4,7 +4,7 @@
import moment = require("moment");
import { ERRORENUM } from "../../config/errorEnum";
import { createInformation, deleteInformationData, selectInformationByParam, selectInformationDataById } from "../../data/guanWeiHui/information";
import { createInformation, deleteInformationData, selectInformationByParam, selectInformationByParamCount, selectInformationByParamToPage, selectInformationDataById } from "../../data/guanWeiHui/information";
import { getInformationId } from "../../tools/system";
import { BizError } from "../../util/bizError";
......@@ -28,6 +28,7 @@ export async function openInformation(id:string, isPermanent:boolean, closeTimeM
informationData.isPermanent = isPermanent;
informationData.closeTimeMs = closeTimeMs;
informationData.state = true;
await informationData.save();
......@@ -38,8 +39,7 @@ export async function openInformation(id:string, isPermanent:boolean, closeTimeM
export async function closeInformation(id:string) {
let informationData = await selectInformationDataById(id);
informationData.switch = true;
informationData.state = false;
await informationData.save();
return {isSuccess:true};
......@@ -90,8 +90,26 @@ export async function updateOnceInformation(id:string, desc:string, title:string
}
export async function selectInformation() {
let dataBaseList = await selectInformationByParam({});
export async function selectInformation(selectTitle:string, createTime:number, state:number, page:number) {
let selectParam = {};
if (state == 2 || state == 3) {
if (state == 2) {
selectParam = {state:true, "$or":[{closeTimeMs: {"$gt":new Date().valueOf()} }, {isPermanent:true}] };
} else {
selectParam = {"$or":[{closeTimeMs: {"$lt":new Date().valueOf()} }, {state:false}] };
}
}
if (selectTitle) {
selectParam["title"] = {"$regex":`${selectTitle}`};
}
if (createTime) {
selectParam["$and"] = [{"createTimeMs":{"$gt":createTime }}, {"createTimeMs":{"$lt":createTime+(3600*26*1000) }}]
}
let dataBaseList = await selectInformationByParamToPage(selectParam, (page-1)* 10);
let count = await selectInformationByParamCount(selectParam);
let pageCount = count ? Math.ceil(count/10) : 0;
let dataList = [];
dataBaseList.forEach(info => {
......@@ -111,5 +129,5 @@ export async function selectInformation() {
});
});
return {dataList};
return {dataList, pageCount, count};
}
......@@ -23,6 +23,8 @@ export async function getInformationList(uscc:string, selectTitle:string, page:n
}
let informationList = await selectInformationByParamToPage(selectParam, (page-1) * 10 );
let count = await selectInformationByParamCount(selectParam);
let pageCount = count ? Math.ceil(count/10) : 0;
let dataList = [];
informationList.forEach((info) => {
......@@ -32,7 +34,7 @@ export async function getInformationList(uscc:string, selectTitle:string, page:n
});
return {dataList, count};
return {dataList, count, pageCount};
}
......@@ -51,6 +53,7 @@ export async function getOutOfDateInformationList(uscc:string, selectTitle:strin
}
let informationList = await selectInformationByParamToPage(selectParam, (page-1) * 10 );
let count = await selectInformationByParamCount(selectParam);
let pageCount = count ? Math.ceil(count/10) : 0;
let dataList = [];
informationList.forEach((info) => {
......@@ -60,7 +63,7 @@ export async function getOutOfDateInformationList(uscc:string, selectTitle:strin
});
return {dataList, count};
return {dataList, count, pageCount};
}
......
......@@ -17,6 +17,7 @@ import { changeEnumValue, eccEnumValue } from "../../../util/verificationEnum";
import * as scoreBiz from "./score";
/**
* 主界面基础数据
* 小程序端 首页的基础数据
......@@ -196,5 +197,3 @@ export async function updateOrganizationData(uscc:string, param) {
return {isSuccess:true};
}
/**
* 孵化器经营数据填报
*
*/
import { FuHuaQiBusinessDataConfig } from "../../../config/eccFormParamConfig";
import { ERRORENUM } from "../../../config/errorEnum";
import { FuHuaQiBusinessDataInfoConfig } from "../../../config/splitResultConfig";
import { findBusinessByTaskId } from "../../../data/fuHuaQi/quarterTask/businessData";
import * as sysTools from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
import { eccFormParam } from "../../../util/verificationParam";
/**
* 新添加孵化器经营数据填报
* 小程序端
* 逻辑是 将填报编辑状态修改为true 当库里=true时
* @param uscc 孵化器的统一信用代码
* @param param
* @returns {isSuccess:true/false}
*/
export async function createBusiness(uscc:string, param) {
const TaskId = sysTools.getQuarterTaskId(uscc);
eccFormParam("新添加孵化器季度填报", FuHuaQiBusinessDataConfig, param);
let businessInfo = await findBusinessByTaskId(TaskId);
/**不可以重复创建 */
if ( businessInfo.isUpdate ) throw new BizError(ERRORENUM.该孵化器经营数据填报已存在, `孵化器 ${uscc}重复提交了经营数据`);
/**更新状态和数据 */
businessInfo.isUpdate = true;
for (let key in param) {
businessInfo[key] = param[key];
}
await businessInfo.save();
return {isSuccess:true};
}
export async function deleteBusiness(uscc:string) {
const TaskId = sysTools.getQuarterTaskId(uscc);
let businessInfo = await findBusinessByTaskId(TaskId);
/**删除校验 */
if ( !businessInfo.isUpdate ) throw new BizError(ERRORENUM.未填报数据不能删除, `孵化器 ${uscc}删除经营数据时经营数据不存在`);
if ( businessInfo.draftLock ) throw new BizError(ERRORENUM.已提交的数据不能进行操作, `孵化器 ${uscc}尝试 删除 已经提交的经营数据`);
/**更新状态和数据 */
businessInfo.isUpdate = false;
for (let key in FuHuaQiBusinessDataConfig) {
businessInfo[key] = 0;
}
await businessInfo.save();
return {isSuccess:true};
}
export async function selectBusiness(uscc:string) {
const TaskId = sysTools.getQuarterTaskId(uscc);
let businessInfo = await findBusinessByTaskId(TaskId);
/**不可以重复创建 */
if ( !businessInfo.isUpdate ) throw new BizError(ERRORENUM.请先填报数据, `孵化器 ${uscc}调用回显接口时经营数据不存在`);
if ( businessInfo.draftLock ) throw new BizError(ERRORENUM.已提交的数据不能进行操作, `孵化器 ${uscc}尝试 回显 已经提交的经营数据`);
let businessData = extractData(FuHuaQiBusinessDataInfoConfig, businessInfo, false)
return {businessData};
}
export async function updateBusiness(uscc:string, param) {
const TaskId = sysTools.getQuarterTaskId(uscc);
eccFormParam("修改孵化器季度填报", FuHuaQiBusinessDataConfig, param);
let businessInfo = await findBusinessByTaskId(TaskId);
/**不可以重复创建 */
if ( !businessInfo.isUpdate ) throw new BizError(ERRORENUM.请先填报数据, `孵化器 ${uscc}调用修改接口时经营数据不存在`);
if ( businessInfo.draftLock ) throw new BizError(ERRORENUM.已提交的数据不能进行操作, `孵化器 ${uscc}尝试 修改 已经提交的经营数据`);
/**更新状态和数据 */
for (let key in param) {
businessInfo[key] = param[key];
}
await businessInfo.save();
return {isSuccess:true};
}
\ No newline at end of file
/**
* 孵化器 机构资质
*
*/
import * as fuhuaqiData from "../../../data/fuHuaQi/fuhuaqi";
import { getI18nRegisterId } from "../../../tools/system";
import { addRegister, deleteI18nRegisterListById, findI18nRegisterListByParam, findOneI18nRegister } from "../../../data/fuHuaQi/i18nRegister";
/**
* 创建国际化登记
* @param uscc 企业统一信用代码
* @param country 国家
* @param partners 合作机构
* @param cMode 合作方式
* @param cAchievements 合作成果
* @returns
*/
export async function createI18nRegister(uscc:string, country:string, partners:string, cMode:string, cAchievements:string) {
let fuHuaQiInfo = await fuhuaqiData.findFuHuaQiByUSCC(uscc);
let id = getI18nRegisterId(uscc);
await addRegister(id, uscc, fuHuaQiInfo.name, country, partners, cMode, cAchievements);
return {isSuccess:true};
}
/**
* 修改国际化登记
* @param uscc 企业统一信用代码
* @param id 标识
* @param country 国家
* @param partners 合作机构
* @param cMode 合作方式
* @param cAchievements 合作成果
* @returns
*/
export async function updateI18nRegister(uscc:string, id:string, country:string, partners:string, cMode:string, cAchievements:string) {
let registerInfo = await findOneI18nRegister(id);
registerInfo.country = country;
registerInfo.partners = partners;
registerInfo.cMode = cMode;
registerInfo.cAchievements = cAchievements;
await registerInfo.save();
return {isSuccess:true};
}
export async function selectI18nRegisterInfo(id:string) {
let registerInfo = await findOneI18nRegister(id);
let registerData = {
country : registerInfo.country,
partners : registerInfo.partners,
cMode : registerInfo.cMode,
cAchievements : registerInfo.cAchievements,
};
return {registerData}
}
export async function deleteI18nRegisterInfo(id:string) {
await deleteI18nRegisterListById(id);
return {isSuccess:true}
}
export async function i18nRegisterListData(uscc) {
let registerList = await findI18nRegisterListByParam({uscc});
let dataList = [];
registerList.forEach(info => {
dataList.push({
id:info.id,
country:info.country,
partners:info.partners,
cMode:info.cMode,
cAchievements:info.cAchievements,
});
});
return {dataList}
}
/**
* 修改创投基金登记信息
* @param uscc
* @param isCreatePTP
* @param scalePTP
* @param isParticipateInPTP
*/
export async function updatePTPInfo(uscc:string, isCreatePTP:boolean, scalePTP:number, isParticipateInPTP:boolean) {
let fuHuaQiInfo = await fuhuaqiData.findFuHuaQiByUSCC(uscc);
fuHuaQiInfo.isCreatePTP = isCreatePTP;
fuHuaQiInfo.scalePTP = scalePTP;
fuHuaQiInfo.isParticipateInPTP = isParticipateInPTP;
await fuHuaQiInfo.save();
return {isSuccess:true};
}
export async function getFuHuaQiPTP(uscc:string) {
let fuHuaQiInfo = await fuhuaqiData.findFuHuaQiByUSCC(uscc);
let PTPInfo = {
isCreatePTP:fuHuaQiInfo.isCreatePTP,
scalePTP:fuHuaQiInfo.scalePTP,
isParticipateInPTP:fuHuaQiInfo.isParticipateInPTP,
};
return {PTPInfo};
}
export async function updateProfessionalTechnology(uscc:string, isProfessionalTechnology:boolean, professionalTechnologyName:String,
professionalTechnologyCreateTime:number, professionalTechnologyAmount:number, isCooperation:boolean, cooperationInstitutions:string) {
let fuHuaQiInfo = await fuhuaqiData.findFuHuaQiByUSCC(uscc);
fuHuaQiInfo.isProfessionalTechnology= isProfessionalTechnology;//是否专业技术平台
fuHuaQiInfo.professionalTechnologyName= professionalTechnologyName;//专业技术平台名称
fuHuaQiInfo.professionalTechnologyCreateTime= professionalTechnologyCreateTime;//时间 年份 xxxx年01月01日 的时间戳
fuHuaQiInfo.professionalTechnologyAmount= professionalTechnologyAmount;//投资金额万元
fuHuaQiInfo.isCooperation= isCooperation;//是否与第三方合作
fuHuaQiInfo.cooperationInstitutions= cooperationInstitutions;//合作机构名称
await fuHuaQiInfo.save();
return {isSuccess:true};
}
export async function getProfessionalTechnology(uscc:string) {
let fuHuaQiInfo = await fuhuaqiData.findFuHuaQiByUSCC(uscc);
let professionalTechnologyInfo = {
isProfessionalTechnology:fuHuaQiInfo.isProfessionalTechnology,
professionalTechnologyName:fuHuaQiInfo.professionalTechnologyName,
professionalTechnologyCreateTime:fuHuaQiInfo.professionalTechnologyCreateTime,
professionalTechnologyAmount:fuHuaQiInfo.professionalTechnologyAmount,
isCooperation:fuHuaQiInfo.isCooperation,
cooperationInstitutions:fuHuaQiInfo.cooperationInstitutions,
};
return { professionalTechnologyInfo };
}
\ No newline at end of file
/**
* 月度表单逻辑层
* 作者: 陈金晶
* 需求说明 1.月度填报必须填值才能提交
* 逻辑说明 1.月度表单在孵化器任务生成时一起生成
* 2.草稿锁(draftLock)默认=false draftLock=true表示这个任务被提交了 草稿锁用于判断孵化器有没有提交
......
......@@ -13,17 +13,18 @@
*/
import moment = require("moment");
import { SCOREWAYS, TASKTYPEENUM } from "../../../config/enum";
import { ERRORENUM } from "../../../config/errorEnum";
import { findEnterpriseCount, findEnterpriseListByTaskId, updateEnterpriseDraftLock } from "../../../data/enterprise/enterprise";
import { findFinancingCount, findFinancingListByTaskId, updateFinancingDraftLock } from "../../../data/fuHuaQi/monthTask/financing";
import { findAllNotDisabledFuHuaQi } from "../../../data/fuHuaQi/fuhuaqi";
import * as monthTableData from "../../../data/fuHuaQi/monthTask/monthTable";
import * as taskData from "../../../data/fuHuaQi/monthTask/task";
import { BizError } from "../../../util/bizError";
import { logHandle } from "../../../util/log";
import { getLastMonthTimeKey, getTaskId, getTaskIdByTime, getThisMonthMs, getTimeKey } from "../../../tools/system";
import * as scoreBiz from "../fuHuaQi/score";
import { QUARTERTASKTYPEENUM, SCOREWAYS, TASKTYPEENUM } from "../../../../config/enum";
import { ERRORENUM } from "../../../../config/errorEnum";
import { findEnterpriseCount, findEnterpriseListByTaskId, updateEnterpriseDraftLock } from "../../../../data/enterprise/enterprise";
import { findFinancingCount, findFinancingListByTaskId, updateFinancingDraftLock } from "../../../../data/fuHuaQi/monthTask/financing";
import { findAllNotDisabledFuHuaQi } from "../../../../data/fuHuaQi/fuhuaqi";
import * as monthTableData from "../../../../data/fuHuaQi/monthTask/monthTable";
import * as taskData from "../../../../data/fuHuaQi/monthTask/task";
import * as quarterTaskData from "../../../../data/fuHuaQi/quarterTask/quarterTask";
import { BizError } from "../../../../util/bizError";
import { logHandle } from "../../../../util/log";
import { getLastMonthTimeKey, getQuarterTaskId, getTaskId, getTaskIdByTime, getThisMonthMs, getTimeKey } from "../../../../tools/system";
import * as scoreBiz from "../score";
/**
......@@ -82,7 +83,7 @@ export async function fuHuaQiTaskList(uscc:string) {
}
}
}
return {taskList:result};
}
......@@ -256,7 +257,7 @@ export async function checkTask(uscc:string, taskType:number) {
* 系统自发
* 下发任务的同时初始化月度报表数据
*/
export async function provideTask() {
export async function provideMonthTask() {
const TimeKey = getTimeKey();
let taskCount = await taskData.findTaskCountByKey(TimeKey);
if (taskCount) {
......@@ -299,7 +300,7 @@ export async function provideTask() {
/**
* 回收任务分数
*/
export async function retrieveTask() {
export async function retrieveMonthTask() {
/**获取上个月 时间key */
let TimeKey = getLastMonthTimeKey();
let notSubmitList = await taskData.findTaskListByParam({key:TimeKey, isSubmit:false});
......
......@@ -9,53 +9,72 @@
import moment = require("moment");
import { findTaskCountByKey, findTaskListByParam } from "../data/fuHuaQi/monthTask/task";
import { getTimeKey } from "../tools/system";
import { provideTask, retrieveTask } from "./mobileFuHuaQi/fuHuaQi/task";
import { getQuarterTimeKey, getTimeKey } from "../tools/system";
import { provideMonthTask, retrieveMonthTask } from "./mobileFuHuaQi/fuHuaQi/task/monthTask";
import { findFuHuaQiList } from "../data/fuHuaQi/fuhuaqi";
import { sendTaskPointOut } from "./sms";
import { logHandle } from "../util/log";
import { createSmsPointOutData, findSmsPointOutData } from "../data/fuHuaQi/smsPointOut";
import { SMSTYPE } from "../config/enum";
import { dataDeclarationTask } from "./mobileEnterprise/quarterTask/dataDeclaration";
import { findQuarterTaskCountByParam } from "../data/fuHuaQi/quarterTask/quarterTask";
import { provideFuHuaQiQuarterTask } from "./mobileFuHuaQi/fuHuaQi/task/quarterTask";
/**
* 初始化任务
*/
export function initSystemTask() {
/**孵化器任务 */
fuHuaQiTask();
/**孵化器月度任务 */
fuHuaQiMonthTask();
setInterval(async function () {
await fuHuaQiTask();
await fuHuaQiMonthTask();
}, 3600 * 1000);
/**企业任务 */
enterpriseTask();
/**孵化器季度任务 */
fuHuaQiQuarterTask();
setInterval(async function () {
await fuHuaQiQuarterTask();
}, 3600 * 1000 * 2);
/**企业季度任务 */
enterpriseQuarterTask();
setInterval(async function () {
await enterpriseTask();
await enterpriseQuarterTask();
}, 3600 * 1000 * 2);
/**初始化短信任务 */
smsTask();
setInterval(async function () {
await smsTask();
}, 3600 * 1000);
console.log(`systemTask init success`);
console.log(`systemTask init success`);
}
/**
* 发放/回收 孵化器任务
* 发放/回收 孵化器月度任务
* @returns
*/
async function fuHuaQiTask() {
async function fuHuaQiMonthTask() {
const Key = getTimeKey();
let count = await findTaskCountByKey(Key);
if (count != 0) return;
/**生成新的任务 */
await provideTask();
await provideMonthTask();
/**回收旧任务计算分数 */
await retrieveTask();
await retrieveMonthTask();
}
/**
* 发放/回收 企业任务
* 发放/回收 企业季度任务
*/
async function enterpriseTask() {
async function enterpriseQuarterTask() {
/**不在填报月份不下发数据 */
let thisMonth = new Date().getMonth() + 1;
let tipsMonth = [1, 4, 7, 10];
......@@ -65,22 +84,10 @@ async function enterpriseTask() {
}
export function initSMSTask() {
smsTask();
setInterval(async function () {
await smsTask();
}, 3600 * 1000);
console.log(`systemTask init success`);
}
/**
* 短信任务 每月倒数第七天发送
*/
export async function smsTask() {
async function smsTask() {
let nowMs = new Date().valueOf();
let lastDate = moment(nowMs).endOf("month").format("YYYY-MM-DD");
let checkMs = moment(lastDate+' 00:00:00').subtract(7,'days').valueOf();
......@@ -123,3 +130,11 @@ export async function smsTask() {
}
}
async function fuHuaQiQuarterTask() {
const Key = getQuarterTimeKey();
let count = await findQuarterTaskCountByParam({key:Key});
if (count != 0) return;
await provideFuHuaQiQuarterTask();
}
\ No newline at end of file
......@@ -432,4 +432,20 @@ export const FuHuaQiReplenishEnterpriseBusinessDataConfig = {
BI:{type:"Number"},//营业收入
RD:{type:"Number"},//研发投入
TXP:{type:"Number"},//纳税
}
/**
* 使用端: 小程序端【孵化器入口】
* 场景: 孵化器补充经营数据
*/
export const FuHuaQiBusinessDataConfig = {
TR:{type:"Number"},//综合收入
ROR:{type:"Number"},//投资收入
RR:{type:"Number"},//租金收入
FS:{type:"Number"},//财政补贴
MIS:{type:"Number"},//其他
NP:{type:"Number"},//净利润
TP:{type:"Number"},//纳税
}
\ No newline at end of file
......@@ -3,12 +3,20 @@
* 孵化器任务填报类型
*/
export enum TASKTYPEENUM {
孵化器月度填报=1,
融资企业填报,
新注册或迁入企业登记
孵化器月度填报=1,//月度任务
融资企业填报,//月度任务
新注册或迁入企业登记//月度任务
}
/**
* 季度任务填报类型
*/
export enum QUARTERTASKTYPEENUM {
孵化器经营状况 = 4,//季度任务
}
/**
* 孵化器级别
*/
export enum FUHUAQILV {
......
......@@ -59,7 +59,12 @@ export enum ERRORENUM {
重复通过填报数据,
请先选择是否拥有,
请先关闭该资讯,
请不要重复开启资讯
请不要重复开启资讯,
该孵化器经营数据填报已存在,
未填报数据不能删除,
已提交的数据不能进行操作,
请先填报数据,
该报表需要填写本季度内容后提交
}
export enum ERRORCODEENUM {
......
......@@ -429,3 +429,16 @@ export const BusinessDataUnauditedListConfig = {
}
/**
* 使用端: 小程序端【孵化器入口】
* 场景: 孵化器经营数据回显
*/
export const FuHuaQiBusinessDataInfoConfig = {
TR:{key:"综合收入"},
ROR:{key:"投资收入"},
RR:{key:"租金收入"},
FS:{key:"财政补贴"},
MIS:{key:"其他"},
NP:{key:"净利润"},
TP:{key:"纳税"},
}
\ No newline at end of file
......@@ -88,6 +88,7 @@ const enterpriseSchema = new Schema({
tipsQualification:{type:Boolean, default:false},//标识-企业资质
tipsIntellectualProperty:{type:Boolean, default:false},//标识-知识产权
tipsFinancingInfo:{type:Boolean, default:false},//标识-企业融资
});
var enterpriseModel;
......
......@@ -50,13 +50,6 @@ const fuHuaQiSchema = new Schema({
foundingTeamType:{type:Number, default:1},//创业团队类型
operationModel:{type:[Number], default:[]},//运营模式
operationModelDes:String,//运营模式描述
/**专业技术平台 */
isProfessionalTechnology:Boolean,//是否专业技术平台
professionalTechnologyName:String,//专业技术平台名称
professionalTechnologyCreateTime:Number,//时间 年份 xxxx年01月01日 的时间戳
professionalTechnologyAmount:Number,//投资金额 万元
isCooperation:{type:Boolean, default:false},//是否与第三方合作
cooperationInstitutions:{type:String, default:""},//合作机构名称
/** 累计孵化企业数量*/
fuHuaEnterpriseTotal:{type:Number, default:0},//累计孵化企业数量 初始值
/**用户相关 */
......@@ -71,6 +64,17 @@ const fuHuaQiSchema = new Schema({
bindId:{type:String},//绑定标识
/**2.3加入字段 */
introduction:{type:String, default:""},//孵化器简介
/**3.1 创投基金相关*/
isCreatePTP:Boolean,//是否成立创投基金
scalePTP:Number,//基金规模
isParticipateInPTP:Boolean,//是否参与创投基金
/**专业技术平台 */
isProfessionalTechnology:Boolean,//是否专业技术平台
professionalTechnologyName:String,//专业技术平台名称
professionalTechnologyCreateTime:Number,//时间 年份 xxxx年01月01日 的时间戳
professionalTechnologyAmount:Number,//投资金额 万元
isCooperation:{type:Boolean, default:false},//是否与第三方合作
cooperationInstitutions:{type:String, default:""},//合作机构名称
});
var fuHuaQiModel;
......
/**
* 国际化登记
*
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const i18nRegisterSchema = new Schema({
id:{type:String, index:true},//标识
uscc:{type:String, index:true},//孵化器uscc
name:{type:String, index:true},//运营机构名称
country:String,//国家
partners:String,//合作机构
cMode:String,//合作方式
cAchievements:String,//合作成果
});
var i18nRegisterModel;
export function initModel(){
i18nRegisterModel = baseDB.model('fuHuaQiI18nRegister', i18nRegisterSchema);
i18nRegisterModel.selectOnceData = async function (paramater:object) {
let selectInfo = await i18nRegisterModel.findOne(paramater).exec();
if (selectInfo) {
if (!selectInfo.runSave) {
selectInfo.runSave = selectInfo.save;
selectInfo.save = save.bind(selectInfo)
}
}
return selectInfo;
}
}
export async function save(throwError=false) {
if (!this.isModified()) return;
await this.runSave({validateBeforeSave:false}).catch(err=>{
console.log(err);
});
}
export async function findOneI18nRegister(id:string) {
return await i18nRegisterModel.selectOnceData({id});
}
export async function findI18nRegisterListByParam(param) {
return await i18nRegisterModel.find(param);
}
export async function deleteI18nRegisterListById(id:string) {
await i18nRegisterModel.deleteOne({id});
}
export async function addRegister(id:string, uscc:string, name:string, country:string, partners:string, cMode:string, cAchievements:string) {
let addInfo = {id, uscc, name, country, partners, cMode, cAchievements};
await i18nRegisterModel.create(addInfo);
}
......@@ -6,12 +6,16 @@
* 任务提交之后将不会出现在列表中 2023-02-06 确定此需求
* 任务不能提交后不能修改和删除 2023-02-06 确定此需求
* type 依赖枚举
*
* 注释 1.key 的规则是 YYYYMM 年月为发放任务时的 年月
* 2.month为 数据的月份,例如 key = 20235 那 month = 4, 年份(year)同理
*
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../../db/mongo/dbInit';
const fuHuaQiTaskSchema = new Schema({
key:{type:Number, index:true},//任务标识 格式为:YYYYMM
key:{type:Number, index:true},//任务标识 格式为:YYYYMM
type: {type:Number,index:true},//任务类型
taskId:String,//任务id
fuHuaQiUscc:String,//任务所属孵化器id
......
/**
* 孵化器经营数据填报
*
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../../db/mongo/dbInit';
const fuHuaQiBusinessSchema = new Schema({
taskId:{type:String, index:true},//任务id
name:String,//任务名称
fuHuaQiUscc:String,//任务所属孵化器id
TR:{type:Number, default:0},//综合收入
ROR:{type:Number, default:0},//投资收入
RR:{type:Number, default:0},//租金收入
FS:{type:Number, default:0},//财政补贴
MIS:{type:Number, default:0},//其他
NP:{type:Number, default:0},//净利润
TP:{type:Number, default:0},//纳税
/**不下发字段 */
draftLock:{type:Boolean, default:false},//草稿锁,true为提交之后,false为草稿
quarter:{type:Number, index:true},//数据填报季度
year:{type:Number, index:true},//数据填报年份
isUpdate:{type:Boolean, default:false},
submitTime:Number,//提交时间
});
var fuHuaQiBusinessModel;
export function initModel(){
fuHuaQiBusinessModel = baseDB.model('fuHuaQiBusiness', fuHuaQiBusinessSchema);
fuHuaQiBusinessModel.selectOnceData = async function (paramater:object) {
let selectInfo = await fuHuaQiBusinessModel.findOne(paramater).exec();
if (selectInfo) {
if (!selectInfo.runSave) {
selectInfo.runSave = selectInfo.save;
selectInfo.save = save.bind(selectInfo)
}
}
return selectInfo;
}
}
export async function save(throwError=false) {
if (!this.isModified()) return;
await this.runSave({validateBeforeSave:false}).catch(err=>{
console.log(err);
});
}
/**
* 创建季度任务
* @param tableList 任务列表
*/
export async function createBusinessToList(tableList:object) {
await fuHuaQiBusinessModel.insertMany(tableList);
}
export async function findBusinessByTaskId(taskId:string) {
return await fuHuaQiBusinessModel.selectOnceData({taskId});
}
export async function findBusinessListByTaskIdAndUpdate(taskId:string, isUpdate:boolean) {
return await fuHuaQiBusinessModel.find({taskId, isUpdate});
}
\ No newline at end of file
/**
* 孵化器季度任务
*
* 标识 key格式为YYYY0quarter 其含义为任务生成时的年和季度
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../../db/mongo/dbInit';
const monthTableSchema = new Schema({
key:{type:Number, index:true},//任务标识 格式为:YYYYMM
const quarterTaskSchema = new Schema({
key:{type:Number, index:true},//任务标识 格式为:YYYY0quarter 这里和月度任务做区分
type: {type:Number,index:true},//任务类型
taskId:String,//任务id
fuHuaQiUscc:String,//任务所属孵化器id
......@@ -19,11 +19,11 @@ const monthTableSchema = new Schema({
submitCount:{type:Number, default:0},//提交数量 默认0
});
var monthTableModel;
var quarterTaskModel;
export function initModel(){
monthTableModel = baseDB.model('monthTable', monthTableSchema);
monthTableModel.selectOnceData = async function (paramater:object) {
let selectInfo = await monthTableModel.findOne(paramater).exec();
quarterTaskModel = baseDB.model('fuHuaQiQuarterTask', quarterTaskSchema);
quarterTaskModel.selectOnceData = async function (paramater:object) {
let selectInfo = await quarterTaskModel.findOne(paramater).exec();
if (selectInfo) {
if (!selectInfo.runSave) {
selectInfo.runSave = selectInfo.save;
......@@ -38,4 +38,34 @@ export async function save(throwError=false) {
await this.runSave({validateBeforeSave:false}).catch(err=>{
console.log(err);
});
}
\ No newline at end of file
}
export async function findQuarterTaskByParam(param) {
return await quarterTaskModel.find(param);
}
export async function findQuarterTaskByTaskIdAndType(taskId:string, type:number) {
return await quarterTaskModel.selectOnceData({taskId, type});
}
export async function findQuarterTaskMapTypeIsKeyByParam(taskId:string) {
let result = await quarterTaskModel.find({taskId});
let map = {};
result.forEach(info => {
map[info.type] = info;
});
return map;
}
export async function findQuarterTaskCountByParam(param) {
return await quarterTaskModel.find(param).count();
}
/**
* 创建季度任务
* @param tableList 任务列表
*/
export async function createQuarterTaskToList(tableList:object) {
await quarterTaskModel.insertMany(tableList);
}
......@@ -3,7 +3,10 @@ import * as fuhuaqiinModel from "../../data/fuHuaQi/fuhuaqi";
import * as enterpriseinModel from "../../data/enterprise/enterprise";
import * as financinginModel from "../../data/fuHuaQi/monthTask/financing";
import * as monthTableModel from "../../data/fuHuaQi/monthTask/monthTable";
import * as guanweihuiModel from "../../data/guanWeiHui/guanweihui";
import * as fuHuaQiBusinessDataModel from "../../data/fuHuaQi/quarterTask/businessData";
import * as fuHuaQiQuarterTaskModel from "../../data/fuHuaQi/quarterTask/quarterTask";
import * as scoreModel from "../../data/fuHuaQi/score";
import * as scoreLogModel from "../../data/fuHuaQi/scoreLog";
import * as codeModel from "../../data/fuHuaQi/code";
......@@ -15,6 +18,9 @@ import * as replenishModel from "../../data/enterprise/replenish";
import * as teamModel from "../../data/enterprise/quarterTask/team";
import * as initialTeamModel from "../../data/enterprise/initialTeam";
import * as guanweihuiModel from "../../data/guanWeiHui/guanweihui";
import * as informationModel from "../../data/guanWeiHui/information";
export async function initTable() {
taskinModel.initModel();
......@@ -23,6 +29,7 @@ export async function initTable() {
financinginModel.initModel();
monthTableModel.initModel();
guanweihuiModel.initModel();
informationModel.initModel();
scoreModel.initModel();
scoreLogModel.initModel();
codeModel.initModel();
......@@ -33,4 +40,6 @@ export async function initTable() {
teamModel.initModel();
replenishModel.initModel();
initialTeamModel.initModel();
fuHuaQiBusinessDataModel.initModel();
fuHuaQiQuarterTaskModel.initModel();
}
\ No newline at end of file
import { initSMS } from "./biz/sms";
import { initSystemTask, initSMSTask } from "./biz/systemTask";
import { initSystemTask } from "./biz/systemTask";
import { initConfig, systemConfig} from "./config/serverConfig";
import { initDB } from "./db/mongo/dbInit";
import { httpServer } from "./net/http_server";
......@@ -16,8 +16,6 @@ async function lanuch() {
await initSystemTask();
/**初始化腾讯云短信配置 */
await initSMS();
/**初始化短信任务 */
await initSMSTask();
/**创建http服务 */
httpServer.createServer(systemConfig.port);
......
......@@ -5,7 +5,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 taskBiz from '../../biz/mobileFuHuaQi/fuHuaQi/task/monthTask';
import * as provideBiz from '../../biz/admin/provide';
import { getTimeKey } from '../../tools/system';
import { checkGuanWeiHuiToken, checkInterior } from '../../middleware/user';
......
......@@ -82,7 +82,12 @@ async function infoInformation(req, res) {
* @param res
*/
async function listInformation(req, res) {
let data = await informationBiz.selectInformation();
let reqConf = {
page:"Number", selectTitle:"String", createTime:"Number", state:"Number"
};
const NotMustHaveKeys = ["selectTitle", "createTime", "state"];
let { selectTitle, createTime, state, page } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await informationBiz.selectInformation(selectTitle, createTime, state, page);
res.success(data);
}
......
/**
* 小程序端 孵化器入口 经营数据报表功能路由
*/
import * as asyncHandler from 'express-async-handler';
import * as fuHuaQiBusinessBiz from '../../biz/mobileFuHuaQi/fuHuaQi/fuHuaQiBusiness';
import { eccReqParamater } from '../../util/verificationParam';
import { checkFuHuaQiToken } from '../../middleware/user';
export function setRouter(httpServer) {
httpServer.post('/fuhuaqi/business/addreport', checkFuHuaQiToken, asyncHandler(addreportBusiness));
httpServer.post('/fuhuaqi/business/updatereport', checkFuHuaQiToken, asyncHandler(updatereportBusiness));
httpServer.post('/fuhuaqi/business/deletereport', checkFuHuaQiToken, asyncHandler(deletereportBusiness));
httpServer.post('/fuhuaqi/business/select', checkFuHuaQiToken, asyncHandler(selectBusiness));
}
/**
* 添加孵化器经营数据
* @param req
* @param res
*/
async function addreportBusiness(req, res) {
let reqConf = {form: 'Object' };
let { form } = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let monthInfo = fuHuaQiBusinessBiz.createBusiness(Uscc, form);
res.success(monthInfo);
}
/**
* 修改孵化器经营数据
* @param req
* @param res
*/
async function updatereportBusiness(req, res) {
let reqConf = {form: 'Object' };
let { form } = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let monthInfo = fuHuaQiBusinessBiz.updateBusiness(Uscc, form);
res.success(monthInfo);
}
/**
* 删除孵化器经营数据
* @param req
* @param res
*/
async function deletereportBusiness(req, res) {
const Uscc = req.headers.uscc;
let monthInfo = fuHuaQiBusinessBiz.deleteBusiness(Uscc);
res.success(monthInfo);
}
/**
* 回显 孵化器经营数据
* @param req
* @param res
*/
async function selectBusiness(req, res) {
const Uscc = req.headers.uscc;
let monthInfo = fuHuaQiBusinessBiz.selectBusiness(Uscc);
res.success(monthInfo);
}
......@@ -6,7 +6,8 @@
import * as asyncHandler from 'express-async-handler';
import * as baseBiz from '../../biz/mobileFuHuaQi/fuHuaQi/base';
import * as taskBiz from '../../biz/mobileFuHuaQi/fuHuaQi/task';
import * as taskBiz from '../../biz/mobileFuHuaQi/fuHuaQi/task/monthTask';
import * as quarterTaskBiz from '../../biz/mobileFuHuaQi/fuHuaQi/task/quarterTask';
import * as scoreBiz from '../../biz/mobileFuHuaQi/fuHuaQi/score';
import { eccReqParamater } from '../../util/verificationParam';
import { checkFuHuaQiToken } from '../../middleware/user';
......@@ -23,7 +24,12 @@ export function setRouter(httpServer) {
httpServer.post('/fuhuaqi/task/list', checkFuHuaQiToken, asyncHandler(taskList));//待办任务
httpServer.post('/fuhuaqi/task/submit', checkFuHuaQiToken, asyncHandler(submitTask));//提交待办任务
httpServer.post('/fuhuaqi/task/completedlist', checkFuHuaQiToken, asyncHandler(completedList));//已办任务
httpServer.post('/fuhuaqi/task/pastduelist', checkFuHuaQiToken, asyncHandler(pastDueList));//已办任务
httpServer.post('/fuhuaqi/task/pastduelist', checkFuHuaQiToken, asyncHandler(pastDueList));//过期任务
/** 周期任务 */
httpServer.post('/fuhuaqi/quartertask/list', checkFuHuaQiToken, asyncHandler(quarterTaskList));//待办任务
httpServer.post('/fuhuaqi/quartertask/submit', checkFuHuaQiToken, asyncHandler(submitQuarterTask));//提交待办任务
httpServer.post('/fuhuaqi/quartertask/completedlist', checkFuHuaQiToken, asyncHandler(quarterTaskCompletedList));//已办任务
httpServer.post('/fuhuaqi/quartertask/pastduelist', checkFuHuaQiToken, asyncHandler(quarterTaskPastDueList));//过期任务
/**分数 */
httpServer.post('/fuhuaqi/score/ranklist', checkFuHuaQiToken, asyncHandler(scoreRankList));
httpServer.post('/fuhuaqi/score/log', checkFuHuaQiToken, asyncHandler(scoreLog));
......@@ -187,4 +193,71 @@ async function scoreRankList(req, res) {
const Uscc = req.headers.uscc;
let result = await scoreBiz.rankList(Uscc);
res.success(result);
}
\ No newline at end of file
}
/**
* 季度任务列表
* 3.1
* @param req
* @param res
*/
async function quarterTaskList(req, res) {
const Uscc = req.headers.uscc;
let taskListObj = await quarterTaskBiz.fuHuaQiQuarterTaskList(Uscc);
res.success(taskListObj);
}
/**
* 季度任务 提交任务
* 3.1
* @param req
* @param res
*/
async function submitQuarterTask(req, res) {
let reqConf = {taskType:'Number'};
let { taskType } = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let result = await quarterTaskBiz.checkTask(Uscc, taskType);
res.success(result);
}
/**
* 季度任务 已办任务
* 3.1
* @param req
* @param res
*/
async function quarterTaskCompletedList(req, res) {
let reqConf = {selectTime:'Number'};
let { selectTime } = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let result = await quarterTaskBiz.fuHuaQiQuarterCompletedTaskList(Uscc, selectTime);
res.success(result);
}
/**
* 季度任务 过期任务
* 3.1
* @param req
* @param res
*/
async function quarterTaskPastDueList(req, res) {
let reqConf = {selectTime:'Number'};
let { selectTime } = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let result = await quarterTaskBiz.fuHuaQiQuarterPastdueTaskList(Uscc, selectTime);
res.success(result);
}
/**
* 机构性质 主要逻辑
*/
import * as asyncHandler from 'express-async-handler';
import * as institutionalNatureBiz from '../../biz/mobileFuHuaQi/fuHuaQi/institutionalNature';
import { checkFuHuaQiToken } from '../../middleware/user';
import { eccReqParamater } from '../../util/verificationParam';
export function setRouter(httpServer) {
/** 任务 */
httpServer.post('/fuhuaqi/institutionalnature/i18n/add', checkFuHuaQiToken, asyncHandler(addRegister));
httpServer.post('/fuhuaqi/institutionalnature/i18n/update', checkFuHuaQiToken, asyncHandler(updateRegister));
httpServer.post('/fuhuaqi/institutionalnature/i18n/info', checkFuHuaQiToken, asyncHandler(infoRegister));
httpServer.post('/fuhuaqi/institutionalnature/i18n/list', checkFuHuaQiToken, asyncHandler(listRegister));
httpServer.post('/fuhuaqi/institutionalnature/i18n/delete', checkFuHuaQiToken, asyncHandler(deleteRegister));
/**创投基金 */
httpServer.post('/fuhuaqi/institutionalnature/ptp/info', checkFuHuaQiToken, asyncHandler(PTPInfo));
httpServer.post('/fuhuaqi/institutionalnature/ptp/update', checkFuHuaQiToken, asyncHandler(updatePTP));
/**技术专业平台 */
httpServer.post('/fuhuaqi/institutionalnature/professionaltechnology/info', checkFuHuaQiToken, asyncHandler(professionalTechnologyInfo));
httpServer.post('/fuhuaqi/institutionalnature/professionaltechnology/update', checkFuHuaQiToken, asyncHandler(updateProfessionalTechnology));
}
/**
* 创建 国际化登记
* @param req
* @param res
*/
async function addRegister(req, res) {
let reqConf = {country:"String", partners:"String", cMode:"String", cAchievements:"String"};
let { country, partners, cMode, cAchievements } = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let result = await institutionalNatureBiz.createI18nRegister(Uscc, country, partners, cMode, cAchievements);
res.success(result);
}
/**
* 修改 国际化登记
* @param req
* @param res
*/
async function updateRegister(req, res) {
let reqConf = {id:"String", country:"String", partners:"String", cMode:"String", cAchievements:"String"};
let { country, partners, cMode, cAchievements, id } = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let result = await institutionalNatureBiz.updateI18nRegister(Uscc, id, country, partners, cMode, cAchievements);
res.success(result);
}
/**
* 回显 国际化登记
* @param req
* @param res
*/
async function infoRegister(req, res) {
let reqConf = {id: 'String' };//这里可以填0
let { id } = eccReqParamater(reqConf, req.body);
let result = await institutionalNatureBiz.selectI18nRegisterInfo(id);
res.success(result);
}
/**
* 查询列表 国际化登记
* @param req
* @param res
*/
async function listRegister(req, res) {
const Uscc = req.headers.uscc;
let result = await institutionalNatureBiz.i18nRegisterListData(Uscc);
res.success(result);
}
/**
* 删除 国际化登记
* @param req
* @param res
*/
async function deleteRegister(req, res) {
let reqConf = {id: 'String' };//这里可以填0
let { id } = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let result = await institutionalNatureBiz.deleteI18nRegisterInfo(id);
res.success(result);
}
/**
* 回显 创投基金
* @param req
* @param res
*/
async function PTPInfo(req, res) {
const Uscc = req.headers.uscc;
let result = await institutionalNatureBiz.getFuHuaQiPTP(Uscc);
res.success(result);
}
/**
* 修改 创投基金
* @param req
* @param res
*/
async function updatePTP(req, res) {
let reqConf = {isCreatePTP: 'Boolean', scalePTP:'Number', isParticipateInPTP:'Boolean' };//这里可以填0
let { isCreatePTP, scalePTP, isParticipateInPTP } = eccReqParamater(reqConf, req.body, ["scalePTP", "isParticipateInPTP"]);
if (isCreatePTP) eccReqParamater(reqConf, req.body, []);
const Uscc = req.headers.uscc;
let result = await institutionalNatureBiz.updatePTPInfo(Uscc, isCreatePTP, scalePTP, isParticipateInPTP);
res.success(result);
}
/**
* 回显 技术专业平台
* @param req
* @param res
*/
async function professionalTechnologyInfo(req, res) {
const Uscc = req.headers.uscc;
let result = await institutionalNatureBiz.getProfessionalTechnology(Uscc);
res.success(result);
}
/**
* 修改 技术专业平台
* @param req
* @param res
*/
async function updateProfessionalTechnology(req, res) {
let reqConf = {
isProfessionalTechnology:"Boolean", professionalTechnologyName:"String",
professionalTechnologyCreateTime:"Number", professionalTechnologyAmount:"Number", isCooperation:"Boolean", cooperationInstitutions:"String"
};
let skipList = ["professionalTechnologyName", "professionalTechnologyCreateTime", "professionalTechnologyAmount", "isCooperation", "cooperationInstitutions"];
let { isProfessionalTechnology, professionalTechnologyName, professionalTechnologyCreateTime, professionalTechnologyAmount, isCooperation, cooperationInstitutions} = eccReqParamater(reqConf, req.body, skipList);
if (isProfessionalTechnology) eccReqParamater(reqConf, req.body, []);
const Uscc = req.headers.uscc;
let result = await institutionalNatureBiz.updateProfessionalTechnology(Uscc, isProfessionalTechnology, professionalTechnologyName, professionalTechnologyCreateTime, professionalTechnologyAmount, isCooperation, cooperationInstitutions);
res.success(result);
}
......@@ -9,6 +9,8 @@ import * as mobileClientFinancingRouters from './mobileClient/financing';
import * as mobileClientFuHuaQiRouters from './mobileClient/fuHuaQi';
import * as mobileClientMonthRouters from './mobileClient/month';
import * as mobileClientUserRouters from './mobileClient/user';
import * as mobileClientBusinessRouters from './mobileClient/business';
import * as institutionalNatureRouters from './mobileClient/institutionalNature';
import * as adminEnterpriseRouters from './admin/enterprise';
import * as adminFuHuaQiRouters from './admin/fuHuaQi';
......@@ -35,7 +37,9 @@ export function setRouter(httpServer){
mobileClientFinancingRouters.setRouter(httpServer);
mobileClientFuHuaQiRouters.setRouter(httpServer);
mobileClientMonthRouters.setRouter(httpServer);
mobileClientBusinessRouters.setRouter(httpServer);
mobileClientUserRouters.setRouter(httpServer);
institutionalNatureRouters.setRouter(httpServer);
/**管理后台端 入口路由 */
adminEnterpriseRouters.setRouter(httpServer);
adminFuHuaQiRouters.setRouter(httpServer);
......
......@@ -20,6 +20,27 @@ export function getTaskId(uscc:string) {
return `${uscc}${getTimeKey()}`;
}
/**
* 生成季度任务id
* 自动获取上一个季度
* @param uscc 企业标识
* @returns
*/
export function getQuarterTaskId(uscc:string) {
let thisQuarter = moment().quarter();//当月填报季度
return `${uscc}${new Date().getFullYear()}0${thisQuarter}`;
}
export function getQuarterTimeKey() {
let thisQuarter = moment().quarter();//当月填报季度
return parseInt(`${new Date().getFullYear()}0${thisQuarter}`);
}
export function getQuarterTaskIdByTime(uscc:string, timeMs:number) {
return `${uscc}${new Date(timeMs).getFullYear()}${moment(timeMs).quarter() }`;
}
/**
* 根据时间生成任务id
......@@ -170,7 +191,7 @@ export function getSMSCode() {
/**
* 获取融资id
* 生成融资id
* @param uscc
* @returns
*/
......@@ -180,7 +201,7 @@ export function getFinancingId(uscc) {
/**
* 获取创始团队成员id
* 生成创始团队成员id
* @param uscc
* @param name
* @returns
......@@ -189,6 +210,31 @@ export function getInitialTeamMemberId(uscc:string, name:string) {
return md5(`${uscc}${name}${Math.ceil(Math.ceil(Math.random() * 1000000))}`);
}
/**
* 生成 资讯id
* @returns
*/
export function getInformationId() {
return md5(`${Math.ceil(Math.ceil(Math.random() * 1000000))}${new Date().valueOf() }${Math.ceil(Math.ceil(Math.random() * 1000000))}`);
}
/**
* 获取上一个季度 年和季度
* @returns declarationYear:数据填报年 declarationQuarter:数据填报季度
*/
export function getLastQuarter() {
let thisYear = new Date().getFullYear();
let thisQuarter = moment().quarter();//当月填报季度
if ( (thisQuarter - 1) < 1 ) {
thisYear = moment().subtract(1, 'years').year();
thisQuarter = 4;
} else thisQuarter = thisQuarter - 1;
return {year:thisYear, quarter:thisQuarter};
}
export function getI18nRegisterId(uscc:string) {
return md5(`${uscc}${new Date().valueOf() }${Math.ceil(Math.ceil(Math.random() * 1000000))}`);
}
\ 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