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
|
{
|
/// <summary>
|
/// 一些任务的处理类
|
/// </summary>
|
public class TaskHelper
|
{
|
/// <summary>
|
/// 下发旁路工位的任务
|
/// </summary>
|
/// <param name="taskId"></param>
|
/// <param name="errMsg"></param>
|
/// <returns></returns>
|
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;
|
}
|
}
|
}
|
|
|
/// <summary>
|
/// 处理任务是下发中,任务类型是 呼叫空托And缸体上线And缸盖上线的库存管理
|
/// </summary>
|
/// <param name="mod"></param>
|
/// <param name="item"></param>
|
/// <param name="convPlace">输送线站点</param>
|
/// <param name="tasktype"></param>
|
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<productStockList> 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
|
{//处理成功后
|
|
}
|
}
|
|
/// <summary>
|
/// 处理任务是下发中,发送堆垛机任务
|
/// </summary>
|
/// <param name="mod"></param>
|
/// <param name="srm"></param>
|
/// <param name="item"></param>
|
/// <param name="convPlace">输送线站点</param>
|
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
|
|
}
|
|
/// <summary>
|
/// 处理任务是未下发,发送堆垛机任务
|
/// </summary>
|
/// <param name="mod"></param>
|
/// <param name="srm"></param>
|
/// <param name="item"></param>
|
/// <param name="convPlace">输送线站点</param>
|
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
|
|
}
|
}
|
}
|