payne
2024-04-23 0a4fdc2b4d0f5fb7d16fbd0182bef305105e3eae
调整库位实体
新增容器 容器类型实体
已添加1个文件
已修改7个文件
2494 ■■■■ 文件已修改
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsContainer/WmsContainerService.cs 570 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsPda/MaterialSorting/MaterialSortingService.cs 394 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsPda/WmsInWarehouse/WmsInWarehouseService.cs 576 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsPda/WmsStockReturnWarehouse/WmsStockReturnWarehouseService.cs 576 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsArea.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsContainer.cs 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsContainerType.cs 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsPlace.cs 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsContainer/WmsContainerService.cs
@@ -1,303 +1,303 @@
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Admin.NET.Core;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using Microsoft.AspNetCore.Http;
using System.Text;
using System.Web;
//using Furion.DatabaseAccessor;
//using Furion.DatabaseAccessor.Extensions;
//using Furion.DependencyInjection;
//using Furion.DynamicApiController;
//using Furion.FriendlyException;
//using Admin.NET.Core;
//using Mapster;
//using Microsoft.AspNetCore.Mvc;
//using Microsoft.EntityFrameworkCore;
//using System.Linq.Dynamic.Core;
//using Microsoft.AspNetCore.Http;
//using System.Text;
//using System.Web;
namespace Admin.NET.Application
{
    /// <summary>
    /// æ‰˜ç›˜ä¿¡æ¯æœåŠ¡
    /// </summary>
    [ApiDescriptionSettings("自己的业务", Name = "WmsContainer", Order = 100)]
    [Route("api/[Controller]")]
    public class WmsContainerService : IWmsContainerService, IDynamicApiController, ITransient
    {
        private readonly IRepository<WmsContainer,MasterDbContextLocator> _wmsContainerRep;
        private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
        private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
        private readonly ISysExcelTemplateService _sysExcelTemplateService;
        private readonly static object _lock = new();
//namespace Admin.NET.Application
//{
//    /// <summary>
//    /// æ‰˜ç›˜ä¿¡æ¯æœåŠ¡
//    /// </summary>
//    [ApiDescriptionSettings("自己的业务", Name = "WmsContainer", Order = 100)]
//    [Route("api/[Controller]")]
//    public class WmsContainerService : IWmsContainerService, IDynamicApiController, ITransient
//    {
//        private readonly IRepository<WmsContainer,MasterDbContextLocator> _wmsContainerRep;
//        private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
//        private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
//        private readonly ISysExcelTemplateService _sysExcelTemplateService;
//        private readonly static object _lock = new();
        /// <summary>
        /// æž„造函数
        /// </summary>
        public WmsContainerService(
             IRepository<WmsContainer,MasterDbContextLocator> wmsContainerRep
            ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep
            ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
            ,ISysExcelTemplateService sysExcelTemplateService
        )
        {
             _wmsContainerRep = wmsContainerRep;
             _sysDictTypeRep = sysDictTypeRep;
             _sysDictDataRep = sysDictDataRep;
             _sysExcelTemplateService = sysExcelTemplateService;
        }
//        /// <summary>
//        /// æž„造函数
//        /// </summary>
//        public WmsContainerService(
//             IRepository<WmsContainer,MasterDbContextLocator> wmsContainerRep
//            ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep
//            ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
//            ,ISysExcelTemplateService sysExcelTemplateService
//        )
//        {
//             _wmsContainerRep = wmsContainerRep;
//             _sysDictTypeRep = sysDictTypeRep;
//             _sysDictDataRep = sysDictDataRep;
//             _sysExcelTemplateService = sysExcelTemplateService;
//        }
        /// <summary>
        /// åˆ†é¡µæŸ¥è¯¢æ‰˜ç›˜ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("page")]
        public async Task<PageResult<WmsContainerOutput>> Page([FromQuery] WmsContainerSearch input)
        {
            var wmsContainers = await _wmsContainerRep.DetachedEntities
                .Where(!string.IsNullOrEmpty(input.ContainerCode), u => EF.Functions.Like(u.ContainerCode, $"%{input.ContainerCode.Trim()}%"))
                .Where(input.ContainerType != null, u => u.ContainerType == input.ContainerType)
                .Where(input.ContainerStatus != null, u => u.ContainerStatus == input.ContainerStatus)
                .Where(input.SpecLength != null, u => u.SpecLength == input.SpecLength)
                .Where(input.SpecWidth != null, u => u.SpecWidth == input.SpecWidth)
                .Where(input.ContainerCategory != null, u => u.ContainerCategory == input.ContainerCategory)
                .Where(input.WorkShopType != null, u => u.WorkShopType == input.WorkShopType)
                .OrderBy(PageInputOrder.OrderBuilder<WmsContainerSearch>(input))
                .ProjectToType<WmsContainerOutput>()
                .ToADPagedListAsync(input.PageNo, input.PageSize);
            return wmsContainers;
        }
//        /// <summary>
//        /// åˆ†é¡µæŸ¥è¯¢æ‰˜ç›˜ä¿¡æ¯
//        /// </summary>
//        /// <param name="input"></param>
//        /// <returns></returns>
//        [HttpGet("page")]
//        public async Task<PageResult<WmsContainerOutput>> Page([FromQuery] WmsContainerSearch input)
//        {
//            var wmsContainers = await _wmsContainerRep.DetachedEntities
//                .Where(!string.IsNullOrEmpty(input.ContainerCode), u => EF.Functions.Like(u.ContainerCode, $"%{input.ContainerCode.Trim()}%"))
//                .Where(input.ContainerType != null, u => u.ContainerType == input.ContainerType)
//                .Where(input.ContainerStatus != null, u => u.ContainerStatus == input.ContainerStatus)
//                .Where(input.SpecLength != null, u => u.SpecLength == input.SpecLength)
//                .Where(input.SpecWidth != null, u => u.SpecWidth == input.SpecWidth)
//                .Where(input.ContainerCategory != null, u => u.ContainerCategory == input.ContainerCategory)
//                .Where(input.WorkShopType != null, u => u.WorkShopType == input.WorkShopType)
//                .OrderBy(PageInputOrder.OrderBuilder<WmsContainerSearch>(input))
//                .ProjectToType<WmsContainerOutput>()
//                .ToADPagedListAsync(input.PageNo, input.PageSize);
//            return wmsContainers;
//        }
        /// <summary>
        /// ä¸åˆ†é¡µæŸ¥è¯¢æ‰˜ç›˜ä¿¡æ¯åˆ—表
        /// </summary>
        /// <param name="input">托盘信息查询参数</param>
        /// <returns>(托盘信息)实例列表</returns>
        [HttpGet("listNonPage")]
        public async Task<List<WmsContainerOutput>> ListNonPageAsync([FromQuery] WmsContainerSearchNonPage input)
        {
            var pContainerCode = input.ContainerCode?.Trim() ?? "";
            var pContainerType = input.ContainerType;
            var pContainerStatus = input.ContainerStatus;
            var pSpecLength = input.SpecLength;
            var pSpecWidth = input.SpecWidth;
            var pContainerCategory = input.ContainerCategory;
            var pWorkShopType = input.WorkShopType;
            var wmsContainers = await _wmsContainerRep.DetachedEntities
                .Where(!string.IsNullOrEmpty(pContainerCode), u => EF.Functions.Like(u.ContainerCode, $"%{pContainerCode}%"))
                .Where(pContainerType != null, u => u.ContainerType == pContainerType)
                .Where(pContainerStatus != null, u => u.ContainerStatus == pContainerStatus)
                .Where(pSpecLength != null, u => u.SpecLength == pSpecLength)
                .Where(pSpecWidth != null, u => u.SpecWidth == pSpecWidth)
                .Where(pContainerCategory != null, u => u.ContainerCategory == pContainerCategory)
                .Where(pWorkShopType != null, u => u.WorkShopType == pWorkShopType)
            .OrderBy(PageInputOrder.OrderNonPageBuilder(input))
            .ProjectToType<WmsContainerOutput>()
            .ToListAsync();
            return wmsContainers;
        }
//        /// <summary>
//        /// ä¸åˆ†é¡µæŸ¥è¯¢æ‰˜ç›˜ä¿¡æ¯åˆ—表
//        /// </summary>
//        /// <param name="input">托盘信息查询参数</param>
//        /// <returns>(托盘信息)实例列表</returns>
//        [HttpGet("listNonPage")]
//        public async Task<List<WmsContainerOutput>> ListNonPageAsync([FromQuery] WmsContainerSearchNonPage input)
//        {
//            var pContainerCode = input.ContainerCode?.Trim() ?? "";
//            var pContainerType = input.ContainerType;
//            var pContainerStatus = input.ContainerStatus;
//            var pSpecLength = input.SpecLength;
//            var pSpecWidth = input.SpecWidth;
//            var pContainerCategory = input.ContainerCategory;
//            var pWorkShopType = input.WorkShopType;
//            var wmsContainers = await _wmsContainerRep.DetachedEntities
//                .Where(!string.IsNullOrEmpty(pContainerCode), u => EF.Functions.Like(u.ContainerCode, $"%{pContainerCode}%"))
//                .Where(pContainerType != null, u => u.ContainerType == pContainerType)
//                .Where(pContainerStatus != null, u => u.ContainerStatus == pContainerStatus)
//                .Where(pSpecLength != null, u => u.SpecLength == pSpecLength)
//                .Where(pSpecWidth != null, u => u.SpecWidth == pSpecWidth)
//                .Where(pContainerCategory != null, u => u.ContainerCategory == pContainerCategory)
//                .Where(pWorkShopType != null, u => u.WorkShopType == pWorkShopType)
//            .OrderBy(PageInputOrder.OrderNonPageBuilder(input))
//            .ProjectToType<WmsContainerOutput>()
//            .ToListAsync();
//            return wmsContainers;
//        }
        /// <summary>
        /// å¢žåŠ æ‰˜ç›˜ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("add")]
        public async Task Add(AddWmsContainerInput input)
        {
            var isExist = await _wmsContainerRep.AnyAsync(u => u.ContainerCode == input.ContainerCode, false);
            if (isExist) throw Oops.Oh($"当前托盘已存在,新增失败!");
//        /// <summary>
//        /// å¢žåŠ æ‰˜ç›˜ä¿¡æ¯
//        /// </summary>
//        /// <param name="input"></param>
//        /// <returns></returns>
//        [HttpPost("add")]
//        public async Task Add(AddWmsContainerInput input)
//        {
//            var isExist = await _wmsContainerRep.AnyAsync(u => u.ContainerCode == input.ContainerCode, false);
//            if (isExist) throw Oops.Oh($"当前托盘已存在,新增失败!");
            var ContainerInfo = input.Adapt<WmsContainer>();
            ContainerInfo.ContainerStatus = ContainerStatus.KOUXIAN;
            ContainerInfo.AssetNo = "N/A";
            ContainerInfo.ContainerCategory = ContainerCategory.GZP;
            ContainerInfo.ErpNo = "N/A";
            ContainerInfo.IsVirtually = YesOrNot.N;
            ContainerInfo.WorkShopType = LesWorkShopType.FAPAOCHEJIAN;
            await _wmsContainerRep.InsertAsync(ContainerInfo);
            //string ContainerCode = "ZHONGTONG";
            //if (input.SpecLength == 1250)
            //{
            //    ContainerCode = "YKA";
            //}
            //else if (input.SpecLength == 1050)
            //{
            //    ContainerCode = "YKB";
            //}
            //else if (input.SpecLength == 800)
            //{
            //    ContainerCode = "YKC";
            //}
            //var wmsContainerModal = await _wmsContainerRep.DetachedEntities.Where(u => u.ContainerCode.Contains(input.ContainerCode))
            //    .ProjectToType<WmsContainerOutput>()
            //    .OrderByDescending(u => u.ContainerCode)
            //    .FirstOrDefaultAsync();
            //int a = 0;
            //if (wmsContainerModal != null)
            //{
            //    a = Convert.ToInt32(wmsContainerModal.ContainerCode.Substring(wmsContainerModal.ContainerCode.Length - 5));
            //}
            //for (int i = a + 1; i <= a + input.Quantity; i++)
            //{
            //    var wmsContainer = input.Adapt<WmsContainer>();
            //    wmsContainer.AssetNo = "N/A";
            //    wmsContainer.ErpNo = "N/A";
            //    wmsContainer.IsVirtually = YesOrNot.N;
            //    wmsContainer.IsDeleted = false;;
            //    wmsContainer.ContainerCode = ContainerCode + i.ToString("00000");
            //    await _wmsContainerRep.InsertAsync(wmsContainer);
            //}
        }
//            var ContainerInfo = input.Adapt<WmsContainer>();
//            ContainerInfo.ContainerStatus = ContainerStatus.KOUXIAN;
//            ContainerInfo.AssetNo = "N/A";
//            ContainerInfo.ContainerCategory = ContainerCategory.GZP;
//            ContainerInfo.ErpNo = "N/A";
//            ContainerInfo.IsVirtually = YesOrNot.N;
//            ContainerInfo.WorkShopType = LesWorkShopType.FAPAOCHEJIAN;
//            await _wmsContainerRep.InsertAsync(ContainerInfo);
//            //string ContainerCode = "ZHONGTONG";
//            //if (input.SpecLength == 1250)
//            //{
//            //    ContainerCode = "YKA";
//            //}
//            //else if (input.SpecLength == 1050)
//            //{
//            //    ContainerCode = "YKB";
//            //}
//            //else if (input.SpecLength == 800)
//            //{
//            //    ContainerCode = "YKC";
//            //}
//            //var wmsContainerModal = await _wmsContainerRep.DetachedEntities.Where(u => u.ContainerCode.Contains(input.ContainerCode))
//            //    .ProjectToType<WmsContainerOutput>()
//            //    .OrderByDescending(u => u.ContainerCode)
//            //    .FirstOrDefaultAsync();
//            //int a = 0;
//            //if (wmsContainerModal != null)
//            //{
//            //    a = Convert.ToInt32(wmsContainerModal.ContainerCode.Substring(wmsContainerModal.ContainerCode.Length - 5));
//            //}
//            //for (int i = a + 1; i <= a + input.Quantity; i++)
//            //{
//            //    var wmsContainer = input.Adapt<WmsContainer>();
//            //    wmsContainer.AssetNo = "N/A";
//            //    wmsContainer.ErpNo = "N/A";
//            //    wmsContainer.IsVirtually = YesOrNot.N;
//            //    wmsContainer.IsDeleted = false;;
//            //    wmsContainer.ContainerCode = ContainerCode + i.ToString("00000");
//            //    await _wmsContainerRep.InsertAsync(wmsContainer);
//            //}
//        }
        /// <summary>
        /// åˆ é™¤æ‰˜ç›˜ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("delete")]
        public async Task Delete(DeleteWmsContainerInput input)
        {
            var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(u => u.Id == input.Id);
            await _wmsContainerRep.DeleteAsync(wmsContainer);
        }
//        /// <summary>
//        /// åˆ é™¤æ‰˜ç›˜ä¿¡æ¯
//        /// </summary>
//        /// <param name="input"></param>
//        /// <returns></returns>
//        [HttpPost("delete")]
//        public async Task Delete(DeleteWmsContainerInput input)
//        {
//            var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(u => u.Id == input.Id);
//            await _wmsContainerRep.DeleteAsync(wmsContainer);
//        }
        /// <summary>
        /// æ›´æ–°æ‰˜ç›˜ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("edit")]
        public async Task Update(UpdateWmsContainerInput input)
        {
            var isExist = await _wmsContainerRep.AnyAsync(u => u.Id == input.Id, false);
            if (!isExist) throw Oops.Oh(ErrorCode.D3000);
//        /// <summary>
//        /// æ›´æ–°æ‰˜ç›˜ä¿¡æ¯
//        /// </summary>
//        /// <param name="input"></param>
//        /// <returns></returns>
//        [HttpPost("edit")]
//        public async Task Update(UpdateWmsContainerInput input)
//        {
//            var isExist = await _wmsContainerRep.AnyAsync(u => u.Id == input.Id, false);
//            if (!isExist) throw Oops.Oh(ErrorCode.D3000);
            var wmsContainer = input.Adapt<WmsContainer>();
            await _wmsContainerRep.UpdateAsync(wmsContainer,ignoreNullValues:true);
        }
//            var wmsContainer = input.Adapt<WmsContainer>();
//            await _wmsContainerRep.UpdateAsync(wmsContainer,ignoreNullValues:true);
//        }
        /// <summary>
        /// èŽ·å–æ‰˜ç›˜ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("detail")]
        public async Task<WmsContainerOutput> Get([FromQuery] QueryeWmsContainerInput input)
        {
            return (await _wmsContainerRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsContainerOutput>();
        }
//        /// <summary>
//        /// èŽ·å–æ‰˜ç›˜ä¿¡æ¯
//        /// </summary>
//        /// <param name="input"></param>
//        /// <returns></returns>
//        [HttpGet("detail")]
//        public async Task<WmsContainerOutput> Get([FromQuery] QueryeWmsContainerInput input)
//        {
//            return (await _wmsContainerRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsContainerOutput>();
//        }
        /// <summary>
        /// èŽ·å–æ‰˜ç›˜ä¿¡æ¯åˆ—è¡¨
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("list")]
        public async Task<List<WmsContainerOutput>> List([FromQuery] WmsContainerInput input)
        {
            return await _wmsContainerRep.DetachedEntities.ProjectToType<WmsContainerOutput>().ToListAsync();
        }
         /// <summary>
        /// Excel模板导入托盘信息功能
        /// </summary>
        /// <param name="file">Excel模板文件</param>
        /// <param name="importExcelType">Excel导入方式</param>
        /// <returns>导入的记录数</returns>
        [HttpPost("fromExcel")]
        public async Task<int> FromExcelAsync(IFormFile file, [FromQuery] ImportExcelType importExcelType)
        {
            int size = 200;
            var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsContainer", "v2");
            if (excelTemplate == null) throw Oops.Oh(ErrorCode.Excel002);
            var keys = excelTemplate.UnionUniqueFields.Split(",") ?? Array.Empty<string>();
            for (var i = 0; i < keys.Length; i++)
            {
                keys[i] = keys[i]?.Trim() ?? string.Empty;
            }
            ExcelUtil.FromExcel(file, excelTemplate.HeadStartLine, excelTemplate.DataStartLine, out List<string> headers, out List<List<object>> data, out string sheetName);
            List<WmsContainerOutput> wmsContainerList = DataConvertUtil.ToObjectList(headers, data, sheetName, keys, excelTemplate?.DataStartLine ?? 2, out Dictionary<string, WmsContainerOutput> dict);
            List<Dictionary<string, object>> uniqueKeyValueDictList = wmsContainerList.ParseUniqueKeyValueDictList(keys.ToList(), excelTemplate?.DataStartLine ?? 2, sheetName);
            var filters = DataConvertUtil.GetExpressionListByUniqueDict<WmsContainer>(keys.ToList(), uniqueKeyValueDictList, size);
            var selectKeys = keys.ToList();
            if(!selectKeys.Contains("Id")) selectKeys.Add("Id");
            var selector = DataConvertUtil.GetSelectExpressionListByUniqueDict<WmsContainer, WmsContainerOutput>(selectKeys);
            List<WmsContainer> updates = new();
            List<WmsContainer> adds = new();
//        /// <summary>
//        /// èŽ·å–æ‰˜ç›˜ä¿¡æ¯åˆ—è¡¨
//        /// </summary>
//        /// <param name="input"></param>
//        /// <returns></returns>
//        [HttpGet("list")]
//        public async Task<List<WmsContainerOutput>> List([FromQuery] WmsContainerInput input)
//        {
//            return await _wmsContainerRep.DetachedEntities.ProjectToType<WmsContainerOutput>().ToListAsync();
//        }
//         /// <summary>
//        /// Excel模板导入托盘信息功能
//        /// </summary>
//        /// <param name="file">Excel模板文件</param>
//        /// <param name="importExcelType">Excel导入方式</param>
//        /// <returns>导入的记录数</returns>
//        [HttpPost("fromExcel")]
//        public async Task<int> FromExcelAsync(IFormFile file, [FromQuery] ImportExcelType importExcelType)
//        {
//            int size = 200;
//            var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsContainer", "v2");
//            if (excelTemplate == null) throw Oops.Oh(ErrorCode.Excel002);
//            var keys = excelTemplate.UnionUniqueFields.Split(",") ?? Array.Empty<string>();
//            for (var i = 0; i < keys.Length; i++)
//            {
//                keys[i] = keys[i]?.Trim() ?? string.Empty;
//            }
//            ExcelUtil.FromExcel(file, excelTemplate.HeadStartLine, excelTemplate.DataStartLine, out List<string> headers, out List<List<object>> data, out string sheetName);
//            List<WmsContainerOutput> wmsContainerList = DataConvertUtil.ToObjectList(headers, data, sheetName, keys, excelTemplate?.DataStartLine ?? 2, out Dictionary<string, WmsContainerOutput> dict);
//            List<Dictionary<string, object>> uniqueKeyValueDictList = wmsContainerList.ParseUniqueKeyValueDictList(keys.ToList(), excelTemplate?.DataStartLine ?? 2, sheetName);
//            var filters = DataConvertUtil.GetExpressionListByUniqueDict<WmsContainer>(keys.ToList(), uniqueKeyValueDictList, size);
//            var selectKeys = keys.ToList();
//            if(!selectKeys.Contains("Id")) selectKeys.Add("Id");
//            var selector = DataConvertUtil.GetSelectExpressionListByUniqueDict<WmsContainer, WmsContainerOutput>(selectKeys);
//            List<WmsContainer> updates = new();
//            List<WmsContainer> adds = new();
            lock (_lock)
            {
                foreach (var filter in filters)
                {
                    var wmsContainerExistSubList = _wmsContainerRep.Where(filter).Select(selector).ToList();
                    wmsContainerExistSubList.ForEach(x =>
                    {
                        var k = DataConvertUtil.GetKey(x, keys);
                        if (dict.ContainsKey(k)) dict[k].Id = x.Id;
                    });
                }
                foreach (var wmsContainer in wmsContainerList)
                {
                    if (wmsContainer.Id > 0)
                    {
                        if (importExcelType == ImportExcelType.ADD_AND_UPDATE) updates.Add(wmsContainer.Adapt<WmsContainer>());
                    }
                    else
                    {
                        adds.Add(wmsContainer.Adapt<WmsContainer>());
                    }
                }
//            lock (_lock)
//            {
//                foreach (var filter in filters)
//                {
//                    var wmsContainerExistSubList = _wmsContainerRep.Where(filter).Select(selector).ToList();
//                    wmsContainerExistSubList.ForEach(x =>
//                    {
//                        var k = DataConvertUtil.GetKey(x, keys);
//                        if (dict.ContainsKey(k)) dict[k].Id = x.Id;
//                    });
//                }
//                foreach (var wmsContainer in wmsContainerList)
//                {
//                    if (wmsContainer.Id > 0)
//                    {
//                        if (importExcelType == ImportExcelType.ADD_AND_UPDATE) updates.Add(wmsContainer.Adapt<WmsContainer>());
//                    }
//                    else
//                    {
//                        adds.Add(wmsContainer.Adapt<WmsContainer>());
//                    }
//                }
                if (importExcelType == ImportExcelType.ADD_AND_UPDATE) updates.ForEach(x => _wmsContainerRep.Update(x));
//                if (importExcelType == ImportExcelType.ADD_AND_UPDATE) updates.ForEach(x => _wmsContainerRep.Update(x));
                
                var maxId = _wmsContainerRep.DetachedEntities.OrderByDescending(x => x.Id).Select(x => x.Id).FirstOrDefault();
                adds.ForEach(x => x.Id = ++maxId);
                Db.GetDbContext().Set<WmsContainer>().AddRange(adds);
                Db.GetDbContext().SaveChanges();
//                var maxId = _wmsContainerRep.DetachedEntities.OrderByDescending(x => x.Id).Select(x => x.Id).FirstOrDefault();
//                adds.ForEach(x => x.Id = ++maxId);
//                Db.GetDbContext().Set<WmsContainer>().AddRange(adds);
//                Db.GetDbContext().SaveChanges();
               
            }
            await Task.CompletedTask;
            return adds.Count;
        }
//            }
//            await Task.CompletedTask;
//            return adds.Count;
//        }
        /// <summary>
        /// æ ¹æ®ç‰ˆæœ¬ä¸‹è½½æ‰˜ç›˜ä¿¡æ¯çš„Excel导入模板
        /// </summary>
        /// <param name="version">模板版本</param>
        /// <returns>下载的模板文件</returns>
        [HttpGet("downloadExcelTemplate")]
        public async Task<IActionResult> DownloadExcelTemplate([FromQuery] string version)
        {
            var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsContainer", version);
            if (excelTemplate == null) throw Oops.Oh(ErrorCode.Excel002);
            var path = Path.Combine(@"\", excelTemplate.TemplateFileName);
            Stream ms = FileUtil.Download(path, excelTemplate.TemplateFileName);
            var fileName = HttpUtility.UrlEncode($"{excelTemplate.Name}导入模板.xlsx", Encoding.GetEncoding("UTF-8"));
            return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName };
        }
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜ä¿¡æ¯æŸ¥è¯¢å‚数导出Excel
        /// </summary>
        /// <param name="input">托盘信息查询参数</param>
        /// <returns>导出的Excel文件</returns>
        [HttpGet("toExcel")]
        public async Task<IActionResult> ToExcelAsync([FromQuery] WmsContainerSearchNonPage input)
        {
            var wmsContainerList = await ListNonPageAsync(input);
            MemoryStream ms = new();
            DataConvertUtil.ToExcelData(wmsContainerList, _sysDictTypeRep, _sysDictDataRep, out List<string> headers,
                out List<List<object>> data, out string sheetName);
            var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsContainer", "v1");
            if (excelTemplate != null)
            {
                ExcelUtil.ToExcel(excelTemplate.TemplateFileName, headers, data, sheetName, excelTemplate.HeadStartLine, excelTemplate.DataStartLine, ms);
            }
            else
            {
                ExcelUtil.ToExcel(headers, data, sheetName, ms);
            }
            ms.Position = 0;
            var fileName = HttpUtility.UrlEncode($"{sheetName}[{DateTimeOffset.Now:yyyy-MM-dd}].xlsx", Encoding.GetEncoding("UTF-8"));
            return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName };
        }
    }
}
//        /// <summary>
//        /// æ ¹æ®ç‰ˆæœ¬ä¸‹è½½æ‰˜ç›˜ä¿¡æ¯çš„Excel导入模板
//        /// </summary>
//        /// <param name="version">模板版本</param>
//        /// <returns>下载的模板文件</returns>
//        [HttpGet("downloadExcelTemplate")]
//        public async Task<IActionResult> DownloadExcelTemplate([FromQuery] string version)
//        {
//            var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsContainer", version);
//            if (excelTemplate == null) throw Oops.Oh(ErrorCode.Excel002);
//            var path = Path.Combine(@"\", excelTemplate.TemplateFileName);
//            Stream ms = FileUtil.Download(path, excelTemplate.TemplateFileName);
//            var fileName = HttpUtility.UrlEncode($"{excelTemplate.Name}导入模板.xlsx", Encoding.GetEncoding("UTF-8"));
//            return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName };
//        }
//        /// <summary>
//        /// æ ¹æ®æ‰˜ç›˜ä¿¡æ¯æŸ¥è¯¢å‚数导出Excel
//        /// </summary>
//        /// <param name="input">托盘信息查询参数</param>
//        /// <returns>导出的Excel文件</returns>
//        [HttpGet("toExcel")]
//        public async Task<IActionResult> ToExcelAsync([FromQuery] WmsContainerSearchNonPage input)
//        {
//            var wmsContainerList = await ListNonPageAsync(input);
//            MemoryStream ms = new();
//            DataConvertUtil.ToExcelData(wmsContainerList, _sysDictTypeRep, _sysDictDataRep, out List<string> headers,
//                out List<List<object>> data, out string sheetName);
//            var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsContainer", "v1");
//            if (excelTemplate != null)
//            {
//                ExcelUtil.ToExcel(excelTemplate.TemplateFileName, headers, data, sheetName, excelTemplate.HeadStartLine, excelTemplate.DataStartLine, ms);
//            }
//            else
//            {
//                ExcelUtil.ToExcel(headers, data, sheetName, ms);
//            }
//            ms.Position = 0;
//            var fileName = HttpUtility.UrlEncode($"{sheetName}[{DateTimeOffset.Now:yyyy-MM-dd}].xlsx", Encoding.GetEncoding("UTF-8"));
//            return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName };
//        }
//    }
//}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsPda/MaterialSorting/MaterialSortingService.cs
@@ -1,216 +1,216 @@
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using Admin.NET.Core;
using Yitter.IdGenerator;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Mvc.RazorPages;
//using Furion.DatabaseAccessor;
//using Furion.DependencyInjection;
//using Furion.DynamicApiController;
//using Furion.FriendlyException;
//using Mapster;
//using Microsoft.AspNetCore.Authorization;
//using Microsoft.AspNetCore.Mvc;
//using Microsoft.EntityFrameworkCore;
//using System.Linq.Dynamic.Core;
//using Admin.NET.Core;
//using Yitter.IdGenerator;
//using Microsoft.Extensions.Logging;
//using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Admin.NET.Application
{
    /// <summary>
    /// ç‰©æ–™åˆ†æ‹£æœåŠ¡
    /// </summary>
    [ApiDescriptionSettings("Pda分拣", Name = "MaterialSorting", Order = 100)]
    [Route("api/[Controller]")]
    public class MaterialSortingService : IDynamicApiController, ITransient
    {
        private readonly IRepository<WmsOrder, MasterDbContextLocator> _wmsOrderRep;
        private readonly IRepository<WmsOrderDetails, MasterDbContextLocator> _wmsOrderDetailsRep;
        private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep;
        private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep;
        private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep;
        private readonly IRepository<WmsWarehouseEntrance, MasterDbContextLocator> _wmsWarehouseEntranceRep;
        private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep;
        private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep;
        private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep;
        private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep;
        private readonly IRepository<WmsOrderType, MasterDbContextLocator> _wmsOrderTypeRep;
        private readonly IRepository<WmsSortOrder, MasterDbContextLocator> _wmsSortOrderRep;
        private readonly IRepository<WmsTakeMaterialOrder, MasterDbContextLocator> _wmsTakeMaterialOrderRep;
//namespace Admin.NET.Application
//{
//    /// <summary>
//    /// ç‰©æ–™åˆ†æ‹£æœåŠ¡
//    /// </summary>
//    [ApiDescriptionSettings("Pda分拣", Name = "MaterialSorting", Order = 100)]
//    [Route("api/[Controller]")]
//    public class MaterialSortingService : IDynamicApiController, ITransient
//    {
//        private readonly IRepository<WmsOrder, MasterDbContextLocator> _wmsOrderRep;
//        private readonly IRepository<WmsOrderDetails, MasterDbContextLocator> _wmsOrderDetailsRep;
//        private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep;
//        private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep;
//        private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep;
//        private readonly IRepository<WmsWarehouseEntrance, MasterDbContextLocator> _wmsWarehouseEntranceRep;
//        private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep;
//        private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep;
//        private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep;
//        private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep;
//        private readonly IRepository<WmsOrderType, MasterDbContextLocator> _wmsOrderTypeRep;
//        private readonly IRepository<WmsSortOrder, MasterDbContextLocator> _wmsSortOrderRep;
//        private readonly IRepository<WmsTakeMaterialOrder, MasterDbContextLocator> _wmsTakeMaterialOrderRep;
        /// <summary>
        /// æž„造函数
        /// </summary>
        public MaterialSortingService(
            IRepository<WmsOrder, MasterDbContextLocator> wmsOrderRep,
            IRepository<WmsOrderDetails, MasterDbContextLocator> wmsOrderDetailsRep,
            IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep,
            IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep,
            IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep,
            IRepository<WmsWarehouseEntrance, MasterDbContextLocator> wmsWarehouseEntranceRep,
            IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep,
            IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep,
            IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep,
            IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep,
            IRepository<WmsOrderType, MasterDbContextLocator> wmsOrderTypeRep,
            IRepository<WmsSortOrder, MasterDbContextLocator> wmsSortOrderRep,
            IRepository<WmsTakeMaterialOrder, MasterDbContextLocator> wmsTakeMaterialOrderRep
        )
        {
            _wmsOrderRep = wmsOrderRep;
            _wmsOrderDetailsRep = wmsOrderDetailsRep;
            _wmsTaskRep = wmsTaskRep;
            _wmsPlaceRep = wmsPlaceRep;
            _wmsAreaRep = wmsAreaRep;
            _wmsWarehouseEntranceRep = wmsWarehouseEntranceRep;
            _wmsMaterialContainerRep = wmsMaterialContainerRep;
            _wmsContainerRep = wmsContainerRep;
            _wmsContainerPlaceRep = wmsContainerPlaceRep;
            _wmsMaterialStockRep = wmsMaterialStockRep;
            _wmsOrderTypeRep = wmsOrderTypeRep;
            _wmsSortOrderRep = wmsSortOrderRep;
            _wmsTakeMaterialOrderRep = wmsTakeMaterialOrderRep;
        }
//        /// <summary>
//        /// æž„造函数
//        /// </summary>
//        public MaterialSortingService(
//            IRepository<WmsOrder, MasterDbContextLocator> wmsOrderRep,
//            IRepository<WmsOrderDetails, MasterDbContextLocator> wmsOrderDetailsRep,
//            IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep,
//            IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep,
//            IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep,
//            IRepository<WmsWarehouseEntrance, MasterDbContextLocator> wmsWarehouseEntranceRep,
//            IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep,
//            IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep,
//            IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep,
//            IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep,
//            IRepository<WmsOrderType, MasterDbContextLocator> wmsOrderTypeRep,
//            IRepository<WmsSortOrder, MasterDbContextLocator> wmsSortOrderRep,
//            IRepository<WmsTakeMaterialOrder, MasterDbContextLocator> wmsTakeMaterialOrderRep
//        )
//        {
//            _wmsOrderRep = wmsOrderRep;
//            _wmsOrderDetailsRep = wmsOrderDetailsRep;
//            _wmsTaskRep = wmsTaskRep;
//            _wmsPlaceRep = wmsPlaceRep;
//            _wmsAreaRep = wmsAreaRep;
//            _wmsWarehouseEntranceRep = wmsWarehouseEntranceRep;
//            _wmsMaterialContainerRep = wmsMaterialContainerRep;
//            _wmsContainerRep = wmsContainerRep;
//            _wmsContainerPlaceRep = wmsContainerPlaceRep;
//            _wmsMaterialStockRep = wmsMaterialStockRep;
//            _wmsOrderTypeRep = wmsOrderTypeRep;
//            _wmsSortOrderRep = wmsSortOrderRep;
//            _wmsTakeMaterialOrderRep = wmsTakeMaterialOrderRep;
//        }
        /// <summary>
        /// æ‰«æåˆ†æ‹£æ‰˜ç›˜
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("GetSortInfo")]
        public async Task<GetSortInfoOutput> GetSortInfo([FromQuery] GetSortInfoInput input)
        {
            //检查托盘
            var wareContainer = await _wmsContainerRep.FirstOrDefaultAsync(z => z.ContainerCode == input.ContainerCode);
            if (wareContainer == null) throw Oops.Oh("容器信息不存在!");
            if (wareContainer.ContainerStatus == ContainerStatus.JINYONG) throw Oops.Oh("容器已禁用!");
            if (wareContainer.ContainerStatus == ContainerStatus.KUWEI) throw Oops.Oh("容器在库位不可使用!");
            if (wareContainer.ContainerStatus != ContainerStatus.FENJIAN) throw Oops.Oh("容器不存在分拣信息!");
//        /// <summary>
//        /// æ‰«æåˆ†æ‹£æ‰˜ç›˜
//        /// </summary>
//        /// <param name="input"></param>
//        /// <returns></returns>
//        [HttpGet("GetSortInfo")]
//        public async Task<GetSortInfoOutput> GetSortInfo([FromQuery] GetSortInfoInput input)
//        {
//            //检查托盘
//            var wareContainer = await _wmsContainerRep.FirstOrDefaultAsync(z => z.ContainerCode == input.ContainerCode);
//            if (wareContainer == null) throw Oops.Oh("容器信息不存在!");
//            if (wareContainer.ContainerStatus == ContainerStatus.JINYONG) throw Oops.Oh("容器已禁用!");
//            if (wareContainer.ContainerStatus == ContainerStatus.KUWEI) throw Oops.Oh("容器在库位不可使用!");
//            if (wareContainer.ContainerStatus != ContainerStatus.FENJIAN) throw Oops.Oh("容器不存在分拣信息!");
            //判断是否在任务中
            var isExit = await _wmsTaskRep.AnyAsync(n => n.TaskStatus != TaskStatusEnum.WANCHENG && n.ContainerCode == input.ContainerCode);
            if (isExit) throw Oops.Oh("容器存在未完成任务!");
//            //判断是否在任务中
//            var isExit = await _wmsTaskRep.AnyAsync(n => n.TaskStatus != TaskStatusEnum.WANCHENG && n.ContainerCode == input.ContainerCode);
//            if (isExit) throw Oops.Oh("容器存在未完成任务!");
            // æŸ¥è¯¢åˆ†æ‹£è®°å½•
            var wareSortOrderList = await _wmsSortOrderRep.DetachedEntities
                .Where(p => p.ContainerCode == input.ContainerCode && p.SortStatus != SortStatusEnum.FENJIANWANCHENG).ToListAsync();
//            // æŸ¥è¯¢åˆ†æ‹£è®°å½•
//            var wareSortOrderList = await _wmsSortOrderRep.DetachedEntities
//                .Where(p => p.ContainerCode == input.ContainerCode && p.SortStatus != SortStatusEnum.FENJIANWANCHENG).ToListAsync();
            return new GetSortInfoOutput
            {
                WmsContainer = wareContainer.Adapt<WmsContainerDto>(),
                WmsSortOrderList = wareSortOrderList
            };
        }
//            return new GetSortInfoOutput
//            {
//                WmsContainer = wareContainer.Adapt<WmsContainerDto>(),
//                WmsSortOrderList = wareSortOrderList
//            };
//        }
        /// <summary>
        /// åˆ†æ‹£ç¡®è®¤
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("SortSure")]
        [UnitOfWork]
        public async Task SortSure(GetSortInfoOutput input)
        {
            if (input.WmsContainer == null || input.WmsSortOrderList.Count == 0) throw Oops.Oh("传递参数异常!");
//        /// <summary>
//        /// åˆ†æ‹£ç¡®è®¤
//        /// </summary>
//        /// <param name="input"></param>
//        /// <returns></returns>
//        [HttpPost("SortSure")]
//        [UnitOfWork]
//        public async Task SortSure(GetSortInfoOutput input)
//        {
//            if (input.WmsContainer == null || input.WmsSortOrderList.Count == 0) throw Oops.Oh("传递参数异常!");
            //检查托盘
            var wareContainer = await _wmsContainerRep.FirstOrDefaultAsync(z => z.ContainerCode == input.WmsContainer.ContainerCode);
            if (wareContainer == null) throw Oops.Oh("容器信息不存在!");
            if (wareContainer.ContainerStatus == ContainerStatus.JINYONG) throw Oops.Oh("容器已禁用!");
            if (wareContainer.ContainerStatus == ContainerStatus.KUWEI) throw Oops.Oh("容器在库位不可使用!");
            if (wareContainer.ContainerStatus != ContainerStatus.FENJIAN) throw Oops.Oh("容器不存在分拣信息!");
//            //检查托盘
//            var wareContainer = await _wmsContainerRep.FirstOrDefaultAsync(z => z.ContainerCode == input.WmsContainer.ContainerCode);
//            if (wareContainer == null) throw Oops.Oh("容器信息不存在!");
//            if (wareContainer.ContainerStatus == ContainerStatus.JINYONG) throw Oops.Oh("容器已禁用!");
//            if (wareContainer.ContainerStatus == ContainerStatus.KUWEI) throw Oops.Oh("容器在库位不可使用!");
//            if (wareContainer.ContainerStatus != ContainerStatus.FENJIAN) throw Oops.Oh("容器不存在分拣信息!");
            var wmsMaterialContainers = await _wmsMaterialContainerRep
            .Where(p => p.ContainerCode == input.WmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
            foreach (var item in input.WmsSortOrderList)
            {
                var wmsMaterialContainerModel = wmsMaterialContainers.FirstOrDefault(p => p.MaterialNo == item.Materialcode);
                if (wmsMaterialContainerModel != null)
                {
                    if (wmsMaterialContainerModel.BindQuantity < item.ActualQuantity) throw Oops.Oh("分拣组盘异常!");
                    wmsMaterialContainerModel.BindQuantity -= item.ActualQuantity;
                    if (wmsMaterialContainerModel.BindQuantity <= 0)
                    {
                        wmsMaterialContainers.Remove(wmsMaterialContainerModel);
                        await _wmsMaterialContainerRep.DeleteAsync(wmsMaterialContainerModel);
                    }
                    else
                    {
                        await _wmsMaterialContainerRep.UpdateAsync(wmsMaterialContainerModel);
                    }
                }
                var stockModel = await _wmsMaterialStockRep.FirstOrDefaultAsync(p => p.ContainerCode == wareContainer.ContainerCode && p.MaterialNo == item.Materialcode);
                if (stockModel != null)
                {
                    if (stockModel.StockNumber < item.ActualQuantity) throw Oops.Oh("分拣库存异常!");
                    stockModel.StockNumber -= item.ActualQuantity;
                    if (stockModel.StockNumber <= 0) await _wmsMaterialStockRep.DeleteAsync(stockModel);
                    else await _wmsMaterialStockRep.UpdateAsync(stockModel);
                }
//            var wmsMaterialContainers = await _wmsMaterialContainerRep
//            .Where(p => p.ContainerCode == input.WmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
//            foreach (var item in input.WmsSortOrderList)
//            {
//                var wmsMaterialContainerModel = wmsMaterialContainers.FirstOrDefault(p => p.MaterialNo == item.Materialcode);
//                if (wmsMaterialContainerModel != null)
//                {
//                    if (wmsMaterialContainerModel.BindQuantity < item.ActualQuantity) throw Oops.Oh("分拣组盘异常!");
//                    wmsMaterialContainerModel.BindQuantity -= item.ActualQuantity;
//                    if (wmsMaterialContainerModel.BindQuantity <= 0)
//                    {
//                        wmsMaterialContainers.Remove(wmsMaterialContainerModel);
//                        await _wmsMaterialContainerRep.DeleteAsync(wmsMaterialContainerModel);
//                    }
//                    else
//                    {
//                        await _wmsMaterialContainerRep.UpdateAsync(wmsMaterialContainerModel);
//                    }
//                }
//                var stockModel = await _wmsMaterialStockRep.FirstOrDefaultAsync(p => p.ContainerCode == wareContainer.ContainerCode && p.MaterialNo == item.Materialcode);
//                if (stockModel != null)
//                {
//                    if (stockModel.StockNumber < item.ActualQuantity) throw Oops.Oh("分拣库存异常!");
//                    stockModel.StockNumber -= item.ActualQuantity;
//                    if (stockModel.StockNumber <= 0) await _wmsMaterialStockRep.DeleteAsync(stockModel);
//                    else await _wmsMaterialStockRep.UpdateAsync(stockModel);
//                }
                // è¿™é‡Œè¿˜éœ€è¦æ ¹æ®å®žé™…下发数来更新分拣状态
                var wareSortOrderModel = await _wmsSortOrderRep.FirstOrDefaultAsync(p => p.ContainerCode == wareContainer.ContainerCode
                && p.SortStatus != SortStatusEnum.FENJIANWANCHENG && p.Materialcode == item.Materialcode);
//                // è¿™é‡Œè¿˜éœ€è¦æ ¹æ®å®žé™…下发数来更新分拣状态
//                var wareSortOrderModel = await _wmsSortOrderRep.FirstOrDefaultAsync(p => p.ContainerCode == wareContainer.ContainerCode
//                && p.SortStatus != SortStatusEnum.FENJIANWANCHENG && p.Materialcode == item.Materialcode);
                if (wareSortOrderModel != null)
                {
                    wareSortOrderModel.ActualQuantity += item.ActualQuantity;
//                if (wareSortOrderModel != null)
//                {
//                    wareSortOrderModel.ActualQuantity += item.ActualQuantity;
                    if (wareSortOrderModel.ActualQuantity >= wareSortOrderModel.SortQuantity)
                    {
                        wareSortOrderModel.SortStatus = SortStatusEnum.FENJIANWANCHENG;
                        _wmsSortOrderRep.UpdateNow(wareSortOrderModel);
//                    if (wareSortOrderModel.ActualQuantity >= wareSortOrderModel.SortQuantity)
//                    {
//                        wareSortOrderModel.SortStatus = SortStatusEnum.FENJIANWANCHENG;
//                        _wmsSortOrderRep.UpdateNow(wareSortOrderModel);
                        // åˆ†æ‹£å•完成后判断出库明细是否完成
                    }
                    else
                    {
                        wareSortOrderModel.SortStatus = SortStatusEnum.FENJIANZHONG;
                        _wmsSortOrderRep.UpdateNow(wareSortOrderModel);
                    }
                }
            }
//                        // åˆ†æ‹£å•完成后判断出库明细是否完成
//                    }
//                    else
//                    {
//                        wareSortOrderModel.SortStatus = SortStatusEnum.FENJIANZHONG;
//                        _wmsSortOrderRep.UpdateNow(wareSortOrderModel);
//                    }
//                }
//            }
            var wareSortOrderCount = await _wmsSortOrderRep
                .Where(p => p.ContainerCode == input.WmsContainer.ContainerCode && p.SortStatus != SortStatusEnum.FENJIANWANCHENG).CountAsync();
//            var wareSortOrderCount = await _wmsSortOrderRep
//                .Where(p => p.ContainerCode == input.WmsContainer.ContainerCode && p.SortStatus != SortStatusEnum.FENJIANWANCHENG).CountAsync();
            //更新托盘状态,分拣完成
            if (wareSortOrderCount == 0)
            {
                if (wmsMaterialContainers.Count == 0) wareContainer.ContainerStatus = ContainerStatus.KOUXIAN;
                else wareContainer.ContainerStatus = ContainerStatus.ZUPANG;
                // æ›´æ–°å®¹å™¨çŠ¶æ€
                await _wmsContainerRep.UpdateAsync(wareContainer);
            }
        }
//            //更新托盘状态,分拣完成
//            if (wareSortOrderCount == 0)
//            {
//                if (wmsMaterialContainers.Count == 0) wareContainer.ContainerStatus = ContainerStatus.KOUXIAN;
//                else wareContainer.ContainerStatus = ContainerStatus.ZUPANG;
//                // æ›´æ–°å®¹å™¨çŠ¶æ€
//                await _wmsContainerRep.UpdateAsync(wareContainer);
//            }
//        }
        /// <summary>
        /// pda出库单查询
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("SortPdaPage")]
        public async Task<PageResult<SortPdaPageOutput>> SortPdaPage([FromQuery] SortPdaPageInput input)
        {
            var wmsTakeMaterialOrder = await _wmsTakeMaterialOrderRep.DetachedEntities
                                     .Where(!string.IsNullOrEmpty(input.No), u => EF.Functions.Like(u.NO, $"%{input.No.Trim()}%"))
                                     .ProjectToType<SortPdaPageOutput>()
                                     .ToADPagedListAsync(input.PageNo, input.PageSize);
            return wmsTakeMaterialOrder;
        }
