/*
*所有关于dt_agvtask类的业务代码应在此处编写
*可使用repository.调用常用方法,获取EF/Dapper等信息
*如果需要事务请使用repository.DbContextBeginTransaction
*也可使用DBServerProvider.手动获取数据库相关信息
*用户信息、权限、角色等使用UserContext.Current操作
*dt_agvtaskService对增、删、改查、导入、导出、审核业务代码扩展参照ServiceFunFilter
*/
using WIDESEA_Core.BaseProvider;
using WIDESEA_Core.Extensions.AutofacManager;
using WIDESEA_Entity.DomainModels;
using System.Linq;
using WIDESEA_Core.Utilities;
using System.Linq.Expressions;
using WIDESEA_Core.Extensions;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Http;
using WIDESEA_WMS.IRepositories;
using WIDESEA_WMS.Repositories;
using WIDESEA_Core.EFDbContext;
using static System.Collections.Specialized.BitVector32;
using WIDESEA_Comm.TaskNo;
using WIDESEA_Common;
using WIDESEA_Core.ManageUser;
using WIDESEA_Comm.LogInfo;
using StackExchange.Redis;
using WIDESEA_Comm;
using WIDESEA_Entity.DomainModels.Mes;
using WIDESEA_WMS.Common;
using System.Reflection.Emit;
using System.Threading.Tasks;
using System.Net;
namespace WIDESEA_WMS.Services
{
public partial class dt_agvtaskService
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly Idt_agvtaskRepository _repository;//访问数据库
[ActivatorUtilitiesConstructor]
public dt_agvtaskService(
Idt_agvtaskRepository dbRepository,
IHttpContextAccessor httpContextAccessor
)
: base(dbRepository)
{
_httpContextAccessor = httpContextAccessor;
_repository = dbRepository;
//多租户会用到这init代码,其他情况可以不用
//base.Init(dbRepository);
}
///
/// 任务暂停
///
///
///
public WebResponseContent PauseTask(SaveModel saveModel)
{
WebResponseContent response = new WebResponseContent().OK();
foreach (var Key in saveModel.DelKeys)
{
try
{
var task = repository.Find(x => x.agv_id.ToString() == Key.ToString()).FirstOrDefault();
if (task.agv_taskstate == AGVTaskStateEnum.Queue.ToString())
{
task.agv_taskstate = AGVTaskStateEnum.Pause.ToString();
repository.Update(task, x => new { x.agv_taskstate }, true);
response.OK(response.Message += $"{task.agv_tasknum}暂停成功!");
}
}
catch (Exception ex)
{
response.Error(response.Message += ex.Message);
}
}
return response;
}
///
/// 任务继续
///
///
///
public WebResponseContent ContinueTask(SaveModel saveModel)
{
WebResponseContent response = new WebResponseContent().OK();
foreach (var Key in saveModel.DelKeys)
{
try
{
var task = repository.Find(x => x.agv_id.ToString() == Key.ToString()).FirstOrDefault();
if (task.agv_taskstate == AGVTaskStateEnum.Pause.ToString())
{
task.agv_taskstate = AGVTaskStateEnum.Queue.ToString();
repository.Update(task, x => new { x.agv_taskstate }, true);
response.OK(response.Message += $"{task.agv_tasknum}恢复成功!");
}
}
catch (Exception ex)
{
response.Error(response.Message += ex.Message);
}
}
return response;
}
public override WebResponseContent Del(object[] keys, bool delList = true)
{
#region 批量修改货位状态
//VOLContext context = new VOLContext();
//Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
//var fromaddress = repository.Find(x => keys.Contains(x.agv_id)).Select(x => x.agv_fromaddress).ToList();
//var stations = stationinfoRepository.Find(x => fromaddress.Contains(x.stationCode)).ToList();
//foreach (var station in stations)
//{
// station.location_state = LocationStateEnum.Stroge.ToString();
// //station.tray_type= TrayTypeEnum.SmallTray.ToString();
// //station.tray_status= TrayStateEnum.StrogeTray.ToString();
//}
//stationinfoRepository.UpdateRange(stations, x => new { x.location_state }, true);
#endregion
VOLContext volContext = new VOLContext();
Idt_agvtask_htyRepository agvtask_HtyRepository = new dt_agvtask_htyRepository(volContext);
var agvtasks = repository.Find(x => keys.Contains(x.agv_id)).ToList();
List dt_Agvtask_Hties = new List();
foreach (var task in agvtasks)
{
dt_agvtask_hty agvtask_Hty = new dt_agvtask_hty()
{
hty_pkid = Guid.NewGuid(),
agv_id = task.agv_id,
agv_tasknum = task.agv_tasknum,
agv_materielid = task.agv_materielid,
agv_qty = task.agv_qty,
agv_createtime = task.agv_createtime,
agv_realesstime = task.agv_realesstime,
agv_executingBeginTime = task.agv_executingBeginTime,
agv_executingEndTime = task.agv_executingEndTime,
agv_completeBeginTime = task.agv_completeBeginTime,
agv_finishedtime = task.agv_finishedtime,
agv_taskstate = task.agv_taskstate,
agv_tasktype = task.agv_tasktype,
agv_fromaddress = task.agv_fromaddress,
agv_toaddress = task.agv_toaddress,
agv_operatetype = "Del",
agv_compeletor = UserContext.Current.UserName,
agv_completedate = DateTime.Now,
agv_grade = task.agv_grade,
agv_userid = task.agv_userid,
agv_Traytype = task.agv_Traytype,
agv_TrayStatus = task.agv_TrayStatus,
agv_worktype = task.agv_worktype,
agv_remark = task.agv_remark,
bindSN = task.bindSN,
jobID = task.jobID,
agv_materbarcode = task.agv_materbarcode,
};
dt_Agvtask_Hties.Add(agvtask_Hty);
}
agvtask_HtyRepository.AddRange(dt_Agvtask_Hties, true);
return base.Del(keys, delList);
}
public WebResponseContent addNgTask(MesRequestTemp requestTemp)
{
WebResponseContent content = new WebResponseContent();
try
{
var fromaddress = requestTemp.from_address;
VOLContext context = new VOLContext();
Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context);
var station = stationinfoRepository.Find(x => x.stationCode == fromaddress).FirstOrDefault();
if (_repository.Find(x => x.agv_fromaddress == fromaddress || x.agv_toaddress == fromaddress).Any())
throw new Exception($"货位{fromaddress}已存在任务!");
if (station == null) throw new Exception($"未找到货位{fromaddress}!");
if (!station.enable) throw new Exception($"货位{fromaddress}未启用!");
if (station.quantity < 1) throw new Exception($"货位{fromaddress}无车轮!");
var Work = workinfoRepository.Find(x => x.workOrder == station.Number && x.processCode == "17").FirstOrDefault();
if (Work == null) throw new Exception($"未找到货位{fromaddress}的机加工工单信息");
dt_agvtask agvtask = new dt_agvtask()
{
agv_fromaddress = station.stationCode,
agv_id = Guid.NewGuid(),
agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
agv_grade = 2,
agv_createtime = DateTime.Now,
agv_taskstate = "Queue",
agv_materielid = station.stationType,
agv_qty = station.quantity,
agv_tasktype = "TaskType_OutsourceInbound",
agv_toaddress = "",
agv_userid = UserContext.Current.UserName,
bindSN = station.bindSN,
agv_worktype = Convert.ToInt32(Work.processCode),
agv_materbarcode = Work.materialCode,
agv_Traytype = station.tray_type,
jobID = station.Number,
agv_TrayStatus = station.tray_status
};
_repository.Add(agvtask, true);
station.location_state = LocationStateEnum.InBusy.ToString();
stationinfoRepository.Update(station, true);
content.OK();
}
catch (Exception ex)
{
content.Message = ex.Message;
}
return content;
}
public override WebResponseContent Update(SaveModel saveModel)
{
WebResponseContent content = new WebResponseContent();
var agv_id = saveModel.MainData["agv_id"].ToString();
var task = _repository.Find(x => x.agv_id.ToString() == agv_id).FirstOrDefault();
if (task.agv_taskstate != AGVTaskStateEnum.Queue.ToString()) return content.Error("当前任务不可更改!");
WriteDBLog.Success($"手动修改任务", new { 数据 = saveModel }, "WMS", UserContext.Current.UserName);
return base.Update(saveModel);
}
#region 添加NG任务
public override WebResponseContent Add(SaveModel saveDataModel)
{
WebResponseContent content = new WebResponseContent();
try
{
var fromaddress = saveDataModel.MainData["agv_fromaddress"].ToString();
VOLContext context = new VOLContext();
Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context);
var station = stationinfoRepository.Find(x => x.stationCode == fromaddress).FirstOrDefault();
if (_repository.Find(x => x.agv_fromaddress == fromaddress || x.agv_toaddress == fromaddress).Any())
throw new Exception($"货位{fromaddress}已存在任务!");
if (station == null) throw new Exception($"未找到货位{fromaddress}!");
if (!station.enable) throw new Exception($"货位{fromaddress}未启用!");
if (station.quantity < 1) throw new Exception($"货位{fromaddress}无车轮!");
var Work = workinfoRepository.Find(x => x.workOrder == station.Number && x.processCode == "17").FirstOrDefault();
if (Work == null) throw new Exception($"未找到货位{fromaddress}的机加工工单信息");
dt_agvtask agvtask = new dt_agvtask()
{
agv_fromaddress = station.stationCode,
agv_id = Guid.NewGuid(),
agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
agv_grade = 2,
agv_createtime = DateTime.Now,
agv_taskstate = "Queue",
agv_materielid = station.stationType,
agv_qty = station.quantity,
agv_tasktype = "TaskType_OutsourceInbound",
agv_toaddress = "",
agv_userid = UserContext.Current.UserName,
bindSN = station.bindSN,
agv_worktype = Convert.ToInt32(Work.processCode),
agv_materbarcode = Work.materialCode,
agv_Traytype = station.tray_type,
jobID = station.Number,
agv_TrayStatus = station.tray_status
};
_repository.Add(agvtask, true);
station.location_state = LocationStateEnum.InBusy.ToString();
stationinfoRepository.Update(station, true);
content.OK();
}
catch (Exception ex)
{
content.Message = ex.Message;
}
return content;
}
#endregion
#region 添加任务
///
/// 添加任务
///
///
///
//public override WebResponseContent Add(SaveModel saveDataModel)
//{
// WebResponseContent content = new WebResponseContent();
// try
// {
// VOLContext context = new VOLContext();
// Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
// var fromaddress = saveDataModel.MainData["agv_fromaddress"].ToString();
// var toaddress = saveDataModel.MainData["agv_toaddress"].ToString();
// var tasktype = saveDataModel.MainData["agv_tasktype"].ToString();
// var grade = saveDataModel.MainData["agv_grade"].ToInt();
// var worktype = saveDataModel.MainData["agv_worktype"].ToInt();
// var station1 = stationinfoRepository.FindFirst(x => x.stationCode == fromaddress);
// var station2 = stationinfoRepository.FindFirst(x => x.stationCode == toaddress);
// if (station1 == null || station2 == null)
// throw new Exception($"起点地址{fromaddress}或终点地址{toaddress}不存在!");
// if (string.IsNullOrEmpty(station1.stationType))
// throw new Exception($"起点{fromaddress}未绑定物料类型!");
// var task = _repository.Find(t => t.agv_fromaddress == fromaddress
// || t.agv_fromaddress == toaddress
// || t.agv_toaddress == fromaddress
// || t.agv_toaddress == toaddress
// ).Any();
// if (task)
// throw new Exception("起始或目的地址,已存在任务中!");
// dt_agvtask agvtask = new dt_agvtask();
// agvtask.agv_id = Guid.NewGuid();
// agvtask.agv_fromaddress = fromaddress;
// agvtask.agv_toaddress = toaddress;
// agvtask.agv_tasknum = IdenxManager.GetTaskNo("KH-");
// agvtask.agv_TrayStatus = station1.tray_status;
// agvtask.agv_Traytype = station1.tray_type;
// agvtask.agv_taskstate = AGVTaskStateEnum.Create.ToString();
// agvtask.agv_tasktype = tasktype;
// agvtask.agv_worktype = worktype;//工作类型
// agvtask.bindSN = station1.bindSN;
// agvtask.agv_materielid = station1.stationType;//物料类型
// agvtask.agv_qty = station1.quantity;
// agvtask.agv_createtime = DateTime.Now;
// agvtask.agv_grade = grade;//任务优先级
// agvtask.agv_userid = UserContext.Current.UserName;
// _repository.Add(agvtask, true);
// content.OK();
// WriteDBLog.Success($"手动添加任务", new { 数据 = saveDataModel }, "WMS", UserContext.Current.UserName);
// }
// catch (Exception ex)
// {
// WriteDBLog.Error($"手动添加任务", new { 数据 = saveDataModel, 异常信息 = ex.Message }, "WMS", UserContext.Current.UserName);
// content.Error(ex.Message);
// }
// return content;
//}
#endregion
}
}