2024-11-13 17:01:24 +08:00
|
|
|
|
using DocumentFormat.OpenXml.Spreadsheet;
|
|
|
|
|
|
using Infrastructure;
|
|
|
|
|
|
using Microsoft.Extensions.Configuration;
|
2024-11-13 15:15:30 +08:00
|
|
|
|
using OpenAuth.App.BaseApp.Base;
|
|
|
|
|
|
using OpenAuth.App.Interface;
|
2024-11-13 17:01:24 +08:00
|
|
|
|
using OpenAuth.App.ServiceApp.Request;
|
2024-11-13 15:15:30 +08:00
|
|
|
|
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
|
|
|
|
|
|
{
|
2024-11-13 17:01:24 +08:00
|
|
|
|
public class AdminTaskManageApp : SqlSugarBaseApp<InsTask, SugarDbContext>
|
2024-11-13 15:15:30 +08:00
|
|
|
|
{
|
|
|
|
|
|
private readonly IConfiguration _configuration;
|
2024-11-13 17:01:24 +08:00
|
|
|
|
private readonly ISqlSugarClient client;
|
|
|
|
|
|
public AdminTaskManageApp(ISugarUnitOfWork<SugarDbContext> unitWork, ISimpleClient<InsTask> repository, IAuth auth, ISqlSugarClient sqlSugarClient, IConfiguration configuration) : base(unitWork, repository, auth)
|
2024-11-13 15:15:30 +08:00
|
|
|
|
{
|
2024-11-13 17:01:24 +08:00
|
|
|
|
_configuration = configuration;
|
|
|
|
|
|
this.client = sqlSugarClient;
|
|
|
|
|
|
}
|
2024-11-14 09:24:33 +08:00
|
|
|
|
string[] chineseNumbers = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 添加任务
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="req"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
/// <exception cref="Exception"></exception>
|
2024-11-13 17:01:24 +08:00
|
|
|
|
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;
|
2024-11-14 09:24:33 +08:00
|
|
|
|
string chineseGroupName = $"{ConvertToChineseNumber(i)}组";
|
2024-11-13 17:01:24 +08:00
|
|
|
|
// 如果是最后一组,并且剩余的少于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(),
|
2024-11-14 09:24:33 +08:00
|
|
|
|
GroupName = chineseGroupName,
|
2024-11-13 17:01:24 +08:00
|
|
|
|
Sort = i,
|
|
|
|
|
|
BeginNum = beginNum,
|
|
|
|
|
|
EndNum = endNum,
|
|
|
|
|
|
TaskId = insTaskInfo.Id,
|
|
|
|
|
|
IsComplate = false,
|
|
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
lastGroupRemaining -= everyNum; // 更新剩余的任务数
|
|
|
|
|
|
}
|
|
|
|
|
|
//添加前后时相
|
|
|
|
|
|
List<InsTasktif> insTasktifList = new List<InsTasktif>();
|
2024-11-14 09:24:33 +08:00
|
|
|
|
foreach (var item in req.PreviousPhase)
|
2024-11-13 17:01:24 +08:00
|
|
|
|
{
|
|
|
|
|
|
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);
|
2024-11-14 09:24:33 +08:00
|
|
|
|
// 提交事务
|
2024-11-13 17:01:24 +08:00
|
|
|
|
if (db.Commit())
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<string>
|
|
|
|
|
|
{
|
|
|
|
|
|
Result = "添加成功",
|
|
|
|
|
|
Message = "添加成功"
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new Exception("添加失败");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-11-13 15:15:30 +08:00
|
|
|
|
}
|
2024-11-14 09:24:33 +08:00
|
|
|
|
string ConvertToChineseNumber(int num)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (num < 1 || num > 10) return num.ToString(); // 如果大于 10 或小于 1,直接返回数字(可以根据需求修改)
|
|
|
|
|
|
|
|
|
|
|
|
return chineseNumbers[num];
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 删除任务
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="id"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
/// <exception cref="Exception"></exception>
|
|
|
|
|
|
public async Task<Response<string>> DeleteTask(string id)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
var taskInfo = await db.InsTask.GetFirstAsync(r => r.Id == id);
|
|
|
|
|
|
//判断是否存在或者是否已被领取
|
|
|
|
|
|
if (taskInfo == null || taskInfo.State != 0)
|
|
|
|
|
|
throw new Exception("任务已被领取,无法删除");
|
|
|
|
|
|
|
|
|
|
|
|
//删除任务表,任务分组表,任务前后时相表
|
|
|
|
|
|
await db.InsTask.DeleteAsync(taskInfo);
|
|
|
|
|
|
await db.InsTaskgroup.DeleteAsync(r => r.TaskId == id);
|
|
|
|
|
|
await db.InsTasktif.DeleteAsync(r => r.TaskId == id);
|
|
|
|
|
|
// 提交事务
|
|
|
|
|
|
if (db.Commit())
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<string>
|
|
|
|
|
|
{
|
|
|
|
|
|
Result = "删除成功",
|
|
|
|
|
|
Message = "删除成功"
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new Exception("删除失败");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 修改任务
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="req"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
/// <exception cref="Exception"></exception>
|
|
|
|
|
|
public async Task<Response<string>> EditTask(InsTaskReq req)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
var insTaskInfo = await db.InsTask.GetFirstAsync(r => r.Id == req.Id);
|
|
|
|
|
|
//判断是否存在或者是否已被领取
|
|
|
|
|
|
if (insTaskInfo == null || insTaskInfo.State != 0)
|
|
|
|
|
|
throw new Exception("任务已被领取,无法修改");
|
|
|
|
|
|
var user = _auth.GetCurrentUser().User;
|
|
|
|
|
|
//删除任务分组表,任务前后时相表
|
|
|
|
|
|
await db.InsTaskgroup.DeleteAsync(r => r.TaskId == req.Id);
|
|
|
|
|
|
await db.InsTasktif.DeleteAsync(r => r.TaskId == req.Id);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取ai解译成果
|
|
|
|
|
|
var aishp = await db.InsAishp.GetFirstAsync(r => r.Id == req.ShpId);
|
|
|
|
|
|
|
|
|
|
|
|
insTaskInfo.TaskName = req.TaskName;
|
|
|
|
|
|
insTaskInfo.Remark = req.Remark;
|
|
|
|
|
|
insTaskInfo.ShpId = req.ShpId;
|
|
|
|
|
|
insTaskInfo.UpdateTime = DateTime.Now;
|
|
|
|
|
|
insTaskInfo.UpdateUser = user == null ? "" : user.Id.ToString();
|
|
|
|
|
|
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;
|
|
|
|
|
|
string chineseGroupName = $"{ConvertToChineseNumber(i)}组";
|
|
|
|
|
|
// 如果是最后一组,并且剩余的少于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 = chineseGroupName,
|
|
|
|
|
|
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.UpdateAsync(insTaskInfo);
|
|
|
|
|
|
await db.InsTaskgroup.InsertRangeAsync(insTaskGroup);
|
|
|
|
|
|
await db.InsTasktif.InsertRangeAsync(insTasktifList);
|
|
|
|
|
|
// 提交事务
|
|
|
|
|
|
if (db.Commit())
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<string>
|
|
|
|
|
|
{
|
|
|
|
|
|
Result = "修改成功",
|
|
|
|
|
|
Message = "修改成功"
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new Exception("修改失败");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-11-13 15:15:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|