using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using yunneiWCS.Common;
using yunneiWCS.data;
using yunneiWCS.DataAccess;
using yunneiWCS.EnumDefine;
using yunneiWCS.ORM;
using yunneiWCS.SystemInteraction.tianyong;
namespace yunneiWCS.ExtendFunction
{
///
/// 一些任务的处理类
///
public class TaskHelper
{
///
/// 下发旁路工位的任务
///
///
///
///
public static bool IssueTaskForPangLuGongWei(int taskId, string midStorePosition, ref string errMsg)
{
using (dbmodel mod = new dbmodel())
{
//判断输送线站点是否有任务占用
var isStationHasDoingTaskResult = MyExtendHelper.IsStationHasDoingTask(mod, midStorePosition);
if (isStationHasDoingTaskResult.result == false)
{
errMsg = isStationHasDoingTaskResult.resMsg;
return false;
}
var task = mod.task.Where(x => x.taskId == taskId).FirstOrDefault();
if (task == null)
{
errMsg = "没有找到任务";
return false;
}
if (task.taskStatus != (int)taskStatus.新建)
{
errMsg = "任务状态不是新建状态,不允许操作";
return false;
}
if (task.taskType != (int)taskType.旁路工位缸体空托回库 && task.taskType != (int)taskType.旁路工位缸体余料回库)
{
errMsg = "任务类型不是旁路工位缸体空托回库或旁路工位缸体余料回库,不允许操作";
return false;
}
//更新状态为 未下发
task.middlePlace = midStorePosition;
task.taskStatus = (int)taskStatus.未下发;
task.remark = "未下发";
task.LastModifyTime = DateTime.Now;
var res = mod.SaveChanges();
if (res > 0)
{
return true;
}
else
{
errMsg = "更新任务状态失败";
return false;
}
}
}
///
/// 处理任务是下发中,任务类型是 呼叫空托And缸体上线And缸盖上线的库存管理
///
///
///
/// 输送线站点
///
public static void sendTaskForHasIssuedFor呼叫空托And缸体上线And缸盖上线(dbmodel mod, task item, string convPlace, string tasktype)
{
#region 清空库存更新状态
item.taskStatus = (int)taskStatus.完成;
item.remark = "完成";
//mod.SaveChanges();
//agvSendStatus[0] = DateTime.Now.ToString("dd日HH:mm:ss") + "发送成功,任务ID:" + item.taskId;
//库存位
position sourcePosition = mod.position.FirstOrDefault(x => x.positionName == item.sourcePlace);
//上下线站点位
//解锁输送线
position convs = mod.position.FirstOrDefault(x => x.positionName == convPlace);
//convs.isLock = false;
PositionHandler.Lock(false, convs, "处理任务是下发中,任务类型是 呼叫空托And缸体上线And缸盖上线的库存管理", SysGloble.WCSNAME, item);
if (sourcePosition != null)
{
#region 清空库位
productStock stock = mod.productStock.FirstOrDefault(x => x.positionId == sourcePosition.positionId);
if (stock != null)
{
if (item.taskType == (int)taskType.缸体上线
|| item.taskType == (int)taskType.缸盖上线
)//上线就把数据放到上线站点上
{
position positionStation = mod.position.FirstOrDefault(x => x.positionName == item.toPlace);
if (positionStation != null)
{
stock.positionId = positionStation.positionId;
stock.updateTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
//positionStation.isfree = true;
PositionHandler.Free(true, positionStation, "处理任务是下发中,任务类型是 呼叫空托And缸体上线And缸盖上线的库存管理", SysGloble.WCSNAME, item);
}
List stocklist = mod.productStockList.Where(x => x.stockId == sourcePosition.positionId).ToList();
if (stocklist.Count > 0)
{
foreach (var itemList in stocklist)
{
itemList.stockId = positionStation.positionId;
}
}
}
else//呼叫空托就清空库存
{
mod.productStock.Remove(stock);
}
//sourcePosition.isfree = false;
//sourcePosition.isLock = false;
PositionHandler.LockAndFree(false, false, sourcePosition, "处理任务是下发中,任务类型是 呼叫空托And缸体上线And缸盖上线的库存管理", SysGloble.WCSNAME, item);
sourcePosition.quantity = 0;
sourcePosition.positionType = 1;
OutInStockRecordHandler.AddOutInStockRecord(mod, OutInFlag.出库, item.sourcePlace, item.toPlace, item, "出库类型的任务");
}
else
{
WZ.Useful.Commons.LogTextHelper.WriteLine("Form1", "sendTask", "任务ID" + item.taskId + "-" + tasktype + "查找库存失败");
}
#endregion
}
else
{
WZ.Useful.Commons.LogTextHelper.WriteLine("Form1", "sendTask", "任务ID" + item.taskId + "-" + tasktype + "查找库位失败");
}
#endregion
if (item.taskType == (int)taskType.缸盖上线) //增加任务类型 【EditBy shaocx,2022-04-23】
{
//给天永发信号
TianYongSystem.UpdateStoreByTaskID(mod, item, item.toPlace, (int)item.taskId, "缸盖上线,进入天永站点");
}
int saveRes = mod.SaveChanges();
if (saveRes < 1)
{
WZ.Useful.Commons.LogTextHelper.WriteLine("Form1", "sendTask", "数据库保存失败! 任务id:" + item.taskId);
}
else
{//处理成功后
}
}
///
/// 处理任务是下发中,发送堆垛机任务
///
///
///
///
/// 输送线站点
public static void sendTaskForHasIssuedFor发送堆垛机任务(dbmodel mod, task item, string convPlace)
{
if (convPlace == "")
{
//保存失败信息到任务表中 【EditBy shaocx,2022-03-16】
item.remark = "起点为空!!!!";
mod.SaveChanges();
return;
}
if (!MyExtendHelper.IsAllowSimulatorHandle(item))
{
//if (srm.mode == "自动" && srm.Alarm_info == "无故障" && srm.state == "待机")
if (MyExtendHelper.IsAllowSendNewTaskToSrm())
{
//发送堆垛机任务
baseData.sendSrmTask(item, item.taskId, convPlace, item.toPlace, 1);
}
else
{
//保存失败信息到任务表中 【EditBy shaocx,2022-03-16】
item.remark = "堆垛机不是自动,无故障,待机状态,不能下发堆垛机任务!!!!";
mod.SaveChanges();
return;
}
}
#region 数据操作
position convs = mod.position.FirstOrDefault(x => x.positionName == convPlace);
if (convs != null)
{
// convs.isLock = false;
PositionHandler.Lock(false, convs, "处理任务是下发中,发送堆垛机任务", SysGloble.WCSNAME, item);
}
item.taskStatus = (int)taskStatus.待完成;
item.remark = "待完成";
int saveRes = mod.SaveChanges();
for (int i = 0; i < 4; i++)
{
if (saveRes < 1)
{
saveRes = mod.SaveChanges();
}
else
{
break;
}
}
if (saveRes < 1)
{
WZ.Useful.Commons.LogTextHelper.WriteLine("Form1", "sendTask", "数据库保存失败! 任务id:" + item.taskId);
}
#endregion
}
///
/// 处理任务是未下发,发送堆垛机任务
///
///
///
///
/// 输送线站点
public static void sendTaskForNoIssuedFor发送堆垛机任务(dbmodel mod, task item, string convPlace)
{
if (!MyExtendHelper.IsAllowSimulatorHandle(item))
{
// if (srm.mode == "自动" && srm.Alarm_info == "无故障" && srm.state == "待机")
if (MyExtendHelper.IsAllowSendNewTaskToSrm())
{
//发送堆垛机任务
baseData.sendSrmTask(item, item.taskId, item.sourcePlace, convPlace, 1);
}
else
{
//保存失败信息到任务表中 【EditBy shaocx,2022-03-16】
item.remark = "堆垛机不是自动,无故障,待机状态,不能下发堆垛机任务!!!!";
mod.SaveChanges();
return;
}
}
#region 数据操作
position unlockPosition = mod.position.FirstOrDefault(x => x.positionName == convPlace);
if (unlockPosition != null)
{
//unlockPosition.isLock = true;
PositionHandler.Lock(true, unlockPosition, "发送堆垛机任务时", SysGloble.WCSNAME, item);
}
//保存任务记录
item.middlePlace = convPlace;
//item.taskStatus = 3;
item.taskStatus = (int)taskStatus.已下发;
item.remark = "已下发";
//增加出库单 状态更改
int saveRes = mod.SaveChanges();
for (int i = 0; i < 4; i++)
{
if (saveRes < 1)
{
saveRes = mod.SaveChanges();
}
else
{
break;
}
}
if (saveRes < 1)
{
WZ.Useful.Commons.LogTextHelper.WriteLine("Form1", "sendTask", "数据库保存失败! 任务id:" + item.taskId);
}
#endregion
}
}
}