库存导出,采购单接收,物料接收优化,前端显示优化,测试架AGV任务大小托盘更改
已删除1个文件
已修改15个文件
已添加7个文件
273 ■■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/4ef9aa26-983d-4be3-b9d9-b250c0540681.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/7af258a1-75ee-4cab-a966-eaa9df544e99.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/c7c4fe2b-1337-4db8-9421-77da433aa08c.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/read.lock 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/StationOccupiedEnum.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGV_CSJExtend.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/public/webconfig.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/receiveOrder.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/2a0d6254-87a5-4e06-8f11-a55bef72e58d.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/dccce252-b152-41ce-8008-d5273b5116f7.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/read.lock 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/MaterielInfoService.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockViewService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/PurchaseOrderService.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrderDetail.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockViewController.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/4ef9aa26-983d-4be3-b9d9-b250c0540681.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/7af258a1-75ee-4cab-a966-eaa9df544e99.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/c7c4fe2b-1337-4db8-9421-77da433aa08c.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/read.lock
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/StationOccupiedEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Common
{
    public enum StationOccupiedEnum
    {
        None,
        Sure
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGV_CSJExtend.cs
@@ -47,7 +47,7 @@
                            }
                        },
                            TaskCode = agvTask.AgvTaskNum,
                            PodTyp = agvTask.PalletType < 3 ? "XX" : "DD",
                            PodTyp = agvTask.PalletType < 3 ? "ZC" : "DX",
                        };
                        WebResponseContent content = _taskService.AgvSendTask(taskDTO);
                        if (content.Status)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/public/webconfig.js
@@ -1,4 +1,4 @@
window.webConfig = {
    "webApiBaseUrl": "http://10.30.5.60:9293/",
    "webApiBaseUrl": "http://127.0.0.1:9293/",
    "webApiProduction":"http://10.30.4.92:9283/"
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue
@@ -203,7 +203,7 @@
          title: "行号",
          type: "string",
          width: 150,
          align: "left",
          align: "left"
        },
        {
          field: "materielCode",
@@ -215,12 +215,11 @@
          required: true,
        },
        {
          field: "materielCode",
          field: "materielName",
          title: "物料名称",
          type: "string",
          width: 100,
          align: "left",
          bind: { key: "MaterielNames", data: [] },
          align: "left"
        },
        // {
        //   field: "batchNo",
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/inbound/receiveOrder.vue
@@ -53,7 +53,7 @@
      ],
      [
        { title: "供应商", field: "suppliersId", type: "select",dataKey:"suppliers",data:[]},
        { title: "创建者", field: "creater", type: "like" },
        { title: "创建者", field: "creater", type: "like" }
      ],
    ]);
