Infrastructure/OpenAuth.App/ServiceApp/AdminTaskManageApp.cs

130 lines
5.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using DocumentFormat.OpenXml.Spreadsheet;
using Infrastructure;
using Microsoft.Extensions.Configuration;
using OpenAuth.App.BaseApp.Base;
using OpenAuth.App.Interface;
using OpenAuth.App.ServiceApp.Request;
using OpenAuth.Repository;
using OpenAuth.Repository.Domain;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OpenAuth.App.ServiceApp
{
public class AdminTaskManageApp : SqlSugarBaseApp<InsTask, SugarDbContext>
{
private readonly IConfiguration _configuration;
private readonly ISqlSugarClient client;
public AdminTaskManageApp(ISugarUnitOfWork<SugarDbContext> unitWork, ISimpleClient<InsTask> repository, IAuth auth, ISqlSugarClient sqlSugarClient, IConfiguration configuration) : base(unitWork, repository, auth)
{
_configuration = configuration;
this.client = sqlSugarClient;
}
//添加任务
public async Task<Response<string>> AddTask(InsTaskReq req)
{
using (var db = base.UnitWork.CreateContext())
{
var user = _auth.GetCurrentUser().User;
// 获取ai解译成果
var aishp = await db.InsAishp.GetFirstAsync(r => r.Id == req.ShpId);
var insTaskInfo = req.MapTo<InsTask>();
insTaskInfo.Id = Guid.NewGuid().ToString();
insTaskInfo.CreateTime = DateTime.Now;
insTaskInfo.CreateUser = user == null ? "" : user.Id.ToString();
insTaskInfo.UpdateTime = DateTime.Now;
insTaskInfo.UpdateUser = user == null ? "" : user.Id.ToString();
insTaskInfo.State = 0;
insTaskInfo.IsCompleted = false;
insTaskInfo.CreateUserName = user == null ? "" : user.Name;
insTaskInfo.UpdateUserName = user == null ? "" : user.Name;
// 拆分图斑数
int groupNum = (int)Math.Ceiling((double)aishp.ShpCount / 1000);
List<InsTaskgroup> insTaskGroup = new List<InsTaskgroup>();
int lastGroupRemaining = (int)aishp.ShpCount;
for (var i = 1; i <= groupNum; i++)
{
int everyNum = 1000;
// 如果是最后一组并且剩余的少于1000将剩余的任务加到上一组
if (i == groupNum && lastGroupRemaining < 1000)
{
everyNum = lastGroupRemaining;
if (i > 1)
{
// 更新上一组的 EndNum
var lastGroup = insTaskGroup.Last();
lastGroup.EndNum += everyNum;
}
break; // 最后一组处理完毕,退出循环
}
// 计算每组的起始和结束数字
int beginNum = (i - 1) * 1000 + 1;
int endNum = beginNum + everyNum - 1;
insTaskGroup.Add(new InsTaskgroup
{
Id = Guid.NewGuid().ToString(),
GroupName = $"{i}组",
Sort = i,
BeginNum = beginNum,
EndNum = endNum,
TaskId = insTaskInfo.Id,
IsComplate = false,
CreateTime = DateTime.Now,
});
lastGroupRemaining -= everyNum; // 更新剩余的任务数
}
//添加前后时相
List<InsTasktif> insTasktifList = new List<InsTasktif>();
foreach(var item in req.PreviousPhase)
{
insTasktifList.Add(new InsTasktif
{
TaskId = insTaskInfo.Id,
TifId = item,
TifType = 0
}); ;
}
foreach (var item in req.LaterPhase)
{
insTasktifList.Add(new InsTasktif
{
TaskId = insTaskInfo.Id,
TifId = item,
TifType = 1
}); ;
}
// 插入任务和任务组以及前后时相
await db.InsTask.InsertAsync(insTaskInfo);
await db.InsTaskgroup.InsertRangeAsync(insTaskGroup);
await db.InsTasktif.InsertRangeAsync(insTasktifList);
// 提交事务并检查结果
if (db.Commit())
{
return new Response<string>
{
Result = "添加成功",
Message = "添加成功"
};
}
else
{
throw new Exception("添加失败");
}
}
}
}
}