//        /// <summary>
//        /// pda出库单查询
//        /// </summary>
//        /// <param name="input"></param>
//        /// <returns></returns>
//        [HttpGet("SortPdaPage")]
//        public async Task<PageResult<SortPdaPageOutput>> SortPdaPage([FromQuery] SortPdaPageInput input)
//        {
//            var wmsTakeMaterialOrder = await _wmsTakeMaterialOrderRep.DetachedEntities
//                                     .Where(!string.IsNullOrEmpty(input.No), u => EF.Functions.Like(u.NO, $"%{input.No.Trim()}%"))
//                                     .ProjectToType<SortPdaPageOutput>()
//                                     .ToADPagedListAsync(input.PageNo, input.PageSize);
//            return wmsTakeMaterialOrder;
//        }
        /// <summary>
        /// pda根据出库单获取分拣单明细
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("SortPdaDetailPage")]
        public async Task<PageResult<SortPdaDetailPageOutput>> SortPdaDetailPage([FromQuery] SortPdaDetailPageInput input)
        {
            var wmsTakeMaterialOrder = await _wmsSortOrderRep.DetachedEntities
                                     .Where(x=>x.OrderNo ==input.No)
                                     .ProjectToType<SortPdaDetailPageOutput>()
                                     .ToADPagedListAsync(input.PageNo, input.PageSize);
            return wmsTakeMaterialOrder;
        }
    }
}
//        /// <summary>
//        /// pda根据出库单获取分拣单明细
//        /// </summary>
//        /// <param name="input"></param>
//        /// <returns></returns>
//        [HttpGet("SortPdaDetailPage")]
//        public async Task<PageResult<SortPdaDetailPageOutput>> SortPdaDetailPage([FromQuery] SortPdaDetailPageInput input)
//        {
//            var wmsTakeMaterialOrder = await _wmsSortOrderRep.DetachedEntities
//                                     .Where(x=>x.OrderNo ==input.No)
//                                     .ProjectToType<SortPdaDetailPageOutput>()
//                                     .ToADPagedListAsync(input.PageNo, input.PageSize);
//            return wmsTakeMaterialOrder;
//        }
//    }
//}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsPda/WmsInWarehouse/WmsInWarehouseService.cs
@@ -1,317 +1,317 @@
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using Admin.NET.Core;
using Yitter.IdGenerator;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Mvc.RazorPages;
//using Furion.DatabaseAccessor;
//using Furion.DependencyInjection;
//using Furion.DynamicApiController;
//using Furion.FriendlyException;
//using Mapster;
//using Microsoft.AspNetCore.Authorization;
//using Microsoft.AspNetCore.Mvc;
//using Microsoft.EntityFrameworkCore;
//using System.Linq.Dynamic.Core;
//using Admin.NET.Core;
//using Yitter.IdGenerator;
//using Microsoft.Extensions.Logging;
//using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Admin.NET.Application
{
    /// <summary>
    /// Pda物料入库
    /// </summary>
    [ApiDescriptionSettings("Pda物料入库", Name = "WmsInWarehouse", Order = 100)]
    [Route("api/[Controller]")]
    public class WmsInWarehouseService : IDynamicApiController, ITransient
    {
        private readonly IRepository<WmsOrder, MasterDbContextLocator> _wmsOrderRep;
        private readonly IRepository<WmsOrderDetails, MasterDbContextLocator> _wmsOrderDetailsRep;
        private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep;
        private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep;
        private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep;
        private readonly IRepository<WmsWarehouseEntrance, MasterDbContextLocator> _wmsWarehouseEntranceRep;
        private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep;
        private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep;
        private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep;
        private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep;
        private readonly IRepository<WmsOrderType, MasterDbContextLocator> _wmsOrderTypeRep;
//namespace Admin.NET.Application
//{
//    /// <summary>
//    /// Pda物料入库
//    /// </summary>
//    [ApiDescriptionSettings("Pda物料入库", Name = "WmsInWarehouse", Order = 100)]
//    [Route("api/[Controller]")]
//    public class WmsInWarehouseService : IDynamicApiController, ITransient
//    {
//        private readonly IRepository<WmsOrder, MasterDbContextLocator> _wmsOrderRep;
//        private readonly IRepository<WmsOrderDetails, MasterDbContextLocator> _wmsOrderDetailsRep;
//        private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep;
//        private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep;
//        private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep;
//        private readonly IRepository<WmsWarehouseEntrance, MasterDbContextLocator> _wmsWarehouseEntranceRep;
//        private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep;
//        private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep;
//        private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep;
//        private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep;
//        private readonly IRepository<WmsOrderType, MasterDbContextLocator> _wmsOrderTypeRep;
        /// <summary>
        /// æž„造函数
        /// </summary>
        public WmsInWarehouseService(
            IRepository<WmsOrder, MasterDbContextLocator> wmsOrderRep,
            IRepository<WmsOrderDetails, MasterDbContextLocator> wmsOrderDetailsRep,
            IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep,
            IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep,
            IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep,
            IRepository<WmsWarehouseEntrance, MasterDbContextLocator> wmsWarehouseEntranceRep,
            IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep,
            IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep,
            IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep,
            IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep,
            IRepository<WmsOrderType, MasterDbContextLocator> wmsOrderTypeRep
        )
        {
            _wmsOrderRep = wmsOrderRep;
            _wmsOrderDetailsRep = wmsOrderDetailsRep;
            _wmsTaskRep = wmsTaskRep;
            _wmsPlaceRep = wmsPlaceRep;
            _wmsAreaRep = wmsAreaRep;
            _wmsWarehouseEntranceRep = wmsWarehouseEntranceRep;
            _wmsMaterialContainerRep = wmsMaterialContainerRep;
            _wmsContainerRep = wmsContainerRep;
            _wmsContainerPlaceRep = wmsContainerPlaceRep;
            _wmsMaterialStockRep = wmsMaterialStockRep;
            _wmsOrderTypeRep = wmsOrderTypeRep;
        }
//        /// <summary>
//        /// æž„造函数
//        /// </summary>
//        public WmsInWarehouseService(
//            IRepository<WmsOrder, MasterDbContextLocator> wmsOrderRep,
//            IRepository<WmsOrderDetails, MasterDbContextLocator> wmsOrderDetailsRep,
//            IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep,
//            IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep,
//            IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep,
//            IRepository<WmsWarehouseEntrance, MasterDbContextLocator> wmsWarehouseEntranceRep,
//            IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep,
//            IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep,
//            IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep,
//            IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep,
//            IRepository<WmsOrderType, MasterDbContextLocator> wmsOrderTypeRep
//        )
//        {
//            _wmsOrderRep = wmsOrderRep;
//            _wmsOrderDetailsRep = wmsOrderDetailsRep;
//            _wmsTaskRep = wmsTaskRep;
//            _wmsPlaceRep = wmsPlaceRep;
//            _wmsAreaRep = wmsAreaRep;
//            _wmsWarehouseEntranceRep = wmsWarehouseEntranceRep;
//            _wmsMaterialContainerRep = wmsMaterialContainerRep;
//            _wmsContainerRep = wmsContainerRep;
//            _wmsContainerPlaceRep = wmsContainerPlaceRep;
//            _wmsMaterialStockRep = wmsMaterialStockRep;
//            _wmsOrderTypeRep = wmsOrderTypeRep;
//        }
        /// <summary>
        /// èŽ·å–æ‰˜ç›˜
        /// </summary>
        /// <returns></returns>
        [HttpGet("GetContainer")]
        [UnifyResult(typeof(GetContainerOutput))]
        public async Task<object> CheckTray([FromQuery] GetContainerInput input)
        {
            var containerModel = await _wmsContainerRep.DetachedEntities.Where(z => z.ContainerCode == input.ContainerCode).FirstOrDefaultAsync();
            //如果托盘不存在则添加一个
            if (containerModel == null) {
                var ContainerInfo = input.Adapt<WmsContainer>();
                ContainerInfo.ContainerStatus = ContainerStatus.KOUXIAN;
                ContainerInfo.AssetNo = "N/A";
                ContainerInfo.ContainerCategory = ContainerCategory.GZP;
                ContainerInfo.ErpNo = "N/A";
                ContainerInfo.IsVirtually = YesOrNot.N;
                ContainerInfo.WorkShopType = LesWorkShopType.FAPAOCHEJIAN;
                await _wmsContainerRep.InsertNowAsync(ContainerInfo);
                containerModel = ContainerInfo;
            }
//        /// <summary>
//        /// èŽ·å–æ‰˜ç›˜
//        /// </summary>
//        /// <returns></returns>
//        [HttpGet("GetContainer")]
//        [UnifyResult(typeof(GetContainerOutput))]
//        public async Task<object> CheckTray([FromQuery] GetContainerInput input)
//        {
//            var containerModel = await _wmsContainerRep.DetachedEntities.Where(z => z.ContainerCode == input.ContainerCode).FirstOrDefaultAsync();
//            //如果托盘不存在则添加一个
//            if (containerModel == null) {
//                var ContainerInfo = input.Adapt<WmsContainer>();
//                ContainerInfo.ContainerStatus = ContainerStatus.KOUXIAN;
//                ContainerInfo.AssetNo = "N/A";
//                ContainerInfo.ContainerCategory = ContainerCategory.GZP;
//                ContainerInfo.ErpNo = "N/A";
//                ContainerInfo.IsVirtually = YesOrNot.N;
//                ContainerInfo.WorkShopType = LesWorkShopType.FAPAOCHEJIAN;
//                await _wmsContainerRep.InsertNowAsync(ContainerInfo);
//                containerModel = ContainerInfo;
//            }
            var isExit = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG  && p.TaskStatus != TaskStatusEnum.QUXIAO);
            if (isExit) return XnRestfulResultProvider.RESTfulMesaage("托盘存在未完成任务!");
//            var isExit = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG  && p.TaskStatus != TaskStatusEnum.QUXIAO);
//            if (isExit) return XnRestfulResultProvider.RESTfulMesaage("托盘存在未完成任务!");
            isExit = await _wmsContainerPlaceRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.ContainerPlaceStatus == CommonStatus.ENABLE);
            if (isExit) return XnRestfulResultProvider.RESTfulMesaage("托盘存在库位中!");
//            isExit = await _wmsContainerPlaceRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.ContainerPlaceStatus == CommonStatus.ENABLE);
//            if (isExit) return XnRestfulResultProvider.RESTfulMesaage("托盘存在库位中!");
            var GetContainerOutputModel = new GetContainerOutput()
            {
                WmsContainer = containerModel.Adapt<WmsContainerDto>(),
                ContainerCode = containerModel.ContainerCode,
            };
            //获取组盘数据
            GetContainerOutputModel.WmsMaterials = await _wmsMaterialContainerRep
                    .Where(p => p.ContainerCode == containerModel.ContainerCode && p.BindStatus == CommonStatus.ENABLE)
                    .OrderByDescending(p => p.CreatedTime)
                    .ProjectToType<WmsMaterialContainer>().ToListAsync();
            return XnRestfulResultProvider.RESTfulResult(GetContainerOutputModel);
        }