@@ -267,12 +267,11 @@
          required: true,
        },
        {
          field: "materielCode",
          field: "materielName",
          title: "物料名称",
          type: "string",
          width: 100,
          align: "left",
          bind: { key: "MaterielNames", data: [] },
        },
        {
          field: "lotNo",
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/2a0d6254-87a5-4e06-8f11-a55bef72e58d.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/dccce252-b152-41ce-8008-d5273b5116f7.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/read.lock
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/MaterielInfoService.cs
@@ -80,15 +80,7 @@
        {
            try
            {
                Dt_Warehouse? warehouse = null;
                if (model.ItemType.ObjToInt() == MaterielTypeEnum.RawMateriel.ObjToInt())
                {
                    warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == model.WaId);
                    if (warehouse == null)
                    {
                        return WebResponseContent.Instance.Error("未找到仓库信息");
                    }
                }
                Dt_Warehouse? warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == model.WaId);
                if (model.OperateType.ObjToInt() == 0)
                {
                    Dt_MaterielInfo materielInfo = new Dt_MaterielInfo()
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs
@@ -11,122 +11,150 @@
namespace WIDESEA_DTO.Stock
{
    /// <summary>
    ///
    /// åº“存视图
    /// </summary>
    public class StockViewDTO
    {
        /// <summary>
        /// ä»“库ID
        /// </summary>
        [ExporterHeader(DisplayName = "仓库ID")]
        public int WarehouseId {  get; set; }
        /// <summary>
        /// è´§ä½ç¼–号
        /// </summary>
        [ExporterHeader(DisplayName = "货位编号")]
        public string LocationCode { get; set; }
        /// <summary>
        /// è´§ä½åç§°
        /// </summary>
        [ExporterHeader(DisplayName = "货位名称")]
        public string LocationName { get; set; }
        /// <summary>
        /// è´§ä½åˆ—
        /// </summary>
        [ExporterHeader(DisplayName = "货位列")]
        public int Column { get; set; }
        /// <summary>
        /// è´§ä½è¡Œ
        /// </summary>
        [ExporterHeader(DisplayName = "货位行")]
        public int Row { get; set; }
        /// <summary>
        /// è´§ä½å±‚
        /// </summary>
        [ExporterHeader(DisplayName = "货位层")]
        public int Layer { get; set; }
        /// <summary>
        /// è´§ä½æ·±åº¦
        /// </summary>
        [ExporterHeader(DisplayName = "货位深度")]
        public int Depth { get; set; }
        /// <summary>
        /// è´§ä½çŠ¶æ€
        /// </summary>
        [ExporterHeader(DisplayName = "货位状态")]
        public int LocationStatus { get; set; }
        /// <summary>
        /// è´§ä½ç±»åž‹
        /// </summary>
        [ExporterHeader(DisplayName = "货位类型")]
        public int LocationType { get; set; }
        /// <summary>
        /// å··é“编号
        /// </summary>
        [ExporterHeader(DisplayName = "巷道编号")]
        public string RoadwayNo { get; set; }
        /// <summary>
        /// ç¦ç”¨çŠ¶æ€
        /// </summary>
        [ExporterHeader(IsIgnore = true)]
        public int EnalbeStatus { get; set; }
        /// <summary>
        /// åº“存主键
        /// </summary>
        [ExporterHeader(IsIgnore = true)]
        public int StockId { get; set; }
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        [ExporterHeader(DisplayName = "托盘号")]
        public string PalletCode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        [ExporterHeader(IsIgnore = true)]
        public bool IsFull { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–码
        /// </summary>
        [ExporterHeader(DisplayName = "物料编码")]
        public string MaterielCode { get; set; }
        /// <summary>
        /// ç‰©æ–™æ‰¹å·
        /// </summary>
        [ExporterHeader(DisplayName = "物料批号")]
        public string BatchNo { get; set; }
        /// <summary>
        /// åº“存数量
        /// </summary>
        [ExporterHeader(DisplayName = "库存数量")]
        public string StockCounts { get; set; }
        /// <summary>
        /// åº“存状态
        /// </summary>
        [ExporterHeader(IsIgnore = true)]
        public int StockStatus { get; set; }
        /// <summary>
        /// åº“存备注
        /// </summary>
        [ExporterHeader(IsIgnore = true)]
        public string StockRemark { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        [ExporterHeader(DisplayName = "创建人")]
        public string Creater { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        [ExporterHeader(DisplayName = "创建时间")]
        public DateTime CreateDate { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        [ExporterHeader(DisplayName = "修改人")]
        public string Modifier { get; set; }
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        [ExporterHeader(DisplayName = "修改时间")]
        public DateTime? ModifyDate { get; set; }
        /// <summary>
        /// åº“存详情
        /// </summary>
        [ExporterHeader(IsIgnore = true)]
        [Navigate(NavigateType.OneToMany, nameof(Dt_StockInfoDetail.StockId), nameof(StockId))]
        public List<Dt_StockInfoDetail> Details { get; set; }
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockViewService.cs
@@ -14,5 +14,6 @@
        PageGridData<StockViewDTO> GetPageData(PageDataOptions options);
        object GetDetailPage(PageDataOptions pageData);
        WebResponseContent Export(PageDataOptions options);
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/PurchaseOrderService.cs
@@ -98,6 +98,7 @@
                    Dt_PurchaseOrderDetail purchaseOrderDetail = new Dt_PurchaseOrderDetail()
                    {
                        MaterielCode = item.MCode,
                        MaterielName = materielInfo.MaterielName,
                        PurchaseDetailQuantity = item.Qty,
                        PurchaseDetailReceiveQty = 0,
                        PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt(),
@@ -133,7 +134,7 @@
        {
            try
            {
                Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().First(x => x.PurchaseOrderNo == model.OrderNo);
                Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.OrderNo).Includes(x => x.Details).First();
                if (purchaseOrder == null)
                {
                    return WebResponseContent.Instance.Error($"未找到采购单信息");
@@ -225,7 +226,7 @@
        {
            try
            {
                Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().First(x => x.PurchaseOrderNo == model.OrderNo);
                Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.OrderNo).Includes(x => x.Details).First();
                if (purchaseOrder == null)
                {
                    return WebResponseContent.Instance.Error($"未找到采购单信息");
@@ -247,7 +248,7 @@
        {
            try
            {
                Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().First(x => x.PurchaseOrderNo == model.OrderNo);
                Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x=>x.PurchaseOrderNo== model.OrderNo).Includes(x=>x.Details).First();
                if (purchaseOrder == null)
                {
                    return WebResponseContent.Instance.Error($"未找到采购单信息");
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs
@@ -100,8 +100,8 @@
                {
                    return WebResponseContent.Instance.Error($"该收货单明细已收货");
                }
                //获取具体批次
                Dt_ReceiveOrderDetail? detail = details.FirstOrDefault(x => x.LotNo == model.LotNo);
                //获取具体批次及物料
                Dt_ReceiveOrderDetail? detail = details.FirstOrDefault(x => x.LotNo == model.LotNo && x.MaterielCode==model.MaterielCode);
                lock (_rowNoLocker)
                {
                    if (detail != null)
@@ -149,6 +149,7 @@
                            ReceivedQuantity = model.Quantity,
                            MaterielCode = model.MaterielCode,
                            LotNo = model.LotNo,
                            MaterielName=materielInfo.MaterielName,
                            ReceiveOrderId = receiveOrder.ReceiveOrderId,
                            PurchaseOrderDetailRowNo = purchaseOrderDetail.RowNo,
                            IfInspection = materielInfo.IsCheck.ObjToInt(),
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs
@@ -42,7 +42,16 @@
            _basicRepository = basicRepository;
            _invokeERPService = invokeERPService;
        }
        public override PageGridData<Dt_ReceiveOrder> GetPageData(PageDataOptions options)
        {
            PageGridData<Dt_ReceiveOrder> pageGridData = base.GetPageData(options);
            //foreach (var item in pageGridData.Rows)
            //{
            //    //获取收货明细
            //    item.PurchaseOrderNo
            //}
            return pageGridData;
        }
        public override WebResponseContent AddData(SaveModel saveModel)
        {
            if (saveModel.MainData.ContainsKey(nameof(Dt_ReceiveOrder.ReceiveOrderStatus).FirstLetterToLower()))
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrderDetail.cs
@@ -67,5 +67,11 @@
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "单位")]
        public string Unit { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 100, ColumnDescription = "物料名称")]
        public string MaterielName { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs
@@ -88,5 +88,8 @@
        /// </summary>
        [Navigate(NavigateType.OneToMany, nameof(Dt_ReceiveOrderDetail.ReceiveOrderId), nameof(ReceiveOrderId))]
        public List<Dt_ReceiveOrderDetail> Details { get; set; }
        [SugarColumn(IsIgnore = true)]
        public string? PurchaseOrderNo { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs
@@ -95,7 +95,13 @@
        /// <summary>
        /// å•位
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "")]
        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "单位")]
        public string Unit { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 100, ColumnDescription = "物料名称")]
        public string MaterielName { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs
@@ -1,5 +1,7 @@

using HslCommunication.Secs.Types;
using Magicodes.ExporterAndImporter.Core;
using Magicodes.ExporterAndImporter.Excel;
using Microsoft.AspNetCore.Http;
using SqlSugar;
using System;
@@ -177,7 +179,132 @@
            }
            return new PageGridData<object>(total: 0, null);
        }
        public virtual WebResponseContent Export(PageDataOptions options)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Type t = typeof(StockViewDTO);
                string savePath = AppDomain.CurrentDomain.BaseDirectory + $"ExcelExport";
                IExporter exporter = new ExcelExporter();
                options.Page = 1;
                options.Rows = 30;
                options.Order = "desc";
                options.Sort = "stockId";
                List<StockViewDTO> stockViewDTOs = new List<StockViewDTO>();
                string where = string.Empty;
                ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>().Includes(x => x.Details);
                if (!string.IsNullOrEmpty(options.Wheres))
                {
                    try
                    {
                        List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
                        if (searchParametersList.Count > 0)
                        {
                            {
                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower());
                                if (searchParameters != null)
                                {
                                    sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.MaterielCode.Contains(searchParameters.Value)));
                                }
                            }
                            {
                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.BatchNo).FirstLetterToLower());
                                if (searchParameters != null)
                                {
                                    sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.BatchNo.Contains(searchParameters.Value)));
                                }
                            }
                        }
                    }
                    catch { }
                }
                string whereSto = GetDataRole(typeof(Dt_StockInfo));
                sugarQueryable1 = sugarQueryable1.Where(whereSto);
                EntityProperties.ValidatePageOptions(options, ref sugarQueryable1);
                string whereLo = GetDataRole(typeof(Dt_LocationInfo));
                ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>().Where(whereLo);
                EntityProperties.ValidatePageOptions(options, ref sugarQueryable);
                ISugarQueryable<StockViewDTO> list = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode).Select((b, a)
                    => new StockViewDTO
                    {
                        LocationCode = b.LocationCode,
                        Column = a.Column,
                        WarehouseId = b.WarehouseId,
                        CreateDate = b.CreateDate,
                        Creater = b.Creater,
                        Depth = a.Depth,
                        EnalbeStatus = a.EnableStatus,
                        Layer = a.Layer,
                        LocationName = a.LocationName,
                        LocationStatus = a.LocationStatus,
                        LocationType = a.LocationType,
                        Modifier = b.Modifier,
                        ModifyDate = b.ModifyDate,
                        PalletCode = b.PalletCode,
                        StockRemark = b.Remark,
                        RoadwayNo = a.RoadwayNo,
                        Row = a.Row,
                        StockId = b.Id,
                        StockStatus = b.StockStatus,
                        Details = b.Details,
                    });
                var pklist = sugarQueryable1.Where(b => b.LocationCode == "平库位").Select(b => new StockViewDTO
                {
                    LocationCode = b.LocationCode,
                    Column = 0,
                    WarehouseId = b.WarehouseId,
                    CreateDate = b.CreateDate,
                    Creater = b.Creater,
                    Depth = 0,
                    EnalbeStatus = EnableStatusEnum.Normal.ObjToInt(),
                    Layer = 0,
                    LocationName = "平库位",
                    LocationStatus = LocationStatusEnum.InStock.ObjToInt(),
                    LocationType = LocationTypeEnum.Undefined.ObjToInt(),
                    Modifier = b.Modifier,
                    ModifyDate = b.ModifyDate,
                    PalletCode = b.PalletCode,
                    StockRemark = b.Remark,
                    RoadwayNo = "平库",
                    Row = 0,
                    StockId = b.Id,
                    StockStatus = b.StockStatus,
                    Details = b.Details,
                });
                stockViewDTOs = list.ToList();
                stockViewDTOs.AddRange(pklist.ToList());
                stockViewDTOs.ForEach(x =>
                {
                    x.MaterielCode = (string.Join(",", x.Details.Select(x => x.MaterielCode).Distinct())) ?? "空箱";
                    x.BatchNo = (string.Join(",", x.Details.Select(x => x.BatchNo).Distinct())) ?? "无";
                    x.StockCounts = x.Details.Sum(x => x.StockQuantity).ToString() + x.Details.FirstOrDefault()?.Unit;
                }
                );
                byte[] data = exporter.ExportAsByteArray(stockViewDTOs).Result;
                string fileName = "库存视图.xlsx";
                FileHelper.WriteFile(savePath, fileName, data);
                content = WebResponseContent.Instance.OK(data: savePath + "\\" + fileName);
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
        private string GetDataRole(Type type)
        {
            try
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockViewController.cs
@@ -1,7 +1,10 @@
using Microsoft.AspNetCore.Authorization;
using Autofac.Core;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using SqlSugar;
using System.Reflection;
using WIDESEA_Core;
using WIDESEA_Core.BaseController;
using WIDESEA_DTO.Stock;
@@ -34,5 +37,34 @@
        {
            return _stockViewService.GetDetailPage(pageData);
        }
        /// <summary>
        /// å¯¼å‡ºæ•°æ®
        /// </summary>
        /// <param name="loadData"></param>
        /// <returns></returns>
        [HttpPost, Route("Export")]
        public virtual ActionResult Export([FromBody] PageDataOptions loadData)
        {
            WebResponseContent result = InvokeService("Export", new object[] { loadData }) as WebResponseContent;
            if (result.Status)
                return File(
                       System.IO.File.ReadAllBytes(result.Data.ToString()),
                       System.Net.Mime.MediaTypeNames.Application.Octet,
                       Path.GetFileName(result.Data.ToString())
                   );
            return Json(result);
        }
        private object InvokeService(string methodName, object[] parameters)
        {
            Type t = _stockViewService.GetType();
            List<Type> types = new List<Type>();
            foreach (var param in parameters)
            {
                types.Add(param.GetType());
            }
            MethodInfo method = t.GetMethod(methodName, types.ToArray());
            return method.Invoke(_stockViewService, parameters);
        }
    }
}