#region << 版 本 注 释 >>
|
|
/*----------------------------------------------------------------
|
* 命名空间:WIDESEAWCS_TaskInfoService
|
* 创建者:胡童庆
|
* 创建时间:2024/8/2 16:13:36
|
* 版本:V1.0.0
|
* 描述:
|
*
|
* ----------------------------------------------------------------
|
* 修改人:
|
* 修改时间:
|
* 版本:V1.0.1
|
* 修改说明:
|
*
|
*----------------------------------------------------------------*/
|
|
#endregion << 版 本 注 释 >>
|
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
|
using System.Text.Json;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.BaseServices;
|
using WIDESEAWCS_DTO.TaskInfo;
|
using WIDESEAWCS_ITaskInfoRepository;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_ISystemServices;
|
using WIDESEAWCS_ISystemRepository;
|
using WIDESEA_Common;
|
using WIDESEA_Core.Enums;
|
using SqlSugar.Extensions;
|
using System.Threading.Tasks;
|
using System.Reflection.Emit;
|
using WIDESEAWCS_Core.Enums;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Numeric;
|
using WIDESEAWCS_Core.Tool;
|
using System.Net;
|
namespace WIDESEAWCS_TaskInfoService
|
{
|
public class TaskCZService : ServiceBase<DtCZTask, ITaskCZRepository>, ITaskCZService
|
{
|
private readonly ITaskRepository _taskRepository;
|
private readonly ITaskService _taskService;
|
private readonly ITaskCZDetailsRepository _detailsRepository;
|
private readonly IDt_StationinfoRepository _stationinfoRepository;
|
private readonly ITaskHtyRepository _taskHtyRepository;
|
private readonly ITaskHtyService _taskHtyService;
|
|
public TaskCZService(ITaskCZRepository BaseDal, ITaskHtyService taskHtyService, ITaskHtyRepository taskHtyRepository, IDt_StationinfoRepository stationinfoRepository, ITaskService taskService, ITaskRepository taskRepository, ITaskCZDetailsRepository detailsRepository) : base(BaseDal)
|
{
|
_taskRepository = taskRepository;
|
_detailsRepository = detailsRepository;
|
_taskService = taskService;
|
_stationinfoRepository = stationinfoRepository;
|
_taskHtyRepository = taskHtyRepository;
|
_taskHtyService = taskHtyService;
|
}
|
|
public Task<WebResponseContent> AddTaskCZAsync(CZTaskDto dto)
|
{
|
var response = new WebResponseContent();
|
try
|
{
|
var task = BaseDal.QueryFirst(x => (x.TaskTaskID == dto.DTaskId) || (x.TaskEndAddress == dto.InputValue) || (x.TaskType == dto.TaskType));
|
if (task != null)
|
{
|
response.Error("任务已存在,请勿重复添加!");
|
}
|
var taskModel = new DtCZTask()
|
{
|
TaskTaskID = dto.DTaskId,
|
TaskType = dto.TaskType,
|
TaskEndAddress = dto.InputValue,
|
TaskStatus = TaskInStatusEnum.InNew.ToString(),
|
CreateDate = DateTime.Now,
|
TaskStartDate = DateTime.Now,
|
TaskEndDate = DateTime.Now.AddDays(1),
|
TaskName = dto.TaskType.ToString(),
|
TaskNumber = dto.Number,
|
TaskExecutor = "CZ",
|
TaskOrderNo = dto.OrderNo,
|
TaskOwner = "KH",
|
TaskProductCode = dto.ProductCode,
|
Creater = "KH"
|
};
|
var isTrue = BaseDal.AddData(taskModel) > 0;
|
if (isTrue)
|
response.OK("任务添加成功!");
|
else
|
response.Error("任务添加失败!");
|
}
|
catch (System.Exception ex)
|
{
|
response.Error(ex.Message);
|
}
|
return Task.FromResult(response);
|
}
|
|
/// <summary>
|
/// 完成任务
|
/// </summary>
|
/// <param name="dto"></param>
|
/// <returns></returns>
|
public Task<WebResponseContent> FinishTask(CZTaskFinshDto dto)
|
{
|
WebResponseContent response = new WebResponseContent();
|
try
|
{
|
//ConsoleHelper.WriteErrorLine($"{nameof(dto.TaskId)}");
|
WriteLog.Info("任务完成").Write($"任务号{dto.TaskId}", "任务完成");
|
if (dto.Floor == 1)
|
{
|
var czTask = BaseDal.QueryFirst(x => x.TaskTaskID == dto.TaskId);
|
if (czTask == null)
|
{
|
response.Error("任务不存在!");
|
return Task.FromResult(response);
|
}
|
//if (dto.Tags.Contains("正极"))
|
//{
|
// czTask.TaskZJFinishNumber += 1;
|
//}
|
//else
|
//{
|
// czTask.TaskFJFinishNumber += 1;
|
//}
|
//if (czTask.TaskZJFinishNumber == czTask.TaskNumber || czTask.TaskFJFinishNumber == czTask.TaskNumber)
|
//{
|
// czTask.TaskStatus = TaskInStatusEnum.InFinish.ToString();
|
// czTask.TaskEndDate = DateTime.Now;
|
//}
|
//else
|
//{
|
czTask.TaskStatus = TaskInStatusEnum.Line_InExecuting.ToString();
|
//}
|
|
var details = new DtCZTaskDetails()
|
{
|
MaterialBarCode = dto.MaterialBarcode,
|
MaterialType = dto.ProductCode,
|
TaskDescription = "创智提交任务完成",
|
TaskEndAddress = czTask.TaskEndAddress,
|
TaskName = czTask.TaskName,
|
TaskType = czTask.TaskType,
|
TaskStatus = czTask.TaskStatus,
|
TaskTaskID = czTask.TaskTaskID,
|
};
|
_detailsRepository.AddData(details);
|
|
//if (dto.FinishNum is < 1 or > 4)
|
// throw new ArgumentException("参数错误!FinishNum 必须为 1-4");
|
|
//var detail = dto.FinishNum == 1
|
// ? new CZTaskBarCodeDto()
|
// : JsonSerializer.Deserialize<CZTaskBarCodeDto>(czTask.DtCZTaskDetails) ?? new CZTaskBarCodeDto();
|
|
//var property = dto.FinishNum switch
|
//{
|
// 1 => nameof(CZTaskBarCodeDto.BarCode1),
|
// 2 => nameof(CZTaskBarCodeDto.BarCode2),
|
// 3 => nameof(CZTaskBarCodeDto.BarCode3),
|
// 4 => nameof(CZTaskBarCodeDto.BarCode4),
|
// _ => throw new ArgumentOutOfRangeException("参数错误!请检查【FinishNum】!")
|
//};
|
|
//typeof(CZTaskBarCodeDto).GetProperty(property)?.SetValue(detail, dto.MaterialBarcode);
|
|
//czTask.DtCZTaskDetails = JsonSerializer.Serialize(detail);
|
|
var isTrue = BaseDal.UpdateData(czTask);
|
if (isTrue)
|
{
|
response.OK("任务完成成功!");
|
}
|
else
|
{
|
response.Error("任务完成失败!");
|
}
|
}
|
else
|
{
|
Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == dto.TaskId.ObjToInt());
|
if (task == null)
|
{
|
response.Error("任务不存在!");
|
return Task.FromResult(response);
|
}
|
WriteLog.Info("1").Write($"任务号{task.TaskNum}", "1");
|
task.TaskState = TaskInStatusEnum.AGV_InFinish.ObjToInt();
|
if (task.SourceAddress.Contains("SL-0"))
|
{
|
var address = task.SourceAddress.Split("||");
|
WriteLog.Info("1").Write($"{address}", "1");
|
Dt_Stationinfo Stationinfo = _stationinfoRepository.QueryFirst(x => x.StationCode == address[0]);
|
WriteLog.Info("1").Write($"{Stationinfo.StationCode}", "1");
|
Dt_Stationinfo Stationinfo1 = _stationinfoRepository.QueryFirst(x => x.StationCode == address[1]);
|
WriteLog.Info("1").Write($"{Stationinfo.StationCode}", "1");
|
Stationinfo.Location_state = LocationStatusEnum.Free.ObjToInt();
|
_stationinfoRepository.UpdateData(Stationinfo);
|
Stationinfo1.Location_state = LocationStatusEnum.Free.ObjToInt();
|
_stationinfoRepository.UpdateData(Stationinfo1);
|
}
|
if (task.TargetAddress.Contains("SL-0"))
|
{
|
var address = task.TargetAddress.Split("||");
|
Dt_Stationinfo Stationinfo = _stationinfoRepository.QueryFirst(x => x.StationCode == address[0]);
|
WriteLog.Info("2").Write($"{Stationinfo.StationCode}", "2");
|
Dt_Stationinfo Stationinfo1 = _stationinfoRepository.QueryFirst(x => x.StationCode == address[1]);
|
WriteLog.Info("2").Write($"{Stationinfo.StationCode}", "2");
|
Stationinfo.Location_state = LocationStatusEnum.InStock.ObjToInt();
|
_stationinfoRepository.UpdateData(Stationinfo);
|
Stationinfo1.Location_state = LocationStatusEnum.InStock.ObjToInt();
|
_stationinfoRepository.UpdateData(Stationinfo1);
|
}
|
_taskHtyService.AddTask_Hty(task, OperateTypeEnum.自动完成);
|
_taskService.DeleteData(task);
|
response.OK("任务完成成功!");
|
WriteLog.Info("任务完成成功").Write($"任务号{task.TaskId}", "任务完成成功");
|
}
|
|
}
|
catch (Exception ex)
|
{
|
response.Error(ex.Message);
|
}
|
return Task.FromResult(response);
|
}
|
|
/// <summary>
|
/// 空托回流 AGV任务完成之后需更新缓存架状态
|
/// </summary>
|
/// <param name="saveModel"></param>
|
/// <returns></returns>
|
public Task<WebResponseContent> EmptyTask(SaveModel saveModel)
|
{
|
WebResponseContent webResponseContent = new WebResponseContent();
|
try
|
{
|
//通过站点表判断缓存架是那个区域去那条输送线回流口。。。。。。。。。。。
|
string Saddress = saveModel.MainData["sourceAddress"].ToString();
|
string Saddress1 = saveModel.MainData["sourceAddress1"].ToString();
|
string Taddress = saveModel.MainData["targetAddress"].ToString();
|
if (Saddress == Saddress1)
|
{
|
webResponseContent.Error("同一缓存架不能扫描两次!");
|
return Task.FromResult(webResponseContent);
|
}
|
Dt_Task task = _taskRepository.QueryFirst(x => x.SourceAddress == Saddress || x.SourceAddress == Saddress1 || x.TargetAddress == Saddress || x.TargetAddress == Saddress1);
|
if (task != null)
|
{
|
webResponseContent.Error("此缓存架已存在任务!");
|
return Task.FromResult(webResponseContent);
|
}
|
Dt_Stationinfo Stationinfo = _stationinfoRepository.QueryFirst(x => x.StationCode == Saddress && x.Enable);
|
Dt_Stationinfo Stationinfo1 = _stationinfoRepository.QueryFirst(x => x.StationCode == Saddress1 && x.Enable);
|
if (Stationinfo == null || Stationinfo1 == null)
|
{
|
webResponseContent.Error("未找到此起点缓存架,或此缓存架已被禁用!");
|
return Task.FromResult(webResponseContent);
|
}
|
Stationinfo.Location_state = LocationStatusEnum.Lock.ObjToInt();
|
_stationinfoRepository.UpdateData(Stationinfo);
|
Stationinfo1.Location_state = LocationStatusEnum.Lock.ObjToInt();
|
_stationinfoRepository.UpdateData(Stationinfo1);
|
Dt_Task dt_Task = new Dt_Task();
|
{
|
dt_Task.TaskNum = _taskService.GetTaskNum();
|
dt_Task.CreateDate = DateTime.Now;
|
dt_Task.Creater = "system";
|
dt_Task.CurrentAddress = Stationinfo.StationCode + "||" + Stationinfo1.StationCode;
|
dt_Task.SourceAddress = Stationinfo.StationCode + "||" + Stationinfo1.StationCode;
|
dt_Task.TaskState = (int)TaskInStatusEnum.InNew;
|
//dt_Task.TaskType = (int)TaskOutboundTypeEnum.Outbound;
|
dt_Task.Grade = 1;
|
dt_Task.PalletCode = "";
|
if (Stationinfo.Area == "A区")
|
{
|
dt_Task.TargetAddress = "ZJXL-KPHLS001";
|
dt_Task.NextAddress = "ZJXL-KPHLX001";
|
dt_Task.TaskType = 64;
|
}
|
else
|
{
|
dt_Task.TargetAddress = "FJXL-KPHLS001";
|
dt_Task.NextAddress = "FJXL-KPHLX001";
|
dt_Task.TaskType = 256;
|
}
|
dt_Task.NextAddress = dt_Task.TargetAddress;
|
dt_Task.Barcode = "";
|
dt_Task.Roadway = "AGV";
|
dt_Task.WMSId = 0;
|
dt_Task.Remark = "空托回流";
|
dt_Task.Floor = 3;
|
}
|
var isTrue = _taskRepository.AddData(dt_Task);
|
|
Dt_Task dt_Tasks = new Dt_Task();
|
{
|
dt_Tasks.TaskNum = _taskService.GetTaskNum();
|
dt_Tasks.CreateDate = DateTime.Now;
|
dt_Tasks.Creater = "system";
|
if (Stationinfo.Area == "A区")
|
{
|
dt_Tasks.CurrentAddress = "ZJXL-KPHLX001";
|
}
|
else
|
{
|
dt_Tasks.CurrentAddress = "FJXL-KPHLX001";
|
}
|
dt_Tasks.SourceAddress = dt_Tasks.CurrentAddress;
|
dt_Tasks.TaskState = (int)TaskInStatusEnum.InPending;
|
dt_Tasks.TaskType = 16;
|
dt_Tasks.Grade = 1;
|
dt_Tasks.PalletCode = "";
|
dt_Tasks.TargetAddress = Taddress;
|
dt_Tasks.NextAddress = Taddress;
|
dt_Tasks.Barcode = "";
|
dt_Tasks.Roadway = "AGV";
|
dt_Tasks.WMSId = 0;
|
dt_Tasks.Remark = "空托回流";
|
dt_Task.Floor = 3;
|
}
|
|
var isTrue1 = _taskRepository.AddData(dt_Tasks);
|
webResponseContent.OK("任务下发成功!");
|
}
|
catch (Exception ex)
|
{
|
webResponseContent.Error(ex.Message);
|
}
|
return Task.FromResult(webResponseContent);
|
}
|
/// <summary>
|
/// 烘烤出料 AGV任务完成之后需更新缓存架状态
|
/// </summary>
|
/// <param name="sourceAddress"></param>
|
/// <returns></returns>
|
public Task<WebResponseContent> OutBoundTask(SaveModel saveModel)
|
{
|
WebResponseContent webResponseContent = new WebResponseContent();
|
try
|
{
|
string Saddress = saveModel.MainData["sourceAddress"].ToString();
|
Dt_Task task = _taskRepository.QueryFirst(x => x.SourceAddress == Saddress);
|
if (task != null)
|
{
|
webResponseContent.Error("起点已存在任务!");
|
return Task.FromResult(webResponseContent);
|
}
|
//var station = _stationinfoRepository.QueryFirst(x => x.StationCode == Saddress);
|
//// 查找两个可用的空缓存架
|
//var freeStations = _stationinfoRepository
|
// .QueryData(x => x.Location_state == LocationStatusEnum.Free.ObjToInt() && x.Enable && x.Remark == station.Remark && x.Area == station.Area)// && x.Stationtype == station.Stationtype
|
// .Take(2) // 只取前两个
|
// .ToList();
|
|
//int floor = 0;
|
//if (station.Area.Contains("A区"))
|
//{
|
// floor = 32;
|
//}
|
//else
|
//{
|
// floor = 128;
|
//}
|
//if (freeStations.Count < 2)
|
//{
|
// webResponseContent.Error("未找到足够的空缓存架!");
|
// return Task.FromResult(webResponseContent);
|
//}
|
//// 检查这两个缓存架是否被任务占用
|
//var stationCodes = freeStations.Select(s => s.StationCode).ToList();
|
//freeStations[0].Location_state = LocationStatusEnum.Lock.ObjToInt();
|
//_stationinfoRepository.UpdateData(freeStations[0]);
|
//freeStations[1].Location_state = LocationStatusEnum.Lock.ObjToInt();
|
//_stationinfoRepository.UpdateData(freeStations[1]);
|
////stationCodes.
|
//var tasks = _taskRepository.QueryData(x => stationCodes.Contains(x.SourceAddress) || stationCodes.Contains(x.TargetAddress)).ToList();
|
//if (tasks.Any())
|
//{
|
// webResponseContent.Error("部分缓存架已被占用,无法使用!");
|
// return Task.FromResult(webResponseContent);
|
//}
|
|
Dt_Task dt_Task = new Dt_Task()
|
{
|
TaskNum = _taskService.GetTaskNum(),
|
CreateDate = DateTime.Now,
|
Creater = "system",
|
CurrentAddress = Saddress,
|
SourceAddress = Saddress,
|
TaskState = (int)TaskInStatusEnum.AGV_Queue,
|
TaskType = 0,//floor
|
Grade = 1,
|
PalletCode = "",
|
Floor = 3,
|
TargetAddress = "",//string.Join("||", freeStations.Select(s => s.StationCode))
|
NextAddress = "",//string.Join("||", freeStations.Select(s => s.StationCode))
|
Barcode = "",
|
Roadway = "AGV",
|
WMSId = 0,
|
Remark = "空托回流"
|
};
|
var isTrue = _taskRepository.AddData(dt_Task);
|
webResponseContent.OK("任务下发成功!");
|
}
|
catch (Exception ex)
|
{
|
webResponseContent.Error(ex.Message);
|
}
|
return Task.FromResult(webResponseContent);
|
}
|
/// <summary>
|
/// 烘烤回炉 AGV任务完成之后需更新缓存架状态
|
/// </summary>
|
/// <param name="saveModel"></param>
|
/// <returns></returns>
|
public Task<WebResponseContent> OutBoundTasks(SaveModel saveModel)
|
{
|
WebResponseContent webResponseContent = new WebResponseContent();
|
try
|
{
|
//通过站点表判断缓存架是那个区域去那条输送线回流口。。。。。。。。。。。
|
string Saddress = saveModel.MainData["sourceAddress"].ToString();
|
string Saddress1 = saveModel.MainData["sourceAddress1"].ToString();
|
string Taddress = saveModel.MainData["targetAddress"].ToString();
|
if (Saddress == Saddress1)
|
{
|
webResponseContent.Error("同一缓存架不能扫描两次!");
|
return Task.FromResult(webResponseContent);
|
}
|
Dt_Stationinfo Stationinfo = _stationinfoRepository.QueryFirst(x => x.StationCode == Saddress && x.Enable);
|
Dt_Stationinfo Stationinfo1 = _stationinfoRepository.QueryFirst(x => x.StationCode == Saddress1 && x.Enable);
|
if (Stationinfo == null || Stationinfo1 == null)
|
{
|
webResponseContent.Error("未找到此起点缓存架,或此缓存架已被禁用!");
|
return Task.FromResult(webResponseContent);
|
}
|
Stationinfo.Location_state = LocationStatusEnum.Lock.ObjToInt();
|
_stationinfoRepository.UpdateData(Stationinfo);
|
Stationinfo1.Location_state = LocationStatusEnum.Lock.ObjToInt();
|
_stationinfoRepository.UpdateData(Stationinfo1);
|
Dt_Task dt_Task = new Dt_Task();
|
{
|
dt_Task.TaskNum = _taskService.GetTaskNum();
|
dt_Task.CreateDate = DateTime.Now;
|
dt_Task.Creater = "system";
|
dt_Task.CurrentAddress = Stationinfo.StationCode + "||" + Stationinfo1.StationCode;
|
dt_Task.SourceAddress = Stationinfo.StationCode + "||" + Stationinfo1.StationCode;
|
dt_Task.TaskState = (int)TaskInStatusEnum.InNew;
|
//dt_Task.TaskType = (int)TaskOutboundTypeEnum.Outbound;
|
dt_Task.Grade = 1;
|
dt_Task.PalletCode = "";
|
if (Stationinfo.Area == "A区")
|
{
|
dt_Task.TargetAddress = "ZJXL-KPHLS001";
|
dt_Task.NextAddress = "ZJXL-KPHLX001";
|
dt_Task.TaskType = 64;
|
}
|
else
|
{
|
dt_Task.TargetAddress = "FJXL-KPHLS001";
|
dt_Task.NextAddress = "FJXL-KPHLX001";
|
dt_Task.TaskType = 256;
|
}
|
dt_Task.Barcode = "";
|
dt_Task.Roadway = "AGV";
|
dt_Task.WMSId = 0;
|
dt_Task.Remark = "烘烤回炉";
|
dt_Task.Floor = 3;
|
}
|
var isTrue = _taskRepository.AddData(dt_Task);
|
|
Dt_Task dt_Tasks = new Dt_Task();
|
{
|
dt_Tasks.TaskNum = _taskService.GetTaskNum();
|
dt_Tasks.CreateDate = DateTime.Now;
|
dt_Tasks.Creater = "system";
|
if (Stationinfo.Area == "A区")
|
{
|
dt_Tasks.CurrentAddress = "ZJXL-KPHLX001";
|
}
|
else
|
{
|
dt_Tasks.CurrentAddress = "FJXL-KPHLX001";
|
}
|
dt_Tasks.SourceAddress = dt_Tasks.CurrentAddress;
|
dt_Tasks.TaskState = (int)TaskInStatusEnum.InPending;
|
dt_Tasks.TaskType = 8;
|
dt_Tasks.Grade = 1;
|
dt_Tasks.PalletCode = "";
|
dt_Tasks.TargetAddress = Taddress;
|
dt_Tasks.NextAddress = Taddress;
|
dt_Tasks.Barcode = "";
|
dt_Tasks.Roadway = "AGV";
|
dt_Tasks.WMSId = 0;
|
dt_Tasks.Remark = "烘烤回炉";
|
dt_Task.Floor = 3;
|
}
|
var isTrue1 = _taskRepository.AddData(dt_Tasks);
|
webResponseContent.OK("任务下发成功!");
|
}
|
catch (Exception ex)
|
{
|
webResponseContent.Error(ex.Message);
|
}
|
return Task.FromResult(webResponseContent);
|
}
|
}
|
}
|