//            var GetContainerOutputModel = new GetContainerOutput()
//            {
//                WmsContainer = containerModel.Adapt<WmsContainerDto>(),
//                ContainerCode = containerModel.ContainerCode,
//            };
//            //获取组盘数据
//            GetContainerOutputModel.WmsMaterials = await _wmsMaterialContainerRep
//                    .Where(p => p.ContainerCode == containerModel.ContainerCode && p.BindStatus == CommonStatus.ENABLE)
//                    .OrderByDescending(p => p.CreatedTime)
//                    .ProjectToType<WmsMaterialContainer>().ToListAsync();
//            return XnRestfulResultProvider.RESTfulResult(GetContainerOutputModel);
//        }
        /// <summary>
        /// é€šè¿‡å•据号获取明细
        /// </summary>
        /// <returns></returns>
        [HttpGet("PadGetMaterial")]
        [UnifyResult(typeof(List<PadGetMaterialOutput>))]
        public async Task<object> PadGetMaterial([FromQuery] PadGetMaterialInput input)
        {
            // æŸ¥è¯¢å•据小类是“生产入库”的Id
            var wmsOrderType = await _wmsOrderTypeRep.FirstOrDefaultAsync(z => z.Name.Contains("生产入库"));
            //获取主表
            var wmsOrders = await _wmsOrderRep.DetachedEntities
                                     .Where(u => u.NO == input.NO && u.OrderStatus == OrderStatusEnum.YIXIAFA && u.OrderLargeCategory == wmsOrderType.Pid && u.OrderSubclass == wmsOrderType.Id)
                                     .FirstOrDefaultAsync();
            if (wmsOrders == null) return XnRestfulResultProvider.RESTfulMesaage("单据不存在或未下发!");
            var wmsOrderDetailList =await _wmsOrderDetailsRep.Where(x=>x.OrderId == wmsOrders.Id)
                                          .ProjectToType<PadGetMaterialOutput>()
                                          .ToADPagedListAsync(input.PageNo, input.PageSize);
            return XnRestfulResultProvider.RESTfulResult(wmsOrderDetailList);
        }
