|
|
@@ -1,4 +1,5 @@
|
|
|
using Aspose.Cells;
|
|
|
+using Dm.util;
|
|
|
using FluentValidation;
|
|
|
using Markdig;
|
|
|
using Microsoft.AspNetCore.SignalR;
|
|
|
@@ -3753,6 +3754,196 @@ OPTION (MAXRECURSION 0); -- 允许无限递归 ";
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 商邀员工分析
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="userId"></param>
|
|
|
+ /// <param name="start"></param>
|
|
|
+ /// <param name="end"></param>
|
|
|
+ /// <param name="createUserId"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet]
|
|
|
+ public async Task<IActionResult> AiPerformanceAnalysis_BusinessInvitationAsync(int userId, DateTime start, DateTime end, int createUserId)
|
|
|
+ {
|
|
|
+ var jw = JsonView(false);
|
|
|
+
|
|
|
+ return Ok(jw);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 信息部员工分析
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="userId"></param>
|
|
|
+ /// <param name="start"></param>
|
|
|
+ /// <param name="end"></param>
|
|
|
+ /// <param name="createUserId"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet]
|
|
|
+ public async Task<IActionResult> AiPerformanceAnalysis_InformationDepartmentAsync(int userId, DateTime start, DateTime end, int createUserId)
|
|
|
+ {
|
|
|
+ return Ok(await AiPerformanceAnalysis_TaskAllocationAsync(userId, start, end, createUserId, 1473));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 财务部员工分析
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="userId"></param>
|
|
|
+ /// <param name="start"></param>
|
|
|
+ /// <param name="end"></param>
|
|
|
+ /// <param name="createUserId"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet]
|
|
|
+ public async Task<IActionResult> AiPerformanceAnalysis_FinancialDepartmentAsync(int userId, DateTime start, DateTime end, int createUserId)
|
|
|
+ {
|
|
|
+ return Ok(await AiPerformanceAnalysis_TaskAllocationAsync(userId, start, end, createUserId, 1474));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 任务分配分析
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="userId"></param>
|
|
|
+ /// <param name="start"></param>
|
|
|
+ /// <param name="end"></param>
|
|
|
+ /// <param name="createUserId"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private async Task<JsonView> AiPerformanceAnalysis_TaskAllocationAsync(int userId, DateTime start, DateTime end, int createUserId, int setdataId)
|
|
|
+ {
|
|
|
+ var jw = JsonView(false);
|
|
|
+
|
|
|
+ var user_entity = _sqlSugar.Queryable<Sys_Users>().First(e => e.Id == userId && e.IsDel == 0);
|
|
|
+ if (user_entity == null)
|
|
|
+ {
|
|
|
+ jw.Msg = "用户不存在!";
|
|
|
+ return jw;
|
|
|
+ }
|
|
|
+
|
|
|
+ string sql = string.Format(@"Select
|
|
|
+ *
|
|
|
+ From
|
|
|
+ (
|
|
|
+ Select
|
|
|
+ ta.Id,
|
|
|
+ ta.TaskName,
|
|
|
+ ta.TaskContent,
|
|
|
+ s.Name as 'TaskTypeName',
|
|
|
+ ta.TaskPriority,
|
|
|
+ d.DepName,
|
|
|
+ di.TeamName,
|
|
|
+ ta.Status,
|
|
|
+ ta.PredictBeginTime,
|
|
|
+ ta.PredictEndTime,
|
|
|
+ ta.CreateUserId,
|
|
|
+ u.CnName As CreateUserName,
|
|
|
+ ta.CreateTime,
|
|
|
+ ta.Remark,
|
|
|
+ ta.OverTime,
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ STUFF(
|
|
|
+ (
|
|
|
+ Select
|
|
|
+ ',' + u.CnName
|
|
|
+ From
|
|
|
+ Pm_TaskRelevanceUser tra
|
|
|
+ Left Join Sys_Users u On tra.UserId = u.Id
|
|
|
+ Where
|
|
|
+ tra.Isdel = 0
|
|
|
+ And tra.TAId = ta.Id FOR XML PATH('')
|
|
|
+ ),
|
|
|
+ 1,
|
|
|
+ 1,
|
|
|
+ ''
|
|
|
+ )
|
|
|
+ ) As Participant
|
|
|
+ From
|
|
|
+ Pm_TaskAllocation ta
|
|
|
+ Left Join Sys_Department d On ta.DepId = d.Id
|
|
|
+ Left Join Grp_DelegationInfo di On ta.DiId = di.Id
|
|
|
+ Left Join Sys_Users u On ta.CreateUserId = u.Id
|
|
|
+ left join Sys_SetData s on ta.TaskType = s.Id
|
|
|
+ Where
|
|
|
+ ta.IsDel = 0
|
|
|
+ and ta.PredictEndTime >= '{2}'
|
|
|
+ and ta.PredictEndTime <= '{3}'
|
|
|
+ ) As temp
|
|
|
+ WHERE
|
|
|
+ [CreateUserName] like '%{0}%'
|
|
|
+ OR [Participant] like '%{1}%'", user_entity.CnName, user_entity.CnName, start.ToString("yyyy-MM-dd HH:mm:ss"), end.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
|
+
|
|
|
+ var _view = await _sqlSugar
|
|
|
+ .SqlQueryable<TaskListView>(sql)
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ if (_view == null || _view.Count == 0)
|
|
|
+ {
|
|
|
+ jw.Msg = "暂无任务数据不存在!";
|
|
|
+ return jw;
|
|
|
+ }
|
|
|
+
|
|
|
+ var setdata_entity = _sqlSugar.Queryable<Sys_SetData>()
|
|
|
+ .First(e => e.Id == setdataId && e.IsDel == 0);
|
|
|
+
|
|
|
+ string question = string.Empty;
|
|
|
+ var stringFormatResp = await GeneralMethod.StringFormatAsync(new StringFormatDto
|
|
|
+ {
|
|
|
+ FormatTemplate = setdata_entity.Remark,
|
|
|
+ Parameters = new List<string> {
|
|
|
+ JsonConvert.SerializeObject(_view),
|
|
|
+ user_entity.CnName,
|
|
|
+ start.ToString("yyyy-MM-dd"),
|
|
|
+ end.ToString("yyyy-MM-dd")
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ if (!stringFormatResp.Success)
|
|
|
+ {
|
|
|
+ jw.Msg = "数据模板格式化失败!" + stringFormatResp.Message;
|
|
|
+ return jw;
|
|
|
+ }
|
|
|
+
|
|
|
+ question = stringFormatResp.FormattedResult;
|
|
|
+
|
|
|
+ var resp = await _deepSeekService.ChatAsync(question);
|
|
|
+ if (!resp.Success)
|
|
|
+ {
|
|
|
+ jw.Msg = "Ai分析任务分配失败!" + resp.Message;
|
|
|
+ return jw;
|
|
|
+ }
|
|
|
+
|
|
|
+ var kaoqinResp = await GetKaoqinAnalysisAsync(user_entity, start, end, jw, "Ai分析任务分配");
|
|
|
+ if (string.IsNullOrEmpty(kaoqinResp))
|
|
|
+ {
|
|
|
+ return jw;
|
|
|
+ }
|
|
|
+
|
|
|
+ jw.Code = 200;
|
|
|
+ jw.Msg = "操作成功!";
|
|
|
+ jw.Data = new AiResponse()
|
|
|
+ {
|
|
|
+ Answer = resp.Answer,
|
|
|
+ KaoqinAnswer = kaoqinResp
|
|
|
+ };
|
|
|
+
|
|
|
+ //存入数据库
|
|
|
+ Pm_PerformanceAnalysis insertData = new Pm_PerformanceAnalysis
|
|
|
+ {
|
|
|
+ CreateTime = DateTime.Now,
|
|
|
+ CreateUserId = createUserId,
|
|
|
+ IsDel = 0,
|
|
|
+ Year = start.Year,
|
|
|
+ Month = start.Month,
|
|
|
+ JsonResult = JsonConvert.SerializeObject(jw.Data),
|
|
|
+ StartDate = start,
|
|
|
+ EndDate = end,
|
|
|
+ UserId = userId
|
|
|
+ };
|
|
|
+
|
|
|
+ await _sqlSugar.Insertable(insertData).ExecuteCommandAsync();
|
|
|
+
|
|
|
+ return jw;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
class wordTable
|
|
|
{
|