Commit ecb99a77 by lixinming

3.0修改 企业填报任务逻辑

parent e5934f6c
......@@ -7,17 +7,18 @@
*/
import moment = require("moment");
import { createBusinessData, findBusinessDataByTimeAndUscc, findNotSubmitBusinessDataByTimeAndUscc } from "../../data/enterprise/businessdata";
import { addTeamData, findNotSubmitTeamByUsccAndTime, findTeamByUsccAndTime } from "../../data/enterprise/team";
import { addManyBusinessData, findBusinessDataByTimeAndUscc, findBusinessDataCountByTime, findNotSubmitBusinessDataByTimeAndUscc } from "../../data/enterprise/businessdata";
import { addManyTeamData, addTeamData, findNotSubmitTeamByUsccAndTime, findTeamByUsccAndTime, findTeamDataCountByTime } from "../../data/enterprise/team";
import { changeEnumValue, eccEnumValue } from "../../util/verificationEnum";
import { ENTERPRISEDECLARATIONTYPE } from "../../config/enum";
import { ENTERPRISEDECLARATIONTYPE, FUHUASTATE } from "../../config/enum";
import { BizError } from "../../util/bizError";
import { ERRORENUM } from "../../config/errorEnum";
import { eccFormParam } from "../../util/verificationParam";
import { EnterpriseAddTeamDataConfig } from "../../config/eccFormParamConfig";
import { EnterpriseTeamConfig } from "../../config/splitResultConfig";
import { checkChange, extractData } from "../../util/piecemeal";
import { findEnterpriseByUscc } from "../../data/enterprise/enterprise";
import { findEnterpriseByUscc, findEnterpriseList } from "../../data/enterprise/enterprise";
import { logHandle } from "../../util/log";
/** ----------------------------------------------------- 通用方法 start -------------------------------------- */
......@@ -123,15 +124,16 @@ export async function completedList(uscc:string, year:number, quarter:number) {
let dataList = [];
let title = getDeclarationChName(quarter);
if (businessDataInfo) {
if (businessDataInfo.isSubmit) {
dataList.push({
type:changeEnumValue(ENTERPRISEDECLARATIONTYPE, ENTERPRISEDECLARATIONTYPE.经营状况),
title,
subTitle:`${title}经营状况填报`
});
}
if (teamsDataInfo) {
if (teamsDataInfo.isSubmit) {
dataList.push(
{
type:changeEnumValue(ENTERPRISEDECLARATIONTYPE, ENTERPRISEDECLARATIONTYPE.团队信息),
......@@ -156,15 +158,16 @@ export async function addBusinessData(uscc:string, BI:number, RD:number, TXP:num
if(!isInTime()) throw new BizError(ERRORENUM.不在填报范围之内, `${uscc}不在时间范围内提交申报`);
let {declarationQuarter, declarationYear} = getDeclarationTime();
let enterpriseInfo = await findEnterpriseByUscc(uscc);
let businessDataInfo = await findBusinessDataByTimeAndUscc(uscc, declarationYear, declarationQuarter);
if (businessDataInfo && businessDataInfo.year) throw new BizError(ERRORENUM.请勿重复提交填报数据, `${uscc}重复的提交了经营数据`);
await createBusinessData(uscc, declarationYear, declarationQuarter, BI, RD, TXP, enterpriseInfo.name);
if (businessDataInfo.isSubmit || businessDataInfo.fhqIsSubmit) throw new BizError(ERRORENUM.请勿重复提交填报数据, `${uscc}重复的提交了经营数据`);
businessDataInfo.BI = BI;
businessDataInfo.RD = RD;
businessDataInfo.TXP = TXP;
await businessDataInfo.save();
return {isSuccess:true};
}
......@@ -182,7 +185,7 @@ export async function updateBusinessData(uscc:string, BI:number, RD:number, TXP:
let {declarationQuarter, declarationYear} = getDeclarationTime();
let businessDataInfo = await findBusinessDataByTimeAndUscc(uscc, declarationYear, declarationQuarter);
if (!businessDataInfo || !businessDataInfo.year) throw new BizError(ERRORENUM.未提交填报数据不能修改, `${uscc}修改前库里并没有创建数据`);
if (!businessDataInfo.isSubmit && !businessDataInfo.fhqIsSubmit) throw new BizError(ERRORENUM.未提交填报数据不能修改, `${uscc}修改前库里并没有创建数据`);
businessDataInfo.BI = BI;
businessDataInfo.RD = RD;
......@@ -225,18 +228,23 @@ export async function businessInfo(uscc:string) {
*/
export async function addTeamInfo(uscc:string, form) {
if(!isInTime()) throw new BizError(ERRORENUM.不在填报范围之内, `${uscc}不在时间范围内提交申报`);
eccFormParam("企业申报团队信息数据", EnterpriseAddTeamDataConfig, form);
let {declarationQuarter, declarationYear} = getDeclarationTime();
let teamInfo = await findTeamByUsccAndTime(uscc, declarationYear, declarationQuarter);
if (teamInfo && teamInfo.year) throw new BizError(ERRORENUM.请勿重复提交填报数据, `${uscc}重复的提交了经营数据`);
if (teamInfo.isSubmit || teamInfo.fhqIsSubmit) throw new BizError(ERRORENUM.请勿重复提交填报数据, `${uscc}重复创建企业申报团队信息`);
eccFormParam("企业申报团队信息数据", EnterpriseAddTeamDataConfig, form);
teamInfo.doctor = form.doctor || 0;
teamInfo.master = form.master || 0;
teamInfo.undergraduate = form.undergraduate || 0;
teamInfo.juniorCollege = form.juniorCollege || 0;
teamInfo.other = form.other || 0;
teamInfo.studyAbroad = form.studyAbroad || 0;
teamInfo.graduates = form.graduates || 0;
teamInfo.createMs = new Date().valueOf();
let addInfo = {uscc, year:declarationYear, quarters:declarationQuarter, createMs:new Date().valueOf() };
addInfo = Object.assign(addInfo, form);
await addTeamData(addInfo);
await teamInfo.save();
return {isSuccess:true};
}
......@@ -269,19 +277,20 @@ export async function getTeamInfo(uscc:string) {
*/
export async function updateTeamInfo(uscc:string, form) {
if(!isInTime()) throw new BizError(ERRORENUM.不在填报范围之内, `${uscc}不在时间范围内提交申报`);
eccFormParam("企业修改团队信息数据", EnterpriseAddTeamDataConfig, form);
let {declarationQuarter, declarationYear} = getDeclarationTime();
let teamInfo = await findTeamByUsccAndTime(uscc, declarationYear, declarationQuarter);
if (!teamInfo || !teamInfo.year) throw new BizError(ERRORENUM.未提交填报数据不能修改, `${uscc}修改前库里并没有创建数据`);
if (!teamInfo.isSubmit && !teamInfo.fhqIsSubmit) throw new BizError(ERRORENUM.未提交填报数据不能修改, `${uscc}修改前库里并没有创建数据`);
eccFormParam("企业修改团队信息数据", EnterpriseAddTeamDataConfig, form);
let changeList = checkChange(form, teamInfo);
if ( !changeList.length ) throw new BizError(ERRORENUM.数据无更新, `企业修改团队信息数据`, `${form.id}数据无更新`);
changeList.forEach(key => {
teamInfo[key] = form[key];
});
teamInfo.doctor = form.doctor || 0;
teamInfo.master = form.master || 0;
teamInfo.undergraduate = form.undergraduate || 0;
teamInfo.juniorCollege = form.juniorCollege || 0;
teamInfo.other = form.other || 0;
teamInfo.studyAbroad = form.studyAbroad || 0;
teamInfo.graduates = form.graduates || 0;
await teamInfo.save();
......@@ -294,7 +303,7 @@ export async function updateTeamInfo(uscc:string, form) {
* @param uscc 企业统一信用代码
* @param type 提交类型 参考 ENTERPRISEDECLARATIONTYPE
*/
export async function submit(uscc:string, type) {
export async function submit(uscc:string, type:number) {
eccEnumValue("企业提交数据申报", "type", ENTERPRISEDECLARATIONTYPE, type);
if(!isInTime()) throw new BizError(ERRORENUM.不在填报范围之内, `${uscc}不在时间范围内提交申报`);
......@@ -314,3 +323,47 @@ export async function submit(uscc:string, type) {
return {isSuccess:true};
}
/**
* 下发企业任务
*/
export async function dataDeclarationTask() {
let {declarationQuarter, declarationYear} = getDeclarationTime();
let teamDataCount = await findTeamDataCountByTime(declarationYear, declarationQuarter);
let businessDataCount = await findBusinessDataCountByTime(declarationYear, declarationQuarter);
if (teamDataCount >0 && businessDataCount > 0) return;
let enterpriseList = await findEnterpriseList({state:{"$n":FUHUASTATE.迁出} });
let businessList = [];
let teamList = [];
enterpriseList.forEach(info => {
let {fuHuaQiUscc, uscc, name} = info;
let isSubmit = false;
let fhqIsSubmit = false;
let businessInfo = {
year:declarationYear,
fuHuaQiUscc, uscc, name,
quarters:declarationQuarter,
BI:0, RD:0, TXP:0, createTime:0,
isSubmit, fhqIsSubmit
};
businessList.push(businessInfo);
let teamInfo = {
fuHuaQiUscc, uscc, name,
year:declarationYear, quarters:declarationQuarter,
doctor:0, master:0, undergraduate:0, juniorCollege:0, other:0, studyAbroad:0, graduates:0,
createMs:0,
isSubmit, fhqIsSubmit
};
teamList.push(teamInfo);
});
/**发放任务 */
if (businessDataCount == 0 ) await addManyBusinessData(businessList);
logHandle(`添加了${businessList.length} 经营数据任务`);
if (teamDataCount == 0 ) await addManyTeamData(teamList);
logHandle(`添加了${teamList.length} 团队数据任务`);
}
/**
* 小程序端 孵化器入口 审核相关
* 作者: lxm
*
*/
import moment = require("moment");
import { findBusinessDataByParams } from "../../../data/enterprise/businessdata";
/**
* 获取当前时间的 填报年度 和 填报季度
* 即:获取上一个季度
* @returns declarationYear:数据填报年 declarationQuarter:数据填报季度
*/
function getDeclarationTime() {
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 {declarationYear:thisYear, declarationQuarter:thisQuarter};
}
/**
* 待审核列表
* @param uscc 孵化器统一信用代码
*/
export async function unauditedList(uscc:string) {
let {declarationYear, declarationQuarter} = getDeclarationTime();
let query = {fhqIsSubmit:false, fuHuaQiUscc:uscc, year:declarationYear, quarter:declarationQuarter};
let businessDataList = await findBusinessDataByParams(query);
let dataList = [];
businessDataList.forEach(info => {
// extractData();
});
}
/**
* 已审核列表
* @param uscc 孵化器统一信用代码
* @param year 年度
* @param quarters 季度
*/
export async function auditCompletedList(uscc:string, year:number, quarters:number) {
}
\ No newline at end of file
......@@ -16,18 +16,28 @@ 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/dataDeclaration";
export function initSystemTask() {
/**孵化器任务 */
fuHuaQiTask();
setInterval(async function () {
await fuHuaQiTask();
}, 3600 * 1000);
/**企业任务 */
enterpriseTask();
setInterval(async function () {
await enterpriseTask();
}, 3600 * 1000 * 2);
console.log(`systemTask init success`);
}
/**
* 发放/回收 任务
* 发放/回收 孵化器任务
* @returns
*/
async function fuHuaQiTask() {
......@@ -42,6 +52,20 @@ async function fuHuaQiTask() {
}
/**
* 发放/回收 企业任务
*/
async function enterpriseTask() {
/**不在填报月份不下发数据 */
let thisMonth = new Date().getMonth() + 1;
let tipsMonth = [1, 4, 7, 10];
if ( tipsMonth.indexOf(thisMonth) == -1 ) return;
await dataDeclarationTask();
}
export function initSMSTask() {
......
......@@ -412,4 +412,20 @@ export const EnterpriseInitialTeamDataListConfig = {
}
/**
* 使用端: 小程序端【孵化器入口】
* 场景: 经营数据待审核列表
* 备注:
*/
export const BusinessDataUnauditedListConfig = {
id:{key:"id标识"},
type:{key:"创始团队人才类型"},
memberName:{key:"成员姓名"},
memberSex:{key:"成员性别"},
memberAge:{key:"成员年龄 出生年月时间戳"},
memberDEGREE:{key:"成员最高学历"},
memberSchool:{key:"毕业学校"},
des:{key:"履历描述"},
}
/**
* 企业经营数据
* 企业经营数据
*/
import {Schema} from 'mongoose';
......@@ -7,14 +7,16 @@ import { baseDB } from '../../db/mongo/dbInit';
const businessSchema = new Schema({
year:{type:Number, index:true},//年度
fuHuaQiUscc:{type:String, index:true},
quarters:{type:Number, index:true},//季度
uscc:{type:String, index:true},
name:{type:String, index:true},//企业名称
BI:Number,//营业收入
RD:Number,//研发投入
TXP:Number,//纳税
BI:{type:Number, default:0},//营业收入
RD:{type:Number, default:0},//研发投入
TXP:{type:Number, default:0},//纳税
createTime:Number,//填写时间
isSubmit:{type:Boolean, default:false},//是否提交
fhqIsSubmit:{type:Boolean, default:false},//孵化器点了审核通过这里就要改成ture 就不能显示了
});
var businessDataModel;
......@@ -54,14 +56,7 @@ export async function findBusinessDataByTimeAndUscc(uscc:string, year:number, qu
}
export async function findNotSubmitBusinessDataByTimeAndUscc(uscc:string, year:number, quarters:number) {
return await businessDataModel.selectOnceData({uscc, year, quarters, isSubmit:false});
}
export async function createBusinessData(uscc:string, year:number, quarters:number, BI:number, RD:number, TXP:number, name:string) {
let addInfo = {uscc, year, quarters, BI, RD, TXP, createTime:new Date().valueOf() };
await businessDataModel.create(addInfo);
return await businessDataModel.selectOnceData({uscc, year, quarters, isSubmit:false, fhqIsSubmit:false});
}
......@@ -79,4 +74,19 @@ export async function findBusinessDataByParamsToPage(param, skipNumber) {
*/
export async function findBusinessDataByParams(param) {
return await businessDataModel.find(param);
}
export async function addManyBusinessData(addList) {
await businessDataModel.insertMany(addList);
}
/**
* 查询特定时间的企业经营数据总和
* @param year 年度
* @param quarters 季度
* @returns
*/
export async function findBusinessDataCountByTime(year:number, quarters:number) {
return await businessDataModel.find({year, quarters}).count();
}
\ No newline at end of file
......@@ -68,7 +68,7 @@ const enterpriseSchema = new Schema({
tokenMs:Number,
firstLoginIsChangePwd:{type:Boolean, default:false},//首次登录是否修改密码
/**孵化状态相关 */
state:{type:Number, default: FUHUASTATE.实体孵化 },//孵化状态 遵循枚举 FUHUASTATE 值 默认实体孵化 ----2.0
state:{type:Number, default: FUHUASTATE.实体孵化, index:true },//孵化状态 遵循枚举 FUHUASTATE 值 默认实体孵化 ----2.0
virtualCause:Number,//虚拟孵化原因 遵循 VIRTUALCAUSE 的值 ----2.0
virtualCauseDes:String,//虚拟孵化描述 ----2.0
moveOutType:Number,// 迁出类型 遵循 MOVEOUTTYPE 的值 ----2.0
......
/**
* 企业投资详情表
* 企业投资详情表
* financing 确定好的数据才会到这里来
*/
......
......@@ -9,17 +9,20 @@ import { baseDB } from '../../db/mongo/dbInit';
/**团队信息 */
const teamSchema = new Schema({
uscc:{type:String, index:true},
year:Number,
quarters:Number,
doctor:Number,//博士
master:Number,//硕士
undergraduate:Number,//本科
juniorCollege:Number,//专科
other:Number,//其他
studyAbroad:Number,//留学人数
graduates:Number,//应届毕业生
fuHuaQiUscc:{type:String, index:true},
name:String,//企业名称
year:{tupe:Number, index:true},
quarters:{tupe:Number, index:true},
doctor:{type:Number, default:0},//博士
master:{type:Number, default:0},//硕士
undergraduate:{type:Number, default:0},//本科
juniorCollege:{type:Number, default:0},//专科
other:{type:Number, default:0},//其他
studyAbroad:{type:Number, default:0},//留学人数
graduates:{type:Number, default:0},//应届毕业生
createMs:Number,//填报时间
isSubmit:{type:Boolean, default:false}//是否提交
isSubmit:{type:Boolean, default:false},//是否提交
fhqIsSubmit:{type:Boolean, default:false},//孵化器点了审核通过这里就要改成ture 就不能显示了
});
var teamModel;
......@@ -54,9 +57,18 @@ export async function findTeamByUsccAndTime(uscc:string, year:number, quarters:n
return await teamModel.selectOnceData({uscc, year, quarters});
}
/**
* 查询特定时间的企业团队信息数据总和
* @param year 年度
* @param quarters 季度
* @returns
*/
export async function findTeamDataCountByTime(year:number, quarters:number) {
return await teamModel.find({year, quarters}).count();
}
export async function findNotSubmitTeamByUsccAndTime(uscc:string, year:number, quarters:number) {
return await teamModel.selectOnceData({uscc, year, quarters, isSubmit:false});
return await teamModel.selectOnceData({uscc, year, quarters, isSubmit:false, fhqIsSubmit:false});
}
......@@ -72,4 +84,8 @@ export async function findEnterpriseNewTeamData(uscc:string) {
export async function addTeamData(addInfo) {
await teamModel.create(addInfo);
}
export async function addManyTeamData(addList) {
await teamModel.insertMany(addList);
}
\ 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