//        /// <summary>
//        /// é€šè¿‡å•据号获取明细
//        /// </summary>
//        /// <returns></returns>
//        [HttpGet("PadGetMaterial")]
//        [UnifyResult(typeof(List<PadGetMaterialOutput>))]
//        public async Task<object> PadGetMaterial([FromQuery] PadGetMaterialInput input)
//        {
//            // æŸ¥è¯¢å•据小类是“生产入库”的Id
//            var wmsOrderType = await _wmsOrderTypeRep.FirstOrDefaultAsync(z => z.Name.Contains("生产入库"));
//            //获取主表
//            var wmsOrders = await _wmsOrderRep.DetachedEntities
//                                     .Where(u => u.NO == input.NO && u.OrderStatus == OrderStatusEnum.YIXIAFA && u.OrderLargeCategory == wmsOrderType.Pid && u.OrderSubclass == wmsOrderType.Id)
//                                     .FirstOrDefaultAsync();
//            if (wmsOrders == null) return XnRestfulResultProvider.RESTfulMesaage("单据不存在或未下发!");
//            var wmsOrderDetailList =await _wmsOrderDetailsRep.Where(x=>x.OrderId == wmsOrders.Id)
//                                          .ProjectToType<PadGetMaterialOutput>()
//                                          .ToADPagedListAsync(input.PageNo, input.PageSize);
//            return XnRestfulResultProvider.RESTfulResult(wmsOrderDetailList);
//        }
        /// <summary>
        /// æ‰§è¡Œä»…收货操作(组盘)
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("GroupDisk")]
        [UnitOfWork]
        public async Task<GroupDiskOutput> GroupDisk(GroupDiskInput input)
        {
            //托盘信息
            var containerModel = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == input.ContainerCode && n.ContainerStatus != ContainerStatus.JINYONG);
            if (containerModel == null) throw Oops.Oh("托盘信息不存在!");
