Commit 52ff4ada by chenjinjing

no message

parent 5bf23800
...@@ -81,19 +81,31 @@ export async function enterpriseServiceOption(esId:string, fangKui:string) { ...@@ -81,19 +81,31 @@ export async function enterpriseServiceOption(esId:string, fangKui:string) {
*/ */
export async function enterpriseServiceEnd(esId:string, outcome:number, desc:string) { export async function enterpriseServiceEnd(esId:string, outcome:number, desc:string) {
let selectParam:any = {esId}; let selectParam:any = {esId};
let filesList = ["esId", "eId"]; let filesList = ["esId", "eId", "needCategory", "applyTime"];
let resInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业服务表, selectParam, filesList); let resInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业服务表, selectParam, filesList);
if ( !resInfo || !resInfo.esId) { if ( !resInfo || !resInfo.esId) {
throw new BizError(ERRORENUM.数据不存在); throw new BizError(ERRORENUM.数据不存在);
} }
let updateInfo = {outcome, followUpStatus:enumConfig.FOLLOWUPSTATUS.已完成, desc, resolveTime:getMySqlMs()}; let resolveTime = getMySqlMs();
let updateInfo = {outcome, followUpStatus:enumConfig.FOLLOWUPSTATUS.已完成, desc, resolveTime};
await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.企业服务表,updateInfo, {esId}); await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.企业服务表,updateInfo, {esId});
let applyTime = moment(resInfo.applyTime).format("YYYY-MM-DD");
let needCategory = changeEnumValue(enumConfig.NEEDCATEGORY, resInfo.needCategory);
let resolveTimeStr = moment(resolveTime).format("YYYY-MM-DD");
//发送邮件 //发送邮件
let mailStr = ""; let mailStr = "";
mailStr +=`<p>您的服务处理结果为:${changeEnumValue(enumConfig.OUTCOME, outcome)}</p>`; mailStr += `<p>贵公司提交的**${needCategory}**申请,已于${resolveTimeStr}办理完毕,相关结果如下:</p>`;
mailStr +=`<p>${desc}</p>`; mailStr += `<p><span style='font-weight: 700;'>📌 办结事项详情:</span></p>`;
mailStr += `<ul>`;
mailStr += `<li><span style='font-weight: 700;'>服务事项名称:</span>${needCategory}</li>`;
mailStr += `<li><span style='font-weight: 700;'>提交时间:</span>${applyTime}</li>`;
mailStr += `<li><span style='font-weight: 700;'>办结时间:</span>${resolveTimeStr}</li>`;
mailStr += `<li><span style='font-weight: 700;'>办理结果:</span>${desc}</li>`;
mailStr += `</ul>`;
mailStr += `<p>如涉及提交实物材料(如:营业执照等),携带公司证明材料前往4-1201。</p>`;
mailStr += `<p>如您对上述办理情况有任何疑问或后续服务需求,欢迎随时与我们联系。</p>`;
mailStr += `<p>感谢贵公司对【羽翼孵化器】的信任与支持!</p>`;
await systemSendMail(resInfo.eId, enumConfig.MAILTYPE.结束企业服务, mailStr ); await systemSendMail(resInfo.eId, enumConfig.MAILTYPE.结束企业服务, mailStr );
return { isSuccess:true }; return { isSuccess:true };
......
...@@ -6,7 +6,7 @@ import moment = require("moment"); ...@@ -6,7 +6,7 @@ import moment = require("moment");
import { OPERATIONALDATATYPE, TABLEID, TABLENAME } from "../config/enum/dbEnum"; import { OPERATIONALDATATYPE, TABLEID, TABLENAME } from "../config/enum/dbEnum";
import { BUILDING, CHANGESTATE, CHANGETYPE, DEGREE, EMIGRATIONTYPE, FUHUASTATE, INCOME, INDUSTRY, OFFLINEPROMOTION, ONLINEPROMOTION, PROMOTIONTYPE, STATE } from "../config/enum/enum"; import { BUILDING, CHANGESTATE, CHANGETYPE, DEGREE, EMIGRATIONTYPE, FUHUASTATE, INCOME, INDUSTRY, OFFLINEPROMOTION, ONLINEPROMOTION, PROMOTIONTYPE, STATE } from "../config/enum/enum";
import { operationalData, selectData, selectManyTableData } from "../data/operationalData"; import { operationalData, selectData, selectManyTableData } from "../data/operationalData";
import { getMySqlMs, randomId } from "../tools/system"; import { getIntervalYear, getMySqlMs, randomId } from "../tools/system";
import { changeEnumValue } from "../util/verificationEnum"; import { changeEnumValue } from "../util/verificationEnum";
import { eccFormParam } from "../util/verificationParam"; import { eccFormParam } from "../util/verificationParam";
import { AdminRegisterAddConfig, YuYiBaseDataUpdateConfig } from "../config/eccParam/enterprise"; import { AdminRegisterAddConfig, YuYiBaseDataUpdateConfig } from "../config/eccParam/enterprise";
...@@ -116,8 +116,11 @@ export async function getBaseData() { ...@@ -116,8 +116,11 @@ export async function getBaseData() {
* 孵化器入驻信息 * 孵化器入驻信息
*/ */
let entryList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.入驻信息表, {}, [`info_enterId`, `building`, `occupancyRate`, `enteredEnterprises`]); let entryList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.入驻信息表, {}, [`info_enterId`, `building`, `occupancyRate`, `enteredEnterprises`]);
let entryInfo = {"1":{"入驻率":"", "入驻企业":""}, "3":{"入驻率":"", "入驻企业":""}, "4":{"入驻率":"", "入驻企业":""}}; let 入驻企业 = await get入驻企业列表();
let entryInfo = {
"1":{"入驻率":"", "入驻企业":入驻企业[BUILDING["1号楼"]].length},
"3":{"入驻率":"", "入驻企业":入驻企业[BUILDING["3号楼"]].length},
"4":{"入驻率":"", "入驻企业":入驻企业[BUILDING["4号楼"]].length}};
if (entryList.length) { if (entryList.length) {
entryList.forEach( info => { entryList.forEach( info => {
// let building = changeEnumValue(BUILDING, info.building); // let building = changeEnumValue(BUILDING, info.building);
...@@ -126,7 +129,7 @@ export async function getBaseData() { ...@@ -126,7 +129,7 @@ export async function getBaseData() {
entryInfo[building] = { "入驻率": "", "入驻企业": "" }; entryInfo[building] = { "入驻率": "", "入驻企业": "" };
} }
entryInfo[building].入驻率 = info.occupancyRate; entryInfo[building].入驻率 = info.occupancyRate;
entryInfo[building].入驻企业 = info.enteredEnterprises; entryInfo[building].入驻企业 = 入驻企业[building].length;
}) })
} }
...@@ -169,6 +172,38 @@ export async function getBaseData() { ...@@ -169,6 +172,38 @@ export async function getBaseData() {
} }
/**
* 获取各个楼栋的企业列表
* @returns
*/
export async function get入驻企业列表() {
// 获取当前时间
let nowTime = moment().format('YYYY-MM-DD HH:mm:ss');
let fhColumn = ["fId", "eId", "startTime", "endTime", "state", "virtualCause", "virtualCauseDes", "moveOutType",
"moveOutTrace", "moveOutCause", "moveOutTime", "graduationTime", ];
let 租赁Column = ["eId", "year", "alienPatent", "classIPatent", "secondClassPatent", "thirdPentent"];
let 在孵租赁联查includeConf = {};
在孵租赁联查includeConf[TABLENAME.企业孵化信息] = { cloum: fhColumn, where: { state: { "%between%": [FUHUASTATE.实体孵化, FUHUASTATE.虚拟孵化] } } };
在孵租赁联查includeConf[TABLENAME.租赁信息] = { cloum: 租赁Column, where: {} }
let 在孵租赁联查dbList = await selectManyTableData(OPERATIONALDATATYPE.多表联查, TABLENAME.企业基础信息表, { state: CHANGESTATE.已通过 }, ["enterpriseName", "industry", "qiYeGuiMo"], 在孵租赁联查includeConf);
let 楼栋Map = {};
在孵租赁联查dbList.forEach( info => {
let {enterprise_fuhuas, enterprise_leases, enterpriseName, industry, qiYeGuiMo} = info;
// let building = changeEnumValue(BUILDING, parseInt(enterprise_leases[0].building))
let building = enterprise_leases[0].building;
if (!楼栋Map[building]) 楼栋Map[building] = [];
// let intervalYear = getIntervalYear(new Date(enterprise_fuhuas[0].startTime), new Date(enterprise_fuhuas[0].endTime));
let intervalYear = getIntervalYear(new Date(enterprise_fuhuas[0].startTime), new Date());
let industryStr = changeEnumValue(INDUSTRY, industry) || "-";
楼栋Map[building].push([enterpriseName, moment(enterprise_fuhuas[0].startTime).format("YY/MM/DD"), intervalYear, industryStr, qiYeGuiMo]);
})
return 楼栋Map;
}
export async function getOperateData(year) { export async function getOperateData(year) {
let yearTime = moment(year, "YYYY").startOf('year').format("YYYY-MM-DD"); let yearTime = moment(year, "YYYY").startOf('year').format("YYYY-MM-DD");
console.log("yearTime:", yearTime); console.log("yearTime:", yearTime);
...@@ -484,7 +519,11 @@ export async function getYuYiFuHua() { ...@@ -484,7 +519,11 @@ export async function getYuYiFuHua() {
// 2. 获取孵化器入驻信息 // 2. 获取孵化器入驻信息
let entryList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.入驻信息表, {}, [`info_enterId`, `building`, `occupancyRate`, `enteredEnterprises`]); let entryList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.入驻信息表, {}, [`info_enterId`, `building`, `occupancyRate`, `enteredEnterprises`]);
let entryInfo = {"1": {"入驻率": "", "入驻企业": ""}, "3": {"入驻率": "", "入驻企业": ""}, "4": {"入驻率": "", "入驻企业": ""}}; let 入驻企业 = await get入驻企业列表();
let entryInfo = {
"1":{"入驻率":"", "入驻企业":入驻企业[BUILDING["1号楼"]].length},
"3":{"入驻率":"", "入驻企业":入驻企业[BUILDING["3号楼"]].length},
"4":{"入驻率":"", "入驻企业":入驻企业[BUILDING["4号楼"]].length}};
if (entryList.length) { if (entryList.length) {
entryList.forEach(info => { entryList.forEach(info => {
...@@ -494,7 +533,7 @@ export async function getYuYiFuHua() { ...@@ -494,7 +533,7 @@ export async function getYuYiFuHua() {
entryInfo[building] = { "入驻率": "", "入驻企业": "" }; entryInfo[building] = { "入驻率": "", "入驻企业": "" };
} }
entryInfo[building].入驻率 = info.occupancyRate; entryInfo[building].入驻率 = info.occupancyRate;
entryInfo[building].入驻企业 = info.enteredEnterprises; entryInfo[building].入驻企业 = 入驻企业[building].length;
}); });
} }
......
...@@ -8,13 +8,25 @@ import { BizError } from "../util/bizError"; ...@@ -8,13 +8,25 @@ import { BizError } from "../util/bizError";
const nodemailer = require('nodemailer'); const nodemailer = require('nodemailer');
// 创建发送邮件的传输对象 // 创建发送邮件的传输对象
// host: 'smtp.qq.com', // SMTP 服务器地址
// user: '1685675085@qq.com', // 你的邮箱地址
// pass: 'hppnsfvnzzhlbdfh' // 你的邮箱密码或应用专用密码
let transporter = nodemailer.createTransport({ let transporter = nodemailer.createTransport({
host: 'smtp.qq.com', // SMTP 服务器地址 // logger: true,
// host: 'smtp.qq.com', // SMTP 服务器地址
// port: 465, // SMTP 服务器端口(通常是 465 或 587)
// secure: true, // 使用 SSL
// auth: {
// user: '1685675085@qq.com', // 你的邮箱地址
// pass: 'hppnsfvnzzhlbdfh' // 你的邮箱密码或应用专用密码
// }
host: 'smtp.exmail.qq.com', // SMTP 服务器地址
port: 465, // SMTP 服务器端口(通常是 465 或 587) port: 465, // SMTP 服务器端口(通常是 465 或 587)
secure: true, // 使用 SSL secure: true, // 使用 SSL
auth: { auth: {
user: '1685675085@qq.com', // 你的邮箱地址 user: 'zhaoyue@tninnopark.cn', // 你的邮箱地址
pass: 'hppnsfvnzzhlbdfh' // 你的邮箱密码或应用专用密码 pass: 'PrW7ucysg3ubvE7d' // 你的邮箱密码或应用专用密码
} }
}); });
...@@ -22,9 +34,10 @@ async function send(toMail, name, type, otherStr?, code?) { ...@@ -22,9 +34,10 @@ async function send(toMail, name, type, otherStr?, code?) {
let {title, mailStr} = getModel(name, type, otherStr, code); let {title, mailStr} = getModel(name, type, otherStr, code);
// 设置邮件选项 // 设置邮件选项
let mailOptions = { let mailOptions = {
from: '羽翼 <1685675085@qq.com>', // 发送者地址 from: '羽翼 <zhaoyue@tninnopark.cn>', // 发送者地址,需要同步发送邮箱的地址,否则发送邮箱会失败
// from: '羽翼 <1685675085@qq.com>', // 发送者地址,需要同步发送邮箱的地址,否则发送邮箱会失败
to: toMail, to: toMail,
subject: `羽翼的${title}通知`, // 邮件主题 subject: `【羽翼孵化器】${title}`, // 邮件主题
// text: 'Hello world?', // 邮件正文(纯文本) // text: 'Hello world?', // 邮件正文(纯文本)
html: mailStr // 邮件正文(HTML 格式) html: mailStr // 邮件正文(HTML 格式)
}; };
...@@ -45,20 +58,58 @@ function getModel(name, type, otherStr?, code?) { ...@@ -45,20 +58,58 @@ function getModel(name, type, otherStr?, code?) {
let str = ""; let str = "";
let title = ""; let title = "";
switch (type) { switch (type) {
case MAILTYPE.通过入孵申请:
str = "<p>感谢贵公司对【羽翼孵化器】的关注与信任。经我们初步审核,贵公司提交的入孵申请已通过<span style='font-weight: 700;'>初审</span>。为推进下一阶段工作,请贵方协助完成以下事项:</p>";
str += "<p><span style='font-weight: 700;'>*电脑端:</span>通过点击链接上传入孵材料:</p>";
str += "<p>https://fh.tninnopark.cn/incubatorApply</p>";
str += "<p><span style='font-weight: 700;'>*手机端:</span>通过扫码上传入孵材料:</p>";
str += "<p><img src='https://fh.tninnopark.cn/yuyi/files/域名访问.png' /></p>";
str += "<p><span style='font-weight: 700;'>下一步事项:</span></p>";
str += "<p>如涉及提交实物材料(如:入驻计划复印件、孵化协议等),携带公司证明材料前往4-1201。</p>";
str += "<p>我们期待与贵公司的进一步合作,共同推动项目成长与落地</p>";
str += "<p>再次感谢您的积极参与!</p>";
str += "<p style='text-align: right;'>祝 商祺!</p>";
str += "<p style='text-align: right;'>羽翼孵化器</p>";
title = "贵公司入孵申请初审已通过";
break;
case MAILTYPE.驳回入孵申请:
str = otherStr;
str += "<p style='text-align: right;'>祝 商祺!</p>";
str += "<p style='text-align: right;'>羽翼孵化器</p>";
title = "贵公司入孵申请初审未通过通知";
break;
case MAILTYPE.通过入孵材料审核: case MAILTYPE.通过入孵材料审核:
str = "您提交的企业材料审核成功,欢迎入驻羽翼孵化器。"; str = "<p>感谢贵公司积极配合入孵流程。经审核,贵公司提交的入孵材料<span style='font-weight: 700;'>已审核通过:</span></p>";
title = "审核通过"; str += "<p>我们诚挚欢迎贵公司正式入驻,与我们共同开启创新发展新篇章!</p>";
str += "<p>请搜索小程序“羽翼孵化器”,更多政策动态/消息任务将通过该小程序平台推送,请留心关注。</p>";
str += "<p><img src='https://fh.tninnopark.cn/yuyi/files/小程序.jpg' /></p>";
str += "<p style='text-align: right;'>祝 商祺!</p>";
str += "<p style='text-align: right;'>羽翼孵化器</p>";
title = "贵公司入孵材料审核已通过";
break;
case MAILTYPE.驳回入孵材料申请:
str = otherStr;
str += "<p style='text-align: right;'>祝 商祺!</p>";
str += "<p style='text-align: right;'>羽翼孵化器</p>";
title = "贵公司入孵材料审核未通过通知";
break; break;
case MAILTYPE.结束企业服务: case MAILTYPE.结束企业服务:
str = otherStr; str = otherStr;
title = "企业服务受理结果"; str += "<p style='text-align: right;'>祝 商祺!</p>";
str += "<p style='text-align: right;'>羽翼孵化器</p>";
title = "贵公司申请的企业服务已受理完毕";
break; break;
} }
let mailStr = "" let mailStr = ""
mailStr +=`<p>尊敬的${name}:</p>`; mailStr +=`<p>尊敬的${name}团队:</p>`;
mailStr +=`<p>您好!</p>`; mailStr +=`<p>您好!</p>`;
mailStr +=`<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${str}</p>`; mailStr +=`${str}`;
return {mailStr, title}; return {mailStr, title};
} }
......
...@@ -185,6 +185,9 @@ export async function settleInEnterprisePass(eId:string) { ...@@ -185,6 +185,9 @@ export async function settleInEnterprisePass(eId:string) {
} }
await operationalData( OPERATIONALDATATYPE.增加, TABLENAME.入孵申请审批表, addInfo, {} ); await operationalData( OPERATIONALDATATYPE.增加, TABLENAME.入孵申请审批表, addInfo, {} );
//发送邮件
await systemSendMail(eId, enumConfig.MAILTYPE.通过入孵申请 );
return {isSuccess:true}; return {isSuccess:true};
} }
...@@ -300,33 +303,50 @@ export async function settleInEnterpriseUpdate(eId:string, param) { ...@@ -300,33 +303,50 @@ export async function settleInEnterpriseUpdate(eId:string, param) {
/** /**
* 入孵申请驳回 * 入孵申请驳回
* @param eId * @param eId
* @param descType 驳回类型 [1, 2]
* @param desc
* @returns * @returns
*/ */
export async function settleInEnterpriseOut(eId:string) { export async function settleInEnterpriseOut(eId:string, descType, desc:string) {
let filesList = ["eId", "enterpriseName", "uscc", "logonTime", "state"]; let filesList = ["eId", "enterpriseName", "uscc", "logonTime", "state"];
let resInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业基础信息表, {eId}, filesList); let resInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业基础信息表, {eId}, filesList);
if (!resInfo || !resInfo.eId) { if (!resInfo || !resInfo.eId) {
throw new BizError(ERRORENUM.数据不存在); throw new BizError(ERRORENUM.数据不存在);
} }
// if (resInfo.state) throw new BizError(ERRORENUM.该企业已通过审核);
// await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.企业用户表, {}, {eId});//
// await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.企业孵化信息, {}, {eId});
// await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.租赁信息, {}, {eId});
// await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.企业基础信息表, {}, {eId});
await operationalData( OPERATIONALDATATYPE.修改, TABLENAME.企业基础信息表, {register: enumConfig.CHANGESTATE.已驳回 }, { eId }); await operationalData( OPERATIONALDATATYPE.修改, TABLENAME.企业基础信息表, {register: enumConfig.CHANGESTATE.已驳回 }, { eId });
let descStr = "";
for(let i = 0; i < descType.length; i++) {
if (descType[i] == enumConfig.DESCTYPE.其他) {
if (desc) descStr += `${desc};`
} else {
descStr += `${changeEnumValue(enumConfig.DESCTYPE, descType[i])};`;
}
}
let descTypeStr = JSON.stringify(descType) || '[]';
let addInfo = { let addInfo = {
approvalId: randomId(TABLEID.入孵申请审批表), approvalId: randomId(TABLEID.入孵申请审批表),
eId, eId,
changeType: enumConfig.CHANGETYPE.入孵申请, changeType: enumConfig.CHANGETYPE.入孵申请,
changeState: enumConfig.CHANGESTATE.已驳回, changeState: enumConfig.CHANGESTATE.已驳回,
createTimeMs: getMySqlMs() createTimeMs: getMySqlMs(),
descType:descTypeStr,
desc:descStr,
} }
await operationalData( OPERATIONALDATATYPE.增加, TABLENAME.入孵申请审批表, addInfo, {} ); await operationalData( OPERATIONALDATATYPE.增加, TABLENAME.入孵申请审批表, addInfo, {} );
/**发送邮件 */
let mailStr = "";
mailStr += "<p>感谢贵公司对【羽翼孵化器】的关注与信任。经我们初步审核,遗憾地通知您,贵公司此次入孵申请<span style='font-weight: 700;'>未通过初审</span>。主要原因为:</p>";
mailStr += `<ul>`;
mailStr += `<li>${descStr}</li>`;
mailStr += `</ul>`;
mailStr += `<p>以上内容仅作为此次审核意见供参考,您可根据反馈进行优化调整。如后续有相关优化材料或补充说明,欢迎重新提交申请。</p>`;
mailStr += `<p>我们期待未来与贵公司的合作机会,衷心祝愿贵公司业务发展顺利!</p>`;
await systemSendMail(resInfo.eId, enumConfig.MAILTYPE.驳回入孵申请, mailStr );
return {isSuccess:true}; return {isSuccess:true};
} }
...@@ -501,9 +521,11 @@ export async function enterpriseRegisterExaminePass(eId:string) { ...@@ -501,9 +521,11 @@ export async function enterpriseRegisterExaminePass(eId:string) {
/** /**
* 入孵材料审核驳回 * 入孵材料审核驳回
* @param eId * @param eId
* @param descType 驳回类型 [1, 2]
* @param desc
* @returns * @returns
*/ */
export async function enterpriseRegisterExamineOut(eId:string) { export async function enterpriseRegisterExamineOut(eId:string, descType, desc:string) {
if (!eId) throw new BizError(ERRORENUM.参数错误); if (!eId) throw new BizError(ERRORENUM.参数错误);
let filesList = ["eId", "enterpriseName", "uscc", "logonTime", "state"]; let filesList = ["eId", "enterpriseName", "uscc", "logonTime", "state"];
let resInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业基础信息表, {eId}, filesList); let resInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业基础信息表, {eId}, filesList);
...@@ -521,15 +543,38 @@ export async function enterpriseRegisterExamineOut(eId:string) { ...@@ -521,15 +543,38 @@ export async function enterpriseRegisterExamineOut(eId:string) {
await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.企业基础信息表, {state:enumConfig.CHANGESTATE.已驳回}, {eId}); await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.企业基础信息表, {state:enumConfig.CHANGESTATE.已驳回}, {eId});
let descStr = "";
for(let i = 0; i < descType.length; i++) {
if (descType[i] == enumConfig.FILEDESCTYPE.其他) {
if (desc) descStr += `${desc};`
} else {
descStr += `${changeEnumValue(enumConfig.FILEDESCTYPE, descType[i])};`;
}
}
let descTypeStr = JSON.stringify(descType) || '[]';
let addInfo = { let addInfo = {
approvalId: randomId(TABLEID.入孵申请审批表), approvalId: randomId(TABLEID.入孵申请审批表),
eId, eId,
changeType: enumConfig.CHANGETYPE.入孵材料审批, changeType: enumConfig.CHANGETYPE.入孵材料审批,
changeState: enumConfig.CHANGESTATE.已驳回, changeState: enumConfig.CHANGESTATE.已驳回,
createTimeMs: getMySqlMs() createTimeMs: getMySqlMs(),
descType:descTypeStr,
desc:descStr,
} }
await operationalData( OPERATIONALDATATYPE.增加, TABLENAME.入孵申请审批表, addInfo, {} ); await operationalData( OPERATIONALDATATYPE.增加, TABLENAME.入孵申请审批表, addInfo, {} );
/**发送邮件 */
let mailStr = "";
mailStr += "<p>感谢贵公司积极配合入孵流程。经审核,贵公司提交的入孵材料<span style='font-weight: 700;'>暂未通过审核</span>,主要原因如下:</p>";
mailStr += `<ul>`;
mailStr += `<li>${descStr}</li>`;
mailStr += `</ul>`;
mailStr += `<p>如贵司愿意继续推进入孵流程,可根据上述意见进行材料完善并重新提交。</p>`;
mailStr += `<p>我们期待贵公司尽快完善材料,并欢迎继续申请入驻。</p>`;
mailStr += `<p>感谢理解与配合!</p>`;
await systemSendMail(resInfo.eId, enumConfig.MAILTYPE.驳回入孵材料申请, mailStr );
return {isSuccess:true}; return {isSuccess:true};
} }
......
...@@ -250,6 +250,52 @@ export enum CHANGETYPE { ...@@ -250,6 +250,52 @@ export enum CHANGETYPE {
} }
/**
* 入孵申请审批驳回类型
*/
export enum DESCTYPE {
企业信息填写内容有误 = 1,
企业业务方向与孵化器定位不匹配,
企业孵化阶段与孵化器不符,
孵化器资源限制,
其他 = 999
}
/**
* 入孵材料审批驳回类型
*/
export enum FILEDESCTYPE {
"附件材料有误、不完整" = 101,
附件材料与填报信息不一致,
附件材料模糊不清,
其他 = 999
}
/**
* 入孵申请审批驳回类型
*/
export enum DESCTYPECLIENT {
企业信息填写内容有误 = 1,
企业业务方向与孵化器定位不匹配,
企业孵化阶段与孵化器不符,
孵化器资源限制,
// 其他 = 999
}
/**
* 入孵材料审批驳回类型
*/
export enum FILEDESCTYPECLIENT {
"附件材料有误、不完整" = 101,
附件材料与填报信息不一致,
附件材料模糊不清,
// 其他 = 999
}
export enum QUARTER { export enum QUARTER {
第一季度 = 1, 第一季度 = 1,
第二季度, 第二季度,
...@@ -396,6 +442,9 @@ export enum RISKTYPE { ...@@ -396,6 +442,9 @@ export enum RISKTYPE {
export enum MAILTYPE { export enum MAILTYPE {
通过入孵材料审核 = 1, 通过入孵材料审核 = 1,
结束企业服务, 结束企业服务,
通过入孵申请,
驳回入孵申请,
驳回入孵材料申请,
} }
......
...@@ -7,9 +7,9 @@ import { updateQCCDataTask } from "../biz/qccInit"; ...@@ -7,9 +7,9 @@ import { updateQCCDataTask } from "../biz/qccInit";
* 设置定时器,每天刷新一次数据 * 设置定时器,每天刷新一次数据
*/ */
export async function initApiDataStorage() { export async function initApiDataStorage() {
await updateQCCDataTask(); // updateQCCDataTask();
setInterval(async function () { setInterval(async function () {
await updateQCCDataTask(); updateQCCDataTask();
}, 3600 * 1000 * 24); }, 3600 * 1000 * 24);
} }
......
...@@ -24,14 +24,14 @@ export function setRouter(httpServer) { ...@@ -24,14 +24,14 @@ export function setRouter(httpServer) {
httpServer.post('/admin/enterprise/settlein/pass', checkUser, asyncHandler(settleInPass)); httpServer.post('/admin/enterprise/settlein/pass', checkUser, asyncHandler(settleInPass));
httpServer.post('/admin/enterprise/settlein/info', checkUser, asyncHandler(settleInById)); httpServer.post('/admin/enterprise/settlein/info', checkUser, asyncHandler(settleInById));
httpServer.post('/admin/enterprise/settlein/update', checkUser, asyncHandler(settleUpdate)); httpServer.post('/admin/enterprise/settlein/update', checkUser, asyncHandler(settleUpdate));
httpServer.post('/admin/enterprise/settlein/out', checkUser, asyncHandler(settleInOut)); httpServer.post('/admin/enterprise/settlein/out', checkUser, asyncHandler(settleInOut));//驳回
httpServer.post('/admin/fuhua/rufu/add', checkUser, asyncHandler(addRuFu)); httpServer.post('/admin/fuhua/rufu/add', checkUser, asyncHandler(addRuFu));
httpServer.post('/admin/fuhua/rufu/info', checkUser, asyncHandler(getRuFu)); httpServer.post('/admin/fuhua/rufu/info', checkUser, asyncHandler(getRuFu));
httpServer.post('/admin/fuhua/rufu/update', checkUser, asyncHandler(updateRuFu));// httpServer.post('/admin/fuhua/rufu/update', checkUser, asyncHandler(updateRuFu));//
//审核 //审核
httpServer.post('/admin/enterprise/settlein/examine/list', checkUser, asyncHandler(examineSettleIn)); httpServer.post('/admin/enterprise/settlein/examine/list', checkUser, asyncHandler(examineSettleIn));
httpServer.post('/admin/enterprise/settlein/examine/pass', checkUser, asyncHandler(examineSettleInPass));//入孵材料审核 通过 httpServer.post('/admin/enterprise/settlein/examine/pass', checkUser, asyncHandler(examineSettleInPass));//入孵材料审核 通过
httpServer.post('/admin/enterprise/settlein/examine/out', checkUser, asyncHandler(examineSettleInOut)); httpServer.post('/admin/enterprise/settlein/examine/out', checkUser, asyncHandler(examineSettleInOut));//驳回
// //通知 // //通知
httpServer.post('/admin/notice/list', checkUser, asyncHandler(noticeList)); httpServer.post('/admin/notice/list', checkUser, asyncHandler(noticeList));
...@@ -775,8 +775,8 @@ async function settleInById(req, res) { ...@@ -775,8 +775,8 @@ async function settleInById(req, res) {
*/ */
async function settleInOut(req, res) { async function settleInOut(req, res) {
const UserInfo = req.userInfo; const UserInfo = req.userInfo;
let { eId } = req.body let { eId, descType, desc } = req.body
let result = await ruFuBiz.settleInEnterpriseOut(eId); let result = await ruFuBiz.settleInEnterpriseOut(eId, descType, desc);
res.success(result); res.success(result);
} }
...@@ -870,8 +870,8 @@ async function examineSettleInPass(req, res) { ...@@ -870,8 +870,8 @@ async function examineSettleInPass(req, res) {
async function examineSettleInOut(req, res) { async function examineSettleInOut(req, res) {
const UserInfo = req.userInfo; const UserInfo = req.userInfo;
let { eId } = req.body; let { eId, descType, desc } = req.body;
let result = await ruFuBiz.enterpriseRegisterExamineOut(eId); let result = await ruFuBiz.enterpriseRegisterExamineOut(eId, descType, desc );
res.success(result); res.success(result);
} }
...@@ -29,6 +29,8 @@ const config = { ...@@ -29,6 +29,8 @@ const config = {
"/public/clientpolicytype":enumConfig.CLIENTPOLICYTYPE,// 政策文件类型-前端用 "/public/clientpolicytype":enumConfig.CLIENTPOLICYTYPE,// 政策文件类型-前端用
"/public/building":enumConfig.BUILDING,// 园区楼号 "/public/building":enumConfig.BUILDING,// 园区楼号
"/public/ipralltype":enumConfig.IPRALLTYPE, //企查查知识产权类型 "/public/ipralltype":enumConfig.IPRALLTYPE, //企查查知识产权类型
"/public/desctypeclient":enumConfig.DESCTYPECLIENT, //入孵申请审批驳回
"/public/filedesctypeclient":enumConfig.FILEDESCTYPECLIENT, //入孵材料审批驳回
// "/public/output/basedata":outputEnumConfig.BASEDATA, // "/public/output/basedata":outputEnumConfig.BASEDATA,
// "/public/output/opreatdata":outputEnumConfig.OPERATIONDATA, // "/public/output/opreatdata":outputEnumConfig.OPERATIONDATA,
// "/public/output/financingdata":outputEnumConfig.FINANCINGDATA, // "/public/output/financingdata":outputEnumConfig.FINANCINGDATA,
......
...@@ -123,3 +123,47 @@ export function getPinyinInitials(name) { ...@@ -123,3 +123,47 @@ export function getPinyinInitials(name) {
.join(''); .join('');
} }
/**
* 计算间隔孵化时长
* @param startTime
* @param endTime
*/
export function getIntervalYear(startTime, endTime) {
// 提取开始日期的年、月、日(注意月份需+1)
const startYear = startTime.getFullYear();
const startMonth = startTime.getMonth() + 1;
const startDay = startTime.getDate();
// 提取结束日期的年、月、日
const endYear = endTime.getFullYear();
const endMonth = endTime.getMonth() + 1;
const endDay = endTime.getDate();
// 计算总月份差
let totalMonths = (endYear - startYear) * 12 + (endMonth - startMonth);
// 处理天数不足的情况(未满整月)
if (endDay < startDay) {
totalMonths--;
}
// 处理时间倒流的情况
if (totalMonths < 0) {
return "0个月";
}
// 根据总月份判断输出年或月
if (totalMonths >= 12) {
const years = Math.floor(totalMonths / 12);
return `${years}年`;
} else {
return `${totalMonths}个月`;
}
}
...@@ -39,45 +39,30 @@ export function changeEnumValue(enumConf, value:any) { ...@@ -39,45 +39,30 @@ export function changeEnumValue(enumConf, value:any) {
if (!value) return ''; if (!value) return '';
if ( typeof value == 'number' ) { if ( typeof value == 'number' ) {
let str = enumConf[value]; let str = enumConf[value];
/** 特化处理 中文引号在枚举中不适用*/ /**特化处理 */
if (str == "_投资__孵化_类型") { if(/_dou/.test(str)) str = str.replace(/_dou/gm, ",");
str = str.replace("__","+"); if(/_zyh/.test(str)) str = str.replace(/_zyh/gm, "“");
str = str.replace("_","“"); if(/_yyh/.test(str)) str = str.replace(/_yyh/gm, "”");
str = str.replace("_","”"); if(/_dun/.test(str)) str = str.replace(/_dun/gm, "、");
} if(/_ju/.test(str)) str = str.replace(/_ju/gm, "。");
if (str == "经营成本过高_场地成本或人员成本_" || str == "办公空间拓展_无合适办公空间_") {
str = str.replace("_","(");
str = str.replace("_",")");
}
if (str == "迁出孵化器_仍在张江" || str == "迁出张江_仍在浦东" || str == "迁出浦东_仍在上海") {
str = str.replace("_",",");
}
if (str == "科技金融_风险投资_" || str == "科技金融_其他_" || str == "技术专家_法律专家_") {
str = str.replace("_","(");
str = str.replace("_",")");
}
return str return str
} else if (typeof value == 'string') {
try {//兼容数据库 '[1,2,3]'
value = JSON.parse(value);
}catch(err) {
return enumConf[parseInt(value)];
}
} }
let str = ""; let str = "";
value.forEach((item, index) => { value.forEach((item, index) => {
let subStr = enumConf[item]; let subStr = enumConf[item];
/** 特化处理 中文引号在枚举中不适用*/ /**特化处理 */
if (subStr == "_投资__孵化_类型") { if(/_dou/.test(subStr)) subStr = subStr.replace(/_dou/gm, ",");
subStr = subStr.replace("__","+"); if(/_zyh/.test(subStr)) subStr = subStr.replace(/_zyh/gm, "“");
subStr = subStr.replace("_","“"); if(/_yyh/.test(subStr)) subStr = subStr.replace(/_yyh/gm, "”");
subStr = subStr.replace("_","”"); if(/_dun/.test(subStr)) subStr = subStr.replace(/_dun/gm, "、");
} if(/_ju/.test(subStr)) subStr = subStr.replace(/_ju/gm, "。");
if (subStr == "经营成本过高_场地成本或人员成本_" || subStr == "办公空间拓展_无合适办公空间_") {
subStr = subStr.replace("_","(");
subStr = subStr.replace("_",")");
}
if (subStr == "迁出孵化器_仍在张江" || subStr == "迁出张江_仍在浦东" || subStr == "迁出浦东_仍在上海") {
subStr = subStr.replace("_",",");
}
if (subStr == "科技金融_风险投资_" || subStr == "科技金融_其他_" || subStr == "技术专家_法律专家_") {
subStr = subStr.replace("_","(");
subStr = subStr.replace("_",")");
}
str += subStr; str += subStr;
if (index == value.length-1) str+=""; if (index == value.length-1) str+="";
else str += "," else str += ","
......
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