| | |
| | | using Elastic.Clients.Elasticsearch; |
| | | using AngleSharp.Io; |
| | | using COSXML.Network; |
| | | using Elastic.Clients.Elasticsearch; |
| | | using Elastic.Clients.Elasticsearch.Inference; |
| | | using Furion.Logging; |
| | | using NewLife.Http; |
| | | using Newtonsoft.Json; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using System.Linq; |
| | | using System.Text; |
| | |
| | | //} |
| | | |
| | | // <summary> |
| | | /// WCS接受WMS下发的任务(单条任务) |
| | | /// WCS接受WMS下发的任务 |
| | | /// </summary> |
| | | /// <param name="models">任务信息</param> |
| | | /// <returns>反馈信息</returns> |
| | |
| | | { |
| | | models.Order = 2; |
| | | } |
| | | //新增任务 |
| | | |
| | | int aaa = int.Parse(models.TaskType); |
| | | var taskAdd = new WcsTask() |
| | | { |
| | | TaskNo = models.TaskNo, |
| | | TaskType = TaskTypeEnum.Out, |
| | | TaskType = (TaskTypeEnum)aaa, |
| | | Status = TaskStatusEnum.Wait, |
| | | //IsSuccess =TaskSuccessEnum.Success, |
| | | Origin = "WMS", |
| | | StartRoadway= models.StartRoadway, |
| | | StartRoadway = models.StartRoadway, |
| | | StartLocate = models.StartLocate, |
| | | EndLocate = models.EndLocate, |
| | | EndRoadway= models.EndRoadway, |
| | | EndRoadway = models.EndRoadway, |
| | | PalletNo = models.PalletNo, |
| | | Levels = 999 |
| | | |
| | | //LotNo =models.LotNo, |
| | | //SkuNo=models.SkuNo, |
| | |
| | | //{ |
| | | var orderAdd = new WcsOderTask() |
| | | { |
| | | OrderNo = item.OrderNo, |
| | | OrderNo = item.OrderNo.Trim(), |
| | | TaskNo = "", |
| | | LotNo = item.LotNo, |
| | | SkuNo = item.SkuNo, |
| | | SkuName = item.SkuName, |
| | | LotNo = item.LotNo.Trim(), |
| | | SkuNo = item.SkuNo.Trim(), |
| | | SkuName = item.SkuName.Trim(), |
| | | BoxType = item.BoxType, |
| | | Qty = item.Qty, |
| | | TaskType = (TaskTypeEnum)item.TaskType, |
| | | Status=TaskStatusEnum.Wait |
| | | }; |
| | | _db.Insertable(orderAdd).ExecuteCommand(); |
| | | //} |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取空托盘垛申请入库工位 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | [AllowAnonymous] |
| | | [HttpPost] |
| | | public ResponseModel GetNullPalletRukuStation() |
| | | { |
| | | try |
| | | { |
| | | string rukuAdress = ""; |
| | | var conveyList4 = new List<string>() { "266", "265" };//四楼入库工位 |
| | | foreach (var item in conveyList4) |
| | | { |
| | | // 根据目标工位号获取输送线链接 |
| | | var plcCconn = PLCCommon.GetPlcIp(item); |
| | | // 读取目标工位当前状态 |
| | | var ConveyorMod = PLCTaskAction.plcDevices.First(m => m.StationNum == item && m.DeviceType == DeviceTypeEnum.Business); |
| | | var (result, value) = plcCconn.GetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.PlcPos); |
| | | if (result.IsSucceed) |
| | | { |
| | | if (value.ToString() == "120")//空闲状态 |
| | | { |
| | | // 判断该工位是否存在未完成的出库任务 |
| | | var modInTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime, OrderByType.Asc) |
| | | .First(s => (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) && s.TaskType == TaskTypeEnum.Out && s.EndLocate == item); |
| | | |
| | | if (modInTask == null) |
| | | { |
| | | // 若空闲并没有未完成的出库任务提前占用此工位 |
| | | var ret = plcCconn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "130"); |
| | | if (ret.IsSucceed) |
| | | { |
| | | rukuAdress = item; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (!string.IsNullOrEmpty(rukuAdress)) |
| | | { |
| | | return new ResponseModel() { StatusCode = 0, Msg = rukuAdress }; |
| | | } |
| | | else |
| | | { |
| | | return new ResponseModel() { StatusCode = -1, Msg = "无空闲入库工位" }; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return new ResponseModel() { StatusCode = -1, Msg = ex.Message }; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 小车入库口放货完成,WMS调用WCS更改PLC |
| | | /// </summary> |
| | | /// <param name="StationNum"></param> |
| | | /// <returns></returns> |
| | | [AllowAnonymous] |
| | | [HttpPost] |
| | | public ResponseModel UpdatePlcPosAgvTaskFinsh(AgvTaskFinshModel model) |
| | | { |
| | | try |
| | | { |
| | | var conveyList4 = new List<string>() { "266", "265" };//四楼入库工位 |
| | | if (!conveyList4.Contains(model.StationNum)) |
| | | { |
| | | return new ResponseModel() { StatusCode = -1, Msg = "工位号无效" }; |
| | | } |
| | | // 根据目标工位号获取输送线链接 |
| | | var plcCconn = PLCCommon.GetPlcIp(model.StationNum); |
| | | // 读取目标工位当前状态 |
| | | var ConveyorMod = PLCTaskAction.plcDevices.First(m => m.StationNum == model.StationNum && m.DeviceType == DeviceTypeEnum.Business); |
| | | var (result, value) = plcCconn.GetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.PlcPos); |
| | | if (result.IsSucceed) |
| | | { |
| | | if (value.ToString() != "150")//空闲状态 |
| | | { |
| | | return new ResponseModel() { StatusCode = -1, Msg = "工位号PLC状态异常" }; |
| | | } |
| | | // 写入160,放货完成 |
| | | var ret = plcCconn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "160"); |
| | | if (ret.IsSucceed) |
| | | { |
| | | return new ResponseModel() { StatusCode = 0, Msg = "成功" }; |
| | | } |
| | | else |
| | | { |
| | | return new ResponseModel() { StatusCode = -1, Msg = "写入PLC失败" }; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | return new ResponseModel() { StatusCode = -1, Msg = "连接PLC失败" }; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return new ResponseModel() { StatusCode = -1, Msg = ex.Message }; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// WCS接受赋码系统推送的箱码信息 |
| | | /// </summary> |
| | | /// <param name="models">箱码信息</param> |
| | | /// <returns>反馈信息</returns> |
| | | [HttpPost("AddHttpBoxInfo")] |
| | | [AllowAnonymous] |
| | | public ResponseFuMaModel AddHttpBoxInfo(FumaBoxModel models) |
| | | { |
| | | try |
| | | { |
| | | string str = JsonConvert.SerializeObject(models); |
| | | Log.Information("接收赋码推送的箱码信息:" + str); |
| | | |
| | | var num = _db.Queryable<WcsBoxInfo>().Where(m => m.BoxNo == models.Product.BoxNo && m.IsDelete == false).ToList(); |
| | | var type = "add"; |
| | | if (num.Count > 0) |
| | | { |
| | | //WCS存在箱码信息,更新箱码信息(需判断箱码是否已组盘入库) |
| | | var num2 = num.Count(m => m.Status != "0" || !string.IsNullOrWhiteSpace(m.PalletNo)); |
| | | if (num2 > 0) |
| | | { |
| | | throw new Exception("该箱已入盘入库,不可更新信息"); |
| | | } |
| | | type = "edit"; |
| | | } |
| | | |
| | | if (models.Product.Barcodes.Count == 0) |
| | | { |
| | | throw new Exception("盒码集合不能为空"); |
| | | } |
| | | |
| | | var listBox = new List<WcsBoxInfo>(); |
| | | foreach (var item in models.Product.Barcodes) |
| | | { |
| | | if (string.IsNullOrWhiteSpace(models.Product.ProductionTime) || string.IsNullOrWhiteSpace(models.Product.ExpirationTime)) |
| | | { |
| | | throw new Exception("生产日期或过期日期不能为空"); |
| | | } |
| | | DateTime proTime; |
| | | DateTime expTime; |
| | | var isValid = DateTime.TryParse(models.Product.ProductionTime, out proTime); |
| | | var isValid2 = DateTime.TryParse(models.Product.ExpirationTime, out expTime); |
| | | if (!isValid || !isValid2) |
| | | { |
| | | throw new Exception("生产日期或失效日期格式错误"); |
| | | }; |
| | | |
| | | var boxAdd = new WcsBoxInfo() |
| | | { |
| | | SkuNo = models.Product.SkuNo, |
| | | SkuName = models.Product.SkuName, |
| | | LotNo = models.Product.LotNo, |
| | | LotText = models.Product.LotText, |
| | | Custom = models.Product.Custom, |
| | | CustomName = models.Product.CustomName, |
| | | ProductionTime = proTime, |
| | | ExpirationTime = expTime, |
| | | LineNo=models.Product.Line_No, |
| | | Standard = models.Product.Standard, |
| | | PackageStandard = models.Product.PackageStandard, |
| | | PackUnit = models.Product.PackUnit, |
| | | StoreTime = DateTime.Parse(models.Product.StoreTime), |
| | | BitBoxMark = models.Product.BitBoxMark, |
| | | BoxNo = models.Product.BoxNo, |
| | | Qty = 1,//数量 |
| | | FullQty = 0,//整箱数量 |
| | | InsPectMark = models.Product.InsPectMark,//抽检标记 |
| | | BoxNo2 = item.BoxNo2, |
| | | BoxNo3 = "", |
| | | Level = item.Level, |
| | | EndLotFlag = string.IsNullOrWhiteSpace(models.Product.BitBoxMark) ? "0" : models.Product.BitBoxMark,//结批标识 |
| | | QtyCount = 0,//总件数 |
| | | QtyOrd = 0,//第几件 |
| | | Status = "0", |
| | | IsDelete = false |
| | | }; |
| | | listBox.Add(boxAdd); |
| | | } |
| | | _db.Insertable(listBox).ExecuteCommand(); |
| | | if (type == "edit") |
| | | { |
| | | _db.Deleteable(num).ExecuteCommand(); |
| | | } |
| | | return new ResponseFuMaModel() { Success = true, Message = "ok" }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return new ResponseFuMaModel() { Success = false, Message = ex.Message }; |
| | | } |
| | | } |
| | | } |