//        /// <summary>
//        /// æ‰§è¡Œä»…收货操作(组盘)
//        /// </summary>
//        /// <param name="input"></param>
//        /// <returns></returns>
//        [HttpPost("GroupDisk")]
//        [UnitOfWork]
//        public async Task<GroupDiskOutput> GroupDisk(GroupDiskInput input)
//        {
//            //托盘信息
//            var containerModel = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == input.ContainerCode && n.ContainerStatus != ContainerStatus.JINYONG);
//            if (containerModel == null) throw Oops.Oh("托盘信息不存在!");
            if (containerModel.ContainerStatus == ContainerStatus.FENJIAN) throw Oops.Oh("容器存在分拣信息!");
//            if (containerModel.ContainerStatus == ContainerStatus.FENJIAN) throw Oops.Oh("容器存在分拣信息!");
            if (containerModel.ContainerStatus == ContainerStatus.KUWEI) throw Oops.Oh("托盘存在库位中!");
//            if (containerModel.ContainerStatus == ContainerStatus.KUWEI) throw Oops.Oh("托盘存在库位中!");
            var isExit = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG && p.TaskStatus != TaskStatusEnum.QUXIAO);
            if (isExit) throw Oops.Oh("托盘存在未完成任务中!");
//            var isExit = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG && p.TaskStatus != TaskStatusEnum.QUXIAO);
//            if (isExit) throw Oops.Oh("托盘存在未完成任务中!");
            isExit = await _wmsContainerPlaceRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.ContainerPlaceStatus == CommonStatus.ENABLE);
            if (isExit) throw Oops.Oh("托盘存在库位中!");
//            isExit = await _wmsContainerPlaceRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.ContainerPlaceStatus == CommonStatus.ENABLE);
//            if (isExit) throw Oops.Oh("托盘存在库位中!");
            //组盘信息
            var WmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == input.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
//            //组盘信息
//            var WmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == input.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
            if (WmsMaterialContainerList.Count > 0) await _wmsMaterialContainerRep.DeleteAsync(WmsMaterialContainerList);
//            if (WmsMaterialContainerList.Count > 0) await _wmsMaterialContainerRep.DeleteAsync(WmsMaterialContainerList);
            //修改托盘状态
            containerModel.ContainerStatus = ContainerStatus.ZUPANG;
            await _wmsContainerRep.UpdateAsync(containerModel);
//            //修改托盘状态
//            containerModel.ContainerStatus = ContainerStatus.ZUPANG;
//            await _wmsContainerRep.UpdateAsync(containerModel);
            //组盘单据
            var orderNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString();
            if (input.WmsMaterials.Count >0)//有物料的情况
            {
                foreach (var item in input.WmsMaterials)
                {
                    var bindentranceModel = item.Adapt<WmsMaterialContainer>();
                    bindentranceModel.MaterialName = item.Materialname;
                    bindentranceModel.MaterialNo = item.Materialcode;
                    bindentranceModel.MaterialId = 4567;//暂定
                    bindentranceModel.ContainerId = containerModel.Id;
                    bindentranceModel.ContainerCode = containerModel.ContainerCode;
                    bindentranceModel.MaterialBatch = "N/A";
                    bindentranceModel.MaterialSpec = "N/A";
                    bindentranceModel.BindQuantity = item.Qty;
                    bindentranceModel.BindStatus = CommonStatus.ENABLE;
                    bindentranceModel.OrderNo = orderNo;
                    bindentranceModel.MaterialDensity = "N/A";
                    bindentranceModel.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                    await _wmsMaterialContainerRep.InsertAsync(bindentranceModel);
                }
            }
            //else//空托入库的情况
            //{
            //    // åˆ›å»ºæ–°ç»„盘记录
            //    var bindentranceModel = new WmsMaterialContainer();
            //    bindentranceModel.MaterialName = "空托";
            //    bindentranceModel.MaterialNo = containerModel.ContainerCode;
            //    bindentranceModel.MaterialId = 55555;//暂定
            //    bindentranceModel.ContainerId = containerModel.Id;
            //    bindentranceModel.ContainerCode = containerModel.ContainerCode;
            //    bindentranceModel.MaterialBatch = "N/A";
            //    bindentranceModel.MaterialSpec = containerModel.SpecLength + "*" + containerModel.SpecWidth;
            //    bindentranceModel.BindQuantity = 1;
            //    bindentranceModel.BindStatus = CommonStatus.ENABLE;
            //    bindentranceModel.OrderNo = orderNo;
            //    bindentranceModel.MaterialDensity = "N/A";
            //    bindentranceModel.Id = YitIdHelper.NextId();
            //    await _wmsMaterialContainerRep.InsertNowAsync(bindentranceModel);
            //}
            return new GroupDiskOutput()
            {
                Containercode = input.ContainerCode,
                OrderNo = orderNo
            };
        }
//            //组盘单据
//            var orderNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString();
//            if (input.WmsMaterials.Count >0)//有物料的情况
//            {
//                foreach (var item in input.WmsMaterials)
//                {
//                    var bindentranceModel = item.Adapt<WmsMaterialContainer>();
//                    bindentranceModel.MaterialName = item.Materialname;
//                    bindentranceModel.MaterialNo = item.Materialcode;
//                    bindentranceModel.MaterialId = 4567;//暂定
//                    bindentranceModel.ContainerId = containerModel.Id;
//                    bindentranceModel.ContainerCode = containerModel.ContainerCode;
//                    bindentranceModel.MaterialBatch = "N/A";
//                    bindentranceModel.MaterialSpec = "N/A";
//                    bindentranceModel.BindQuantity = item.Qty;
//                    bindentranceModel.BindStatus = CommonStatus.ENABLE;
//                    bindentranceModel.OrderNo = orderNo;
//                    bindentranceModel.MaterialDensity = "N/A";
//                    bindentranceModel.Id = Yitter.IdGenerator.YitIdHelper.NextId();
//                    await _wmsMaterialContainerRep.InsertAsync(bindentranceModel);
//                }
//            }
//            //else//空托入库的情况
//            //{
//            //    // åˆ›å»ºæ–°ç»„盘记录
//            //    var bindentranceModel = new WmsMaterialContainer();
//            //    bindentranceModel.MaterialName = "空托";
//            //    bindentranceModel.MaterialNo = containerModel.ContainerCode;
//            //    bindentranceModel.MaterialId = 55555;//暂定
//            //    bindentranceModel.ContainerId = containerModel.Id;
//            //    bindentranceModel.ContainerCode = containerModel.ContainerCode;
//            //    bindentranceModel.MaterialBatch = "N/A";
//            //    bindentranceModel.MaterialSpec = containerModel.SpecLength + "*" + containerModel.SpecWidth;
//            //    bindentranceModel.BindQuantity = 1;
//            //    bindentranceModel.BindStatus = CommonStatus.ENABLE;
//            //    bindentranceModel.OrderNo = orderNo;
//            //    bindentranceModel.MaterialDensity = "N/A";
//            //    bindentranceModel.Id = YitIdHelper.NextId();
//            //    await _wmsMaterialContainerRep.InsertNowAsync(bindentranceModel);
//            //}
//            return new GroupDiskOutput()
//            {
//                Containercode = input.ContainerCode,
//                OrderNo = orderNo
//            };
//        }
        /// <summary>
        /// æäº¤å…¥åº“
        /// </summary>
        /// <returns></returns>
        [HttpPost("PdaInWarehouse")]
        [UnitOfWork]
        public async Task PdaInWarehouse([FromBody] PdaInWarehouseInput input)
        {
//        /// <summary>
//        /// æäº¤å…¥åº“
//        /// </summary>
//        /// <returns></returns>
//        [HttpPost("PdaInWarehouse")]
//        [UnitOfWork]
//        public async Task PdaInWarehouse([FromBody] PdaInWarehouseInput input)
//        {
            //检查托盘
            var containerModel = await _wmsContainerRep.FirstOrDefaultAsync(p => p.ContainerCode == input.ContainerCode && p.ContainerStatus != ContainerStatus.JINYONG);
            if (containerModel == null) throw Oops.Oh("托盘不存在!");
//            //检查托盘
//            var containerModel = await _wmsContainerRep.FirstOrDefaultAsync(p => p.ContainerCode == input.ContainerCode && p.ContainerStatus != ContainerStatus.JINYONG);
//            if (containerModel == null) throw Oops.Oh("托盘不存在!");
            if (containerModel.ContainerStatus == ContainerStatus.FENJIAN) throw Oops.Oh("容器存在分拣信息!");
//            if (containerModel.ContainerStatus == ContainerStatus.FENJIAN) throw Oops.Oh("容器存在分拣信息!");
            var isExit = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG && p.TaskStatus != TaskStatusEnum.QUXIAO);
            if (isExit) throw Oops.Oh("托盘存在未完成任务中!");
//            var isExit = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG && p.TaskStatus != TaskStatusEnum.QUXIAO);
//            if (isExit) throw Oops.Oh("托盘存在未完成任务中!");
            var isInPlace = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == input.ContainerCode && n.ContainerStatus == ContainerStatus.KUWEI);
            if (isInPlace != null) throw Oops.Oh("托盘存在库位中!");
//            var isInPlace = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == input.ContainerCode && n.ContainerStatus == ContainerStatus.KUWEI);
//            if (isInPlace != null) throw Oops.Oh("托盘存在库位中!");
            isExit = await _wmsContainerPlaceRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.ContainerPlaceStatus == CommonStatus.ENABLE);
            if (isExit) throw Oops.Oh("托盘存在库位中!");
//            isExit = await _wmsContainerPlaceRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.ContainerPlaceStatus == CommonStatus.ENABLE);
//            if (isExit) throw Oops.Oh("托盘存在库位中!");
            //删除组盘信息
            var oldwmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == input.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
//            //删除组盘信息
//            var oldwmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == input.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
            if (oldwmsMaterialContainerList.Count > 0) await _wmsMaterialContainerRep.DeleteAsync(oldwmsMaterialContainerList);
//            if (oldwmsMaterialContainerList.Count > 0) await _wmsMaterialContainerRep.DeleteAsync(oldwmsMaterialContainerList);
            //组盘单据号
            var orderNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString();
            if (input.WmsMaterials!=null || input.WmsMaterials.Count <= 0)//有物料的情况
            {
                foreach (var item in input.WmsMaterials)
                {
                    var bindentranceModel = item.Adapt<WmsMaterialContainer>();
                    bindentranceModel.MaterialName = item.Materialname;
                    bindentranceModel.MaterialNo = item.Materialcode;
                    bindentranceModel.MaterialId = 4567;
                    bindentranceModel.ContainerId = containerModel.Id;
                    bindentranceModel.ContainerCode = containerModel.ContainerCode;
                    bindentranceModel.MaterialBatch = "N/A";
                    bindentranceModel.MaterialSpec = "N/A";
                    bindentranceModel.BindQuantity = item.Qty;
                    bindentranceModel.BindStatus = CommonStatus.ENABLE;
                    bindentranceModel.OrderNo = orderNo;
                    bindentranceModel.MaterialDensity = "N/A";
                    bindentranceModel.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                    await _wmsMaterialContainerRep.InsertAsync(bindentranceModel);
                    ////更改明细入库数量
                    //var wmsOrderDetailsModal = await _wmsOrderDetailsRep.FirstOrDefaultAsync(x => x.Id == item.Id);
                    //wmsOrderDetailsModal.InventoryQty += item.Qty;
                }
            }
            //else//空托入库的情况
            //{
            //    // åˆ›å»ºæ–°ç»„盘记录
            //    var bindentranceModel = new WmsMaterialContainer();
            //    bindentranceModel.MaterialName = "空托";
            //    bindentranceModel.MaterialNo = containerModel.ContainerCode;
            //    bindentranceModel.MaterialId = 55555;//暂定
            //    bindentranceModel.ContainerId = containerModel.Id;
            //    bindentranceModel.ContainerCode = containerModel.ContainerCode;
            //    bindentranceModel.MaterialBatch = "N/A";//根据物料码解析
            //    bindentranceModel.MaterialSpec = containerModel.SpecLength + "*" + containerModel.SpecWidth;
            //    bindentranceModel.BindQuantity = 1;
            //    bindentranceModel.BindStatus = CommonStatus.ENABLE;
            //    bindentranceModel.OrderNo = orderNo;
            //    bindentranceModel.MaterialDensity = "N/A";//根据物料码解析
            //    bindentranceModel.Id = YitIdHelper.NextId();
            //    await _wmsMaterialContainerRep.InsertNowAsync(bindentranceModel);
            //}
//            //组盘单据号
//            var orderNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString();
//            if (input.WmsMaterials!=null || input.WmsMaterials.Count <= 0)//有物料的情况
//            {
//                foreach (var item in input.WmsMaterials)
//                {
//                    var bindentranceModel = item.Adapt<WmsMaterialContainer>();
//                    bindentranceModel.MaterialName = item.Materialname;
//                    bindentranceModel.MaterialNo = item.Materialcode;
//                    bindentranceModel.MaterialId = 4567;
//                    bindentranceModel.ContainerId = containerModel.Id;
//                    bindentranceModel.ContainerCode = containerModel.ContainerCode;
//                    bindentranceModel.MaterialBatch = "N/A";
//                    bindentranceModel.MaterialSpec = "N/A";
//                    bindentranceModel.BindQuantity = item.Qty;
//                    bindentranceModel.BindStatus = CommonStatus.ENABLE;
//                    bindentranceModel.OrderNo = orderNo;
//                    bindentranceModel.MaterialDensity = "N/A";
//                    bindentranceModel.Id = Yitter.IdGenerator.YitIdHelper.NextId();
//                    await _wmsMaterialContainerRep.InsertAsync(bindentranceModel);
//                    ////更改明细入库数量
//                    //var wmsOrderDetailsModal = await _wmsOrderDetailsRep.FirstOrDefaultAsync(x => x.Id == item.Id);
//                    //wmsOrderDetailsModal.InventoryQty += item.Qty;
//                }
//            }
//            //else//空托入库的情况
//            //{
//            //    // åˆ›å»ºæ–°ç»„盘记录
//            //    var bindentranceModel = new WmsMaterialContainer();
//            //    bindentranceModel.MaterialName = "空托";
//            //    bindentranceModel.MaterialNo = containerModel.ContainerCode;
//            //    bindentranceModel.MaterialId = 55555;//暂定
//            //    bindentranceModel.ContainerId = containerModel.Id;
//            //    bindentranceModel.ContainerCode = containerModel.ContainerCode;
//            //    bindentranceModel.MaterialBatch = "N/A";//根据物料码解析
//            //    bindentranceModel.MaterialSpec = containerModel.SpecLength + "*" + containerModel.SpecWidth;
//            //    bindentranceModel.BindQuantity = 1;
//            //    bindentranceModel.BindStatus = CommonStatus.ENABLE;
//            //    bindentranceModel.OrderNo = orderNo;
//            //    bindentranceModel.MaterialDensity = "N/A";//根据物料码解析
//            //    bindentranceModel.Id = YitIdHelper.NextId();
//            //    await _wmsMaterialContainerRep.InsertNowAsync(bindentranceModel);
//            //}
            ////修改托盘状态
            //containerModel.ContainerStatus = ContainerStatus.ZUPANG;
            //await _wmsContainerRep.UpdateAsync(containerModel);
            //分配巷道
            var Aisle = 1;
