Commit 1318e1f4 by lixinming

no message

parent 84624d35
...@@ -1970,4 +1970,120 @@ export async function xiuFuCustomTask() { ...@@ -1970,4 +1970,120 @@ export async function xiuFuCustomTask() {
} }
console.log("数据更新完成"); console.log("数据更新完成");
//添加信息到自定义任务表中 //添加信息到自定义任务表中
}
export async function test11111() {
let list = await enterpriseData.findEnterpriseList({fuHuaQiUscc:"91310115069312504K"});
let keyList = [{key:"name", desc:"企业名称"},
{key:"taskId", desc:"绑定的任务id"},
{key:"uscc", desc:"统一信用代码"},
{key:"fuHuaQiUscc", desc:"孵化器统一信用代码"},
{key:"industry", desc:"领域"},
{key:"logonTime", desc:"注册时间"},
{key:"firstIncubationTime", desc:"首次入孵时间"},
{key:"timeOfImmigration", desc:"迁入时间"},
{key:"isNaturalPersonHolding", desc:"是否自然人控股企业"},
{key:"oldLogonAdd", desc:"弃用"},
{key:"logonAdd", desc:"弃用"},
{key:"operatingAdd", desc:"弃用"},
{key:"isCreate", desc:"是否新建"},
{key:"leasedArea", desc:"租赁面积(平方米)"},
{key:"mainBusiness", desc:"主营业务"},
{key:"createTime", desc:"录入时间"},
{key:"draftLock", desc:"草稿锁,true为提交之后,false为草稿"},
{key:"enterpriseIsInPut", desc:"兼容原始数据无法判断是否是迁入企业这个问题加的字段"},
{key:"draftId", desc:"保存之后就不认这个id了"},
{key:"firstLoginIsChangePwd", desc:"首次登录是否修改密码"},
{key:"state", desc:"状态"},
{key:"virtualCause", desc:"虚拟孵化原因"},
{key:"virtualCauseDes", desc:"虚拟孵化描述"},
{key:"moveOutType", desc:"迁出类型"},
{key:"moveOutTrace", desc:"迁出去向"},
{key:"moveOutCause", desc:"迁出原因"},
{key:"moveOutTime", desc:"迁出时间"},
{key:"logonAddress", desc:"注册地址"},
{key:"operatingAddress", desc:"经营地址"},
{key:"oldLogonAddress", desc:"迁入前注册地址"},
{key:"initialTeam", desc:"弃用"},
{key:"qualification", desc:"企业资质"},
{key:"intellectualProperty", desc:"知识产权"},
{key:"firstClassTalent", desc:"舍弃"},
{key:"haveFirstClassTalent", desc:"是否拥有国际一流人才"},
{key:"tipsQualification", desc:"企业资质"},
{key:"tipsIntellectualProperty", desc:"知识产权"},
{key:"tipsFinancingInfo", desc:"企业融资"},
{key:"graduation", desc:"拟毕业情况"},
{key:"cycxfx", desc:"创业创新方向"},
{key:"cycsrbj", desc:"创业创始人背景"},
{key:"securePhon", desc:"安全手机号,用于做修改密码用"},
{key:"RAS", desc:"登记状态"},
{key:"logOffMS", desc:"注销时间"},
{key:"legalPerson", desc:"法人"},
{key:"zhuceziben", desc:"注册资本"},
{key:"shijiaoziben", desc:"实缴资本"},
{key:"dianHua", desc:"电话"},
{key:"gengDuoDianHua", desc:"更多电话"},
{key:"mail", desc:"邮箱"},
{key:"moreMail", desc:"更多邮箱"},
{key:"enterpriseType", desc:"企业(机构)类型"},
{key:"zhuCeHao", desc:"注册号"},
{key:"zuZhiJiGouDaiMa", desc:"组织机构代码"},
{key:"canBaoRenShu", desc:"参保人数"},
{key:"canBaoRenShuNianBao", desc:"参保人数所属年报"},
{key:"yingYeQiXian", desc:"营业期限"},
{key:"qiYeGuiMo", desc:"企业规模"},
{key:"guanWang", desc:"官网"},
{key:"tongXinDiZhi", desc:"通信地址"},
{key:"jianJie", desc:"企业简介"},
{key:"dengJiJiGuan", desc:"登记机关"},
{key:"naShuiRenZiZhi", desc:"纳税人资质"},
{key:"zuiXinNianBaoNianFen", desc:"最新年报年份"}];
let resList = [];
let titleList = [];
keyList.forEach(keyInfo =>{
let {key, desc} = keyInfo;
titleList.push(desc);
});
resList.push(titleList);
list.forEach(info => {
let subList = [];
keyList.forEach(keyInfo =>{
let {key} = keyInfo;
let value = info[key];
if (key == "industry") value = changeEnumValue(INDUSTRY, value)
if (key == "logonTime" || key == "firstIncubationTime" || key == "timeOfImmigration") {
if (!isNaN(value)) value = moment(value).format("YYYY-MM-DD");
}
if (key == "state") {
value = changeEnumValue(FUHUASTATE, value);
}
if (key == "logonAddress" || key == "operatingAddress" || key == "oldLogonAddress") {
value = changeAddToString(value);
}
if (key == "RAS") {
value = changeEnumValue(RAS, value);
}
if (key == "qiYeGuiMo") {
value = changeEnumValue( ENTERPRISESIZE,value)
}
if (key == "naShuiRenZiZhi") {
value = changeEnumValue(NASHUIRENZIZHI, value);
}
subList.push(value);
});
resList.push(subList);
});
let data = [
{
name:"sheet1",
data:resList
}
];
let buff = xlsx.build(data);
fs.writeFileSync(path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", '雨艺在孵企业excel.xlsx' ), buff);
console.log();
} }
\ No newline at end of file
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
* ai聊天模块 * ai聊天模块
*/ */
import { ERRORENUM } from "../../config/errorEnum"
import { BizError } from "../../util/bizError"
import { cozeGet, cozePost, post } from "../../util/request" import { cozeGet, cozePost, post } from "../../util/request"
const request = require('request') const request = require('request')
...@@ -59,42 +61,91 @@ export async function checkMsg(msg:string, preConditions?) { ...@@ -59,42 +61,91 @@ export async function checkMsg(msg:string, preConditions?) {
} }
/** /**
* 字节智能体 * 字节智能体
*/ */
export async function cozeMsg(msg:string, conversationId:string, chatId:string, messageList) {
let additional_messages = [];
//拼接上下文
let i = messageList.length <= 10 ? 0 : (messageList.length - 10)-1;
for (; i < messageList.length; i++) {
let {role, msg} = messageList[i];
let type = role != 'user' ? 'question' : 'answer'
additional_messages.push({
role,
type,
content:msg,
content_type:'text'
});
}
export async function cozeMsg(msg:string) { /**请求头 */
let header = { const Header = {
Authorization:'Bearer pat_2mhpgd35eLzZsh9nPghVMquAEqy73KXfDAfuqps0IWy2TT1m75P6lfuYedZGkwfW', Authorization:'Bearer pat_KORy65MIpPSGQ8cx4rLLipsAZhgjkk5neIv0o1IWKb2svC3t2RbECSMpSBHWyDuN',
"Content-Type":"application/json" "Content-Type":"application/json"
}; };
let url = 'https://api.coze.cn/v3/chat'; const botId = '7395108996510089266';
let body = { /**创建会话 */
bot_id :"7395108996510089266", if (!conversationId) {
conversation_id:"7397235079933902887", let creatChartUrl = 'https://api.coze.cn/v1/conversation/create';
let conversationRes:any = await cozePost(creatChartUrl, {}, Header);
conversationId = conversationRes.data.id;
}
/**创建消息 */
let messageBody = {
role:'user',
content:msg,
content_type:"text"
};
let createMessageRes:any = await cozePost(`https://api.coze.cn/v1/conversation/message/create?conversation_id=${conversationId}`, messageBody, Header);
//判断创建情况,如果消息创建失败,后面轮询会报错
if (!createMessageRes.data) {
throw new BizError(ERRORENUM.智能体调用出错请联系管理员, '创建消息失败');
}
/**发起对话 */
let chatUrl = `https://api.coze.cn/v3/chat?conversation_id=${conversationId}`;
let chatBody = {
bot_id :botId,
conversation_id:conversationId,
user_id:"user", user_id:"user",
stream:false, stream:false,
query:msg, auto_save_history:true,
auto_save_history:true additional_messages
}; };
let result:any = await cozePost(url, body, header); let chatResult:any = await cozePost(chatUrl, chatBody, Header);
if (result.data) { //判断创建情况,如果消息创建失败,后面轮询会报错
let {status, conversation_id, id} = result.data; if (!createMessageRes.data) {
if (status == "in_progress") { throw new BizError(ERRORENUM.智能体调用出错请联系管理员, '发起对话失败');
let max = 10; }
for (let i = 0; i < max; i++) { chatId = chatResult.data.id;
await sleep(1000);
let query = {conversation_id, chat_id:id};
let itemRes = await cozeGet('https://api.coze.cn/v3/chat/retrieve', query, header); /**查询对话状态 */
console.log(itemRes); let max = 100;
} for (let i = 0; i < max; i++) {
await sleep(1000);
let queryInfo = {conversation_id:conversationId, chat_id:chatId};
// let itemUrl =`https://api.coze.cn/v3/chat/retrieve?conversation_id=${conversation_id}&chat_id=${chat_id}`;
let itemUrl =`https://api.coze.cn/v3/chat/retrieve`;
let itemRes:any = await cozeGet(itemUrl, queryInfo, Header);
console.log(`第${i+1}次等待`);
if (!itemRes.data || !itemRes.data.status || itemRes.data.status == "failed") {
throw new BizError(ERRORENUM.智能体调用出错请联系管理员, '轮询对话状态失败');
}
if (["completed","required_action","canceled","failed"].indexOf( itemRes.data.status) != -1) {
break;
} }
} }
console.log();
/**查看消息列表 */
let allres:any = await cozeGet('https://api.coze.cn/v3/chat/message/list', {conversation_id:conversationId, chat_id:chatId}, Header);
if (!allres.data) throw new BizError(ERRORENUM.智能体调用出错请联系管理员, '查看消息列表失败');
let msgList = allres.data;
let resMsg = msgList[msgList.length -1 ].content;
console.log(`提问:${msg}`, `回答:${resMsg}`);
return {answer:resMsg, conversationId, chatId};
} }
function sleep(time) { function sleep(time) {
...@@ -103,4 +154,4 @@ function sleep(time) { ...@@ -103,4 +154,4 @@ function sleep(time) {
resolve({}); resolve({});
}, time); }, time);
}); });
} }
\ No newline at end of file
...@@ -4,9 +4,10 @@ ...@@ -4,9 +4,10 @@
import { ERRORENUM } from "../../config/errorEnum"; import { ERRORENUM } from "../../config/errorEnum";
import { findFuHuaQiList } from "../../data/fuHuaQi/fuhuaqi"; import { findFuHuaQiList } from "../../data/fuHuaQi/fuhuaqi";
import { createChatInfo, selectChatInfo } from "../../data/guanWeiHui/chart";
import { BizError } from "../../util/bizError"; import { BizError } from "../../util/bizError";
import { TARGET } from "./enum"; import { TARGET } from "./enum";
import { checkMsg } from "./gpt"; import { checkMsg, cozeMsg } from "./gpt";
import { getIndicationRate, getIndicationValueStr, getIndicationValue } from "./indicatorPool"; import { getIndicationRate, getIndicationValueStr, getIndicationValue } from "./indicatorPool";
const officegen = require('officegen'); const officegen = require('officegen');
...@@ -86,11 +87,33 @@ export async function zjAiChart(token:string) { ...@@ -86,11 +87,33 @@ export async function zjAiChart(token:string) {
} }
export async function aiChart(token:string) { export async function aiChart(userId:string, token:string, messageList) {
if (!token) throw new BizError(ERRORENUM.请输入聊天内容); if (!token) throw new BizError(ERRORENUM.请输入聊天内容);
let resultMsg:any = await checkMsg(token, []); let chatInfo = await selectChatInfo(userId);
if (!chatInfo || !chatInfo.userId) {
return {message:resultMsg}; await createChatInfo(userId);
chatInfo = await selectChatInfo(userId);
}
let contextList = JSON.parse(chatInfo.additionalMessages);
let {answer, chatId, conversationId} = await cozeMsg(token, chatInfo.conversationId, chatInfo.chatId, contextList);
/**更新对话记录 */
let newContextList = [];
if (contextList.length >= 10) {
for (let i = 2; i < contextList.length; i++) {
newContextList.push(contextList[i]);
}
}
newContextList.push({ role:'user', msg:token});
newContextList.push({ role:'bot', msg:answer});
chatInfo.additionalMessages = JSON.stringify(newContextList);
/**更新参数 */
chatInfo.chatId = chatId;
chatInfo.conversationId = conversationId;
chatInfo.conversationMs = new Date().valueOf();
return {message:answer};
} }
......
...@@ -138,7 +138,7 @@ export async function inOnceLabelToFuHuaQi(fuHuaQiInfo:any, labelId:string, p1?) ...@@ -138,7 +138,7 @@ export async function inOnceLabelToFuHuaQi(fuHuaQiInfo:any, labelId:string, p1?)
/** /**
* 【孵化器标签】修改 使用的时候,不能被.sava()方法嵌套 * 【孵化器标签】修改 使用的时候,不能被.save()方法嵌套
* @param uscc * @param uscc
* @param labelIdList * @param labelIdList
*/ */
...@@ -199,7 +199,7 @@ export async function outLabelToFuHuaQi(fuHuaQiInfo:any, labelId:string, p1?) { ...@@ -199,7 +199,7 @@ export async function outLabelToFuHuaQi(fuHuaQiInfo:any, labelId:string, p1?) {
if (checkIndex != -1 ) { if (checkIndex != -1 ) {
fuHuaQiInfo.labels[checkIndex].state = false; fuHuaQiInfo.labels[checkIndex].state = false;
await fuHuaQiLabelLogData.addOnceLabelLog(fuHuaQiInfo.uscc, labelId, LABELUPDATEROAD.失效, desc); await fuHuaQiLabelLogData.addOnceLabelLog(fuHuaQiInfo.uscc, labelId, LABELUPDATEROAD.失效, desc);
await fuHuaQiInfo.sava(); await fuHuaQiInfo.save();
} }
} }
......
...@@ -252,8 +252,11 @@ export async function checkTask(uscc:string, taskType:number) { ...@@ -252,8 +252,11 @@ export async function checkTask(uscc:string, taskType:number) {
let enterpriseList = await enterpriseData.findEnterpriseList({taskId:TaskId}); let enterpriseList = await enterpriseData.findEnterpriseList({taskId:TaskId});
for (let i in enterpriseList) { for (let i in enterpriseList) {
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(enterpriseList[i].uscc); let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(enterpriseList[i].uscc);
await enterpriseLabelEvent(enterpriseInfo, LABELEVENT.入孵, fuHuaQiInfo.operationName); if (enterpriseInfo) {
await enterpriseInfo.sava(); await enterpriseLabelEvent(enterpriseInfo, LABELEVENT.入孵, fuHuaQiInfo.operationName);
await enterpriseInfo.save();
}
} }
break; break;
......
...@@ -74,7 +74,7 @@ export async function initSystemTask() { ...@@ -74,7 +74,7 @@ export async function initSystemTask() {
* 6.0新加 用于标签系统 * 6.0新加 用于标签系统
*/ */
await initSystemLabelData(); await initSystemLabelData();
await systemLabel(); // await systemLabel();
let lastUpdateDay = moment().format("YYYY-MM-DD"); let lastUpdateDay = moment().format("YYYY-MM-DD");
setInterval(async function () { setInterval(async function () {
let hours = moment().hours(); let hours = moment().hours();
......
...@@ -84,7 +84,8 @@ export enum ERRORENUM { ...@@ -84,7 +84,8 @@ export enum ERRORENUM {
不可以创建未来数据月的任务, 不可以创建未来数据月的任务,
填报周期不能小于数据周期, 填报周期不能小于数据周期,
党员年龄分布总和大于总数, 党员年龄分布总和大于总数,
不可选择未来时间 不可选择未来时间,
智能体调用出错请联系管理员
} }
export enum ERRORCODEENUM { export enum ERRORCODEENUM {
......
...@@ -143,7 +143,7 @@ export async function findFuHuaQiByName(name:string) { ...@@ -143,7 +143,7 @@ export async function findFuHuaQiByName(name:string) {
* @returns [] 孵化器列表 * @returns [] 孵化器列表
*/ */
export async function findFuHuaQiListByPage(selectParam, skipCount) { export async function findFuHuaQiListByPage(selectParam, skipCount) {
selectParam.isTest = null; selectParam.isTest = {"$ne":true}
return await fuHuaQiModel.find(selectParam).skip(skipCount).limit(10); return await fuHuaQiModel.find(selectParam).skip(skipCount).limit(10);
} }
...@@ -154,7 +154,7 @@ export async function findFuHuaQiListByPage(selectParam, skipCount) { ...@@ -154,7 +154,7 @@ export async function findFuHuaQiListByPage(selectParam, skipCount) {
* @returns [] 孵化器列表 * @returns [] 孵化器列表
*/ */
export async function findFuHuaQiList(selectParam) { export async function findFuHuaQiList(selectParam) {
selectParam.isTest = null; selectParam.isTest = {"$ne":true}
return await fuHuaQiModel.find(selectParam); return await fuHuaQiModel.find(selectParam);
} }
...@@ -165,7 +165,7 @@ export async function findFuHuaQiList(selectParam) { ...@@ -165,7 +165,7 @@ export async function findFuHuaQiList(selectParam) {
* @returns number 数据数量 * @returns number 数据数量
*/ */
export async function findFuHuaQiCount(selectParam) { export async function findFuHuaQiCount(selectParam) {
selectParam.isTest = null; selectParam.isTest = {"$ne":true}
return await fuHuaQiModel.find(selectParam).countDocuments(); return await fuHuaQiModel.find(selectParam).countDocuments();
} }
...@@ -175,7 +175,7 @@ export async function findFuHuaQiCount(selectParam) { ...@@ -175,7 +175,7 @@ export async function findFuHuaQiCount(selectParam) {
* @returns map key:统一信用代码 value:运营机构名称 * @returns map key:统一信用代码 value:运营机构名称
*/ */
export async function findFuHuaQiOperationNameMapByParam(param) { export async function findFuHuaQiOperationNameMapByParam(param) {
param.isTest = null; param.isTest = {"$ne":true}
let dataList = await fuHuaQiModel.find(param); let dataList = await fuHuaQiModel.find(param);
let map = {}; let map = {};
dataList.forEach(info => { dataList.forEach(info => {
...@@ -261,7 +261,7 @@ export async function findFuHuaQiByBindId(bindId:string) { ...@@ -261,7 +261,7 @@ export async function findFuHuaQiByBindId(bindId:string) {
* @returns * @returns
*/ */
export async function findFuHuaQiFilesDataByParam(param, files) { export async function findFuHuaQiFilesDataByParam(param, files) {
param.isTest = null; param.isTest = {"$ne":true}
return await fuHuaQiModel.find(param, files); return await fuHuaQiModel.find(param, files);
} }
......
/**
* 张江小助手
* 没有权限 2023-02-06 确定此需求
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const chartSchema = new Schema({
userId:{type:String, index:true},//用户标识 唯一
conversationId:String,//会话id
conversationMs:Number,//最近一次会话时间
chatId:String,//对话id
additionalMessages:String,//对话上下文json格式,数组限制长度为10
});
var chartModel;
export function initModel(){
chartModel = baseDB.model('chart', chartSchema);
chartModel.selectOnceData = async function (paramater:object) {
let selectInfo = await chartModel.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 selectChatInfo(userId:string) {
return await chartModel.selectOnceData({userId});
}
export async function createChatInfo(userId:string) {
let initInfo = {
userId,
conversationId:'',
conversationMs:0,
chatId:'',
additionalMessages:'[]'
}
return await chartModel.create(initInfo);
}
...@@ -37,6 +37,9 @@ import * as customTaskModel from "../../data/fuHuaQi/customTask"; ...@@ -37,6 +37,9 @@ import * as customTaskModel from "../../data/fuHuaQi/customTask";
/**党建任务 */ /**党建任务 */
import * as dangJianModel from "../../data/fuHuaQi/monthTask/dangJian"; import * as dangJianModel from "../../data/fuHuaQi/monthTask/dangJian";
import * as chartModel from "../../data/guanWeiHui/chart";
export async function initTable() { export async function initTable() {
...@@ -77,4 +80,6 @@ export async function initTable() { ...@@ -77,4 +80,6 @@ export async function initTable() {
customTaskModel.initModel(); customTaskModel.initModel();
dangJianModel.initModel(); dangJianModel.initModel();
chartModel.initModel();
} }
\ No newline at end of file
import { zhenDuanBaoGao } from "./biz/admin/provide";
import { initPool } from "./biz/gpt/indicatorPool"; import { initPool } from "./biz/gpt/indicatorPool";
import { initOutline } from "./biz/gpt/report"; import { initOutline } from "./biz/gpt/report";
import { initSMS } from "./biz/sms"; import { initSMS } from "./biz/sms";
......
...@@ -15,12 +15,12 @@ export function setRouter(httpServer) { ...@@ -15,12 +15,12 @@ export function setRouter(httpServer) {
} }
async function chart(req, res) { async function chart(req, res) {
let reqConf = {msg: 'String' }; let reqConf = {msg: 'String', messageList:'[Object]' };
let { msg } = eccReqParamater(reqConf, req.body); let { msg, messageList } = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc; const userId = req.headers.userid;
let result = {}; let result = {};
if (!req.headers.isFuHuaQi) { if (!req.headers.isFuHuaQi) {
result = await aiChart(msg); result = await aiChart(userId, msg, messageList);
} }
res.success(result); res.success(result);
......
...@@ -88,6 +88,7 @@ export function cozePost(url, body, headers) { ...@@ -88,6 +88,7 @@ export function cozePost(url, body, headers) {
}) })
} }
export function cozeGet(url:string, query?, headers?) { export function cozeGet(url:string, query?, headers?) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误"); if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
return new Promise((resolve, reject)=>{ return new Promise((resolve, reject)=>{
......
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