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; } } }