//            ////修改托盘状态
//            //containerModel.ContainerStatus = ContainerStatus.ZUPANG;
//            //await _wmsContainerRep.UpdateAsync(containerModel);
//            //分配巷道
//            var Aisle = 1;
            //任务
            var takmodel = new WmsTask()
            {
                TaskNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString(),
                TaskModel = TaskModel.QUANZIDONG,
                TaskType = TaskType.RUKU,
                TaskLevel = 1,
                TaskStatus = TaskStatusEnum.ZHIXINGZHONG,
                OrderNo = orderNo,
                OrderDetailsId = 0,
                ContainerCode = input.ContainerCode,
                SourcePlace = "入库口",//现场情况为空
                ToPlace = "", //目标位
                AreaName = "绝缘立库",
                IsRead = true, //WCS是否可以读取
                SendTimes = 1, //发送次数
                Aisle = Aisle,// æ ¹æ®åº“区id获取几号提升机,测试使用一号
                TaskDodeviceStatus = TaskDodeviceStatusEnum.W
            };
            if (input.WmsMaterials == null || input.WmsMaterials.Count <= 0) {
                takmodel.Description = "空托";
            }
            else
            {
                takmodel.Description = "物料";
            };
//            //任务
//            var takmodel = new WmsTask()
//            {
//                TaskNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString(),
//                TaskModel = TaskModel.QUANZIDONG,
//                TaskType = TaskType.RUKU,
//                TaskLevel = 1,
//                TaskStatus = TaskStatusEnum.ZHIXINGZHONG,
//                OrderNo = orderNo,
//                OrderDetailsId = 0,
//                ContainerCode = input.ContainerCode,
//                SourcePlace = "入库口",//现场情况为空
//                ToPlace = "", //目标位
//                AreaName = "绝缘立库",
//                IsRead = true, //WCS是否可以读取
//                SendTimes = 1, //发送次数
//                Aisle = Aisle,// æ ¹æ®åº“区id获取几号提升机,测试使用一号
//                TaskDodeviceStatus = TaskDodeviceStatusEnum.W
//            };
//            if (input.WmsMaterials == null || input.WmsMaterials.Count <= 0) {
//                takmodel.Description = "空托";
//            }
//            else
//            {
//                takmodel.Description = "物料";
//            };
            
            await _wmsTaskRep.InsertAsync(takmodel);
        }
    }
}
//            await _wmsTaskRep.InsertAsync(takmodel);
//        }
//    }
//}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsPda/WmsStockReturnWarehouse/WmsStockReturnWarehouseService.cs
@@ -1,317 +1,317 @@
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using Admin.NET.Core;
using Yitter.IdGenerator;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Mvc.RazorPages;
//using Furion.DatabaseAccessor;
//using Furion.DependencyInjection;
//using Furion.DynamicApiController;
//using Furion.FriendlyException;
//using Mapster;
//using Microsoft.AspNetCore.Authorization;
//using Microsoft.AspNetCore.Mvc;
//using Microsoft.EntityFrameworkCore;
//using System.Linq.Dynamic.Core;
//using Admin.NET.Core;
//using Yitter.IdGenerator;
//using Microsoft.Extensions.Logging;
//using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Admin.NET.Application
{
    /// <summary>
    /// Pda物料退库
    /// </summary>
    [ApiDescriptionSettings("Pda物料退库", Name = "WmsStockReturnWarehouse", Order = 100)]
    [Route("api/[Controller]")]
    public class WmsStockReturnWarehouseService : IDynamicApiController, ITransient
    {
        private readonly IRepository<WmsStockReturnOrder, MasterDbContextLocator> _wmsStockReturnOrderRep;
        private readonly IRepository<WmsStockReturnOrderDetails, MasterDbContextLocator> _wmsStockReturnOrderDetailsRep;
        private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep;
        private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep;
        private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep;
        private readonly IRepository<WmsWarehouseEntrance, MasterDbContextLocator> _wmsWarehouseEntranceRep;
        private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep;
        private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep;
        private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep;
        private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep;
        private readonly IRepository<WmsOrderType, MasterDbContextLocator> _wmsOrderTypeRep;
//namespace Admin.NET.Application
//{
//    /// <summary>
//    /// Pda物料退库
//    /// </summary>
//    [ApiDescriptionSettings("Pda物料退库", Name = "WmsStockReturnWarehouse", Order = 100)]
//    [Route("api/[Controller]")]
//    public class WmsStockReturnWarehouseService : IDynamicApiController, ITransient
//    {
//        private readonly IRepository<WmsStockReturnOrder, MasterDbContextLocator> _wmsStockReturnOrderRep;
//        private readonly IRepository<WmsStockReturnOrderDetails, MasterDbContextLocator> _wmsStockReturnOrderDetailsRep;
//        private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep;
//        private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep;
//        private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep;
//        private readonly IRepository<WmsWarehouseEntrance, MasterDbContextLocator> _wmsWarehouseEntranceRep;
//        private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep;
//        private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep;
//        private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep;
//        private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep;
//        private readonly IRepository<WmsOrderType, MasterDbContextLocator> _wmsOrderTypeRep;
        /// <summary>
        /// æž„造函数
        /// </summary>
        public WmsStockReturnWarehouseService(
            IRepository<WmsStockReturnOrder, MasterDbContextLocator> wmsStockReturnOrderRep,
            IRepository<WmsStockReturnOrderDetails, MasterDbContextLocator> wmsStockReturnOrderDetailsRep,
            IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep,
            IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep,
            IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep,
            IRepository<WmsWarehouseEntrance, MasterDbContextLocator> wmsWarehouseEntranceRep,
            IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep,
            IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep,
            IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep,
            IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep,
            IRepository<WmsOrderType, MasterDbContextLocator> wmsOrderTypeRep
        )
        {
            _wmsStockReturnOrderRep = wmsStockReturnOrderRep;
            _wmsStockReturnOrderDetailsRep = wmsStockReturnOrderDetailsRep;
            _wmsTaskRep = wmsTaskRep;
            _wmsPlaceRep = wmsPlaceRep;
            _wmsAreaRep = wmsAreaRep;
            _wmsWarehouseEntranceRep = wmsWarehouseEntranceRep;
            _wmsMaterialContainerRep = wmsMaterialContainerRep;
            _wmsContainerRep = wmsContainerRep;
            _wmsContainerPlaceRep = wmsContainerPlaceRep;
            _wmsMaterialStockRep = wmsMaterialStockRep;
            _wmsOrderTypeRep = wmsOrderTypeRep;
        }
//        /// <summary>
//        /// æž„造函数
//        /// </summary>
//        public WmsStockReturnWarehouseService(
//            IRepository<WmsStockReturnOrder, MasterDbContextLocator> wmsStockReturnOrderRep,
//            IRepository<WmsStockReturnOrderDetails, MasterDbContextLocator> wmsStockReturnOrderDetailsRep,
//            IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep,
//            IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep,
//            IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep,
//            IRepository<WmsWarehouseEntrance, MasterDbContextLocator> wmsWarehouseEntranceRep,
//            IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep,
//            IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep,
//            IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep,
//            IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep,
//            IRepository<WmsOrderType, MasterDbContextLocator> wmsOrderTypeRep
//        )
//        {
//            _wmsStockReturnOrderRep = wmsStockReturnOrderRep;
//            _wmsStockReturnOrderDetailsRep = wmsStockReturnOrderDetailsRep;
//            _wmsTaskRep = wmsTaskRep;
//            _wmsPlaceRep = wmsPlaceRep;
//            _wmsAreaRep = wmsAreaRep;
//            _wmsWarehouseEntranceRep = wmsWarehouseEntranceRep;
//            _wmsMaterialContainerRep = wmsMaterialContainerRep;
//            _wmsContainerRep = wmsContainerRep;
//            _wmsContainerPlaceRep = wmsContainerPlaceRep;
//            _wmsMaterialStockRep = wmsMaterialStockRep;
//            _wmsOrderTypeRep = wmsOrderTypeRep;
//        }
        /// <summary>
        /// èŽ·å–æ‰˜ç›˜
        /// </summary>
        /// <returns></returns>
        [HttpGet("GetContainer")]
        [UnifyResult(typeof(StockReturnGetContainerOutput))]
        public async Task<object> CheckTray([FromQuery] StockReturnGetContainerInput input)
        {
            var containerModel = await _wmsContainerRep.DetachedEntities.Where(z => z.ContainerCode == input.ContainerCode).FirstOrDefaultAsync();
            //如果托盘不存在则添加一个
            if (containerModel == null) {
                var ContainerInfo = input.Adapt<WmsContainer>();
                ContainerInfo.ContainerStatus = ContainerStatus.KOUXIAN;
                ContainerInfo.AssetNo = "N/A";
                ContainerInfo.ContainerCategory = ContainerCategory.GZP;
                ContainerInfo.ErpNo = "N/A";
                ContainerInfo.IsVirtually = YesOrNot.N;
                ContainerInfo.WorkShopType = LesWorkShopType.FAPAOCHEJIAN;
                await _wmsContainerRep.InsertNowAsync(ContainerInfo);
                containerModel = ContainerInfo;
            }
//        /// <summary>
//        /// èŽ·å–æ‰˜ç›˜
//        /// </summary>
//        /// <returns></returns>
//        [HttpGet("GetContainer")]
//        [UnifyResult(typeof(StockReturnGetContainerOutput))]
//        public async Task<object> CheckTray([FromQuery] StockReturnGetContainerInput input)
//        {
//            var containerModel = await _wmsContainerRep.DetachedEntities.Where(z => z.ContainerCode == input.ContainerCode).FirstOrDefaultAsync();
//            //如果托盘不存在则添加一个
//            if (containerModel == null) {
//                var ContainerInfo = input.Adapt<WmsContainer>();
//                ContainerInfo.ContainerStatus = ContainerStatus.KOUXIAN;
//                ContainerInfo.AssetNo = "N/A";
//                ContainerInfo.ContainerCategory = ContainerCategory.GZP;
//                ContainerInfo.ErpNo = "N/A";
//                ContainerInfo.IsVirtually = YesOrNot.N;
//                ContainerInfo.WorkShopType = LesWorkShopType.FAPAOCHEJIAN;
//                await _wmsContainerRep.InsertNowAsync(ContainerInfo);
//                containerModel = ContainerInfo;
//            }
            var isExit = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG  && p.TaskStatus != TaskStatusEnum.QUXIAO);
            if (isExit) return XnRestfulResultProvider.RESTfulMesaage("托盘存在未完成任务!");
//            var isExit = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG  && p.TaskStatus != TaskStatusEnum.QUXIAO);
//            if (isExit) return XnRestfulResultProvider.RESTfulMesaage("托盘存在未完成任务!");
            isExit = await _wmsContainerPlaceRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.ContainerPlaceStatus == CommonStatus.ENABLE);
            if (isExit) return XnRestfulResultProvider.RESTfulMesaage("托盘存在库位中!");
//            isExit = await _wmsContainerPlaceRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.ContainerPlaceStatus == CommonStatus.ENABLE);
//            if (isExit) return XnRestfulResultProvider.RESTfulMesaage("托盘存在库位中!");
            var GetContainerOutputModel = new GetContainerOutput()
            {
                WmsContainer = containerModel.Adapt<WmsContainerDto>(),
                ContainerCode = containerModel.ContainerCode,
            };
            //获取组盘数据
            GetContainerOutputModel.WmsMaterials = await _wmsMaterialContainerRep
                    .Where(p => p.ContainerCode == containerModel.ContainerCode && p.BindStatus == CommonStatus.ENABLE)
                    .OrderByDescending(p => p.CreatedTime)
                    .ProjectToType<WmsMaterialContainer>().ToListAsync();
            return XnRestfulResultProvider.RESTfulResult(GetContainerOutputModel);
        }
//            var GetContainerOutputModel = new GetContainerOutput()
//            {
//                WmsContainer = containerModel.Adapt<WmsContainerDto>(),
//                ContainerCode = containerModel.ContainerCode,
//            };
//            //获取组盘数据
//            GetContainerOutputModel.WmsMaterials = await _wmsMaterialContainerRep
//                    .Where(p => p.ContainerCode == containerModel.ContainerCode && p.BindStatus == CommonStatus.ENABLE)
//                    .OrderByDescending(p => p.CreatedTime)
//                    .ProjectToType<WmsMaterialContainer>().ToListAsync();
//            return XnRestfulResultProvider.RESTfulResult(GetContainerOutputModel);
//        }
        /// <summary>
        /// é€šè¿‡å•据号获取明细
        /// </summary>
        /// <returns></returns>
        [HttpGet("PadGetMaterial")]
        [UnifyResult(typeof(List<StockReturnPadGetMaterialOutput>))]
        public async Task<object> PadGetMaterial([FromQuery] StockReturnPadGetMaterialInput input)
        {
            // æŸ¥è¯¢å•据小类是“物料退库”的Id
            var wmsOrderType = await _wmsOrderTypeRep.FirstOrDefaultAsync(z => z.Name.Contains("物料退库"));
            //获取主表
            var wmsOrders = await _wmsStockReturnOrderRep.DetachedEntities
                                     .Where(u => u.NO == input.NO && u.OrderStatus == OrderStatusEnum.YIXIAFA && u.OrderLargeCategory == wmsOrderType.Pid && u.OrderSubclass == wmsOrderType.Id)
                                     .FirstOrDefaultAsync();
            if (wmsOrders == null) return XnRestfulResultProvider.RESTfulMesaage("单据不存在或未下发!");
            var wmsOrderDetailList =await _wmsStockReturnOrderDetailsRep.Where(x=>x.OrderId == wmsOrders.Id)
                                          .ProjectToType<StockReturnPadGetMaterialOutput>()
                                          .ToADPagedListAsync(input.PageNo, input.PageSize);
            return XnRestfulResultProvider.RESTfulResult(wmsOrderDetailList);
        }
//        /// <summary>
//        /// é€šè¿‡å•据号获取明细
//        /// </summary>
//        /// <returns></returns>
//        [HttpGet("PadGetMaterial")]
//        [UnifyResult(typeof(List<StockReturnPadGetMaterialOutput>))]
//        public async Task<object> PadGetMaterial([FromQuery] StockReturnPadGetMaterialInput input)
//        {
//            // æŸ¥è¯¢å•据小类是“物料退库”的Id
//            var wmsOrderType = await _wmsOrderTypeRep.FirstOrDefaultAsync(z => z.Name.Contains("物料退库"));
//            //获取主表
//            var wmsOrders = await _wmsStockReturnOrderRep.DetachedEntities
//                                     .Where(u => u.NO == input.NO && u.OrderStatus == OrderStatusEnum.YIXIAFA && u.OrderLargeCategory == wmsOrderType.Pid && u.OrderSubclass == wmsOrderType.Id)
//                                     .FirstOrDefaultAsync();
//            if (wmsOrders == null) return XnRestfulResultProvider.RESTfulMesaage("单据不存在或未下发!");
//            var wmsOrderDetailList =await _wmsStockReturnOrderDetailsRep.Where(x=>x.OrderId == wmsOrders.Id)
//                                          .ProjectToType<StockReturnPadGetMaterialOutput>()
//                                          .ToADPagedListAsync(input.PageNo, input.PageSize);
//            return XnRestfulResultProvider.RESTfulResult(wmsOrderDetailList);
//        }
        /// <summary>
        /// æ‰§è¡Œä»…收货操作(组盘)
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("GroupDisk")]
        [UnitOfWork]
        public async Task<StockReturnGroupDiskOutput> GroupDisk(StockReturnGroupDiskInput input)
        {
            //托盘信息
            var containerModel = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == input.ContainerCode && n.ContainerStatus != ContainerStatus.JINYONG);
            if (containerModel == null) throw Oops.Oh("托盘信息不存在!");
