using Admin.NET.Core.Service; using Admin.NET.Application.Entity; using Microsoft.AspNetCore.Http; using System.Data; using System.Web; using System.Text; using DocumentFormat.OpenXml.Office.CustomUI; using Microsoft.CodeAnalysis.Operations; using Admin.NET.Application.Service.WmsTask.WmsRbLineTask.Dto; using Furion.DatabaseAccessor; using Admin.NET.Application.Service.WmsCommonnQuery.Dto; using Admin.NET.Application.CommonHelper; namespace Admin.NET.Application; /// /// 操作任务服务 /// [ApiDescriptionSettings(ApplicationConst.WmsTaskGroupName, Order = 100)] public class WmsOperationTaskService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _rep; private readonly SqlSugarRepository _wmsStockQuanRep; private readonly SqlSugarRepository _mesPackageGatherRep; private readonly SqlSugarRepository _sysConfigRep; private readonly SqlSugarRepository _mesBatchOrderUpiRep; private readonly SqlSugarRepository _mesOrderGatherRep; private readonly SqlSugarRepository _wmsRecordUpiProcessRep; private readonly SqlSugarRepository _wmsRecordPackageProcessRep; private readonly SqlSugarRepository _mes_Upi_LineQueueRep; private readonly SqlSugarRepository _mes_Package_LineQueueRep; private readonly SqlSugarRepository _wmsRecordUpiNgRep; private readonly SqlSugarRepository _mes_Package_UnLine_RecordRep; private readonly WmsCommonnQueryService _wmsCommonnQueryService; public WmsOperationTaskService( SqlSugarRepository mes_Upi_LineQueueRep, SqlSugarRepository rep, SqlSugarRepository wmsStockQuanRep , SqlSugarRepository mesPackageGatherRep , SqlSugarRepository sysConfigRep , SqlSugarRepository mesBatchOrderUpiRep , SqlSugarRepository mesOrderGatherRep , SqlSugarRepository wmsRecordUpiProcessRep , SqlSugarRepository wmsRecordPackageProcessRep , SqlSugarRepository wmsRecordUpiNgRep , WmsCommonnQueryService wmsCommonnQueryService , SqlSugarRepository mes_Package_LineQueueRep , SqlSugarRepository mes_Package_UnLine_RecordRep ) { _mes_Package_LineQueueRep = mes_Package_LineQueueRep; _wmsCommonnQueryService = wmsCommonnQueryService; _wmsRecordUpiNgRep = wmsRecordUpiNgRep; _sysConfigRep = sysConfigRep; _mesPackageGatherRep = mesPackageGatherRep; _rep = rep; _wmsStockQuanRep = wmsStockQuanRep; _mesBatchOrderUpiRep = mesBatchOrderUpiRep; _mesOrderGatherRep = mesOrderGatherRep; _wmsRecordUpiProcessRep = wmsRecordUpiProcessRep; _wmsRecordPackageProcessRep = wmsRecordPackageProcessRep; _mes_Upi_LineQueueRep = mes_Upi_LineQueueRep; _mes_Package_UnLine_RecordRep = mes_Package_UnLine_RecordRep; } /// /// 强制出库 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "ForceOutbound")] [Description("WmsOperationTask/ForceOutbound")] [UnitOfWork] public async Task ForceOutbound(ForceOutboundInput input) { if (input == null || input.PackageCodeList?.Count == 0) { throw Oops.Oh("参数不能为空"); } //验证传递的包是否都在齐包之内。 List packList = await _wmsCommonnQueryService.PackList(new Service.WmsCommonnQuery.Dto.PackListInput() { IsPack = false }); List updateQuanList = new List(); foreach (var item in input.PackageCodeList) { var isExistCount = packList.Where(x => x.PackageCode == item).Count(); if (isExistCount == 0) { throw Oops.Oh($"包{item}不是缺包状态,请检查!"); } var quanList = await _wmsStockQuanRep.AsQueryable().Where(x => x.PackageCode == item).ToListAsync(); var isExist = quanList.Where(x => x.StockStatus == StockStatusEnum.齐包待出库 || x.StockStatus == StockStatusEnum.人工齐包出库任务已创建).Count(); if (isExist > 0) { throw Oops.Oh($"包{item}中其中有板状态是'{StockStatusEnum.齐包待出库.ToString()}' 或'{StockStatusEnum.人工齐包出库任务已创建.ToString()}',不允许强制出库"); } //更新状态 foreach (var quan in quanList) { if (quan.StockStatus != StockStatusEnum.在库 && quan.StockStatus != StockStatusEnum.已冻结) { throw Oops.Oh($"部件条码{quan.Upi}的库存状态不是'{StockStatusEnum.在库.ToString()}或{StockStatusEnum.已冻结.ToString()}'状态"); } quan.StockStatus = StockStatusEnum.人工强制待出库; quan.StockStatusName = StockStatusEnum.人工强制待出库.ToString(); quan.UpdateTime = DateTime.Now; quan.OperReason = "人工强制待出库"; } updateQuanList.AddRange(quanList); var packageObj = await _mesPackageGatherRep.GetFirstAsync(x => x.PackageCode == item); packageObj.UpiFlag = UpiFlagEnum.NG; packageObj.UpiStatus = UpiStatusEnum.已下线; await _mesPackageGatherRep.UpdateAsync(packageObj); //下线更新 订单表数据 _mesOrderGatherRep await UpdateOrderGather(packageObj, true); foreach (var quan in quanList) { //清理 队列表 var removeUpiList = await _mes_Upi_LineQueueRep.AsQueryable().Where(x => x.Upi == quan.Upi).ToListAsync(); if (removeUpiList?.Count > 0) { await _mes_Upi_LineQueueRep.DeleteAsync(removeUpiList); } var removePackageList = await _mes_Package_LineQueueRep.AsQueryable().Where(x => x.PackageCode == quan.PackageCode).ToListAsync(); if (removePackageList?.Count > 0) { await _mes_Package_LineQueueRep.DeleteAsync(removePackageList); } } } //模式判断 var client = await WCFServiceHelper.GetWCFService_SAPCC_Client(_sysConfigRep); var res = await client.ValidateModeAsync(1); if (res.result == false) { throw Oops.Oh(res.resMsg); } await _wmsStockQuanRep.UpdateRangeAsync(updateQuanList); } /// /// 人工齐包出库 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "PersonOutbound")] [Description("WmsOperationTask/PersonOutbound")] [UnitOfWork] public async Task PersonOutbound(PersonOutboundInput input) { if (input == null || input.PackageCodeList?.Count == 0) { throw Oops.Oh("参数不能为空"); } //验证传递的包是否都在齐包之内。 List packList = await _wmsCommonnQueryService.PackList(new Service.WmsCommonnQuery.Dto.PackListInput() { IsPack = true }); List updateQuanList = new List(); foreach (var item in input.PackageCodeList) { var isExistCount = packList.Where(x => x.PackageCode == item).Count(); if (isExistCount == 0) { throw Oops.Oh($"包{item}不是齐包状态,请检查!"); } var quanList = await _wmsStockQuanRep.AsQueryable().Where(x => x.PackageCode == item).ToListAsync(); var isExist = quanList.Where(x => x.StockStatus == StockStatusEnum.人工强制待出库 || x.StockStatus == StockStatusEnum.人工强制任务已创建).Count(); if (isExist > 0) { throw Oops.Oh($"包{item}中其中有板状态是'{StockStatusEnum.人工强制待出库.ToString()}'或'{StockStatusEnum.人工强制任务已创建.ToString()}',不允许人工齐包出库"); } //更新状态 foreach (var quan in quanList) { if (quan.StockStatus != StockStatusEnum.在库 && quan.StockStatus != StockStatusEnum.已冻结) { throw Oops.Oh($"部件条码{quan.Upi}的库存状态不是'{StockStatusEnum.在库.ToString()}或{StockStatusEnum.已冻结.ToString()}'状态"); } quan.StockStatus = StockStatusEnum.齐包待出库; quan.StockStatusName = StockStatusEnum.齐包待出库.ToString(); quan.UpdateTime = DateTime.Now; quan.OperReason = "人工齐包出库"; } updateQuanList.AddRange(quanList); var packageObj = await _mesPackageGatherRep.GetFirstAsync(x => x.PackageCode == item); packageObj.UpiStatus = UpiStatusEnum.已齐包; packageObj.IsQiBao = true; await _mesPackageGatherRep.UpdateAsync(packageObj); } //模式判断 var client = await WCFServiceHelper.GetWCFService_SAPCC_Client(_sysConfigRep); var res = await client.ValidateModeAsync(2); if (res.result == false) { throw Oops.Oh(res.resMsg); } await _wmsStockQuanRep.UpdateRangeAsync(updateQuanList); } /// /// 下线放行 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "ValdateQiTao")] [Description("WmsOperationTask/ValdateQiTao")] [UnitOfWork] public async Task ValdateQiTao(ValidateQiTaoInput input) { ValidateQiTaoOutput output = new ValidateQiTaoOutput(); if (input == null || input.PackageCode == null) { throw Oops.Oh("参数不能为空"); } var package = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync(); if (package == null) { throw Oops.Oh($"没有找到包号{input.PackageCode}的汇总数据"); } if (package.UpiStatus == UpiStatusEnum.已下线) { throw Oops.Oh($"包{input.PackageCode}已下线"); } var unlineObj = await _mes_Package_UnLine_RecordRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync(); if (unlineObj != null) { throw Oops.Oh($"包号{input.PackageCode}已经下线"); } //判断是否是新生产订单 var _QiTaoReuslt = ""; bool isNewOrder = false; string _location = "BZ-33"; var lastPackageUnline = await _mes_Package_UnLine_RecordRep.AsQueryable().Where(x => x.UpiFlag == UpiFlagEnum.正常 && x.Location != "人工").OrderByDescending(x => x.Id).FirstAsync(); if (lastPackageUnline == null) {//认为是新生产订单 isNewOrder = true; } else { if (lastPackageUnline.Info5 != package.Info5) {//认为是新生产订单 isNewOrder = true; if (lastPackageUnline.Location == "BZ-33") { _location = "BZ-32"; } else { _location = "BZ-33"; } } else { _location = lastPackageUnline.Location; } } if (string.IsNullOrEmpty(_location)) {//默认 _location = "BZ-33"; } _QiTaoReuslt = (bool)isNewOrder ? "新订单" : "当前订单"; //记录工作时间和工作人 var curUserName = App.User.FindFirst(ClaimConst.RealName)?.Value; var sysConfig_wms_unline_oper = await _sysConfigRep.GetFirstAsync(x => x.Code == CommonConst.wms_unline_oper); if (sysConfig_wms_unline_oper == null) { throw Oops.Oh($"没有配置 包装下线操作人 值"); } if (sysConfig_wms_unline_oper.Value != curUserName) { sysConfig_wms_unline_oper.Value = curUserName; await _sysConfigRep.UpdateAsync(sysConfig_wms_unline_oper); var sysConfig_wms_unline_time = await _sysConfigRep.GetFirstAsync(x => x.Code == CommonConst.wms_unline_time); if (sysConfig_wms_unline_time == null) { throw Oops.Oh($"没有配置 包装下线登陆时间 值"); } sysConfig_wms_unline_time.Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); await _sysConfigRep.UpdateAsync(sysConfig_wms_unline_time); } //请求PLC //判断方向 bool myLocation = false; if (_location == "BZ-33") { myLocation = false; } else { myLocation = true; } var client = await WCFServiceHelper.GetWCFService_SAPCC_Client(_sysConfigRep); var res = await client.WriteQiTaoInfoAsync(myLocation); if (res.result == false) { throw Oops.Oh(res.resMsg); } //更新数据 package.UpiStatus = UpiStatusEnum.已下线; package.AreaCode = AreaCodeEnum.下线区域; await _mesPackageGatherRep.UpdateAsync(package); var upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).ToListAsync(); foreach (var item in upiList) { item.UpiStatus = UpiStatusEnum.已下线; item.AreaCode = AreaCodeEnum.下线区域; item.UpdateTime = DateTime.Now; } await _mesBatchOrderUpiRep.UpdateRangeAsync(upiList); //删除队列信息 var lineQueue = await _mes_Package_LineQueueRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync(); if (lineQueue != null) { await _mes_Package_LineQueueRep.DeleteAsync(lineQueue); } //处理表 mes_order_gather await UpdateOrderGather(package, false); var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value; //新增下线记录表 var all_upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.Info5 == package.Info5).ToListAsync(); var all_unlineList = await _mes_Package_UnLine_RecordRep.AsQueryable().Where(x => x.Info5 == package.Info5).ToListAsync(); Mes_Package_UnLine_Record record = new Mes_Package_UnLine_Record(); record = package.Adapt(); record.Id = Yitter.IdGenerator.YitIdHelper.NextId(); record.Location = _location; record.AllPackageNum = all_upiList.GroupBy(x => x.PackageCode).Count(); record.CurUnlineIndexPackageNum = all_unlineList.GroupBy(x => x.PackageCode).Count() + 1; record.CreateTime = DateTime.Now; record.CreateUserName = _cretaorName; await _mes_Package_UnLine_RecordRep.InsertAsync(record); //记录包履历 WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess(); wmsRecordPackage = package.Adapt(); wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId(); wmsRecordPackage.Location = ""; wmsRecordPackage.OperRemark = "正常下线"; wmsRecordPackage.CreateTime = DateTime.Now; wmsRecordPackage.CreateUserName = _cretaorName; await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage); output = package.Adapt(); output.QiTaoReuslt = _QiTaoReuslt + $",第{record.CurUnlineIndexPackageNum}包下线,共{record.AllPackageNum}包"; output.IsNewOrder = isNewOrder; //output.IsNewOrder = false; return output; } /// /// 核对标签 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "ValdateLabel")] [Description("WmsOperationTask/ValdateLabel")] [UnitOfWork] public async Task ValdateLabel(ValidateLabelInput input) { if (input == null || input.PackageCode == null || input.Upi == null) { throw Oops.Oh("参数不能为空"); } var singleUpi = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.UPI == input.Upi).FirstAsync(); if (singleUpi == null) { throw Oops.Oh($"没有找到部件条码{input.Upi}的数据"); } if (singleUpi.PackageCode != input.PackageCode) { throw Oops.Oh($"部件条码{input.Upi}所属包是{singleUpi.PackageCode},跟扫描的包号{input.PackageCode}不符"); } var singlePackage = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync(); if (singlePackage == null) { throw Oops.Oh($"没有找到包号{input.PackageCode}的汇总数据"); } var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value; WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess(); wmsRecordPackage = singlePackage.Adapt(); wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId(); wmsRecordPackage.CreateTime = DateTime.Now; wmsRecordPackage.CreateUserName = _cretaorName; wmsRecordPackage.Location = "BZ29"; wmsRecordPackage.OperRemark = "核对标签"; await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage); WmsRecordUpiProcess wmsRecordUpi = new WmsRecordUpiProcess(); wmsRecordUpi = singleUpi.Adapt(); wmsRecordUpi.Id = Yitter.IdGenerator.YitIdHelper.NextId(); wmsRecordUpi.CreateTime = DateTime.Now; wmsRecordUpi.CreateUserName = _cretaorName; wmsRecordUpi.Location = "BZ29"; wmsRecordUpi.OperRemark = "核对标签"; await _wmsRecordUpiProcessRep.InsertAsync(wmsRecordUpi); return singlePackage; } /// /// NG包下线或 正常包 下线 -扫描包号 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "UnlineForNGPackage")] [Description("WmsOperationTask/UnlineForNGPackage")] [UnitOfWork] public async Task UnlineForNGPackage(UnlineForNGPackageInput input) { if (input == null) { throw Oops.Oh("参数不能为空"); } if (string.IsNullOrEmpty(input.PackageCode)) { throw Oops.Oh("包号不能为空"); } //if (string.IsNullOrEmpty(input.Reason)) //{ // throw Oops.Oh("原因不能为空"); //} string _OperRemark = "正常人工下线"; UpiFlagEnum upiFlagEnum = UpiFlagEnum.正常; if (input.IsNG) { upiFlagEnum = UpiFlagEnum.NG; _OperRemark = "NG下线"; } var singlePackage = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync(); if (singlePackage == null) { throw Oops.Oh($"没有找到包号{input.PackageCode}的汇总数据"); } if (singlePackage.UpiStatus == UpiStatusEnum.已下线) { throw Oops.Oh($"包号{input.PackageCode}已经下线"); } singlePackage.UpiFlag = upiFlagEnum; singlePackage.UpdateTime = DateTime.Now; singlePackage.UpiStatus = UpiStatusEnum.已下线; singlePackage.AreaCode = AreaCodeEnum.下线区域; var upiLineQueueList = await _mes_Upi_LineQueueRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).ToListAsync(); if (upiLineQueueList?.Count > 0) { await _mes_Upi_LineQueueRep.DeleteAsync(upiLineQueueList); } var upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).ToListAsync(); if (upiList == null) { throw Oops.Oh($"没有找到包号{input.PackageCode}的板件数据"); } var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value; foreach (var item in upiList) { item.UpiFlag = UpiFlagEnum.NG; item.UpdateTime = DateTime.Now; item.UpiStatus = UpiStatusEnum.已下线; item.AreaCode = AreaCodeEnum.下线区域; WmsRecordUpiProcess wmsRecordUpi = new WmsRecordUpiProcess(); wmsRecordUpi = item.Adapt(); wmsRecordUpi.Id = Yitter.IdGenerator.YitIdHelper.NextId(); wmsRecordUpi.CreateTime = DateTime.Now; wmsRecordUpi.CreateUserName = _cretaorName; wmsRecordUpi.Location = ""; wmsRecordUpi.OperRemark = _OperRemark; await _wmsRecordUpiProcessRep.InsertAsync(wmsRecordUpi); WmsRecordUpiNg wmsRecordUpiNg = new WmsRecordUpiNg(); wmsRecordUpiNg = item.Adapt(); wmsRecordUpiNg.Id = Yitter.IdGenerator.YitIdHelper.NextId(); wmsRecordUpiNg.CreateTime = DateTime.Now; wmsRecordUpiNg.CreateUserName = _cretaorName; wmsRecordUpiNg.OperRemark = _OperRemark; await _wmsRecordUpiNgRep.InsertAsync(wmsRecordUpiNg); //清理 队列表 var removeUpiList = await _mes_Upi_LineQueueRep.AsQueryable().Where(x => x.Upi == item.UPI).ToListAsync(); if (removeUpiList?.Count > 0) { await _mes_Upi_LineQueueRep.DeleteAsync(removeUpiList); } var removePackageList = await _mes_Package_LineQueueRep.AsQueryable().Where(x => x.PackageCode == item.PackageCode).ToListAsync(); if (removePackageList?.Count > 0) { await _mes_Package_LineQueueRep.DeleteAsync(removePackageList); } } //下线更新 订单表数据 _mesOrderGatherRep await UpdateOrderGather(singlePackage, input.IsNG); WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess(); wmsRecordPackage = singlePackage.Adapt(); wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId(); wmsRecordPackage.Location = ""; wmsRecordPackage.OperRemark = _OperRemark; wmsRecordPackage.CreateTime = DateTime.Now; wmsRecordPackage.CreateUserName = _cretaorName; await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage); //新增下线记录表 var all_upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.Info5 == singlePackage.Info5).ToListAsync(); var all_unlineList = await _mes_Package_UnLine_RecordRep.AsQueryable().Where(x => x.Info5 == singlePackage.Info5).ToListAsync(); Mes_Package_UnLine_Record record = new Mes_Package_UnLine_Record(); record = singlePackage.Adapt(); record.Id = Yitter.IdGenerator.YitIdHelper.NextId(); record.Location = "人工"; record.AllPackageNum = all_upiList.GroupBy(x => x.PackageCode).Count(); record.CurUnlineIndexPackageNum = all_unlineList.GroupBy(x => x.PackageCode).Count() + 1; record.CreateTime = DateTime.Now; record.CreateUserName = _cretaorName; await _mes_Package_UnLine_RecordRep.InsertAsync(record); await _mesPackageGatherRep.UpdateAsync(singlePackage); await _mesBatchOrderUpiRep.UpdateRangeAsync(upiList); } /// /// 公共-下线更新 订单表数据 /// /// /// private async Task UpdateOrderGather(Mes_Package_Gather singlePackage, bool isNG) { //下线更新 订单表数据 _mesOrderGatherRep bool isAdd = false; var order = await _mesOrderGatherRep.AsQueryable().Where(x => x.Info5 == singlePackage.Info5).FirstAsync(); if (order == null) { isAdd = true; order = new Mes_Order_Gather() { Info5 = singlePackage.Info5, OrderId = singlePackage.OrderId, PlanNo = singlePackage.PlanNo, }; } var packageList = await _mesPackageGatherRep.AsQueryable().Where(x => x.Info5 == singlePackage.Info5).ToListAsync(); order.PackageNum = packageList.Count(); order.UnLinePackageNum = packageList.Where(x => x.UpiStatus == UpiStatusEnum.已下线).Count() + 1; if (order.UnLinePackageNum > order.PackageNum) { order.UnLinePackageNum = order.PackageNum; } order.NgPackageNum = packageList.Where(x => x.UpiStatus == UpiStatusEnum.已下线 && x.UpiFlag == UpiFlagEnum.NG).Count(); if (isNG) { order.NgPackageNum = order.NgPackageNum + 1; } if (order.NgPackageNum > order.PackageNum) { order.NgPackageNum = order.PackageNum; } order.NoUnLinePackageNum = order.PackageNum - order.UnLinePackageNum; order.AllPackageArea = packageList.Sum(x => Convert.ToDecimal(x.Info13)); order.ScanPackageArea = packageList.Where(x => x.UpiStatus == UpiStatusEnum.已下线 && x.UpiFlag == (int)UpiFlagEnum.正常).Sum(x => Convert.ToDecimal(x.Info13)); if (isNG == false) { order.ScanPackageArea = order.ScanPackageArea + Convert.ToDecimal(singlePackage.Info13); } order.NoScanPackageArea = order.AllPackageArea - order.ScanPackageArea; //判断该订单是否已下线 if (order.NoUnLinePackageNum == 0) { order.IsUnline = true; order.UnlineTime = DateTime.Now; //order.UnlinePerson = _UnlinePerson; } if (isAdd) { await _mesOrderGatherRep.InsertAsync(order); } else { await _mesOrderGatherRep.UpdateAsync(order); } } /// /// 标记NG-扫描件号 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "SetNG")] [Description("WmsOperationTask/SetNG")] [UnitOfWork] public async Task SetNG(SetNGInput input) { if (input == null) { throw Oops.Oh("参数不能为空"); } if (string.IsNullOrEmpty(input.Upi)) { throw Oops.Oh("部件条码不能为空"); } //if (string.IsNullOrEmpty(input.Reason)) //{ // throw Oops.Oh("原因不能为空"); //} var singleUpi = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.UPI == input.Upi).FirstAsync(); if (singleUpi == null) { throw Oops.Oh($"没有找到部件条码{input.Upi}的数据"); } var packageCode = singleUpi.PackageCode; var singlePackage = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == packageCode).FirstAsync(); if (singlePackage == null) { throw Oops.Oh($"没有找到包号{packageCode}的汇总数据"); } var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value; singlePackage.UpiFlag = UpiFlagEnum.NG; singlePackage.UpdateTime = DateTime.Now; singlePackage.UpdateUserName = _cretaorName; var upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.PackageCode == packageCode).ToListAsync(); if (upiList == null) { throw Oops.Oh($"没有找到包号{packageCode}的板件数据"); } foreach (var item in upiList) { item.UpiFlag = UpiFlagEnum.NG; item.UpdateTime = DateTime.Now; item.UpdateUserName = _cretaorName; WmsRecordUpiProcess wmsRecordUpi = new WmsRecordUpiProcess(); wmsRecordUpi = item.Adapt(); wmsRecordUpi.Id = Yitter.IdGenerator.YitIdHelper.NextId(); wmsRecordUpi.CreateTime = DateTime.Now; wmsRecordUpi.CreateUserName = _cretaorName; wmsRecordUpi.Location = ""; wmsRecordUpi.OperRemark = "标记NG"; await _wmsRecordUpiProcessRep.InsertAsync(wmsRecordUpi); WmsRecordUpiNg wmsRecordUpiNg = new WmsRecordUpiNg(); wmsRecordUpiNg = item.Adapt(); wmsRecordUpiNg.Id = Yitter.IdGenerator.YitIdHelper.NextId(); wmsRecordUpiNg.CreateTime = DateTime.Now; wmsRecordUpiNg.CreateUserName = _cretaorName; wmsRecordUpiNg.OperRemark = "标记NG"; await _wmsRecordUpiNgRep.InsertAsync(wmsRecordUpiNg); } WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess(); wmsRecordPackage = singlePackage.Adapt(); wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId(); wmsRecordPackage.Location = ""; wmsRecordPackage.OperRemark = "标记NG"; wmsRecordPackage.CreateTime = DateTime.Now; wmsRecordPackage.CreateUserName = _cretaorName; await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage); await _mesPackageGatherRep.UpdateAsync(singlePackage); await _mesBatchOrderUpiRep.UpdateRangeAsync(upiList); } /// /// 取消NG-扫描件号 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "CancelNG")] [Description("WmsOperationTask/CancelNG")] [UnitOfWork] public async Task CancelNG(CancelNGInput input) { if (input == null) { throw Oops.Oh("参数不能为空"); } if (string.IsNullOrEmpty(input.Upi)) { throw Oops.Oh("部件条码不能为空"); } //if (string.IsNullOrEmpty(input.Reason)) //{ // throw Oops.Oh("原因不能为空"); //} var singleUpi = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.UPI == input.Upi).FirstAsync(); if (singleUpi == null) { throw Oops.Oh($"没有找到部件条码{input.Upi}的数据"); } var packageCode = singleUpi.PackageCode; var singlePackage = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == packageCode).FirstAsync(); if (singlePackage == null) { throw Oops.Oh($"没有找到包号{packageCode}的汇总数据"); } var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value; singlePackage.UpiFlag = UpiFlagEnum.正常; singlePackage.UpdateTime = DateTime.Now; singlePackage.UpdateUserName = _cretaorName; var upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.PackageCode == packageCode).ToListAsync(); if (upiList == null) { throw Oops.Oh($"没有找到包号{packageCode}的板件数据"); } foreach (var item in upiList) { item.UpiFlag = UpiFlagEnum.正常; item.UpdateTime = DateTime.Now; item.UpdateUserName = _cretaorName; WmsRecordUpiProcess wmsRecordUpi = new WmsRecordUpiProcess(); wmsRecordUpi = item.Adapt(); wmsRecordUpi.Id = Yitter.IdGenerator.YitIdHelper.NextId(); wmsRecordUpi.CreateTime = DateTime.Now; wmsRecordUpi.CreateUserName = _cretaorName; wmsRecordUpi.Location = ""; wmsRecordUpi.OperRemark = "取消NG"; await _wmsRecordUpiProcessRep.InsertAsync(wmsRecordUpi); WmsRecordUpiNg wmsRecordUpiNg = new WmsRecordUpiNg(); wmsRecordUpiNg = item.Adapt(); wmsRecordUpiNg.Id = Yitter.IdGenerator.YitIdHelper.NextId(); wmsRecordUpiNg.CreateTime = DateTime.Now; wmsRecordUpiNg.CreateUserName = _cretaorName; wmsRecordUpiNg.OperRemark = "取消NG"; await _wmsRecordUpiNgRep.InsertAsync(wmsRecordUpiNg); } WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess(); wmsRecordPackage = singlePackage.Adapt(); wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId(); wmsRecordPackage.Location = ""; wmsRecordPackage.OperRemark = "取消NG"; wmsRecordPackage.CreateTime = DateTime.Now; wmsRecordPackage.CreateUserName = _cretaorName; await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage); await _mesPackageGatherRep.UpdateAsync(singlePackage); await _mesBatchOrderUpiRep.UpdateRangeAsync(upiList); } /// /// 扫码记录清除 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "PartClear")] [Description("WmsOperationTask/PartClear")] public async Task PartClear() { //模式判断 var client = await WCFServiceHelper.GetWCFService_SAPCC_Client(_sysConfigRep); var res = await client.WriteStation_PartClearAsync(); if (res.result == false) { throw Oops.Oh(res.resMsg); } } }