using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web.Http;
using yunneiPda.EnumDefine;
using yunneiPda.Models;
using yunneiPda.orm;
namespace yunneiPda.Controllers
{
public class pdaController : ApiController
{
// public static yunneiWCS.IyunneiWcfClient wcsWcf = new yunneiWCS.IyunneiWcfClient();
//public yunneiPda.WCSserver.IyunneiWcfClient wcsWcf = new WCSserver.IyunneiWcfClient();
public static Mutex single = new Mutex();
///
/// 下线站点号(包括缸体和缸盖的)
///
List stations = new List { "GTD1", "GTD2", "GTD3", "GGDA1", "GGDA2", "GGDA3", "GGDB1", "GGDB2", "GGDB3" };
/// 是否是缸体下线点
///
///
List stationsIsGT = new List { "GTD1", "GTD2", "GTD3" };
///
/// 缸盖上线站点号
///
List GGstations = new List { "GGU1", "GGU2", "GGU3" };
///
/// 缸体上线站点号
///
List GTstations = new List { "GTU1", "GTU2", "GTU3", "GTU4", "GTU5" }; //增加旁路工位GTU4 GTU5 【Editby shaocx,2022-04-23】
/// 测试通信
/// 测试通信
///
///
[HttpGet]
public string test()
{
return "123";
}
/// 用户登录
///
///
///
///
[HttpPost]
public resMsg login([FromBody] user value)
{
resMsg msg = new resMsg();
List qx = new List { "缸体下线", "缸盖下线", "缸盖上线" };
try
{
if (value.userName == "pda")
{
if (value.passWord == "123456")
{
msg.status = 200;
msg.date = qx;
msg.name = "pda管理员";
}
else
{
msg.status = 400;
msg.msg = "密码错误";
}
}
else
{
msg.status = 400;
msg.msg = "无此用户";
}
}
catch (Exception)
{
}
return msg;
}
/// 获取入库表单
///
///
/// 每页数量,第几页,1是缸体2是缸盖
///
[HttpPost]
public resMsg GTcode([FromBody] paping value)
{
resMsg msg = new resMsg();
msg.status = 400;
try
{
using (dbmodel mod = new dbmodel())
{
List stock = mod.inStockOrder.Where(x => x.status < 4 && x.orderType == value.id).OrderByDescending(x => x.orderCodeId).ToList();
// List stock = mod.inStockOrder.ToList();
List fenyeRerult = new List();
if (stock.Count > 0)
{
#region MyRegion
msg.status = 200;
msg.total = stock.Count;
//假如每页数量 大于盘点数据
if (value.pagesize > stock.Count)
{
msg.date = stock;
}
else
{
#region 分页计算
int a = value.pagesize;
int b = value.pagenum;
int c = (int)Math.Ceiling((double)stock.Count / a);
int d = stock.Count % a;
int e = 0;
int f = a * (b - 1);
if (d != 0 && b == c)
{
e = d + f;
}
else
{
e = a + f;
}
for (int i = f; i < e; i++)
{
fenyeRerult.Add(stock[i]);
}
msg.date = fenyeRerult;
#endregion
}
#endregion
}
else
{
msg.total = 1;
msg.date = null;
msg.msg = "没有待执行数据";
}
}
}
catch (Exception ex)
{
msg.msg = "获取异常";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GTcode", ex.ToString());
}
LogTextHelper.BatchDeleteLog();
return msg;
}
#region PDA组盘操作
/// 组盘,保存入库表单
///
///
///
///
[HttpPost]
public resMsg saveInCode([FromBody] inStockEntity value)
{
resMsg msg = new resMsg();
msg.status = 400;
#region 验证参数
if (value == null)
{
msg.msg = "参数为空";
return msg;
}
else
{
if (value.dataList.Count < 1)
{
msg.msg = "入库数量为0";
return msg;
}
if (string.IsNullOrEmpty(value.productCode))
{
msg.msg = "物料编号为空";
return msg;
}
if (string.IsNullOrEmpty(value.station))
{
msg.msg = "站点号为空";
return msg;
}
var isTrans = SysGloble.TransStations.Contains(value.station);
if (isTrans)
{//说明是手动入库
if (!string.IsNullOrEmpty(value.toStieCode))
{
msg.msg = "手动入库时,目标站点必须为空";
return msg;
}
}
}
#endregion
try
{
using (dbmodel mod = new dbmodel())
{
#region 事务处理
using (var trans = mod.Database.BeginTransaction())
{
try
{
var errMsg = "";
#region 首先要请清除已经创建的 [Editby shaocx,2022-03-31]
if (value.orderCodeId > 0)
{
var exist_inStockOrder = mod.inStockOrder.Find(value.orderCodeId);
if (exist_inStockOrder != null)
{
mod.inStockOrder.Remove(exist_inStockOrder);
var exist_inStockOrderList = mod.inStockOrderList.Where(x => x.orderCodeId == value.orderCodeId).ToList();
if (exist_inStockOrderList != null && exist_inStockOrderList.Count > 0)
{
mod.inStockOrderList.RemoveRange(exist_inStockOrderList);
}
mod.SaveChanges();
}
else
{
msg.msg = "表单不存在";
return msg;
}
}
#endregion
//验证库存中是否有该托盘号或者是流水号的东西
//验证库存中是否有该托盘号的东西
var validateResult = MyExtend.ValidateContainerCodeIsExistStockForSalverCode(mod, value.containerCode, ref errMsg);
if (!validateResult)
{
msg.msg = errMsg;
return msg;
}
validateResult = MyExtend.ValidateSerialNumbersIsExistStockForSalverCode(mod, value, ref errMsg);
if (!validateResult)
{
msg.msg = errMsg;
return msg;
}
validateResult = MyExtend.ValidateContainerCodeIsExistInInStockOrderWithNewCreateStatus(mod, value.containerCode, ref errMsg);
if (!validateResult)
{
msg.msg = errMsg;
return msg;
}
validateResult = MyExtend.ValidateSerialNumbersIsExistInInStockOrderWithNewCreateStatus(mod, value, ref errMsg);
if (!validateResult)
{
msg.msg = errMsg;
return msg;
}
#region 组盘,保存入库表单,验证目标站点是否有库存 [EditBy shaocx,2022-02-06]
validateResult = MyExtend.ValidateIsExistStockWhenSaveInCode(mod, value, ref errMsg);
if (!validateResult)
{
msg.msg = errMsg;
return msg;
}
#endregion
#region 组盘,保存入库表单,验证目标站点是否允许创建任务 [EditBy shaocx,2022-02-06]
validateResult = MyExtend.ValidateIsAllowCreateTaskWhenSaveInCode(mod, value, ref errMsg);
if (!validateResult)
{
msg.msg = errMsg;
return msg;
}
#endregion
//bool isGT = stationsIsGT.Contains(value.station);//根据来源位置判断是否是缸体下线点
bool isGT = value.type == "body" ? true : false;//根据来源位置判断是否是缸体下线点
material _material = mod.material.FirstOrDefault(x => x.materialCode == value.productCode.Trim());
long materialId = 0;
if (_material == null)//不存在就创建一个物料
{
material newMaterial = new material();
newMaterial.materialCode = value.productCode.Trim();
newMaterial.materialName = "待更新";
newMaterial.materialType = isGT == false ? (int)materialType.缸体 : (int)materialType.缸盖;
newMaterial.createTime = DateTime.Now;
newMaterial.creator = "pda接口";
newMaterial.version = "";
mod.material.Add(newMaterial);
int resAdd = mod.SaveChanges();
if (resAdd > 0)
{
materialId = newMaterial.materialId;
}
}
if (value.dataList.Count > 0)
{
string TYPE = isGT == true ? "GTX" : "GGX";
inStockOrder addIn = new inStockOrder();
addIn.productCode = value.productCode.Trim();
addIn.productName = _material != null ? _material.materialName : "待更新";
addIn.quantity = value.dataList.Count;
addIn.supplier = value.supplier;//供应商
addIn.orderType = isGT == true ? 1 : 2;//1=缸体,2=缸盖
addIn.siteCode = value.station;
addIn.toStieCode = value.toStieCode;//,表示最终去往的站点,用于处理不走立体库,直接去天永上线点的逻辑 [EditBy shaocx,2022-02-06]
addIn.containerCode = value.containerCode;
//addIn.status = (int)taskStatus.新建;
addIn.status = (int)InStockOrderStatus.新建;
addIn.orderCode = TYPE + DateTime.Now.ToString("yyMMddHHmmssff");//入库单号,自己生成
addIn.createDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); ;
addIn.version = _material != null ? _material.version : "";// 机型 【EditBy shaocx,2022-01-17】
mod.inStockOrder.Add(addIn);
int ress = mod.SaveChanges();
if (ress == 1)
{
#region 保存流水明细
for (int i = 0; i < value.dataList.Count; i++)
{
inStockOrderList orderList = new inStockOrderList();
orderList.productCode = value.productCode.Trim();
orderList.productName = _material != null ? _material.materialName : "无此物料数据";
orderList.serialNumber = value.dataList[i].serialNumber;
orderList.orderCodeId = addIn.orderCodeId;
mod.inStockOrderList.Add(orderList);
}
ress = mod.SaveChanges();
if (ress == value.dataList.Count)
{
msg.status = 200;
}
else
{
msg.msg = "保存数据失败";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "saveInCode", "保存数据失败");
}
#endregion
}
else
{
msg.msg = "主表保存失败,请重试";
}
}
else
{
msg.msg = "流水号数量为零,请添加";
}
}
catch (Exception)
{
throw;
}
finally
{
if (msg.status != 200)
{
trans.Rollback();
}
else
{
trans.Commit();
}
}
}
#endregion
}
}
catch (Exception ex)
{
msg.status = 400;
msg.msg = "保存异常," + ex.Message;
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "saveInCode", JsonConvert.SerializeObject(ex));
}
return msg;
}
/// 验证单个流水号是否正确
///
///
///
///
[HttpGet]
public resMsg validateSingalSerialNumber([FromUri] int orderCodeId, string serialNumber, string productCode)
{
resMsg msg = new resMsg();
msg.status = 400;
#region 验证参数
if (string.IsNullOrEmpty(serialNumber))
{
msg.msg = "流水号不能为空";
return msg;
}
if (string.IsNullOrEmpty(productCode))
{
msg.msg = "物料编码不能为空";
return msg;
}
#endregion
try
{
using (dbmodel mod = new dbmodel())
{
try
{
var errMsg = "";
//验证流水号是否在其他新建表单中
var validateResult = MyExtend.ValidateSingleSerialNumbersIsExistInInStockOrderWithNewCreateStatus(mod, orderCodeId, serialNumber, productCode, ref errMsg);
if (!validateResult)
{
msg.msg = errMsg;
return msg;
}
//验证流水号是否在库存里
validateResult = MyExtend.ValidateSingleSerialNumbersIsExistStockForSalverCode(mod, serialNumber, productCode, ref errMsg);
if (!validateResult)
{
msg.msg = errMsg;
return msg;
}
msg.status = 200;
return msg;
}
catch (Exception)
{
throw;
}
finally
{
}
}
}
catch (Exception ex)
{
msg.status = 400;
msg.msg = "验证异常," + ex.Message;
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "validateSingalSerialNumber", JsonConvert.SerializeObject(ex));
}
return msg;
}
/// 获取组盘数据
///
///
///
///
[HttpGet]
public resSingleMsg getInCode([FromUri] int orderCodeId)
{
resSingleMsg msg = new resSingleMsg();
msg.status = 400;
#region 验证参数
if (orderCodeId == 0)
{
msg.msg = "参数为空";
return msg;
}
#endregion
try
{
using (dbmodel mod = new dbmodel())
{
try
{
inStockOrder _inStockOrder = mod.inStockOrder.Find(orderCodeId);
if (_inStockOrder == null)
{
msg.msg = "没有找到组盘记录";
return msg;
}
InStockOrderView _InStockOrderView = new InStockOrderView();
_InStockOrderView.orderCodeId = _inStockOrder.orderCodeId;
_InStockOrderView.type = _inStockOrder.orderType == 1 ? "body" : "header";//1是缸体,2是缸盖
_InStockOrderView.containerCode = _inStockOrder.containerCode;
_InStockOrderView.productCode = _inStockOrder.productCode;
_InStockOrderView.materialName = _inStockOrder.productName;
_InStockOrderView.supplier = _inStockOrder.supplier;
_InStockOrderView.station = _inStockOrder.siteCode;
_InStockOrderView.toStieCode = _inStockOrder.toStieCode;
var _inStockOrderList = mod.inStockOrderList.Where(x => x.orderCodeId == _inStockOrder.orderCodeId).ToList();
if (_inStockOrderList != null && _inStockOrderList.Count > 0)
{
_InStockOrderView.quantity = _inStockOrderList.Count;
_InStockOrderView.dataList = new List();
int index = 0;
_inStockOrderList.ForEach((item) =>
{
index++;
_InStockOrderView.dataList.Add(new inStockOrderDetail()
{
id = index,
serialNumber = item.serialNumber
});
});
}
msg.date = _InStockOrderView;
msg.status = 200;
return msg;
}
catch (Exception)
{
throw;
}
finally
{
}
}
}
catch (Exception ex)
{
msg.status = 400;
msg.msg = "保存异常," + ex.Message;
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "saveInCode", JsonConvert.SerializeObject(ex));
}
return msg;
}
#endregion
/// 呼叫空托盘
///
///
/// 站点号(注意这些站点都是AGV的下线点)
///
[HttpPost]
public resMsg callEmpty([FromUri] string value)
{
resMsg res = new resMsg();
res.status = 400;
bool ishave = stations.Contains(value.Trim());
if (!ishave)
{
res.msg = MyExtend.GetFFZDHStr(value);
return res;
}
try
{
using (dbmodel mod = new dbmodel())
{
string station = value.Trim().Substring(0, 2);
if (station == "GT")
{
VproductStock outStock = mod.VproductStock.FirstOrDefault(x => x.materialCode == "GT-KTP" && x.isLock == false && x.enable == true);
if (outStock == null)
{
res.msg = "没有库存空托盘了";
return res;
}
task newTask = new task();
newTask.createListCode = "KT" + DateTime.Now.ToString("yyMMddHHmmss");
//newTask.taskType = (int)taskType.呼叫空托;
var _taskType = taskType.呼叫空托;
newTask.taskType = (int)_taskType;
newTask.taskTypeName = _taskType.ToString();
newTask.taskName = "缸体呼叫空托";
newTask.taskStatus = (int)taskStatus.未下发;
newTask.sourcePlace = outStock.positionName;
newTask.toPlace = value.Trim();
newTask.area = 1;
newTask.priority = 1;
newTask.materialCode = "GT-KTP";
newTask.materialName = "缸体空托盘";
newTask.quantity = 3;
newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
newTask.supplier = outStock.supplier;//供应商 【EditBy shaocx,2022-01-15】
newTask.containerCode = outStock.containerCode;//托盘号 【EditBy shaocx,2022-01-15】
newTask.version = outStock.version;
newTask.creator = "PDA";
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
mod.task.Add(newTask);
outStock.isLock = true;
}
else
{
VproductStock outStock = mod.VproductStock.FirstOrDefault(x => x.materialCode == "GG-KTP" && x.isLock == false && x.enable == true);
if (outStock == null)
{
res.msg = "没有库存空托盘了";
return res;
}
task newTask = new task();
newTask.createListCode = "KG" + DateTime.Now.ToString("yyMMddHHmmss");
//newTask.taskType = (int)taskType.呼叫空托;
var _taskType = taskType.呼叫空托;
newTask.taskType = (int)_taskType;
newTask.taskTypeName = _taskType.ToString();
newTask.taskName = "缸盖呼叫空托";
newTask.taskStatus = (int)taskStatus.未下发;
newTask.sourcePlace = outStock.positionName;
newTask.toPlace = value.Trim();
newTask.area = 2;
newTask.priority = 1;
newTask.materialCode = "GG-KTP";
newTask.materialName = "缸盖空托盘";
newTask.quantity = 3;
newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
newTask.supplier = outStock.supplier;//供应商 【EditBy shaocx,2022-01-15】
newTask.containerCode = outStock.containerCode;//托盘号 【EditBy shaocx,2022-01-15】
newTask.version = outStock.version;
newTask.creator = "PDA";
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
mod.task.Add(newTask);
outStock.isLock = true;
}
int SaveRes = mod.SaveChanges();
if (SaveRes < 1)
{
SaveRes = mod.SaveChanges();
if (SaveRes < 1)
{
res.status = 400;
res.msg = "保存数据失败";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "callEmpty", "保存数据失败");
}
else
{
res.status = 200;
}
}
else
{
res.status = 200;
}
}
}
catch (Exception ex)
{
res.status = 400;
res.msg = "保存异常";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "callEmtyp", ex.ToString());
}
return res;
}
#region 人工入空托盘
[HttpPost]
public resMsg intoEmpty([FromUri] string sourcePositionName, string type, string containerCode)
{
resMsg res = new resMsg();
res.status = 400;
if (string.IsNullOrEmpty(sourcePositionName))
{
res.msg = "站点不能为空";
return res;
}
if (string.IsNullOrEmpty(type))
{
res.msg = "类型不能为空";
return res;
}
if (string.IsNullOrEmpty(containerCode))
{
res.msg = "托盘号不能为空";
return res;
}
taskType _taskType = default(taskType);
positionType _positionType = type == "body" ? positionType.缸体 : positionType.缸盖;
int AREA = (int)_positionType;
var taskName = _positionType.ToString();
var isTrans = SysGloble.TransStations.Contains(sourcePositionName);
if (isTrans)
{//说明起点是 输送线
_taskType = taskType.空托手动入库;
}
else
{
_taskType = taskType.空托下线入库;
}
taskName = taskName + _taskType.ToString();
try
{
using (dbmodel mod = new dbmodel())
{
var errMsg = "";
//验证库存中是否有该托盘号的东西
var validateResult = MyExtend.ValidateContainerCodeIsExistStockForSalverCode(mod, containerCode, ref errMsg);
if (!validateResult)
{
res.msg = errMsg;
return res;
}
string toplaceWithId = "";
using (yunneiPda.WCSserver.IyunneiWcfClient wcsWcf = new WCSserver.IyunneiWcfClient())
{
toplaceWithId = wcsWcf.findStock(AREA);//找空库位
}
if (toplaceWithId == "")
{
res.msg = "没有空库位";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "intoEmpty", AREA + "没有空库位");
return res;
}
long positionid = Convert.ToInt64(toplaceWithId.Split('/')[1]);
position toPosition = mod.position.FirstOrDefault(x => x.positionId == positionid);
position sourcePosition = mod.position.FirstOrDefault(x => x.positionName == sourcePositionName);
task newTask = new task();
if (_positionType == positionType.缸体)
{
newTask.createListCode = "KTRK" + DateTime.Now.ToString("yyMMddHHmmss");
newTask.taskType = (int)_taskType;
newTask.taskTypeName = _taskType.ToString();
newTask.taskName = taskName;
newTask.taskStatus = (int)taskStatus.未下发;
newTask.sourcePlace = sourcePositionName;
newTask.toPlace = toPosition.positionName;
newTask.area = 1;
newTask.priority = 1;
newTask.materialCode = "GT-KTP";
newTask.materialName = "缸体空托盘";
newTask.quantity = 3;
newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
newTask.supplier = "";//供应商 【EditBy shaocx,2022-01-15】
newTask.containerCode = containerCode;//托盘号 【EditBy shaocx,2022-01-15】
newTask.version = "";
newTask.creator = "PDA";
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
mod.task.Add(newTask);
}
else
{
newTask.createListCode = "KGRK" + DateTime.Now.ToString("yyMMddHHmmss");
newTask.taskType = (int)_taskType;
newTask.taskTypeName = _taskType.ToString();
newTask.taskName = taskName;
newTask.taskStatus = (int)taskStatus.未下发;
newTask.sourcePlace = sourcePositionName;
newTask.toPlace = toPosition.positionName;
newTask.area = 2;
newTask.priority = 1;
newTask.materialCode = "GG-KTP";
newTask.materialName = "缸盖空托盘";
newTask.quantity = 3;
newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
newTask.supplier = "";//供应商 【EditBy shaocx,2022-01-15】
newTask.containerCode = containerCode;//托盘号 【EditBy shaocx,2022-01-15】
newTask.version = "";
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
mod.task.Add(newTask);
}
//起点和终点锁定
PositionHandler.Lock(true, toPosition, "入空托盘", "PDA", newTask);
if (sourcePosition != null)
{
PositionHandler.Lock(true, sourcePosition, "入空托盘", "PDA", newTask);
}
int SaveRes = mod.SaveChanges();
if (SaveRes < 1)
{
SaveRes = mod.SaveChanges();
if (SaveRes < 1)
{
res.status = 400;
res.msg = "保存数据失败";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "intoEmpty", "保存数据失败");
}
else
{
res.status = 200;
}
}
else
{
res.status = 200;
}
}
}
catch (Exception ex)
{
res.status = 400;
res.msg = "保存异常," + ex.Message;
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "intoEmpty", ex.ToString());
}
return res;
}
#endregion
#region 人工增加空托盘库存
[HttpPost]
public resMsg addEmptySalverStore([FromUri] string sourcePositionName, string type, string containerCode)
{
resMsg res = new resMsg();
res.status = 400;
if (string.IsNullOrEmpty(sourcePositionName))
{
res.msg = "站点不能为空";
return res;
}
if (string.IsNullOrEmpty(type))
{
res.msg = "类型不能为空";
return res;
}
if (string.IsNullOrEmpty(containerCode))
{
res.msg = "托盘号不能为空";
return res;
}
taskType _taskType = taskType.空托手动入库;
positionType _positionType = type == "body" ? positionType.缸体 : positionType.缸盖;
bool ishaveGG = false;
if (_positionType == positionType.缸盖)
{
ishaveGG = true;
}
try
{
using (dbmodel mod = new dbmodel())
{
var errMsg = "";
//验证库存中是否有该托盘号的东西
var validateResult = MyExtend.ValidateContainerCodeIsExistStockForSalverCode(mod, containerCode, ref errMsg);
if (!validateResult)
{
res.msg = errMsg;
return res;
}
position sourcePosition = mod.position.FirstOrDefault(x => x.positionName == sourcePositionName);
if (sourcePosition == null)
{
res.msg = $"根据{sourcePositionName}没有找到库位";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "addEmptySalverStore", res.msg);
return res;
}
var dbStock = mod.productStock.FirstOrDefault(x => x.positionId == sourcePosition.positionId);
if (dbStock != null)
{
res.msg = $"{sourcePositionName}库位上已经有库存了";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "addEmptySalverStore", res.msg);
return res;
}
productStock stock = new productStock();
stock.positionId = sourcePosition.positionId;
stock.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
stock.materialId = ishaveGG == true ? 3 : 4;//缸体4,缸盖3 固定不变的
stock.quantity = 3;//默认3个
stock.status = 1;
stock.taskType = (int)_taskType;//空托盘回库
stock.updateTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
stock.containerCode = containerCode;//增加托盘号赋值
mod.productStock.Add(stock);
int SaveRes = mod.SaveChanges();
if (SaveRes < 1)
{
SaveRes = mod.SaveChanges();
if (SaveRes < 1)
{
res.status = 400;
res.msg = "保存数据失败";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "addEmptySalverStore", "保存数据失败");
}
else
{
res.status = 200;
}
}
else
{
res.status = 200;
}
}
}
catch (Exception ex)
{
res.status = 400;
res.msg = "保存异常," + ex.Message;
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "addEmptySalverStore", ex.ToString());
}
return res;
}
#endregion
/// 获取物料
///
///
/// 物料编号,空返回全部
///
[HttpPost]
public resMsg getMaterial([FromUri] string value)
{
resMsg res = new resMsg();
res.status = 400;
if (value == null)
{
res.msg = "参数不正确";
return res;
}
try
{
using (dbmodel mod = new dbmodel())
{
List mat = null;
string aa = value.Trim();
if (aa == "''")
{
mat = mod.material.ToList();
}
else
{
mat = mod.material.Where(x => x.materialCode == value.Trim()).ToList();
}
if (mat != null)
{
res.status = 200;
res.total = mat.Count;
res.date = mat;
}
else
{
res.msg = "获取数据失败";
}
}
}
catch (Exception ex)
{
res.msg = "获取异常";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "getMaterial", ex.ToString());
}
return res;
}
/// 获取任务列表
///
///
/// 每页数量,第几页,任务类型
/// aaaaa
[HttpPost]
public resMsg getTask([FromBody] paping value)
{
resMsg msg = new resMsg();
msg.status = 400;
try
{
using (dbmodel mod = new dbmodel())
{
List tasksList = new List();
if (value.id > 0)
{
int taskType = value.id;
tasksList = mod.task.Where(x => x.taskStatus < 5 && x.taskType == taskType).ToList();
}
else
{
tasksList = mod.task.Where(x => x.taskStatus < 5).ToList();
}
if (tasksList.Count > 0)
{
msg.date = tasksList;
msg.status = 200;
msg.total = tasksList.Count;
}
else
{
msg.msg = "当前条件查询数据为空!";
}
}
}
catch (Exception ex)
{
msg.msg = "获取数据失败";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "getTask", ex.ToString());
}
return msg;
}
/// 修改下线单状态,PDA上点击【下发任务】
///
///
///
///
[HttpPost]
public resMsg changeOrderStatus([FromUri] string value)
{
resMsg res = new resMsg();
res.status = 400;
if (value == null || value == "")
{
res.msg = "参数不正确";
return res;
}
try
{
using (dbmodel mod = new dbmodel())
{
inStockOrder newTask = mod.inStockOrder.FirstOrDefault(x => x.orderCode == value);
if (newTask != null)
{
//newTask.status = 2;
newTask.status = (int)InStockOrderStatus.待下发;
int ress = mod.SaveChanges();
if (ress == 1)
{
res.status = 200;
}
else
{
res.status = 400;
res.msg = "保存数据失败";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "changeOrderStatus", "保存数据失败");
}
}
else
{
res.msg = "无此单号";
}
}
}
catch (Exception ex)
{
res.msg = "保存异常";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "changeOrderStatus", ex.ToString());
}
return res;
}
#region 天永机器人调用的接口
#region 原先的
///// 缸盖上线
/////
/////
///// 物料编号
///// 站点号
/////
//[HttpPost]
//public resMsg GGoutStock([FromUri]string materialCode, string station)
//{
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station);
// resMsg res = new resMsg();
// res.status = 400;
// bool ishave = GGstations.Contains(station.Trim());
// if (!ishave)
// {
// res.msg = "非法站点号";
// return res;
// }
// try
// {
// using (dbmodel mod = new dbmodel())
// {
// VproductStock stationIsHave = mod.VproductStock.FirstOrDefault(x => x.positionName == station);
// if (stationIsHave != null)
// {
// res.msg = "上料点已经有货";
// return res;
// }
// //VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim()&&x.positionType==(byte)positionType.余料回库 && x.isLock == false && x.positionId < 461);
// string sourcePlace = "";
// //if (OutStock == null)
// //{
// VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim() && x.isLock == false && x.positionId < 461);
// if (OutStock == null)
// {
// res.msg = "库存无此物料";
// return res;
// }
// //}
// List stockSerialNumber = mod.productStockList.Where(x => x.stockId == OutStock.positionId).ToList();
// if (stockSerialNumber.Count < 1)
// {
// res.msg = "此库存无流水号明细";
// return res;
// }
// sourcePlace = OutStock.positionName;
// task newTask = new task();
// newTask.createListCode = "KGS" + DateTime.Now.ToString("yyMMddHHmmss");
// var _taskType = taskType.缸盖上线;
// newTask.taskType = (int)_taskType;
// newTask.taskTypeName = _taskType.ToString();
// newTask.taskName = "缸盖出库";
// newTask.taskStatus = (int)taskStatus.未下发;
// newTask.sourcePlace = sourcePlace;
// newTask.toPlace = station.Trim();
// newTask.middlePlace = "";
// newTask.area = 2;
// newTask.priority = 1;
// newTask.materialCode = OutStock.materialCode;
// newTask.materialName = OutStock.materialName;
// newTask.quantity = stockSerialNumber.Count;
// newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
// newTask.sendMesed = 1;//1=未发送,2=发送成功,3=发送失败
// newTask.mesReply = "未发送";
// newTask.supplier = OutStock.supplier;//供应商 【EditBy shaocx,2022-01-15】
// newTask.containerCode = OutStock.containerCode;//托盘号 【EditBy shaocx,2022-01-15】
// mod.task.Add(newTask);
// outStockList outStockRecord = new outStockList();
// var _OutStockOrderStatus = OutStockOrderStatus.新建;
// outStockRecord.outStockOrderStatus = (int)_OutStockOrderStatus;
// outStockRecord.outStockOrderStatusName = _OutStockOrderStatus.ToString();
// outStockRecord.outStockOrder = newTask.createListCode;
// outStockRecord.materialName = OutStock.materialName;
// outStockRecord.materialCode = OutStock.materialCode;
// outStockRecord.quantity = stockSerialNumber.Count;
// outStockRecord.creator = outStockRecord.lastModifier = "装配上线点";
// outStockRecord.createTime = newTask.createTime;
// outStockRecord.LastModifyTime = DateTime.Now;
// outStockRecord.version = OutStock.version;//机型 【EditBy shaocx,2022-01-18】
// mod.outStockList.Add(outStockRecord);
// OutStock.isLock = true;
// int ress = mod.SaveChanges();
// if (ress > 0)
// {
// res.status = 200;
// res.total = (int)newTask.taskId;
// }
// else
// {
// res.status = 400;
// res.msg = "保存数据失败";
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "保存数据失败");
// }
// }
// }
// catch (Exception ex)
// {
// res.status = 400;
// res.msg = "保存异常";
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", ex.ToString());
// }
// return res;
//}
///// 缸体上线
/////
/////
///// 物料编号
///// 站点号
/////
//[HttpPost]
//public resMsg GToutStock([FromUri]string materialCode, string station)
//{
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station);
// resMsg res = new resMsg();
// res.status = 400;
// bool ishave = GTstations.Contains(station.Trim());
// if (!ishave)
// {
// res.msg = "非法站点号";
// return res;
// }
// try
// {
// using (dbmodel mod = new dbmodel())
// {
// VproductStock stationIsHave = mod.VproductStock.FirstOrDefault(x => x.positionName == station);
// if (stationIsHave != null)
// {
// res.msg = "上料点已经有货";
// return res;
// }
// //VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim()&& x.positionType==(byte)positionType.余料回库&& x.isLock == false && x.positionId < 461);
// string sourcePlace = "";
// //if (OutStock == null)
// //{
// VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim() && x.isLock == false && x.positionId < 461);
// if (OutStock == null)
// {
// res.msg = "库存无此物料";
// return res;
// }
// //}
// List stockSerialNumber = mod.productStockList.Where(x => x.stockId == OutStock.positionId).ToList();
// if (stockSerialNumber.Count < 1)
// {
// res.msg = "此库存无流水号明细";
// return res;
// }
// sourcePlace = OutStock.positionName;
// task newTask = new task();
// newTask.createListCode = "KTS" + DateTime.Now.ToString("yyMMddHHmmss");
// var _taskType = taskType.缸体上线;
// newTask.taskType = (int)_taskType;
// newTask.taskTypeName = _taskType.ToString();
// newTask.taskName = "缸体出库";
// newTask.taskStatus = (int)taskStatus.未下发;
// newTask.sourcePlace = sourcePlace;
// newTask.middlePlace = "";
// newTask.toPlace = station.Trim();
// newTask.area = 1;
// newTask.priority = 1;
// newTask.materialCode = OutStock.materialCode;
// newTask.materialName = OutStock.materialName;
// newTask.quantity = stockSerialNumber.Count;
// newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
// newTask.sendMesed = 1;//1=未发送,2=发送成功,3=发送失败
// newTask.mesReply = "未发送";
// newTask.supplier = OutStock.supplier;//供应商 【EditBy shaocx,2022-01-15】
// newTask.containerCode = OutStock.containerCode;//托盘号 【EditBy shaocx,2022-01-15】
// mod.task.Add(newTask);
// outStockList outStockRecord = new outStockList();
// outStockRecord.outStockOrder = newTask.createListCode;
// outStockRecord.materialName = OutStock.materialName;
// outStockRecord.materialCode = OutStock.materialCode;
// outStockRecord.quantity = stockSerialNumber.Count;
// outStockRecord.creator = "装配上线点";
// outStockRecord.createTime = newTask.createTime;
// outStockRecord.version = OutStock.version;//机型 【EditBy shaocx,2022-01-18】
// mod.outStockList.Add(outStockRecord);
// OutStock.isLock = true;
// int ress = mod.SaveChanges();
// if (ress > 0)
// {
// res.status = 200;
// res.total = (int)newTask.taskId;
// }
// else
// {
// res.status = 400;
// res.msg = "保存数据失败";
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "保存数据失败");
// }
// }
// }
// catch (Exception ex)
// {
// res.status = 400;
// res.msg = "保存异常";
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", ex.ToString());
// }
// return res;
//}
#endregion
#region 现在的
/// 缸盖上线
///
///
/// 物料编号
/// 站点号
///
[HttpPost]
public resMsg GGoutStock([FromUri] string materialCode, string station)
{
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station);
resMsg res = new resMsg();
res.status = 400;
res.msg = "";
bool ishave = GGstations.Contains(station.Trim());
if (!ishave)
{
res.msg = MyExtend.GetFFZDHStr(station);
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
return res;
}
try
{
using (dbmodel mod = new dbmodel())
{
var mat = mod.material.Where(x => x.materialCode == materialCode).FirstOrDefault();
if (mat == null)
{
res.msg = "根据物料编码" + materialCode + "没有获取到物料信息";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
return res;
}
VproductStock stationIsHave = mod.VproductStock.FirstOrDefault(x => x.positionName == station);
if (stationIsHave != null)
{
res.msg = "上料点已经有货";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
return res;
}
//VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim()&&x.positionType==(byte)positionType.余料回库 && x.isLock == false && x.positionId < 461);
string sourcePlace = "";
//if (OutStock == null)
//{
//VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim() && x.isLock == false && x.positionId < 461);
//if (OutStock == null)
//{
// res.msg = "库存无此物料";
// return res;
//}
////}
//List stockSerialNumber = mod.productStockList.Where(x => x.stockId == OutStock.positionId).ToList();
//if (stockSerialNumber.Count < 1)
//{
// res.msg = "此库存无流水号明细";
// return res;
//}
//sourcePlace = OutStock.positionName;
var errMsg = "";//校验站点是否有任务占用 【Editby shaocx,2023-10-19】
var validateResult = MyExtend.CommonIsExistNoFinishedTask(mod, station.Trim(), ref errMsg);
if (!validateResult)
{
res.msg = errMsg;
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
return res;
}
task newTask = new task();
newTask.createListCode = "KGS" + DateTime.Now.ToString("yyMMddHHmmss");
var _taskType = taskType.缸盖上线;
newTask.taskType = (int)_taskType;
newTask.taskTypeName = _taskType.ToString();
newTask.taskName = "缸盖出库";
newTask.taskStatus = (int)taskStatus.新建;
newTask.sourcePlace = sourcePlace;
newTask.toPlace = station.Trim();
newTask.middlePlace = "";
newTask.area = 2;
newTask.priority = 1;
newTask.materialCode = materialCode;
newTask.materialName = mat.materialName;
newTask.quantity = 0;
newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
newTask.sendMesed = 1;//1=未发送,2=发送成功,3=发送失败
newTask.mesReply = "未发送";
newTask.supplier = "";//供应商 【EditBy shaocx,2022-01-15】
newTask.containerCode = "";//托盘号 【EditBy shaocx,2022-01-15】
newTask.version = mat.version;
newTask.creator = "PDA";
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
mod.task.Add(newTask);
outStockList outStockRecord = new outStockList();
var _OutStockOrderStatus = OutStockOrderStatus.新建;
outStockRecord.outStockOrderStatus = (int)_OutStockOrderStatus;
outStockRecord.outStockOrderStatusName = _OutStockOrderStatus.ToString();
outStockRecord.outStockOrder = newTask.createListCode;
outStockRecord.materialName = mat.materialName;
outStockRecord.materialCode = materialCode;
outStockRecord.quantity = 0;
outStockRecord.creator = outStockRecord.lastModifier = "装配上线点";
outStockRecord.createTime = newTask.createTime;
outStockRecord.LastModifyTime = DateTime.Now;
outStockRecord.version = "";//机型 【EditBy shaocx,2022-01-18】
mod.outStockList.Add(outStockRecord);
//OutStock.isLock = true;
int ress = mod.SaveChanges();
if (ress > 0)
{
res.status = 200;
res.total = (int)newTask.taskId;
}
else
{
res.status = 400;
res.msg = "保存数据失败";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "保存数据失败");
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
}
}
}
catch (Exception ex)
{
res.status = 400;
res.msg = "保存异常";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "异常:" + ex.ToString());
}
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
return res;
}
/// 缸体上线
///
///
/// 物料编号
/// 站点号
///
[HttpPost]
public resMsg GToutStock([FromUri] string materialCode, string station)
{
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station);
resMsg res = new resMsg();
res.status = 400;
res.msg = "";
bool ishave = GTstations.Contains(station.Trim());
if (!ishave)
{
res.msg = MyExtend.GetFFZDHStr(station);
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
return res;
}
try
{
using (dbmodel mod = new dbmodel())
{
var mat = mod.material.Where(x => x.materialCode == materialCode).FirstOrDefault();
if (mat == null)
{
res.msg = "根据物料编码" + materialCode + "没有获取到物料信息";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
return res;
}
VproductStock stationIsHave = mod.VproductStock.FirstOrDefault(x => x.positionName == station);
if (stationIsHave != null)
{
res.msg = "上料点已经有货";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
return res;
}
//VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim()&& x.positionType==(byte)positionType.余料回库&& x.isLock == false && x.positionId < 461);
string sourcePlace = "";
//if (OutStock == null)
//{
//VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim() && x.isLock == false && x.positionId < 461);
//if (OutStock == null)
//{
// res.msg = "库存无此物料";
// return res;
//}
////}
//List stockSerialNumber = mod.productStockList.Where(x => x.stockId == OutStock.positionId).ToList();
//if (stockSerialNumber.Count < 1)
//{
// res.msg = "此库存无流水号明细";
// return res;
//}
//sourcePlace = OutStock.positionName;
var errMsg = "";//校验站点是否有任务占用 【Editby shaocx,2023-10-19】
var validateResult = MyExtend.CommonIsExistNoFinishedTask(mod, station.Trim(), ref errMsg);
if (!validateResult)
{
res.msg = errMsg;
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
return res;
}
task newTask = new task();
newTask.createListCode = "KTS" + DateTime.Now.ToString("yyMMddHHmmss");
var _taskType = taskType.缸体上线;
if (station.Trim() == "GTU4" || station.Trim() == "GTU5")
{
_taskType = taskType.缸体上线去旁路工位;
}
newTask.taskType = (int)_taskType;
newTask.taskTypeName = _taskType.ToString();
newTask.taskName = "缸体出库";
newTask.taskStatus = (int)taskStatus.新建;
newTask.sourcePlace = sourcePlace;
newTask.middlePlace = "";
newTask.toPlace = station.Trim();
newTask.area = 1;
newTask.priority = 1;
newTask.materialCode = materialCode;
newTask.materialName = mat.materialName;
newTask.quantity = 0;
newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
newTask.sendMesed = 1;//1=未发送,2=发送成功,3=发送失败
newTask.mesReply = "未发送";
newTask.supplier = "";//供应商 【EditBy shaocx,2022-01-15】
newTask.containerCode = "";//托盘号 【EditBy shaocx,2022-01-15】
newTask.version = mat.version;
newTask.creator = "PDA";
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
mod.task.Add(newTask);
outStockList outStockRecord = new outStockList();
outStockRecord.outStockOrder = newTask.createListCode;
outStockRecord.materialName = mat.materialName;
outStockRecord.materialCode = materialCode;
outStockRecord.quantity = 0;
outStockRecord.creator = "装配上线点";
outStockRecord.createTime = newTask.createTime;
outStockRecord.version = "";//机型 【EditBy shaocx,2022-01-18】
mod.outStockList.Add(outStockRecord);
//OutStock.isLock = true;
int ress = mod.SaveChanges();
if (ress > 0)
{
res.status = 200;
res.total = (int)newTask.taskId;
}
else
{
res.status = 400;
res.msg = "保存数据失败";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "保存数据失败");
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
}
}
}
catch (Exception ex)
{
res.status = 400;
res.msg = "保存异常";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "异常:" + ex.ToString());
}
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
return res;
}
#endregion
// /// 空托盘回库,该接口由天永机器人调用 【20240602最新版,改变接受天永接口,解决 productCode和serialNumber唯一性的问题】
// ///
// ///
// ///
// ///
// [HttpPost]
// public resMsg EmptyBack([FromBody] EmptyBackEntity value)
// {
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "收到天永空托盘回库参数:" + JsonConvert.SerializeObject(value));
// resMsg res = new resMsg();
// res.status = 400;
// bool ishaveGG = GGstations.Contains(value.station.Trim());
// bool ishaveGT = GTstations.Contains(value.station.Trim());
// string taskname = "";
// string materialCode = "";
// string materialName = "";
// if (!ishaveGG && !ishaveGT)
// {
// res.msg = "非法站点号";
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "非法站点号:" + value.station);
// return res;
// }
// try//findStorage
// {
// using (dbmodel mod = new dbmodel())
// {
// #region 增加日志 [EditBy shaocx,2022-03-27]
// var str_dataList = JsonConvert.SerializeObject(value.dataList);
// if (str_dataList.Length > 2000)
// {
// str_dataList = "";
// }
// var str_jsonStr = JsonConvert.SerializeObject(value);
// if (str_jsonStr.Length > 2000)
// {
// str_jsonStr = "";
// }
// System_TianYongEmptyBackLog _System_TianYongEmptyBackLog = new System_TianYongEmptyBackLog()
// {
// ID = Guid.NewGuid().ToString(),
// station = value.station,
// isMoveEmptyByHand = value.isMoveEmptyByHand.ToString(),
// dataList = str_dataList,
// jsonStr = str_jsonStr,
// Remark = "天永呼叫余料回库",
// CreateTime = DateTime.Now,
// Creator = "天永",
// };
// mod.System_TianYongEmptyBackLog.Add(_System_TianYongEmptyBackLog);
// #endregion
// string toplace = "";
// #region 判断是否空托回库并处理数据
// VproductStock stock = mod.VproductStock.FirstOrDefault(x => x.positionName == value.station);
// if (stock != null)
// {
// //判断如果是人工移走空托盘,就认为全部清了 【EditBy shaocx,2022-03-24】
// if (value.isMoveEmptyByHand)
// {
// #region 判断如果是人工移走空托盘,就认为全部清了 【EditBy shaocx,2022-03-24】
// //起点库位解锁、设置无货 【EditBy shaocx,2022-03-23】
// position _sourcePlace = mod.position.FirstOrDefault(x => x.positionName == value.station);
// PositionHandler.LockAndFree(false, false, _sourcePlace, "天永呼叫余料回库,起点库位解锁、设置无货", "天永", null);
// //删除库存
// List _productStockList = mod.productStockList.Where(x => x.stockId == stock.positionId).ToList();
// if (_productStockList != null && _productStockList.Count > 0)
// {
// foreach (var item in _productStockList)
// {
// mod.productStockList.Remove(item);
// StockClearLog _StockClearLog = new StockClearLog()
// {
// ID = Guid.NewGuid().ToString(),
// serialNumber = item.serialNumber,
// containerCode = stock.containerCode,
// materialCode = stock.materialCode,
// materialName = stock.materialName,
// positionName = stock.positionName,
// qty = stock.quantity,
// supplier = stock.supplier,
// version = stock.version,
// Remark = "天永呼叫余料回库,判断是人工移走空托盘,就认为清理库存",
// CreateTime = DateTime.Now,
// LastModifyTime = DateTime.Now,
// Creator = "天永",
// LastModifier = "天永",
// };
// mod.StockClearLog.Add(_StockClearLog);
// }
// }
// productStock _productStock = mod.productStock.Where(x => x.positionId == stock.positionId).FirstOrDefault();
// if (_productStock != null)
// {
// mod.productStock.Remove(_productStock);
// }
// int ress = mod.SaveChanges();
// #region 判断保存是否成功
// if (ress < 1)
// {
// res.msg = "保存数据失败";
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "保存数据失败");
// }
// else
// {
// res.status = 200;
// res.total = 0;
// //注意:暂时不给天永推消息
// ////推送天永消息
// //using (yunneiPda.WCSserver.IyunneiWcfClient wcsWcf = new WCSserver.IyunneiWcfClient())
// //{
// // toplace = wcsWcf.safetySignalByPerson(AREA);
// //}
// }
// #endregion
// #endregion
// }
// else
// {//其他情况
// #region 其他情况
// ///当前库位的库存
// List cur_positionId_productStockList = mod.productStockList.Where(x => x.stockId == stock.positionId).ToList();
// List serialTotal = new List();//库存加多余的流水号集合
// List lastSerial = new List();//多余的流水号集合,留着写入数据库下次比对
// #region 转换天永发过来的数据
// for (int i = 0; i < value.dataList.Count; i++)
// {
// #region 原先的代码
// /*
// * {
// "station": "GGU1",
// "dataList": [
// {
// "serialNumber": "G10037092*GD405*2404230063"
// }
// ],
// "isMoveEmptyByHand": false
//}
// */
// string[] serials = value.dataList[i].serialNumber.Split('*');
// //value.materialCode = serials[0];
// //value.dataList[i].serialNumber = serials[2];
// serialTotal.Add(new inStockOrderList()
// {//记录 天永本次发过来的流水号(代表天永已经消耗了这些流水号)
// productCode = serials[0],
// serialNumber = serials[2]
// });
// #endregion
// }
// #endregion
// if (cur_positionId_productStockList.Count > 0)
// {
// int AREA = ishaveGG == true ? 3 : 2;
// using (yunneiPda.WCSserver.IyunneiWcfClient wcsWcf = new WCSserver.IyunneiWcfClient())
// {
// toplace = wcsWcf.findStock(AREA);//找空库位
// }
// if (toplace == "")
// {
// res.msg = "没有空库位";
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "保存数据失败");
// return res;
// }
// // toplace = toplace.Split('/')[0];
// materialCode = cur_positionId_productStockList[0].productCode;
// materialName = cur_positionId_productStockList[0].productName;
// //移除天永发过来的流水号 在库存数据里有的
// System.Collections.Generic.List history = mod.serialNumberHistory.Where(x => x.area == AREA).ToList();
// if (history.Count > 0)
// {
// System.Collections.Generic.List willRemoveList = new System.Collections.Generic.List();
// for (int i = 0; i < history.Count; i++)
// {
// serialTotal.Add(new inStockOrderList()
// {
// serialNumber = history[i].serialNumber,
// productCode = history[i].productCode
// });
// willRemoveList.Add(history[i]);
// }
// if (willRemoveList.Count > 0)
// {
// mod.serialNumberHistory.RemoveRange(willRemoveList);
// }
// }
// //List isEmpty = serialNumber.Where(p => !value.dataList.Any(x => x
// // .serialNumber == p.serialNumber)).ToList();
// //List sss = _productStockList.Select(x => x.serialNumber).ToList();
// //lastSerial = serialTotal.Except(sss).ToList();
// //原因是 天永每次发过来的,不一定非是本站点消耗的,需要wcs临时先记下来。
// List sss = cur_positionId_productStockList.Select(x => (x.productCode + "_" + x.serialNumber)).ToList();
// lastSerial = serialTotal.Where(x => !sss.Contains((x.productCode + "_" + x.serialNumber))).ToList();
// if (lastSerial.Count > 0)
// {//寻找 wcs临时记下来有的,但是库存中没有的数据
// for (int i = 0; i < lastSerial.Count; i++)
// {
// serialNumberHistory newHistory = new serialNumberHistory();
// newHistory.area = AREA;
// newHistory.serialNumber = lastSerial[i].serialNumber;
// newHistory.productCode = lastSerial[i].productCode;
// newHistory.createTime = DateTime.Now;
// mod.serialNumberHistory.Add(newHistory);
// }
// }
// var query_serialTotal_list = serialTotal.Select(x => (x.productCode + "_" + x.serialNumber)).ToList();
// List isEmpty = cur_positionId_productStockList.Where(x => !query_serialTotal_list.Contains((x.productCode + "_" + x.serialNumber))).ToList();
// if (isEmpty.Count == 0)
// {
// #region 空托回库
// taskname = ishaveGG == true ? "缸盖空托回库" : "缸体空托回库";
// //清除库存
// productStock backStock = mod.productStock.FirstOrDefault(x => x.positionId == stock.positionId);
// if (backStock != null)
// {
// mod.productStock.Remove(backStock);
// }
// // mod.VproductStock.Remove(stock);
// foreach (var item in cur_positionId_productStockList)
// {
// mod.productStockList.Remove(item);
// StockClearLog _StockClearLog = new StockClearLog()
// {
// ID = Guid.NewGuid().ToString(),
// serialNumber = item.serialNumber,
// containerCode = stock.containerCode,
// materialCode = stock.materialCode,
// materialName = stock.materialName,
// positionName = stock.positionName,
// qty = stock.quantity,
// supplier = stock.supplier,
// version = stock.version,
// Remark = "天永呼叫余料回库,判断是空托回库,就认为清理库存",
// CreateTime = DateTime.Now,
// LastModifyTime = DateTime.Now,
// Creator = "天永",
// LastModifier = "天永",
// };
// mod.StockClearLog.Add(_StockClearLog);
// }
// #endregion
// }
// else//余料回库
// {
// #region 把数据同步 入库地址
// taskname = ishaveGG == true ? "缸盖余料回库" : "缸体余料回库";
// productStock backStock = mod.productStock.FirstOrDefault(x => x.positionId == stock.positionId);
// if (backStock != null)
// {
// backStock.positionId = Convert.ToInt64(toplace.Split('/')[1]);
// backStock.quantity = isEmpty.Count;
// backStock.updateTime = DateTime.Now;
// }
// long positionid = Convert.ToInt64(toplace.Split('/')[1]);
// position backPosition = mod.position.FirstOrDefault(x => x.positionId == positionid);
// if (backPosition != null)
// {
// backPosition.positionType = (byte)positionType.余料回库;
// }
// //stock.positionId = Convert.ToInt64(toplace.Split('/')[1]);
// //stock.quantity = serialNumber.Count;
// List retainSerialNum = isEmpty.Select(x => x.serialNumber).ToList();
// foreach (var item in cur_positionId_productStockList)
// {
// if (!retainSerialNum.Contains(item.serialNumber))
// {
// mod.productStockList.Remove(item);//移除库存
// StockClearLog _StockClearLog = new StockClearLog()
// {
// ID = Guid.NewGuid().ToString(),
// serialNumber = item.serialNumber,
// containerCode = stock.containerCode,
// materialCode = stock.materialCode,
// materialName = stock.materialName,
// positionName = stock.positionName,
// qty = stock.quantity,
// supplier = stock.supplier,
// version = stock.version,
// Remark = "天永呼叫余料回库,判断是余料回库,就认为清理天永使用过的流水号",
// CreateTime = DateTime.Now,
// LastModifyTime = DateTime.Now,
// Creator = "天永",
// LastModifier = "天永",
// };
// mod.StockClearLog.Add(_StockClearLog);
// }
// else
// {
// item.stockId = Convert.ToInt64(toplace.Split('/')[1]);//toplace 返回的库位名称和ID 用/连接再一起
// }
// }
// #endregion
// }
// task newTask = new task();
// #region 写入任务
// newTask.createListCode = ishaveGG == true ? "KG" + DateTime.Now.ToString("yyMMddHHmmss") : "KT" + DateTime.Now.ToString("yyMMddHHmmss");
// var _taskStatus = default(taskStatus);
// var _taskType = default(taskType);
// if (value.station.Trim() == "GTU4" || value.station.Trim() == "GTU5")
// {//增加对旁路工位的判断 [EditBy shaocx,2022-05-04]
// _taskType = isEmpty.Count == 0 ? taskType.旁路工位缸体空托回库 : taskType.旁路工位缸体余料回库;
// _taskStatus = taskStatus.新建;
// newTask.isQueLiao = 0;
// }
// else
// {
// _taskType = isEmpty.Count == 0 ? taskType.空托回库 : taskType.余料回库;
// _taskStatus = taskStatus.未下发;
// }
// newTask.taskType = (int)_taskType;
// newTask.taskTypeName = _taskType.ToString();
// newTask.taskName = taskname;
// newTask.taskStatus = (int)_taskStatus;
// newTask.sourcePlace = value.station.Trim();
// newTask.middlePlace = "";
// newTask.toPlace = toplace.Split('/')[0];
// newTask.area = ishaveGG == true ? 2 : 1;
// newTask.priority = 1;
// newTask.materialCode = isEmpty.Count == 0 ? "" : materialCode;
// newTask.materialName = isEmpty.Count == 0 ? "" : materialName;
// newTask.quantity = isEmpty.Count == 0 ? 0 : isEmpty.Count;
// newTask.createTime = DateTime.Now;
// newTask.sendMesed = isEmpty.Count == 0 ? 0 : 1;//1=未发送,2=发送成功,3=发送失败,o是空托盘不参与对接
// newTask.mesReply = isEmpty.Count == 0 ? "" : "未发送";
// newTask.supplier = stock.supplier;//供应商 【EditBy shaocx,2022-01-15】
// newTask.containerCode = stock.containerCode;//托盘号 【EditBy shaocx,2022-01-15】
// newTask.version = stock.version;
// newTask.creator = "PDA";
// //记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
// MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
// #endregion
// mod.task.Add(newTask);
// //起点库位解锁、设置无货 【EditBy shaocx,2022-03-23】
// position _sourcePlace = mod.position.FirstOrDefault(x => x.positionName == value.station);
// PositionHandler.LockAndFree(false, false, _sourcePlace, "天永呼叫余料回库,起点库位解锁、设置无货", "天永", newTask);
// int ress = mod.SaveChanges();
// #region 判断保存是否成功
// if (ress < 1)
// {
// ress = mod.SaveChanges();
// if (ress < 1)
// {
// ress = mod.SaveChanges();
// if (ress < 1)
// {
// res.msg = "保存数据失败";
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "保存数据失败");
// }
// else
// {
// res.status = 200;
// }
// }
// else
// {
// res.status = 200;
// }
// }
// else
// {
// res.status = 200;
// res.total = (int)newTask.taskId;
// }
// #endregion
// }
// else
// {
// res.msg = "非法回库站点,库存没数据";
// }
// #endregion
// }
// }
// #endregion
// else
// {
// res.msg = value.station.Trim() + "这里没有数据,不能执行";
// }
// }
// }
// catch (Exception ex)
// {
// res.status = 400;
// res.msg = "保存异常";
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "callEmtyp", ex.ToString());
// }
// return res;
// }
/// 空托盘回库,该接口由天永机器人调用 【20240717优化-解决表serialNumberHistory太大,接口慢的问题】
///
///
///
///
[HttpPost]
public resMsg EmptyBack([FromBody] EmptyBackEntity value)
{
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "收到天永空托盘回库参数:" + JsonConvert.SerializeObject(value));
resMsg res = new resMsg();
res.status = 400;
res.msg = "";
bool ishaveGG = GGstations.Contains(value.station.Trim());
bool ishaveGT = GTstations.Contains(value.station.Trim());
string taskname = "";
string materialCode = "";
string materialName = "";
if (!ishaveGG && !ishaveGT)
{
res.msg = MyExtend.GetFFZDHStr(value.station);
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", res.msg);
return res;
//*/
}
try//findStorage
{
System.Collections.Generic.List db_history = new List();
//准备要清理的历史数据
List willDelete_serialNumberHistory_List = new List();
///当前库位的库存
List cur_positionId_productStockList = new List();
List tianyongParams = new List();//天永传递过来的参数集合
List willInsert_tianyongParams = new List();//准备要插入表 serialNumberHistory的数据
int AREA = ishaveGG == true ? 3 : 2;
#region 转换天永发过来的数据
for (int i = 0; i < value.dataList.Count; i++)
{
#region 原先的代码
/*
* {
"station": "GGU1",
"dataList": [
{
"serialNumber": "G10037092*GD405*2404230063"
}
],
"isMoveEmptyByHand": false
}
*/
string[] serials = value.dataList[i].serialNumber.Split('*');
if (serials.Length != 3)
{
res.msg = "格式不正确,必须是物料号*供应商*流水号";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", res.msg);
return res;
}
tianyongParams.Add(new inStockOrderList()
{//记录 天永本次发过来的流水号(代表天永已经消耗了这些流水号)
productCode = serials[0],
serialNumber = serials[2]
});
#endregion
}
#endregion
using (dbmodel mod = new dbmodel())
{
#region 增加日志 [EditBy shaocx,2022-03-27]
var str_dataList = JsonConvert.SerializeObject(value.dataList);
if (str_dataList.Length > 2000)
{
str_dataList = "";
}
var str_jsonStr = JsonConvert.SerializeObject(value);
if (str_jsonStr.Length > 2000)
{
str_jsonStr = "";
}
System_TianYongEmptyBackLog _System_TianYongEmptyBackLog = new System_TianYongEmptyBackLog()
{
ID = Guid.NewGuid().ToString(),
station = value.station,
isMoveEmptyByHand = value.isMoveEmptyByHand.ToString(),
dataList = str_dataList,
jsonStr = str_jsonStr,
Remark = "天永呼叫余料回库",
CreateTime = DateTime.Now,
Creator = "天永",
};
mod.System_TianYongEmptyBackLog.Add(_System_TianYongEmptyBackLog);
#endregion
#region 查询库存
db_history = mod.serialNumberHistory.ToList();
if (db_history.Count > 0)
{
var queryStr_db_history = db_history.Select(x => (x.productCode + "_" + x.serialNumber)).ToList();
//寻找表中有的,并且天永参数也有的,然后把天永参数移除
willInsert_tianyongParams = tianyongParams.Where(x => !queryStr_db_history.Contains((x.productCode + "_" + x.serialNumber))).ToList();
}
else
{
willInsert_tianyongParams = tianyongParams;
}
#endregion
string toplace = "";
#region 判断是否空托回库并处理数据
VproductStock stock = mod.VproductStock.FirstOrDefault(x => x.positionName == value.station);
if (stock != null)
{
///当前库位的库存
cur_positionId_productStockList = mod.productStockList.Where(x => x.stockId == stock.positionId).ToList();
//判断如果是人工移走空托盘,就认为全部清了 【EditBy shaocx,2022-03-24】
if (value.isMoveEmptyByHand)
{
#region 判断如果是人工移走空托盘,就认为全部清了 【EditBy shaocx,2022-03-24】
//起点库位解锁、设置无货 【EditBy shaocx,2022-03-23】
position _sourcePlace = mod.position.FirstOrDefault(x => x.positionName == value.station);
PositionHandler.LockAndFree(false, false, _sourcePlace, "天永呼叫余料回库,起点库位解锁、设置无货", "天永", null);
//删除库存
List _productStockList = mod.productStockList.Where(x => x.stockId == stock.positionId).ToList();
if (_productStockList != null && _productStockList.Count > 0)
{
foreach (var item in _productStockList)
{
mod.productStockList.Remove(item);
RemoveDataForDeleteProductStockList(item, db_history, ref willInsert_tianyongParams, ref willDelete_serialNumberHistory_List);
StockClearLog _StockClearLog = new StockClearLog()
{
ID = Guid.NewGuid().ToString(),
serialNumber = item.serialNumber,
containerCode = stock.containerCode,
materialCode = stock.materialCode,
materialName = stock.materialName,
positionName = stock.positionName,
qty = stock.quantity,
supplier = stock.supplier,
version = stock.version,
Remark = "天永呼叫余料回库,判断是人工移走空托盘,就认为清理库存",
CreateTime = DateTime.Now,
LastModifyTime = DateTime.Now,
Creator = "天永",
LastModifier = "天永",
};
mod.StockClearLog.Add(_StockClearLog);
}
}
productStock _productStock = mod.productStock.Where(x => x.positionId == stock.positionId).FirstOrDefault();
if (_productStock != null)
{
mod.productStock.Remove(_productStock);
}
CommnHandleDeletaData(mod, AREA, willInsert_tianyongParams, willDelete_serialNumberHistory_List);
CommonHandlerForEmptyBack(mod, res, null);
#endregion
}
else
{//其他情况
#region 其他情况
if (cur_positionId_productStockList.Count > 0)
{
using (yunneiPda.WCSserver.IyunneiWcfClient wcsWcf = new WCSserver.IyunneiWcfClient())
{
toplace = wcsWcf.findStock(AREA);//找空库位
}
if (toplace == "")
{
res.msg = "没有空库位";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", res.msg);
return res;
}
// toplace = toplace.Split('/')[0];
materialCode = cur_positionId_productStockList[0].productCode;
materialName = cur_positionId_productStockList[0].productName;
//原因是 天永每次发过来的,不一定非是本站点消耗的,需要wcs临时先记下来。
var query_serialTotal_list = db_history.Select(x => (x.productCode + "_" + x.serialNumber)).ToList();
query_serialTotal_list.AddRange(willInsert_tianyongParams.Select(x => (x.productCode + "_" + x.serialNumber)).ToList());
List isEmpty = cur_positionId_productStockList.Where(x => !query_serialTotal_list.Contains((x.productCode + "_" + x.serialNumber))).ToList();
if (isEmpty.Count == 0)
{
#region 空托回库
taskname = ishaveGG == true ? "缸盖空托回库" : "缸体空托回库";
//清除库存
productStock backStock = mod.productStock.FirstOrDefault(x => x.positionId == stock.positionId);
if (backStock != null)
{
mod.productStock.Remove(backStock);
}
foreach (var item in cur_positionId_productStockList)
{
mod.productStockList.Remove(item);//移除库存
RemoveDataForDeleteProductStockList(item, db_history, ref willInsert_tianyongParams, ref willDelete_serialNumberHistory_List);
StockClearLog _StockClearLog = new StockClearLog()
{
ID = Guid.NewGuid().ToString(),
serialNumber = item.serialNumber,
containerCode = stock.containerCode,
materialCode = stock.materialCode,
materialName = stock.materialName,
positionName = stock.positionName,
qty = stock.quantity,
supplier = stock.supplier,
version = stock.version,
Remark = "天永呼叫余料回库,判断是空托回库,就认为清理库存",
CreateTime = DateTime.Now,
LastModifyTime = DateTime.Now,
Creator = "天永",
LastModifier = "天永",
};
mod.StockClearLog.Add(_StockClearLog);
}
#endregion
}
else//余料回库
{
#region 把数据同步 入库地址
taskname = ishaveGG == true ? "缸盖余料回库" : "缸体余料回库";
productStock backStock = mod.productStock.FirstOrDefault(x => x.positionId == stock.positionId);
if (backStock != null)
{
backStock.positionId = Convert.ToInt64(toplace.Split('/')[1]);
backStock.quantity = isEmpty.Count;
backStock.updateTime = DateTime.Now;
}
long positionid = Convert.ToInt64(toplace.Split('/')[1]);
position backPosition = mod.position.FirstOrDefault(x => x.positionId == positionid);
if (backPosition != null)
{
backPosition.positionType = (byte)positionType.余料回库;
}
//stock.positionId = Convert.ToInt64(toplace.Split('/')[1]);
//stock.quantity = serialNumber.Count;
List retainSerialNum = isEmpty.Select(x => x.serialNumber).ToList();
foreach (var item in cur_positionId_productStockList)
{
if (!retainSerialNum.Contains(item.serialNumber))
{
mod.productStockList.Remove(item);//移除库存
RemoveDataForDeleteProductStockList(item, db_history, ref willInsert_tianyongParams, ref willDelete_serialNumberHistory_List);
StockClearLog _StockClearLog = new StockClearLog()
{
ID = Guid.NewGuid().ToString(),
serialNumber = item.serialNumber,
containerCode = stock.containerCode,
materialCode = stock.materialCode,
materialName = stock.materialName,
positionName = stock.positionName,
qty = stock.quantity,
supplier = stock.supplier,
version = stock.version,
Remark = "天永呼叫余料回库,判断是余料回库,就认为清理天永使用过的流水号",
CreateTime = DateTime.Now,
LastModifyTime = DateTime.Now,
Creator = "天永",
LastModifier = "天永",
};
mod.StockClearLog.Add(_StockClearLog);
}
else
{
item.stockId = Convert.ToInt64(toplace.Split('/')[1]);//toplace 返回的库位名称和ID 用/连接再一起
}
}
#endregion
}
CommnHandleDeletaData(mod, AREA, willInsert_tianyongParams, willDelete_serialNumberHistory_List);
task newTask = new task();
#region 写入任务
newTask.createListCode = ishaveGG == true ? "KG" + DateTime.Now.ToString("yyMMddHHmmss") : "KT" + DateTime.Now.ToString("yyMMddHHmmss");
var _taskStatus = default(taskStatus);
var _taskType = default(taskType);
if (value.station.Trim() == "GTU4" || value.station.Trim() == "GTU5")
{//增加对旁路工位的判断 [EditBy shaocx,2022-05-04]
_taskType = isEmpty.Count == 0 ? taskType.旁路工位缸体空托回库 : taskType.旁路工位缸体余料回库;
_taskStatus = taskStatus.新建;
newTask.isQueLiao = 0;
}
else
{
_taskType = isEmpty.Count == 0 ? taskType.空托回库 : taskType.余料回库;
_taskStatus = taskStatus.未下发;
}
newTask.taskType = (int)_taskType;
newTask.taskTypeName = _taskType.ToString();
newTask.taskName = taskname;
newTask.taskStatus = (int)_taskStatus;
newTask.sourcePlace = value.station.Trim();
newTask.middlePlace = "";
newTask.toPlace = toplace.Split('/')[0];
newTask.area = ishaveGG == true ? 2 : 1;
newTask.priority = 1;
newTask.materialCode = isEmpty.Count == 0 ? "" : materialCode;
newTask.materialName = isEmpty.Count == 0 ? "" : materialName;
newTask.quantity = isEmpty.Count == 0 ? 0 : isEmpty.Count;
newTask.createTime = DateTime.Now;
newTask.sendMesed = isEmpty.Count == 0 ? 0 : 1;//1=未发送,2=发送成功,3=发送失败,o是空托盘不参与对接
newTask.mesReply = isEmpty.Count == 0 ? "" : "未发送";
newTask.supplier = stock.supplier;//供应商 【EditBy shaocx,2022-01-15】
newTask.containerCode = stock.containerCode;//托盘号 【EditBy shaocx,2022-01-15】
newTask.version = stock.version;
newTask.creator = "PDA";
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
#endregion
mod.task.Add(newTask);
//起点库位解锁、设置无货 【EditBy shaocx,2022-03-23】
position _sourcePlace = mod.position.FirstOrDefault(x => x.positionName == value.station);
PositionHandler.LockAndFree(false, false, _sourcePlace, "天永呼叫余料回库,起点库位解锁、设置无货", "天永", newTask);
CommonHandlerForEmptyBack(mod, res, newTask);
}
//增加对原先库存就是空托盘的处理 【EditBy shaocx,2024-10-12】
else if (stock.materialCode == "GG-KTP" || stock.materialCode == "GT-KTP")
{
using (yunneiPda.WCSserver.IyunneiWcfClient wcsWcf = new WCSserver.IyunneiWcfClient())
{
toplace = wcsWcf.findStock(AREA);//找空库位
}
if (toplace == "")
{
res.msg = "没有空库位";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", res.msg);
return res;
}
List isEmpty = new List();
#region 空托回库
taskname = ishaveGG == true ? "缸盖空托回库" : "缸体空托回库";
//清除库存
productStock backStock = mod.productStock.FirstOrDefault(x => x.positionId == stock.positionId);
if (backStock != null)
{
mod.productStock.Remove(backStock);
}
#endregion
CommnHandleDeletaData(mod, AREA, willInsert_tianyongParams, willDelete_serialNumberHistory_List);
task newTask = new task();
#region 写入任务
newTask.createListCode = ishaveGG == true ? "KG" + DateTime.Now.ToString("yyMMddHHmmss") : "KT" + DateTime.Now.ToString("yyMMddHHmmss");
var _taskStatus = default(taskStatus);
var _taskType = default(taskType);
if (value.station.Trim() == "GTU4" || value.station.Trim() == "GTU5")
{//增加对旁路工位的判断 [EditBy shaocx,2022-05-04]
_taskType = isEmpty.Count == 0 ? taskType.旁路工位缸体空托回库 : taskType.旁路工位缸体余料回库;
_taskStatus = taskStatus.新建;
newTask.isQueLiao = 0;
}
else
{
_taskType = isEmpty.Count == 0 ? taskType.空托回库 : taskType.余料回库;
_taskStatus = taskStatus.未下发;
}
newTask.taskType = (int)_taskType;
newTask.taskTypeName = _taskType.ToString();
newTask.taskName = taskname;
newTask.taskStatus = (int)_taskStatus;
newTask.sourcePlace = value.station.Trim();
newTask.middlePlace = "";
newTask.toPlace = toplace.Split('/')[0];
newTask.area = ishaveGG == true ? 2 : 1;
newTask.priority = 1;
newTask.materialCode = isEmpty.Count == 0 ? "" : materialCode;
newTask.materialName = isEmpty.Count == 0 ? "" : materialName;
newTask.quantity = isEmpty.Count == 0 ? 0 : isEmpty.Count;
newTask.createTime = DateTime.Now;
newTask.sendMesed = isEmpty.Count == 0 ? 0 : 1;//1=未发送,2=发送成功,3=发送失败,o是空托盘不参与对接
newTask.mesReply = isEmpty.Count == 0 ? "" : "未发送";
newTask.supplier = stock.supplier;//供应商 【EditBy shaocx,2022-01-15】
newTask.containerCode = stock.containerCode;//托盘号 【EditBy shaocx,2022-01-15】
newTask.version = stock.version;
newTask.creator = "PDA";
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
#endregion
mod.task.Add(newTask);
//起点库位解锁、设置无货 【EditBy shaocx,2022-03-23】
position _sourcePlace = mod.position.FirstOrDefault(x => x.positionName == value.station);
PositionHandler.LockAndFree(false, false, _sourcePlace, "天永呼叫余料回库,起点库位解锁、设置无货", "天永", newTask);
CommonHandlerForEmptyBack(mod, res, newTask);
}
else
{
res.msg = "非法回库站点,库存没数据";
}
#endregion
}
}
#endregion
else
{
res.msg = value.station.Trim() + "这里没有数据,不能执行";
}
}
}
catch (Exception ex)
{
res.status = 400;
res.msg = "保存异常";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "异常:" + ex.ToString());
}
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "接口返回:" + res.msg);
return res;
}
private void RemoveDataForDeleteProductStockList(productStockList item, System.Collections.Generic.List db_history,
ref List willInsert_tianyongParams, ref List willDelete_serialNumberHistory_List)
{
//同时将表serialNumberHistory移除
var removeList = db_history.Where(x => (x.productCode + "_" + x.serialNumber) == (item.productCode + "_" + item.serialNumber)).ToList();
willDelete_serialNumberHistory_List.AddRange(removeList);
//同时清理 willInsert_tianyongParams
willInsert_tianyongParams = willInsert_tianyongParams.Where(x => (x.productCode + "_" + x.serialNumber) != (item.productCode + "_" + item.serialNumber)).ToList();
}
///
/// 公共处理移除数据
///
///
///
///
///
private void CommnHandleDeletaData(dbmodel mod, int? AREA, List willInsert_tianyongParams, List willDelete_serialNumberHistory_List)
{
//删除表 serialNumberHistory
if (willDelete_serialNumberHistory_List.Count > 0)
{
mod.serialNumberHistory.RemoveRange(willDelete_serialNumberHistory_List);
}
//新增表 serialNumberHistory
foreach (var item in willInsert_tianyongParams)
{
serialNumberHistory newHistory = new serialNumberHistory();
newHistory.area = AREA;
newHistory.serialNumber = item.serialNumber;
newHistory.productCode = item.productCode;
newHistory.createTime = DateTime.Now;
mod.serialNumberHistory.Add(newHistory);
}
}
private void CommonHandlerForEmptyBack(dbmodel mod, resMsg res, task newTask)
{
int ress = mod.SaveChanges();
if (ress < 1)
{
res.msg = "保存数据失败";
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "保存数据失败");
}
else
{
res.status = 200;
//res.total = 0;
//要传递任务号 【Editby shaocx,2024-10-12】
if (newTask != null)
{
res.total = (int)newTask.taskId;
}
else
{
res.total = 0;
}
}
}
#endregion
#region AGV系统调用的接口
/// AGV进去离开安全信号,该接口由AGV系统不停的调用,直到返回允许为止
///
///
/// 站点号
/// 1=进,2=出
///
[HttpPost]
public bool safetySignal([FromUri] string station, int OutOrIn, string taskId)
{
bool isok = false;
try
{
using (yunneiPda.WCSserver.IyunneiWcfClient wcsWcf = new WCSserver.IyunneiWcfClient())
{
isok = wcsWcf.safetySignal(station, OutOrIn, taskId);//收到AGV的信号后,WCS要通知到天永机器人那边,说物料已经送到了。
}
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "safetySignal", "收到安全信号站点号:" + station + "1=进2=出:" + OutOrIn + "任务ID:" + taskId + "返回" + isok);
}
catch (Exception ex)
{
isok = false;
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "changeOrderStatus", ex.ToString());
}
return isok;
}
#endregion
}
public class user
{
///
/// 用户名
///
public string userName { get; set; }
///
/// 密码
///
public string passWord { get; set; }
}
}