Commit 05716054 by lixinming

修改

parent 6b4721b7
/**
* 走访逻辑
*/
import moment = require("moment");
import { VISITDEMAND, VISITENTERPRISETYPE, VISITSTATE } from "../../config/enum";
import * as visitData from "../../data/fuHuaQi/visit";
import * as demandData from "../../data/fuHuaQi/demand";
import * as enterpriseData from "../../data/enterprise/enterprise";
import { changeEnumManyValue, eccEnumValue } from "../../util/verificationEnum";
import { BizError } from "../../util/bizError";
import { ERRORENUM } from "../../config/errorEnum";
import { getRandomId } from "../../tools/system";
export async function visitStatisBase(fuHuaQiUscc:string) {
let startMs = moment().startOf("y").valueOf();
let lastYearMs = moment().subtract(1,'y').startOf("y").valueOf();
let dangQianCount = await visitData.findCountByParam({ visitTime:{"$gt":startMs}, fuHuaQiUscc, state:VISITSTATE.走访安排});
let liShiCount = await visitData.findCountByParam({ visitTime:{"$gt":startMs}, fuHuaQiUscc, state:{"$ne":VISITSTATE.走访安排}});
let lastYearCount = await visitData.findCountByParam({ visitTime:{"$gt":lastYearMs, "$lt":startMs}, fuHuaQiUscc });
let thisYearCount = dangQianCount + liShiCount;
let yearToYear = 0;
if (thisYearCount && lastYearCount) {
yearToYear = Math.ceil((thisYearCount - lastYearCount) / lastYearCount * 100)
}
let dataInfo = {
thisYearCount,
yearToYear,
dangQianCount,
liShiCount
};
return {dataInfo};
}
export async function visitStatisTypeList(fuHuaQiUscc) {
let startMs = moment().startOf("y").valueOf();
let dbList = await visitData.findByParam({ visitTime:{"$gt":startMs}, fuHuaQiUscc});
let typeMap = {};
dbList.forEach(item => {
let {enterpriseType, demand, uscc, enterpriseName, id} = item;
if (!typeMap[enterpriseType]) {
typeMap[enterpriseType] = {count:0, dataList:[]};
}
let demandList = changeEnumManyValue(VISITDEMAND, demand);
typeMap[enterpriseType].count += 1;
typeMap[enterpriseType].dataList.push({
enterpriseName,
id,
demand:demandList
});
});
let dataList = Object.values(typeMap);
return {dataList};
}
export async function visitAlendarStatis(fuHuaQiUscc:string) {
let startMs = moment().startOf("m").valueOf();
let shengYuCount = await visitData.findCountByParam({ visitTime:{"$gt":startMs}, fuHuaQiUscc, state:VISITSTATE.走访安排});
let leiJiCount = await visitData.findCountByParam({ visitTime:{"$gt":startMs}, fuHuaQiUscc, state:{"$ne":VISITSTATE.走访安排}});
let thisMonthCount = shengYuCount + leiJiCount;
let rate = 0;
if (leiJiCount && thisMonthCount) {
rate = Math.ceil(leiJiCount / thisMonthCount * 100)
}
let dataInfo = {
shengYuCount,
leiJiCount,
rate
};
return {dataInfo};
}
export async function visitCalendarList(fuHuaQiUscc) {
let startMs = moment().startOf("w").valueOf();
let endMs = startMs + (24* 3600* 1000 * 7);
let dbList = await visitData.findByParam({ visitTime:{"$gt":startMs, "$lt":endMs}, fuHuaQiUscc});
let typeMap = {};
dbList.forEach(item => {
let {visitTime, accompany, leaderName, id} = item;
let dateStr = moment(visitTime).format("YYYY-MM-DD");
if (!typeMap[dateStr]) typeMap[dateStr] = [];
typeMap[dateStr].push({
accompany,//陪同人员
leaderName,//出席领导
id,
time:moment(visitTime).format("HH:mm")
});
});
let dataList = [];
for (let key in typeMap) {
let itemList = typeMap[key]
dataList.push({
dateKey:key,
subList:itemList
});
}
dataList.sort( (a, b) => {return new Date(a.dateKey).valueOf()- new Date(b.dateKey).valueOf()});
return {dataList};
}
export async function visitAdd(fuHuaQiUscc:string, param) {
eccEnumValue();
}
//企业需求相关
export async function visitDemandList(fuHuaQiUscc, demand) {
/**找目标月入库的数据 */
let enterpriseCount = enterpriseData.findEnterpriseCount({fuHuaQiUscc});
// let startMs = moment().startOf("y").valueOf();
let param:any = { fuHuaQiUscc};
if (demand && demand.length) {
param.demand = {"$in":demand}
}
let dbList = await demandData.findByParam(param);
let dataList = [];
dbList.forEach(item => {
let demand = changeEnumManyValue(VISITDEMAND, item.demand)
dataList.push({
enterpriseName:item.enterpriseName,
id:item.id,
demand
});
})
return {enterpriseCount, dataList}
}
export async function visitDemandAdd(fuHuaQiUscc, uscc, demand, demandDesc) {
eccEnumValue("添加企业需求", "demand", VISITDEMAND, demand);
let enterprsieInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterprsieInfo || enterprsieInfo.uscc) {
throw new BizError(ERRORENUM.该企业不存在)
}
//todo 这里逻辑还没给
// 主动申报需求企业 = 1,
// 新入驻企业,
// 临近毕业企业,
// 数据异常企业
let addInfo = {
id:getRandomId("qyxq"),
fuHuaQiUscc,
uscc,//企业uscc
enterpriseName:enterprsieInfo.enterpriseName,
createTime:new Date().valueOf(),
enterpriseType:VISITENTERPRISETYPE.数据异常企业,//VISITENTERPRISETYPE
demand,//企业需求
demandDesc
}
await demandData.createDataByParam(addInfo);
return {isSuccess:true};
}
export async function visitDemandEnterpriseInfo(uscc) {
let dbList = await demandData.findByParam({uscc});
let dataList = [];
dbList.forEach(item => {
let demand = changeEnumManyValue(VISITDEMAND, item.demand)
dataList.push({
id:item.id,
demand,
time:moment(item.createTime).format("YYYY.MM.DD"),
demandDesc:item.demandDesc
});
})
return {dataList};
}
export async function visitDemandDelete(id) {
let item = await demandData.findOne({id});
if (!item || !item.id) throw new BizError(ERRORENUM.未找到数据);
await demandData.removeOneData(id);
return {isSuccess:true};
}
......@@ -567,3 +567,25 @@ export enum ZLSTATETYPE {
在孵企业 = 1,
迁出
}
export enum VISITSTATE {
走访安排 = 1,
取消,
完成
}
export enum VISITENTERPRISETYPE {
主动申报需求企业 = 1,
新入驻企业,
临近毕业企业,
数据异常企业
}
export enum VISITDEMAND {
技术 =1,
资金,
政策,
市场,
场地
}
\ No newline at end of file
/**
* 企业需求
*/
/**
* 走访
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const demandSchema = new Schema({
id:String,//标识
fuHuaQiUscc:String,//孵化器uscc
uscc:{type:String, index:true},//企业uscc
enterpriseName:String,
createTime:Number,
enterpriseType:{type:Number},//VISITENTERPRISETYPE
demand:{type:[Number], default:[]},//企业需求
demandDesc:String
});
var demandModel;
export function initModel(){
demandModel = baseDB.model('demand', demandSchema);
demandModel.selectOnceData = async function (paramater:object) {
let selectInfo = await demandModel.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 uscc 孵化器统一信用代码
* @returns
*/
export async function findOne(param) {
return await demandModel.selectOnceData(param);
}
/**通过条件查询孵化器得分信息 */
export async function findByParam(param) {
return await demandModel.find(param);
}
export async function findCountByParam(param) {
return await demandModel.find(param).countDocuments();
}
export async function createDataByParam(param) {
return await demandModel.create(param);
}
export async function removeOneData(id:string) {
return await demandModel.deleteOne({id});
}
\ No newline at end of file
......@@ -2,3 +2,74 @@
* 走访
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const visitSchema = new Schema({
id:String,//标识
fuHuaQiUscc:String,//孵化器uscc
uscc:{type:String, index:true},//企业uscc
enterpriseName:String,
visitTime:Number,
accompany:String,//陪同人员
leaderName:String,//出席领导
researchType:Number, //调研类型 RESEARCHTYPE
desc:String,//解决的备注
state:{type:Number, default:1},//1=初始状态 2=取消 3=完成 VISITSTATE
createTime:Number,
enterpriseType:{type:Number},//VISITENTERPRISETYPE
demand:{type:[Number], default:[]},//企业需求
demandDesc:String
});
var visitModel;
export function initModel(){
visitModel = baseDB.model('visit', visitSchema);
visitModel.selectOnceData = async function (paramater:object) {
let selectInfo = await visitModel.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 uscc 孵化器统一信用代码
* @returns
*/
export async function findOne(param) {
return await visitModel.selectOnceData(param);
}
/**通过条件查询孵化器得分信息 */
export async function findByParam(param) {
return await visitModel.find(param);
}
export async function findCountByParam(param) {
return await visitModel.find(param).countDocuments();
}
export async function createDataByParam(param) {
return await visitModel.create(param);
}
export async function removeOneData(id:string) {
return await visitModel.deleteOne({id});
}
\ No newline at end of file
......@@ -40,6 +40,8 @@ import * as dangJianModel from "../../data/fuHuaQi/monthTask/dangJian";
import * as chartModel from "../../data/guanWeiHui/chart";
import * as leaseModel from "../../data/lease";
import * as visitModel from "../../data/fuHuaQi/visit";
import * as demandModel from "../../data/fuHuaQi/demand";
......@@ -84,4 +86,6 @@ export async function initTable() {
chartModel.initModel();
leaseModel.initModel();
visitModel.initModel();
demandModel.initModel();
}
\ No newline at end of file
......@@ -3,107 +3,108 @@
*
*/
import * as asyncHandler from 'express-async-handler';
import * as userBiz from '../../biz/mobileGuanWeiHui/user';
import { eccReqParamater } from '../../util/verificationParam';
import { checkFuHuaQiToken } from '../../middleware/user';
import * as visitBiz from '../../biz/mobileFuHuaQi/visit';
export function setRouter(httpServer) {
httpServer.post('/fuhuaqi/visit/statis/base', checkFuHuaQiToken, asyncHandler(visit_statis_base));
httpServer.post('/fuhuaqi/visit/statis/base', asyncHandler(visit_statis_base));
httpServer.post('/fuhuaqi/visit/statis/typelist', checkFuHuaQiToken, asyncHandler(visit_statis_type_list));
httpServer.post('/fuhuaqi/visit/list', checkFuHuaQiToken, asyncHandler(visit_list));
httpServer.post('/fuhuaqi/visit/calendar/list', checkFuHuaQiToken, asyncHandler(visit_calendar_list));
httpServer.post('/fuhuaqi/visit/demand/list', checkFuHuaQiToken, asyncHandler(visit_demand_list));//诉求列表
httpServer.post('/fuhuaqi/visit/demand/list/enterpriseinfo', checkFuHuaQiToken, asyncHandler(visit_demand_enterpriseinfo));//单个企业诉求列表
httpServer.post('/fuhuaqi/visit/demand/add', checkFuHuaQiToken, asyncHandler(visit_demand_add));//添加诉求
httpServer.post('/fuhuaqi/visit/demand/delete', checkFuHuaQiToken, asyncHandler(visit_demand_delete));//删除诉求
// httpServer.post('/fuhuaqi/visit/list', checkFuHuaQiToken, asyncHandler(visit_list));
httpServer.post('/fuhuaqi/visit/calendar/statis', checkFuHuaQiToken, asyncHandler(visit_alendar_statis));
httpServer.post('/fuhuaqi/visit/calendar/list', checkFuHuaQiToken, asyncHandler(visit_calendar_list));
httpServer.post('/fuhuaqi/visit/add', checkFuHuaQiToken, asyncHandler(visit_add));
httpServer.post('/fuhuaqi/visit/info', checkFuHuaQiToken, asyncHandler(visit_info));
httpServer.post('/fuhuaqi/visit/update', checkFuHuaQiToken, asyncHandler(visit_update));
httpServer.post('/fuhuaqi/visit/update/state', checkFuHuaQiToken, asyncHandler(visit_update_state));
httpServer.post('/fuhuaqi/visit/track/add', checkFuHuaQiToken, asyncHandler(visit_track_add));
httpServer.post('/fuhuaqi/visit/track/log/statis', checkFuHuaQiToken, asyncHandler(visit_track_log_statis));
httpServer.post('/fuhuaqi/visit/track/log/list', checkFuHuaQiToken, asyncHandler(visit_track_log_list));
// httpServer.post('/fuhuaqi/visit/info', checkFuHuaQiToken, asyncHandler(visit_info));
// httpServer.post('/fuhuaqi/visit/update', checkFuHuaQiToken, asyncHandler(visit_update));
// httpServer.post('/fuhuaqi/visit/update/state', checkFuHuaQiToken, asyncHandler(visit_update_state));
// httpServer.post('/fuhuaqi/visit/track/add', checkFuHuaQiToken, asyncHandler(visit_track_add));
// httpServer.post('/fuhuaqi/visit/track/log/statis', checkFuHuaQiToken, asyncHandler(visit_track_log_statis));
// httpServer.post('/fuhuaqi/visit/track/log/list', checkFuHuaQiToken, asyncHandler(visit_track_log_list));
}
async function visit_statis_base(req, res) {
let reqConf = {};
let {} = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let userInfo = await .();
let userInfo = await visitBiz.visitStatisBase(Uscc);
res.success(userInfo);
}
async function visit_statis_type_list(req, res) {
let reqConf = {};
let {} = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let userInfo = await .();
let userInfo = await visitBiz.visitStatisTypeList(Uscc);
res.success(userInfo);
}
async function visit_list(req, res) {
let reqConf = {};
let {} = eccReqParamater(reqConf, req.body);
async function visit_demand_list(req, res) {
let reqConf = {demand:'[Number]'};
let {demand} = eccReqParamater(reqConf, req.body, ["demand"]);
const Uscc = req.headers.uscc;
let userInfo = await .();
let userInfo = await visitBiz.visitDemandList(Uscc, demand);
res.success(userInfo);
}
async function visit_calendar_list(req, res) {
let reqConf = {};
let {} = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
async function visit_demand_add(req, res) {
let reqConf = {demand:'[Number]', uscc:'String', demandDesc:'String'};
let {demand, uscc, demandDesc} = eccReqParamater(reqConf, req.body);
const FHQUscc = req.headers.uscc;
let userInfo = await .();
let userInfo = await visitBiz.visitDemandAdd(FHQUscc, uscc, demand, demandDesc);
res.success(userInfo);
}
async function visit_demand_enterpriseinfo(req, res) {
let reqConf = { uscc:'String', };
let {uscc} = eccReqParamater(reqConf, req.body);
const FHQUscc = req.headers.uscc;
async function visit_alendar_statis(req, res) {
let reqConf = {};
let {} = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let userInfo = await .();
let userInfo = await visitBiz.visitDemandEnterpriseInfo(uscc);
res.success(userInfo);
}
async function visit_demand_delete(req, res) {
let reqConf = { id:'String', };
let {id} = eccReqParamater(reqConf, req.body);
async function visit_add(req, res) {
let reqConf = {};
let {} = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let userInfo = await .();
let userInfo = await visitBiz.visitDemandDelete(id);
res.success(userInfo);
}
async function visit_info(req, res) {
let reqConf = {};
let {} = eccReqParamater(reqConf, req.body);
async function visit_alendar_statis(req, res) {
const Uscc = req.headers.uscc;
let userInfo = await .();
let userInfo = await visitBiz.visitAlendarStatis(Uscc);
res.success(userInfo);
}
async function visit_update(req, res) {
let reqConf = {};
let {} = eccReqParamater(reqConf, req.body);
async function visit_calendar_list(req, res) {
const Uscc = req.headers.uscc;
let userInfo = await .();
let userInfo = await visitBiz.visitCalendarList(Uscc);
res.success(userInfo);
}
async function visit_update_state(req, res) {
async function visit_add(req, res) {
let reqConf = {};
let {} = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
......@@ -113,32 +114,62 @@ async function visit_update_state(req, res) {
}
async function visit_track_add(req, res) {
let reqConf = {};
let {} = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
// async function visit_info(req, res) {
// let reqConf = {};
// let {} = eccReqParamater(reqConf, req.body);
// const Uscc = req.headers.uscc;
let userInfo = await .();
res.success(userInfo);
}
// let userInfo = await .();
// res.success(userInfo);
// }
async function visit_track_log_statis(req, res) {
let reqConf = {};
let {} = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
// async function visit_update(req, res) {
// let reqConf = {};
// let {} = eccReqParamater(reqConf, req.body);
// const Uscc = req.headers.uscc;
let userInfo = await .();
res.success(userInfo);
}
// let userInfo = await .();
// res.success(userInfo);
// }
async function visit_track_log_list(req, res) {
let reqConf = {};
let {} = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
// async function visit_update_state(req, res) {
// let reqConf = {};
// let {} = eccReqParamater(reqConf, req.body);
// const Uscc = req.headers.uscc;
let userInfo = await .();
res.success(userInfo);
}
// let userInfo = await .();
// res.success(userInfo);
// }
// async function visit_track_add(req, res) {
// let reqConf = {};
// let {} = eccReqParamater(reqConf, req.body);
// const Uscc = req.headers.uscc;
// let userInfo = await .();
// res.success(userInfo);
// }
// async function visit_track_log_statis(req, res) {
// let reqConf = {};
// let {} = eccReqParamater(reqConf, req.body);
// const Uscc = req.headers.uscc;
// let userInfo = await .();
// res.success(userInfo);
// }
// async function visit_track_log_list(req, res) {
// let reqConf = {};
// let {} = eccReqParamater(reqConf, req.body);
// const Uscc = req.headers.uscc;
// let userInfo = await .();
// res.success(userInfo);
// }
......@@ -45,6 +45,7 @@ import * as dangJianRouters from './mobileClient/dangJian';
import * as checkDataRouters from './admin/checkData';
import * as zhulingRouter from './mobileClient/zhuling';
import * as visitRouter from './mobileClient/visit';
export function setRouter(httpServer){
/**下拉框等公用 路由 */
......@@ -102,4 +103,6 @@ export function setRouter(httpServer){
checkDataRouters.setRouter(httpServer);
zhulingRouter.setRouter(httpServer);
visitRouter.setRouter(httpServer);
}
\ 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