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; 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; public WmsOperationTaskService(SqlSugarRepository rep, SqlSugarRepository wmsStockQuanRep , SqlSugarRepository mesPackageGatherRep , SqlSugarRepository sysConfigRep , SqlSugarRepository mesBatchOrderUpiRep , SqlSugarRepository mesOrderGatherRep ) { _sysConfigRep = sysConfigRep; _mesPackageGatherRep = mesPackageGatherRep; _rep = rep; _wmsStockQuanRep = wmsStockQuanRep; _mesBatchOrderUpiRep = mesBatchOrderUpiRep; _mesOrderGatherRep = mesOrderGatherRep; } /// /// 强制出库 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "ForceOutbound")] [Description("WmsOperationTask/ForceOutbound")] public async Task ForceOutbound(ForceOutboundInput input) { if (input == null || input.PackageCodeList?.Count == 0) { throw Oops.Oh("参数不能为空"); } List updateQuanList = new List(); foreach (var item in input.PackageCodeList) { var quanList = await _wmsStockQuanRep.AsQueryable().Where(x => x.PackageCode == item).ToListAsync(); var isExist = quanList.Where(x => x.StockStatus == StockStatusEnum.齐包待出库).Count(); if (isExist > 0) { throw Oops.Oh($"包{item}中其中有板状态是'{StockStatusEnum.齐包待出库.ToString()}',不允许强制出库"); } //更新状态 foreach (var quan in quanList) { quan.StockStatus = StockStatusEnum.人工强制待出库; quan.UpdateTime = DateTime.Now; quan.OperReason = "人工强制待出库"; } updateQuanList.AddRange(quanList); } 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}的汇总数据"); } var sysConfig = await _sysConfigRep.GetFirstAsync(x => x.Code == CommonConst.WmsBZ30_QiTao); if (sysConfig == null) { throw Oops.Oh($"没有配置 判断齐套 值"); } if (!string.IsNullOrEmpty(sysConfig.Value) && sysConfig.Value != "无") { throw Oops.Oh($"判断齐套值已经存在值{sysConfig.Value},不允许操作"); } //记录工作时间和工作人 var curUserName = App.User.FindFirst(ClaimConst.RealName)?.Value; var setValue = ""; var _QiTaoReuslt = ""; var other_orderList = await _mesPackageGatherRep.AsQueryable().Where(x => x.Info5 == package.Info5 && x.PackageCode != input.PackageCode).ToListAsync(); var num = other_orderList.Where(x => x.UpiStatus == UpiStatusEnum.初始 || x.UpiStatus == UpiStatusEnum.不齐包).Count(); if (num > 0) { //不齐套 setValue = $"{input.PackageCode}|不齐套|" + curUserName; _QiTaoReuslt = "不齐套"; } else { setValue = $"{input.PackageCode}|齐套|" + curUserName; _QiTaoReuslt = "齐套"; } sysConfig.Value = setValue; await _sysConfigRep.UpdateAsync(sysConfig); 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); } output = package.Adapt(); output.QiTaoReuslt = _QiTaoReuslt; return output; } /// /// 核对标签 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "ValdateLabel")] [Description("WmsOperationTask/ValdateLabel")] 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}的汇总数据"); } return singlePackage; } /// /// NG包下线 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "UnlineForNGPackage")] [Description("WmsOperationTask/UnlineForNGPackage")] 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("原因不能为空"); //} //List updateQuanList = new List(); //foreach (var item in input.PackageCodeList) //{ // var quanList = await _wmsStockQuanRep.AsQueryable().Where(x => x.PackageCode == item).ToListAsync(); // var isExist = quanList.Where(x => x.StockStatus == StockStatusEnum.齐包待出库).Count(); // if (isExist > 0) // { // throw Oops.Oh($"包{item}中其中有板状态是'{StockStatusEnum.齐包待出库.ToString()}',不允许强制出库"); // } // 更新状态 // foreach (var quan in quanList) // { // quan.StockStatus = StockStatusEnum.人工强制待出库; // quan.UpdateTime = DateTime.Now; // quan.OperReason = "人工强制待出库"; // } // updateQuanList.AddRange(quanList); //} //await _wmsStockQuanRep.UpdateRangeAsync(updateQuanList); } }