//        /// <summary>
//        /// æ‰§è¡Œä»…收货操作(组盘)
//        /// </summary>
//        /// <param name="input"></param>
//        /// <returns></returns>
//        [HttpPost("GroupDisk")]
//        [UnitOfWork]
//        public async Task<StockReturnGroupDiskOutput> GroupDisk(StockReturnGroupDiskInput input)
//        {
//            //托盘信息
//            var containerModel = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == input.ContainerCode && n.ContainerStatus != ContainerStatus.JINYONG);
//            if (containerModel == null) throw Oops.Oh("托盘信息不存在!");
            if (containerModel.ContainerStatus == ContainerStatus.FENJIAN) throw Oops.Oh("容器存在分拣信息!");
//            if (containerModel.ContainerStatus == ContainerStatus.FENJIAN) throw Oops.Oh("容器存在分拣信息!");
            if (containerModel.ContainerStatus == ContainerStatus.KUWEI) throw Oops.Oh("托盘存在库位中!");
//            if (containerModel.ContainerStatus == ContainerStatus.KUWEI) throw Oops.Oh("托盘存在库位中!");
            var isExit = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG && p.TaskStatus != TaskStatusEnum.QUXIAO);
            if (isExit) throw Oops.Oh("托盘存在未完成任务中!");
//            var isExit = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG && p.TaskStatus != TaskStatusEnum.QUXIAO);
//            if (isExit) throw Oops.Oh("托盘存在未完成任务中!");
            isExit = await _wmsContainerPlaceRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.ContainerPlaceStatus == CommonStatus.ENABLE);
            if (isExit) throw Oops.Oh("托盘存在库位中!");
//            isExit = await _wmsContainerPlaceRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.ContainerPlaceStatus == CommonStatus.ENABLE);
//            if (isExit) throw Oops.Oh("托盘存在库位中!");
            //组盘信息
            var WmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == input.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
//            //组盘信息
//            var WmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == input.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
            if (WmsMaterialContainerList.Count > 0) await _wmsMaterialContainerRep.DeleteAsync(WmsMaterialContainerList);
//            if (WmsMaterialContainerList.Count > 0) await _wmsMaterialContainerRep.DeleteAsync(WmsMaterialContainerList);
            //修改托盘状态
            containerModel.ContainerStatus = ContainerStatus.ZUPANG;
            await _wmsContainerRep.UpdateAsync(containerModel);
//            //修改托盘状态
//            containerModel.ContainerStatus = ContainerStatus.ZUPANG;
//            await _wmsContainerRep.UpdateAsync(containerModel);
            //组盘单据
            var orderNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString();
            if (input.WmsMaterials.Count >0)//有物料的情况
            {
                foreach (var item in input.WmsMaterials)
                {
                    var bindentranceModel = item.Adapt<WmsMaterialContainer>();
                    bindentranceModel.MaterialName = item.Materialname;
                    bindentranceModel.MaterialNo = item.Materialcode;
                    bindentranceModel.MaterialId = 4567;//暂定
                    bindentranceModel.ContainerId = containerModel.Id;
                    bindentranceModel.ContainerCode = containerModel.ContainerCode;
                    bindentranceModel.MaterialBatch = "N/A";
                    bindentranceModel.MaterialSpec = "N/A";
                    bindentranceModel.BindQuantity = item.Qty;
                    bindentranceModel.BindStatus = CommonStatus.ENABLE;
                    bindentranceModel.OrderNo = orderNo;
                    bindentranceModel.MaterialDensity = "N/A";
                    bindentranceModel.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                    await _wmsMaterialContainerRep.InsertAsync(bindentranceModel);
                }
            }
            //else//空托入库的情况
            //{
            //    // åˆ›å»ºæ–°ç»„盘记录
            //    var bindentranceModel = new WmsMaterialContainer();
            //    bindentranceModel.MaterialName = "空托";
            //    bindentranceModel.MaterialNo = containerModel.ContainerCode;
            //    bindentranceModel.MaterialId = 55555;//暂定
            //    bindentranceModel.ContainerId = containerModel.Id;
            //    bindentranceModel.ContainerCode = containerModel.ContainerCode;
            //    bindentranceModel.MaterialBatch = "N/A";
            //    bindentranceModel.MaterialSpec = containerModel.SpecLength + "*" + containerModel.SpecWidth;
            //    bindentranceModel.BindQuantity = 1;
            //    bindentranceModel.BindStatus = CommonStatus.ENABLE;
            //    bindentranceModel.OrderNo = orderNo;
            //    bindentranceModel.MaterialDensity = "N/A";
            //    bindentranceModel.Id = YitIdHelper.NextId();
            //    await _wmsMaterialContainerRep.InsertNowAsync(bindentranceModel);
            //}
            return new StockReturnGroupDiskOutput()
            {
                Containercode = input.ContainerCode,
                OrderNo = orderNo
            };
        }
//            //组盘单据
//            var orderNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString();
//            if (input.WmsMaterials.Count >0)//有物料的情况
//            {
//                foreach (var item in input.WmsMaterials)
//                {
//                    var bindentranceModel = item.Adapt<WmsMaterialContainer>();
//                    bindentranceModel.MaterialName = item.Materialname;
//                    bindentranceModel.MaterialNo = item.Materialcode;
//                    bindentranceModel.MaterialId = 4567;//暂定
//                    bindentranceModel.ContainerId = containerModel.Id;
//                    bindentranceModel.ContainerCode = containerModel.ContainerCode;
//                    bindentranceModel.MaterialBatch = "N/A";
//                    bindentranceModel.MaterialSpec = "N/A";
//                    bindentranceModel.BindQuantity = item.Qty;
//                    bindentranceModel.BindStatus = CommonStatus.ENABLE;
//                    bindentranceModel.OrderNo = orderNo;
//                    bindentranceModel.MaterialDensity = "N/A";
//                    bindentranceModel.Id = Yitter.IdGenerator.YitIdHelper.NextId();
//                    await _wmsMaterialContainerRep.InsertAsync(bindentranceModel);
//                }
//            }
//            //else//空托入库的情况
//            //{
//            //    // åˆ›å»ºæ–°ç»„盘记录
//            //    var bindentranceModel = new WmsMaterialContainer();
//            //    bindentranceModel.MaterialName = "空托";
//            //    bindentranceModel.MaterialNo = containerModel.ContainerCode;
//            //    bindentranceModel.MaterialId = 55555;//暂定
//            //    bindentranceModel.ContainerId = containerModel.Id;
//            //    bindentranceModel.ContainerCode = containerModel.ContainerCode;
//            //    bindentranceModel.MaterialBatch = "N/A";
//            //    bindentranceModel.MaterialSpec = containerModel.SpecLength + "*" + containerModel.SpecWidth;
//            //    bindentranceModel.BindQuantity = 1;
//            //    bindentranceModel.BindStatus = CommonStatus.ENABLE;
//            //    bindentranceModel.OrderNo = orderNo;
//            //    bindentranceModel.MaterialDensity = "N/A";
//            //    bindentranceModel.Id = YitIdHelper.NextId();
//            //    await _wmsMaterialContainerRep.InsertNowAsync(bindentranceModel);
//            //}
//            return new StockReturnGroupDiskOutput()
//            {
//                Containercode = input.ContainerCode,
//                OrderNo = orderNo
//            };
//        }
        /// <summary>
        /// æäº¤å…¥åº“
        /// </summary>
        /// <returns></returns>
        [HttpPost("PdaInWarehouse")]
        [UnitOfWork]
        public async Task PdaInWarehouse([FromBody] StockReturnPdaInWarehouseInput input)
        {
//        /// <summary>
//        /// æäº¤å…¥åº“
//        /// </summary>
//        /// <returns></returns>
//        [HttpPost("PdaInWarehouse")]
//        [UnitOfWork]
//        public async Task PdaInWarehouse([FromBody] StockReturnPdaInWarehouseInput input)
//        {
            //检查托盘
            var containerModel = await _wmsContainerRep.FirstOrDefaultAsync(p => p.ContainerCode == input.ContainerCode && p.ContainerStatus != ContainerStatus.JINYONG);
            if (containerModel == null) throw Oops.Oh("托盘不存在!");
//            //检查托盘
//            var containerModel = await _wmsContainerRep.FirstOrDefaultAsync(p => p.ContainerCode == input.ContainerCode && p.ContainerStatus != ContainerStatus.JINYONG);
//            if (containerModel == null) throw Oops.Oh("托盘不存在!");
            if (containerModel.ContainerStatus == ContainerStatus.FENJIAN) throw Oops.Oh("容器存在分拣信息!");
//            if (containerModel.ContainerStatus == ContainerStatus.FENJIAN) throw Oops.Oh("容器存在分拣信息!");
            var isExit = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG && p.TaskStatus != TaskStatusEnum.QUXIAO);
            if (isExit) throw Oops.Oh("托盘存在未完成任务中!");
//            var isExit = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG && p.TaskStatus != TaskStatusEnum.QUXIAO);
//            if (isExit) throw Oops.Oh("托盘存在未完成任务中!");
            var isInPlace = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == input.ContainerCode && n.ContainerStatus == ContainerStatus.KUWEI);
            if (isInPlace != null) throw Oops.Oh("托盘存在库位中!");
//            var isInPlace = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == input.ContainerCode && n.ContainerStatus == ContainerStatus.KUWEI);
//            if (isInPlace != null) throw Oops.Oh("托盘存在库位中!");
            isExit = await _wmsContainerPlaceRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.ContainerPlaceStatus == CommonStatus.ENABLE);
            if (isExit) throw Oops.Oh("托盘存在库位中!");
//            isExit = await _wmsContainerPlaceRep.AnyAsync(p => p.ContainerCode == containerModel.ContainerCode && p.ContainerPlaceStatus == CommonStatus.ENABLE);
//            if (isExit) throw Oops.Oh("托盘存在库位中!");
            //删除组盘信息
            var oldwmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == input.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
//            //删除组盘信息
//            var oldwmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == input.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
            if (oldwmsMaterialContainerList.Count > 0) await _wmsMaterialContainerRep.DeleteAsync(oldwmsMaterialContainerList);
//            if (oldwmsMaterialContainerList.Count > 0) await _wmsMaterialContainerRep.DeleteAsync(oldwmsMaterialContainerList);
            //组盘单据号
            var orderNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString();
            if (input.WmsMaterials!=null || input.WmsMaterials.Count <= 0)//有物料的情况
            {
                foreach (var item in input.WmsMaterials)
                {
                    var bindentranceModel = item.Adapt<WmsMaterialContainer>();
                    bindentranceModel.MaterialName = item.Materialname;
                    bindentranceModel.MaterialNo = item.Materialcode;
                    bindentranceModel.MaterialId = 4567;
                    bindentranceModel.ContainerId = containerModel.Id;
                    bindentranceModel.ContainerCode = containerModel.ContainerCode;
                    bindentranceModel.MaterialBatch = "N/A";
                    bindentranceModel.MaterialSpec = "N/A";
                    bindentranceModel.BindQuantity = item.Qty;
                    bindentranceModel.BindStatus = CommonStatus.ENABLE;
                    bindentranceModel.OrderNo = orderNo;
                    bindentranceModel.MaterialDensity = "N/A";
                    bindentranceModel.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                    await _wmsMaterialContainerRep.InsertAsync(bindentranceModel);
                    ////更改明细入库数量
                    //var wmsOrderDetailsModal = await _wmsOrderDetailsRep.FirstOrDefaultAsync(x => x.Id == item.Id);
                    //wmsOrderDetailsModal.InventoryQty += item.Qty;
                }
            }
            //else//空托入库的情况
            //{
            //    // åˆ›å»ºæ–°ç»„盘记录
            //    var bindentranceModel = new WmsMaterialContainer();
            //    bindentranceModel.MaterialName = "空托";
            //    bindentranceModel.MaterialNo = containerModel.ContainerCode;
            //    bindentranceModel.MaterialId = 55555;//暂定
            //    bindentranceModel.ContainerId = containerModel.Id;
            //    bindentranceModel.ContainerCode = containerModel.ContainerCode;
            //    bindentranceModel.MaterialBatch = "N/A";//根据物料码解析
            //    bindentranceModel.MaterialSpec = containerModel.SpecLength + "*" + containerModel.SpecWidth;
            //    bindentranceModel.BindQuantity = 1;
            //    bindentranceModel.BindStatus = CommonStatus.ENABLE;
            //    bindentranceModel.OrderNo = orderNo;
            //    bindentranceModel.MaterialDensity = "N/A";//根据物料码解析
            //    bindentranceModel.Id = YitIdHelper.NextId();
            //    await _wmsMaterialContainerRep.InsertNowAsync(bindentranceModel);
            //}
//            //组盘单据号
//            var orderNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString();
//            if (input.WmsMaterials!=null || input.WmsMaterials.Count <= 0)//有物料的情况
//            {
//                foreach (var item in input.WmsMaterials)
//                {
//                    var bindentranceModel = item.Adapt<WmsMaterialContainer>();
//                    bindentranceModel.MaterialName = item.Materialname;
//                    bindentranceModel.MaterialNo = item.Materialcode;
//                    bindentranceModel.MaterialId = 4567;
//                    bindentranceModel.ContainerId = containerModel.Id;
//                    bindentranceModel.ContainerCode = containerModel.ContainerCode;
//                    bindentranceModel.MaterialBatch = "N/A";
//                    bindentranceModel.MaterialSpec = "N/A";
//                    bindentranceModel.BindQuantity = item.Qty;
//                    bindentranceModel.BindStatus = CommonStatus.ENABLE;
//                    bindentranceModel.OrderNo = orderNo;
//                    bindentranceModel.MaterialDensity = "N/A";
//                    bindentranceModel.Id = Yitter.IdGenerator.YitIdHelper.NextId();
//                    await _wmsMaterialContainerRep.InsertAsync(bindentranceModel);
//                    ////更改明细入库数量
//                    //var wmsOrderDetailsModal = await _wmsOrderDetailsRep.FirstOrDefaultAsync(x => x.Id == item.Id);
//                    //wmsOrderDetailsModal.InventoryQty += item.Qty;
//                }
//            }
//            //else//空托入库的情况
//            //{
//            //    // åˆ›å»ºæ–°ç»„盘记录
//            //    var bindentranceModel = new WmsMaterialContainer();
//            //    bindentranceModel.MaterialName = "空托";
//            //    bindentranceModel.MaterialNo = containerModel.ContainerCode;
//            //    bindentranceModel.MaterialId = 55555;//暂定
//            //    bindentranceModel.ContainerId = containerModel.Id;
//            //    bindentranceModel.ContainerCode = containerModel.ContainerCode;
//            //    bindentranceModel.MaterialBatch = "N/A";//根据物料码解析
//            //    bindentranceModel.MaterialSpec = containerModel.SpecLength + "*" + containerModel.SpecWidth;
//            //    bindentranceModel.BindQuantity = 1;
//            //    bindentranceModel.BindStatus = CommonStatus.ENABLE;
//            //    bindentranceModel.OrderNo = orderNo;
//            //    bindentranceModel.MaterialDensity = "N/A";//根据物料码解析
//            //    bindentranceModel.Id = YitIdHelper.NextId();
//            //    await _wmsMaterialContainerRep.InsertNowAsync(bindentranceModel);
//            //}
            ////修改托盘状态
            //containerModel.ContainerStatus = ContainerStatus.ZUPANG;
            //await _wmsContainerRep.UpdateAsync(containerModel);
            //分配巷道
            var Aisle = 1;
