using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Comm;
using WIDESEA_Common;
using WIDESEA_Core.EFDbContext;
using WIDESEA_Core.FreeDB;
using WIDESEA_Entity.DomainModels;
using WIDESEA_WMS.IRepositories;
using WIDESEA_WMS.Repositories;
using static FreeSql.Internal.GlobalFilter;
using static System.Collections.Specialized.BitVector32;
namespace WIDESEA_WMS.Common
{
public class HandleTask
{
public static FreeDB freeDB = new FreeDB();
///
/// 添加历史任务
///
/// 任务
/// 操作类型
public static void AddHtyTask(dt_agvtask task, string operatetype = "Complete", string compeletor = "AGV")
{
VOLContext context = new VOLContext();
Idt_agvtask_htyRepository htyRepository = new dt_agvtask_htyRepository(context);
Idt_agvtaskRepository repository = new dt_agvtaskRepository(context);
Idt_mes_headRepository idt_Mes_Head = new dt_mes_headRepository(context);
Idt_mes_detailRepository idt_Mes_Detail=new dt_mes_detailRepository(context);
if (task.agv_worktype == 17)
{
string[] bindSNs = task.bindSN.Split(",");
foreach (var item in bindSNs)
{
var mes_detail = idt_Mes_Detail.Find(x => x.SN == item).FirstOrDefault();
var mes_head= idt_Mes_Head.Find(x=>x.jobID==mes_detail.jobID).FirstOrDefault();
if(mes_head != null)
{
mes_head.agv_finishNum = mes_head.agv_finishNum == null ? task.agv_qty : mes_head.agv_finishNum + task.agv_qty;
idt_Mes_Head.Update(mes_head, x => new { x.agv_finishNum }, true);
break;
}
}
}
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 = operatetype,
agv_compeletor = compeletor,
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,
};
htyRepository.Add(agvtask_Hty, true);
repository.Delete(task, true);
}
///
/// 库存处理
///
///
public static void Updateinventory(dt_agvtask task)
{
VOLContext context = new VOLContext();
Idt_inventoryRepository inventoryRepository = new dt_inventoryRepository(context);
if (task.agv_tasktype == AGVTaskTypeEnum.TaskType_Carry.ToString())
{
var inventorys = inventoryRepository.Find(x => x.stationCode == task.agv_fromaddress).ToList();
foreach (var inventory in inventorys)
{
inventory.stationCode = task.agv_toaddress;
inventoryRepository.Update(inventory, true);
}
}
else if (task.agv_tasktype == AGVTaskTypeEnum.TaskType_Outbound.ToString() || task.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceCarry.ToString())
{
string[] bindSNs = task.bindSN.Split(",");
int count = 0;
foreach (var bindSN in bindSNs)
{
//List inventorys = new List();
var inventory = freeDB.Select().Where(x => x.SN == bindSN).First();
//inventorys.Add(inventory);
count = freeDB.Remove(inventory);
if (count < 1)
throw new Exception("库存清除失败!SN号:" + bindSN);
}
}
else if (task.agv_tasktype == AGVTaskTypeEnum.TaskType_Inbound.ToString())
{
string[] bindSNs = task.bindSN.Split(",");
int count = 0;
List inventorys = new List();
foreach (string bindSN in bindSNs)
{
var mes_Work = freeDB.Select().Where(x => x.SN == bindSN && x.processCode == "17").OrderByDescending(x => x.CreateTime).First();
if (mes_Work == null)
throw new Exception("未找到工单信息!");
var station = freeDB.Select().Where(x => x.stationCode == task.agv_toaddress).First();
dt_inventory inventory = new dt_inventory()
{
SN = bindSN,
Name = mes_Work.productName,
FigureNumber = mes_Work.drawingNo,
materialCode = task.agv_materbarcode,
HeatNumber = mes_Work.heatID,
drawingNoVer = mes_Work.drawingNoVer,
BilletNumber = mes_Work.billetID,
OnlineTime = task.agv_finishedtime,
Operator = "admin",
stationCode = task.agv_toaddress,
area = station.area,
jobID = mes_Work.jobID,
workOrder = mes_Work.workOrder,
ID = Guid.NewGuid()
};
inventorys.Add(inventory);
}
count = freeDB.AddRange(inventorys);
if (count < 1)
throw new Exception("库存添加失败!库位号:" + task.agv_toaddress);
}
#region MyRegion
//var Materiel = QueryData.QueryMateriel(task.agv_materielid);
//List inventorys = new List();
//foreach (string bindSN in bindSNs)
//{
// dt_inventory inventory = new dt_inventory()
// {
// SN = bindSN,//待完善
// Name = "",
// FigureNumber = "",
// //HearthNumber = "",
// HeatNumber = "",
// //BilletNumber=,
// OnlineTime = task.agv_finishedtime,
// Operator = "admin",
// stationCode = task.agv_toaddress,
// area = "",
// jobID = "",
// };
// inventorys.Add(inventory);
//}
//if (task.agv_tasktype == AGVTaskTypeEnum.TaskType_Inbound.ToString() || task.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceInbound.ToString())
// freeDB.AddRange(inventorys);
//else if (task.agv_tasktype == AGVTaskTypeEnum.TaskType_Outbound.ToString() || task.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceOutbound.ToString())
// freeDB.Remove(inventorys);
#endregion
//}
}
///
/// 自动更新缓存架状态
///
///
public static void AutoUpdateHCJState(dt_agvtask task)
{
VOLContext context = new VOLContext();
Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
if (task.agv_taskstate == AGVTaskStateEnum.Complete1.ToString())
{
var station2 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_toaddress);
if (station2 == null) throw new Exception("未找到终点地址!");
////空托任务需修改逻辑
if (station2.stationCode.Contains("X"))
station2.quantity = 0;// task.agv_tasktype.Contains("TaskType_EmptyPallet") ? 0 : task.agv_qty; //task.agv_qty;
else if (station2.area == "10" || station2.area == "11" || (station2.stationCode.Contains("C") && task.agv_tasktype == "TaskType_EmptyPallet") || station2.stationCode.Contains("DD")) //入库空托任务
station2.quantity = station2.quantity + task.agv_qty;
else
station2.quantity = task.agv_qty;
station2.bindSN = task.bindSN;
station2.location_state = LocationStateEnum.Stroge.ToString();
station2.Number = task.jobID;
//station2.heatNumber = station1.heatNumber;
station2.stationType = task.agv_materielid;
station2.tray_status = task.agv_TrayStatus;//横放/竖放
station2.tray_type = task.agv_Traytype;
station2.lastUpdateTime = DateTime.Now;
stationinfoRepository.Update(station2, true);
}
else if (task.agv_taskstate == AGVTaskStateEnum.Complete.ToString())
{
var station1 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_fromaddress);
if (station1 == null) throw new Exception("未找到起点地址!");
#region MyRegion
//if (station1.stationCode.Contains("S"))
// station1.quantity = 0;
//else if (station2.stationCode.Contains("X") || station2.stationCode.Contains("W01001004") || station2.stationCode.Contains("W01001005"))//出库空托任务
//{
// station1.location_state = LocationStateEnum.Stroge.ToString();
// station1.quantity = station1.quantity - 1;
//}
//else
// station1.quantity = 0;
#endregion
if (station1.stationCode.Contains("DD"))//叠盘库位
{
station1.quantity = station1.quantity - task.agv_qty;
station1.location_state = LocationStateEnum.Stroge.ToString();
}
else if (station1.area == "10" || station1.area == "11"
|| ((station1.stationCode.Contains("C") || station1.stationCode.Contains("B"))
&& task.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString())) //出库空托任务
{
station1.location_state = LocationStateEnum.Stroge.ToString();
station1.quantity = station1.quantity - 1;
}
else
station1.quantity = 0;
station1.bindSN = string.Empty;
//station1.location_state = station1.quantity == 0 ? LocationStateEnum.Empty.ToString() : LocationStateEnum.Stroge.ToString();
if (station1.quantity == 0)
{
station1.location_state = LocationStateEnum.Empty.ToString();
station1.Number = string.Empty;
station1.billetID = string.Empty;
station1.heatNumber = string.Empty;
station1.stationType = string.Empty;
station1.tray_status = string.Empty;
station1.remark = string.Empty;
//if (!station1.stationCode.Contains("X") && !station1.stationCode.Contains("S") && !station1.stationCode.Contains("W01001004") && !station1.stationCode.Contains("W01001005"))
// station1.tray_type = string.Empty;
}
if (!station1.stationCode.Contains("DD"))
station1.lastUpdateTime = DateTime.Now;
stationinfoRepository.Update(station1, true);
}
}
}
}