222
schangxiang@126.com
2024-12-14 de11618a6c41d627acd733a6b5d818d87d291c1e
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsOperationTask/WmsOperationTaskService.cs
@@ -8,6 +8,7 @@
using Microsoft.CodeAnalysis.Operations;
using Admin.NET.Application.Service.WmsTask.WmsRbLineTask.Dto;
using Furion.DatabaseAccessor;
using Admin.NET.Application.Service.WmsCommonnQuery.Dto;
namespace Admin.NET.Application;
/// <summary>
@@ -24,16 +25,25 @@
    private readonly SqlSugarRepository<Mes_Order_Gather> _mesOrderGatherRep;
    private readonly SqlSugarRepository<WmsRecordUpiProcess> _wmsRecordUpiProcessRep;
    private readonly SqlSugarRepository<WmsRecordPackageProcess> _wmsRecordPackageProcessRep;
    private readonly SqlSugarRepository<Mes_Upi_LineQueue> _mes_Upi_LineQueueRep;
    private readonly SqlSugarRepository<WmsRecordUpiNg> _wmsRecordUpiNgRep;
    private readonly WmsCommonnQueryService _wmsCommonnQueryService;
    public WmsOperationTaskService(SqlSugarRepository<WmsRbLineTask> rep, SqlSugarRepository<WmsStockQuan> wmsStockQuanRep
    public WmsOperationTaskService(
        SqlSugarRepository<Mes_Upi_LineQueue> mes_Upi_LineQueueRep,
        SqlSugarRepository<WmsRbLineTask> rep, SqlSugarRepository<WmsStockQuan> wmsStockQuanRep
        , SqlSugarRepository<Mes_Package_Gather> mesPackageGatherRep
        , SqlSugarRepository<SysConfig> sysConfigRep
        , SqlSugarRepository<Mes_BatchOrderUPI_New> mesBatchOrderUpiRep
        , SqlSugarRepository<Mes_Order_Gather> mesOrderGatherRep
        , SqlSugarRepository<WmsRecordUpiProcess> wmsRecordUpiProcessRep
        , SqlSugarRepository<WmsRecordPackageProcess> wmsRecordPackageProcessRep
        , SqlSugarRepository<WmsRecordUpiNg> wmsRecordUpiNgRep
        , WmsCommonnQueryService wmsCommonnQueryService
        )
    {
        _wmsCommonnQueryService = wmsCommonnQueryService;
        _wmsRecordUpiNgRep = wmsRecordUpiNgRep;
        _sysConfigRep = sysConfigRep;
        _mesPackageGatherRep = mesPackageGatherRep;
        _rep = rep;
@@ -42,6 +52,7 @@
        _mesOrderGatherRep = mesOrderGatherRep;
        _wmsRecordUpiProcessRep = wmsRecordUpiProcessRep;
        _wmsRecordPackageProcessRep = wmsRecordPackageProcessRep;
        _mes_Upi_LineQueueRep = mes_Upi_LineQueueRep;
    }
@@ -54,28 +65,89 @@
    [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<WmsPackListOutput> packList = await _wmsCommonnQueryService.PackList(new Service.WmsCommonnQuery.Dto.PackListInput() { IsPack = false });
        List<WmsStockQuan> updateQuanList = new List<WmsStockQuan>();
        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.齐包待出库).Count();
            var isExist = quanList.Where(x => x.StockStatus == StockStatusEnum.齐包待出库 || x.StockStatus == StockStatusEnum.人工齐包出库任务已创建).Count();
            if (isExist > 0)
            {
                throw Oops.Oh($"包{item}中其中有板状态是'{StockStatusEnum.齐包待出库.ToString()}',不允许强制出库");
                throw Oops.Oh($"包{item}中其中有板状态是'{StockStatusEnum.齐包待出库.ToString()}' 或'{StockStatusEnum.人工齐包出库任务已创建.ToString()}',不允许强制出库");
            }
            //更新状态 
            foreach (var quan in quanList)
            {
                quan.StockStatus = StockStatusEnum.人工强制待出库;
                quan.StockStatusName = StockStatusEnum.人工强制待出库.ToString();
                quan.UpdateTime = DateTime.Now;
                quan.OperReason = "人工强制待出库";
            }
            updateQuanList.AddRange(quanList);
        }
        await _wmsStockQuanRep.UpdateRangeAsync(updateQuanList);
    }
    /// <summary>
    /// 人工齐包出库
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [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<WmsPackListOutput> packList = await _wmsCommonnQueryService.PackList(new Service.WmsCommonnQuery.Dto.PackListInput() { IsPack = true });
        List<WmsStockQuan> updateQuanList = new List<WmsStockQuan>();
        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)
            {
                quan.StockStatus = StockStatusEnum.齐包待出库;
                quan.StockStatusName = StockStatusEnum.齐包待出库.ToString();
                quan.UpdateTime = DateTime.Now;
                quan.OperReason = "人工齐包出库";
            }
            updateQuanList.AddRange(quanList);
        }