//            ////修改托盘状态
//            //containerModel.ContainerStatus = ContainerStatus.ZUPANG;
//            //await _wmsContainerRep.UpdateAsync(containerModel);
//            //分配巷道
//            var Aisle = 1;
            //任务
            var takmodel = new WmsTask()
            {
                TaskNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString(),
                TaskModel = TaskModel.QUANZIDONG,
                TaskType = TaskType.RUKU,
                TaskLevel = 1,
                TaskStatus = TaskStatusEnum.ZHIXINGZHONG,
                OrderNo = orderNo,
                OrderDetailsId = 0,
                ContainerCode = input.ContainerCode,
                SourcePlace = "入库口",//现场情况为空
                ToPlace = "", //目标位
                AreaName = "绝缘立库",
                IsRead = true, //WCS是否可以读取
                SendTimes = 1, //发送次数
                Aisle = Aisle,// æ ¹æ®åº“区id获取几号提升机,测试使用一号
                TaskDodeviceStatus = TaskDodeviceStatusEnum.W
            };
            if (input.WmsMaterials == null || input.WmsMaterials.Count <= 0) {
                takmodel.Description = "空托";
            }
            else
            {
                takmodel.Description = "物料";
            };
//            //任务
//            var takmodel = new WmsTask()
//            {
//                TaskNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString(),
//                TaskModel = TaskModel.QUANZIDONG,
//                TaskType = TaskType.RUKU,
//                TaskLevel = 1,
//                TaskStatus = TaskStatusEnum.ZHIXINGZHONG,
//                OrderNo = orderNo,
//                OrderDetailsId = 0,
//                ContainerCode = input.ContainerCode,
//                SourcePlace = "入库口",//现场情况为空
//                ToPlace = "", //目标位
//                AreaName = "绝缘立库",
//                IsRead = true, //WCS是否可以读取
//                SendTimes = 1, //发送次数
//                Aisle = Aisle,// æ ¹æ®åº“区id获取几号提升机,测试使用一号
//                TaskDodeviceStatus = TaskDodeviceStatusEnum.W
//            };
//            if (input.WmsMaterials == null || input.WmsMaterials.Count <= 0) {
//                takmodel.Description = "空托";
//            }
//            else
//            {
//                takmodel.Description = "物料";
//            };
            
            await _wmsTaskRep.InsertAsync(takmodel);
        }
    }
}
//            await _wmsTaskRep.InsertAsync(takmodel);
//        }
//    }
//}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsArea.cs
@@ -4,7 +4,7 @@
/*
 * @author : åˆ˜æ–‡å¥‡
 * @date : 2024/4/23下午5:33:52
 * @date : 2024/4/23下午6:31:24
 * @desc : åº“区表
 */
namespace Admin.NET.Core
@@ -90,6 +90,51 @@
        /// <summary>
        /// é›¶ä»¶çº§ç®¡æŽ§
        /// </summary>
        [Comment("零件级管控")]
        [Required]
        public bool IsBarcodeLevelControl { get; set; }
        /// <summary>
        /// æ£€éªŒå…ˆè¿›å…ˆå‡º
        /// </summary>
        [Comment("检验先进先出")]
        [Required]
        public bool IsFIFO { get; set; }
        /// <summary>
        /// é›¶ä»¶çº§ç®¡æŽ§
        /// </summary>
        [Comment("零件级管控")]
        [Required]
        public bool IsPartLevelControl { get; set; }
        /// <summary>
        /// å…è®¸æ··æ·†
        /// </summary>
        [Comment("允许混淆")]
        [Required]
        public bool IsAllowConfusion { get; set; }
        /// <summary>
        /// å…è®¸è´Ÿåº“å­˜
        /// </summary>
        [Comment("允许负库存")]
        [Required]
        public bool IsAllowNegativeInventory { get; set; }
        /// <summary>
        /// æ˜¯å¦è™šæ‹Ÿ
        /// </summary>
        [Comment("是否虚拟")]
iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsContainer.cs
@@ -1,18 +1,23 @@
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
/*
 * @author : æ‚¨çš„名字
 * @date : 2024/4/23下午6:42:15
 * @desc : å®¹å™¨ä¿¡æ¯è¡¨
 */
namespace Admin.NET.Core
{
    /// <summary>
    /// æ‰˜ç›˜ä¿¡æ¯è¡¨
    /// å®¹å™¨ä¿¡æ¯è¡¨
    /// </summary>
    [Table("wms_container")]
    [Comment("托盘信息表")]
    public class WmsContainer : DEntityBase //, IEntityTypeBuilder<WmsContainer>
    [Comment("容器信息表")]
    public class WmsContainer : DEntityBase
    {
        /// <summary>
        /// ç¼–号
        /// </summary>
@@ -21,130 +26,145 @@
        [MaxLength(50)]
        public string ContainerCode { get; set; }
        /// <summary>
        /// ç±»åž‹;数据字典
        /// </summary>
        [Comment("类型")]
        [Required]
        public ContainerType ContainerType { get; set; }
        /// <summary>
        /// æ‰˜ç›˜çŠ¶æ€;数据字典
        /// åç§°
        /// </summary>
        [Comment("托盘状态")]
        [Comment("名称")]
        [Required]
        public ContainerStatus ContainerStatus { get; set; }
        [MaxLength(50)]
        public string ContainerName { get; set; }
        /// <summary>
        /// ç±»åž‹ID
        /// </summary>
        [Comment("类型ID")]
        [Required]
        public long ContainerTypeId { get; set; }
        /// <summary>
        /// ç±»åž‹åç§°
        /// </summary>
        [Comment("类型名称")]
        [Required]
        [MaxLength(50)]
        public string ContainerTypeName { get; set; }
        /// <summary>
        /// å®¹å™¨å…³ç³»ID
        /// </summary>
        [Comment("容器关系ID")]
        public long? PackagingId { get; set; }
        /// <summary>
        /// é•¿åº¦
        /// </summary>
        [Comment("长度")]
        public decimal SpecLength { get; set; }
        [Column("SpecLength", TypeName = "decimal(10,3)")]
        public decimal? SpecLength { get; set; }
        /// <summary>
        /// å®½åº¦
        /// </summary>
        [Comment("宽度")]
        public decimal SpecWidth { get; set; }
        [Column("SpecWidth", TypeName = "decimal(10,3)")]
        public decimal? SpecWidth { get; set; }
        /// <summary>
        /// é«˜åº¦
        /// </summary>
        [Comment("高度")]
        public decimal SpecHeight { get; set; }
        [Column("SpecHeight", TypeName = "decimal(10,3)")]
        public decimal? SpecHeight { get; set; }
        /// <summary>
        /// é™é•¿
        /// </summary>
        [Comment("限长")]
        public decimal LimitLength { get; set; }
        [Column("LimitLength", TypeName = "decimal(10,3)")]
        public decimal? LimitLength { get; set; }
        /// <summary>
        /// é™å®½
        /// </summary>
        [Comment("限宽")]
        public decimal LimitWidth { get; set; }
        [Column("LimitWidth", TypeName = "decimal(10,3)")]
        public decimal? LimitWidth { get; set; }
        /// <summary>
        /// é™é«˜
        /// </summary>
        [Comment("限高")]
        public decimal LimitHeight { get; set; }
        [Column("LimitHeight", TypeName = "decimal(10,3)")]
        public decimal? LimitHeight { get; set; }
        /// <summary>
        /// è½½é‡ä¸Šé™
        /// </summary>
        [Comment("载重上限")]
        public decimal MaxWeight { get; set; }
        [Column("MaxWeight", TypeName = "decimal(10,3)")]
        public decimal? MaxWeight { get; set; }
        /// <summary>
        /// çˆ¶æ‰˜ç›˜Id
        /// çˆ¶å®¹å™¨åç§°
        /// </summary>
        [Comment("父托盘Id")]
        public long ParentContainerId { get; set; }
        [Comment("父容器名称")]
        [MaxLength(255)]
        public string ParentContainerName { get; set; }
        /// <summary>
        /// èµ„产编号
        /// çˆ¶å®¹å™¨Id
        /// </summary>
        [Comment("资产编号")]
        [Required]
        [MaxLength(50)]
        public string AssetNo { get; set; }
        [Comment("父容器Id")]
        public long? ParentContainerId { get; set; }
        /// <summary>
        /// æ‰˜ç›˜åˆ†ç±»
        /// </summary>
        [Comment("托盘分类")]
        [Required]
        public ContainerCategory ContainerCategory { get; set; } = ContainerCategory.TY;
        /// <summary>
        /// Erp单号
        /// </summary>
        [Comment("Erp单号")]
        [Required]
        [MaxLength(50)]
        public string ErpNo { get; set; }
        /// <summary>
        /// æ˜¯å¦è™šæ‹Ÿ;数据字典
        /// æ˜¯å¦è™šæ‹Ÿ
        /// </summary>
        [Comment("是否虚拟")]
        [Required]
        public YesOrNot IsVirtually { get; set; } = YesOrNot.N;
        public int IsVirtually { get; set; }
        /// <summary>
        /// æ‰€å±žè½¦é—´
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        [Comment("所属车间")]
        [Comment("是否禁用")]
        [Required]
        public LesWorkShopType WorkShopType { get; set; }
        ///// <summary>
        ///// ç»„装车间物料托盘关系表
        ///// </summary>
        //public ICollection<WmsAssembleMaterialContainer> WmsAssembleMaterialContainer { get; set; }
        public bool IsDisabled { get; set; }
        ///// <summary>
        ///// ç‰©æ–™æ‰˜ç›˜åŽ†å²è¡¨
        ///// </summary>
        //public ICollection<WmsAssembleHistoryMaterialContainer> WmsAssembleHistoryMaterialContainer { get; set; }
        ///// <summary>
        ///// æž„建一对多的关系
        ///// </summary>
        ///// <param name="entityBuilder"></param>
        ///// <param name="dbContext"></param>
        ///// <param name="dbContextLocator"></param>
        //public void Configure(EntityTypeBuilder<WmsContainer> entityBuilder, DbContext dbContext, Type dbContextLocator)
        //{
        //    entityBuilder.HasMany(x => x.WmsAssembleMaterialContainer)
        //        .WithOne(x => x.WmsContainer)
        //        .HasForeignKey(x => x.ContainerId);
        //    entityBuilder.HasMany(x => x.WmsAssembleHistoryMaterialContainer)
        //        .WithOne(x => x.WmsContainer)
        //        .HasForeignKey(x => x.Id).IsRequired(false);
        //}
    }
}
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsContainerType.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
/*
 * @author : åˆ˜æ–‡å¥‡
 * @date : 2024/4/23下午6:36:33
 * @desc : å®¹å™¨ç±»åž‹
 */
namespace Admin.NET.Core
{
    /// <summary>
    /// å®¹å™¨ç±»åž‹
    /// </summary>
    [Table("wms_container_type")]
    [Comment("容器类型")]
    public class WmsContainerType : DEntityBase
    {
        /// <summary>
        /// ç±»åž‹ç¼–号
        /// </summary>
        [Comment("类型编号")]
        [MaxLength(255)]
        public string TypeCode { get; set; }
        /// <summary>
        /// ç±»åž‹åç§°
        /// </summary>
        [Comment("类型名称")]
        [MaxLength(255)]
        public string TypeName { get; set; }
        /// <summary>
        /// æ˜¯å¦å›žæ”¶
        /// </summary>
        [Comment("是否回收")]
        [Required]
        public bool IsAllowReclaim { get; set; }
        /// <summary>
        /// å•位
        /// </summary>
        [Comment("单位")]
        [MaxLength(50)]
        public string Unit { get; set; }
        /// <summary>
        /// ä½¿ç”¨æœŸé™
        /// </summary>
        [Comment("使用期限")]
        [MaxLength(50)]
        public string UsagePeriod { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        [Comment("是否禁用")]
        [Required]
        public bool IsDisabled { get; set; }
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsPlace.cs
@@ -4,7 +4,7 @@
/*
 * @author : åˆ˜æ–‡å¥‡
 * @date : 2024/4/23下午6:13:28
 * @date : 2024/4/23下午6:30:44
 * @desc : åº“位表
 */
namespace Admin.NET.Core
@@ -32,7 +32,7 @@
        /// </summary>
        [Comment("库位名称")]
        [Required]
        [MaxLength(255)]
        [MaxLength(50)]
        public string PlaceName { get; set; }
@@ -40,7 +40,7 @@
        /// åº“位别名
        /// </summary>
        [Comment("库位别名")]
        [MaxLength(255)]
        [MaxLength(50)]
        public string PlaceAlias { get; set; }
@@ -54,19 +54,20 @@
        /// <summary>
        /// å­˜æ”¾å•位
        /// </summary>
        [Comment("存放单位")]
        [MaxLength(255)]
        public string StockUnit { get; set; }
        /// <summary>
        /// åº“位类型名称
        /// </summary>
        [Comment("库位类型名称")]
        [Required]
        [MaxLength(50)]
        public string PlaceTypeName { get; set; }
        /// <summary>
        /// å­˜æ”¾å•位
        /// </summary>
        [Comment("存放单位")]
        [MaxLength(50)]
        public string StockUnit { get; set; }
        /// <summary>
@@ -76,46 +77,6 @@
        [Required]
        public int PlaceStatus { get; set; }
        /// <summary>
        /// æ¡ç çº§ç®¡æŽ§
        /// </summary>
        [Comment("条码级管控")]
        public bool? IsBarcodeLevelControl { get; set; }
        /// <summary>
        /// å…è®¸æ··æ·†
        /// </summary>
        [Comment("允许混淆")]
        public bool? IsAllowConfusion { get; set; }
        /// <summary>
        /// å…è®¸è´Ÿåº“å­˜
        /// </summary>
        [Comment("允许负库存")]
        public bool? IsAllowNegativeInventory { get; set; }
        /// <summary>
        /// æ£€éªŒå…ˆè¿›å…ˆå‡º
        /// </summary>
        [Comment("检验先进先出")]
        public bool? IsFIFO { get; set; }
        /// <summary>
        /// é›¶ä»¶çº§ç®¡æŽ§
        /// </summary>
        [Comment("零件级管控")]
        public bool? IsPartLevelControl { get; set; }
        /// <summary>
@@ -199,6 +160,15 @@
        /// <summary>
        /// åº“区编号
        /// </summary>
        [Comment("库区编号")]
        [Required]
        [MaxLength(50)]
        public string AreaCode { get; set; }
        /// <summary>
        /// æ‰€åœ¨åº“区
        /// </summary>
        [Comment("所在库区")]
@@ -211,7 +181,8 @@
        /// åº“区名称
        /// </summary>
        [Comment("库区名称")]
        [MaxLength(255)]
        [Required]
        [MaxLength(50)]
        public string AreaName { get; set; }
@@ -317,15 +288,6 @@
        [Required]
        [Column("MaxWeight", TypeName = "decimal(10,3)")]
        public decimal MaxWeight { get; set; }
        /// <summary>
        /// åº“位高度属性
        /// </summary>
        [Comment("库位高度属性")]
        [Required]
        public int HeightLevel { get; set; }
        /// <summary>