Commit 1318e1f4 by lixinming

no message

parent 84624d35
......@@ -1970,4 +1970,120 @@ export async function xiuFuCustomTask() {
}
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 @@
* ai聊天模块
*/
import { ERRORENUM } from "../../config/errorEnum"
import { BizError } from "../../util/bizError"
import { cozeGet, cozePost, post } from "../../util/request"
const request = require('request')
......@@ -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 = {
Authorization:'Bearer pat_2mhpgd35eLzZsh9nPghVMquAEqy73KXfDAfuqps0IWy2TT1m75P6lfuYedZGkwfW',
/**请求头 */
const Header = {
Authorization:'Bearer pat_KORy65MIpPSGQ8cx4rLLipsAZhgjkk5neIv0o1IWKb2svC3t2RbECSMpSBHWyDuN',
"Content-Type":"application/json"
};
let url = 'https://api.coze.cn/v3/chat';
let body = {
bot_id :"7395108996510089266",
conversation_id:"7397235079933902887",
const botId = '7395108996510089266';
/**创建会话 */
if (!conversationId) {
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",
stream:false,
query:msg,
auto_save_history:true
auto_save_history:true,
additional_messages
};
let result:any = await cozePost(url, body, header);
if (result.data) {
let {status, conversation_id, id} = result.data;
if (status == "in_progress") {
let max = 10;
for (let i = 0; i < max; i++) {
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 chatResult:any = await cozePost(chatUrl, chatBody, Header);
//判断创建情况,如果消息创建失败,后面轮询会报错
if (!createMessageRes.data) {
throw new BizError(ERRORENUM.智能体调用出错请联系管理员, '发起对话失败');
}
chatId = chatResult.data.id;
/**查询对话状态 */
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) {
......@@ -103,4 +154,4 @@ function sleep(time) {
resolve({});
}, time);
});
}
\ No newline at end of file
}
......@@ -4,9 +4,10 @@
import { ERRORENUM } from "../../config/errorEnum";
import { findFuHuaQiList } from "../../data/fuHuaQi/fuhuaqi";
import { createChatInfo, selectChatInfo } from "../../data/guanWeiHui/chart";
import { BizError } from "../../util/bizError";
import { TARGET } from "./enum";
import { checkMsg } from "./gpt";
import { checkMsg, cozeMsg } from "./gpt";
import { getIndicationRate, getIndicationValueStr, getIndicationValue } from "./indicatorPool";
const officegen = require('officegen');
......@@ -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.请输入聊天内容);
let resultMsg:any = await checkMsg(token, []);
return {message:resultMsg};
let chatInfo = await selectChatInfo(userId);
if (!chatInfo || !chatInfo.userId) {
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?)
/**
* 【孵化器标签】修改 使用的时候,不能被.sava()方法嵌套
* 【孵化器标签】修改 使用的时候,不能被.save()方法嵌套
* @param uscc
* @param labelIdList
*/
......@@ -199,7 +199,7 @@ export async function outLabelToFuHuaQi(fuHuaQiInfo:any, labelId:string, p1?) {
if (checkIndex != -1 ) {
fuHuaQiInfo.labels[checkIndex].state = false;
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) {
let enterpriseList = await enterpriseData.findEnterpriseList({taskId:TaskId});
for (let i in enterpriseList) {
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(enterpriseList[i].uscc);
await enterpriseLabelEvent(enterpriseInfo, LABELEVENT.入孵, fuHuaQiInfo.operationName);
await enterpriseInfo.sava();
if (enterpriseInfo) {
await enterpriseLabelEvent(enterpriseInfo, LABELEVENT.入孵, fuHuaQiInfo.operationName);
await enterpriseInfo.save();
}
}
break;
......
......@@ -74,7 +74,7 @@ export async function initSystemTask() {
* 6.0新加 用于标签系统
*/
await initSystemLabelData();
await systemLabel();
// await systemLabel();
let lastUpdateDay = moment().format("YYYY-MM-DD");
setInterval(async function () {
let hours = moment().hours();
......
......@@ -84,7 +84,8 @@ export enum ERRORENUM {
不可以创建未来数据月的任务,
填报周期不能小于数据周期,
党员年龄分布总和大于总数,
不可选择未来时间
不可选择未来时间,
智能体调用出错请联系管理员
}
export enum ERRORCODEENUM {
......
......@@ -143,7 +143,7 @@ export async function findFuHuaQiByName(name:string) {
* @returns [] 孵化器列表
*/
export async function findFuHuaQiListByPage(selectParam, skipCount) {
selectParam.isTest = null;
selectParam.isTest = {"$ne":true}
return await fuHuaQiModel.find(selectParam).skip(skipCount).limit(10);
}
......@@ -154,7 +154,7 @@ export async function findFuHuaQiListByPage(selectParam, skipCount) {
* @returns [] 孵化器列表
*/
export async function findFuHuaQiList(selectParam) {
selectParam.isTest = null;
selectParam.isTest = {"$ne":true}
return await fuHuaQiModel.find(selectParam);
}
......@@ -165,7 +165,7 @@ export async function findFuHuaQiList(selectParam) {
* @returns number 数据数量
*/
export async function findFuHuaQiCount(selectParam) {
selectParam.isTest = null;
selectParam.isTest = {"$ne":true}
return await fuHuaQiModel.find(selectParam).countDocuments();
}
......@@ -175,7 +175,7 @@ export async function findFuHuaQiCount(selectParam) {
* @returns map key:统一信用代码 value:运营机构名称
*/
export async function findFuHuaQiOperationNameMapByParam(param) {
param.isTest = null;
param.isTest = {"$ne":true}
let dataList = await fuHuaQiModel.find(param);
let map = {};
dataList.forEach(info => {
......@@ -261,7 +261,7 @@ export async function findFuHuaQiByBindId(bindId:string) {
* @returns
*/
export async function findFuHuaQiFilesDataByParam(param, files) {
param.isTest = null;
param.isTest = {"$ne":true}
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";
/**党建任务 */
import * as dangJianModel from "../../data/fuHuaQi/monthTask/dangJian";
import * as chartModel from "../../data/guanWeiHui/chart";
export async function initTable() {
......@@ -77,4 +80,6 @@ export async function initTable() {
customTaskModel.initModel();
dangJianModel.initModel();
chartModel.initModel();
}
\ No newline at end of file
import { zhenDuanBaoGao } from "./biz/admin/provide";
import { initPool } from "./biz/gpt/indicatorPool";
import { initOutline } from "./biz/gpt/report";
import { initSMS } from "./biz/sms";
......
......@@ -15,12 +15,12 @@ export function setRouter(httpServer) {
}
async function chart(req, res) {
let reqConf = {msg: 'String' };
let { msg } = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let reqConf = {msg: 'String', messageList:'[Object]' };
let { msg, messageList } = eccReqParamater(reqConf, req.body);
const userId = req.headers.userid;
let result = {};
if (!req.headers.isFuHuaQi) {
result = await aiChart(msg);
result = await aiChart(userId, msg, messageList);
}
res.success(result);
......
......@@ -88,6 +88,7 @@ export function cozePost(url, body, headers) {
})
}
export function cozeGet(url:string, query?, headers?) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
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