@@ -138,8 +210,7 @@
            _QiTaoReuslt = "齐套";
        }
        //临时屏蔽
        /*
        sysConfig.Value = setValue;
        await _sysConfigRep.UpdateAsync(sysConfig);
        //*/
@@ -179,6 +250,7 @@
    [HttpPost]
    [ApiDescriptionSettings(Name = "ValdateLabel")]
    [Description("WmsOperationTask/ValdateLabel")]
    [UnitOfWork]
    public async Task<Mes_Package_Gather> ValdateLabel(ValidateLabelInput input)
    {
        if (input == null || input.PackageCode == null || input.Upi == null)
@@ -202,16 +274,22 @@
            throw Oops.Oh($"没有找到包号{input.PackageCode}的汇总数据");
        }
        var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value;
        WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess();
        wmsRecordPackage = singlePackage.Adapt<WmsRecordPackageProcess>();
        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<WmsRecordUpiProcess>();
        wmsRecordUpi.Id = Yitter.IdGenerator.YitIdHelper.NextId();
        wmsRecordUpi.CreateTime = DateTime.Now;
        wmsRecordUpi.CreateUserName = _cretaorName;
        wmsRecordUpi.Location = "BZ29";
        wmsRecordUpi.OperRemark = "核对标签";
        await _wmsRecordUpiProcessRep.InsertAsync(wmsRecordUpi);
@@ -221,48 +299,268 @@
    /// <summary>
    /// NG包下线
    /// NG包下线-扫描包号
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [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 (input == null)
        {
            throw Oops.Oh("参数不能为空");
        }
        if (string.IsNullOrEmpty(input.PackageCode))
        {
            throw Oops.Oh("包号不能为空");
        }
        //if (string.IsNullOrEmpty(input.Reason))
        //{
        //    throw Oops.Oh("原因不能为空");
        //}
        //List<WmsStockQuan> updateQuanList = new List<WmsStockQuan>();
        //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);
        var singlePackage = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
        if (singlePackage == null)
        {
            throw Oops.Oh($"没有找到包号{input.PackageCode}的汇总数据");
        }
        singlePackage.UpiFlag = UpiFlagEnum.NG;
        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<WmsRecordUpiProcess>();
            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>();
            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<WmsRecordPackageProcess>();
        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);
    }
    /// <summary>
    /// 标记NG-扫描件号
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [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("原因不能为空");
        //}
        //await _wmsStockQuanRep.UpdateRangeAsync(updateQuanList);
        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<WmsRecordUpiProcess>();
            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>();
            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<WmsRecordPackageProcess>();
        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);
    }
    /// <summary>
    /// 取消NG-扫描件号
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [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<WmsRecordUpiProcess>();
            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>();
            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<WmsRecordPackageProcess>();
        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);
    }