wangxinhui
2024-12-23 942e47f8987bd8c266e58863bed3895d9cb4ded0
增加任务类型枚举,增加测试出库上报
已删除5个文件
已修改20个文件
已添加16个文件
919 ■■■■ 文件已修改
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/17abf4db-5c0e-4dd5-ad61-d8c5dd739130.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/2c5380f0-67c1-41e2-940e-3a1dd36603f2.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/319444dd-52fa-4755-a1f0-6ec8f7d83f7b.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4cef1081-0412-49a6-a284-ce73df6b1458.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5edb54ba-ada3-4951-bc21-e88f75c6e921.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7a833a68-07df-4786-a4b8-e9726236f98d.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7b08ed57-62e6-4b82-a17f-35d723b5ca5f.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8164f66c-be5c-498f-a0df-0efcbb2866af.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/94b1eced-02e0-42fa-a704-73db3cda704b.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/9d62c97e-0b1f-4029-a379-1fd657ac5e9d.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/b331756d-c9e2-4038-b5f1-5e812b045d1a.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/bb2b9ab8-c871-4911-b102-fa668a9b7a3f.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/fde68f49-1fc8-44c8-8785-4d80e9e536c1.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/ApiInfoRepository.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/ApiInfoService.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/AGV/AgvResponseContent.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpRequestContent.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/TestToolModel.cs 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/AGVService/InvokeAGVService.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/ERPService/InvokeERPService.cs 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/IAGVService/IInvokeAGVService.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/IERPService/IInvokeERPService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPOutboundModel.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/WIDESEA_External.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IApiInfoRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IApiInfoService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs 135 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/AGV/AgvController.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/接口文档/MES业务流程图V1.0.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/17abf4db-5c0e-4dd5-ad61-d8c5dd739130.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/2c5380f0-67c1-41e2-940e-3a1dd36603f2.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/319444dd-52fa-4755-a1f0-6ec8f7d83f7b.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4cef1081-0412-49a6-a284-ce73df6b1458.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5edb54ba-ada3-4951-bc21-e88f75c6e921.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7a833a68-07df-4786-a4b8-e9726236f98d.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7b08ed57-62e6-4b82-a17f-35d723b5ca5f.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8164f66c-be5c-498f-a0df-0efcbb2866af.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/94b1eced-02e0-42fa-a704-73db3cda704b.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/9d62c97e-0b1f-4029-a379-1fd657ac5e9d.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/b331756d-c9e2-4038-b5f1-5e812b045d1a.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/bb2b9ab8-c871-4911-b102-fa668a9b7a3f.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/fde68f49-1fc8-44c8-8785-4d80e9e536c1.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/ApiInfoRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IBasicRepository
{
    /// <summary>
    /// æŽ¥å£ä¿¡æ¯ä»“储实现层
    /// </summary>
    public class ApiInfoRepository : RepositoryBase<Dt_ApiInfo>, IApiInfoRepository
    {
        public ApiInfoRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/ApiInfoService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_BasicRepository;
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
using WIDESEA_DTO.Basic;
using WIDESEA_DTO.ERP;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_Model.Models;
namespace WIDESEA_BasicService
{
    public class ApiInfoService : ServiceBase<Dt_ApiInfo, IApiInfoRepository>, IApiInfoService
    {
        public ApiInfoService(IApiInfoRepository BaseDal) : base(BaseDal)
        {
        }
        public IApiInfoRepository Repository => BaseDal;
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs
@@ -7,11 +7,40 @@
namespace WIDESEA_Common.APIEnum
{
    /// <summary>
    ///
    /// </summary>
    public enum APIEnum
    {
        /// <summary>
        /// AGV发送任务接口
        /// </summary>
        [Description("AGV发送任务接口")]
        AgvSendTask,
        /// <summary>
        /// AGV安全信号回复
        /// </summary>
        [Description("AGV安全信号回复")]
        AgvSecureReply
        AgvSecureReply,
        /// <summary>
        /// ERP收货接口调用
        /// </summary>
        [Description("ERP收货接口调用")]
        InvokeMatReceiveApi,
        /// <summary>
        /// ERP物料IQC检验接口调用
        /// </summary>
        [Description("ERP物料IQC检验接口调用")]
        InvokeCheckOrderApi,
        /// <summary>
        /// ERP物料入库接口调用
        /// </summary>
        [Description("ERP物料入库接口调用")]
        InvokeInboundOrderApi,
        /// <summary>
        /// ERP物料出库接口调用
        /// </summary>
        [Description("ERP物料出库接口调用")]
        InvokeOutboundOrderApi
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs
@@ -47,6 +47,7 @@
        [Description("移库锁定")]
        ç§»åº“锁定 = 9,
        [Description("入库完成未建出库单")]
        å…¥åº“完成未建出库单 = 10
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Common.TaskEnum
{
    /// <summary>
    /// ä»»åŠ¡çŠ¶æ€
    /// </summary>
    public enum TaskStatusEnum
    {
        /// <summary>
        /// æ–°å»ºä»»åŠ¡
        /// </summary>
        [Description("新建")]
        New = 100,
        /// <summary>
        /// å †åž›æœºå¾…执行
        /// </summary>
        [Description("堆垛机待执行")]
        SC_Execute= 200,
        /// <summary>
        /// å †åž›æœºæ‰§è¡Œä¸­
        /// </summary>
        [Description("堆垛机执行中")]
        SC_Executing = 210,
        /// <summary>
        /// å †åž›æœºå®Œæˆ
        /// </summary>
        [Description("堆垛机完成")]
        SC_Finish = 220,
        /// <summary>
        /// ä»»åŠ¡å®Œæˆ
        /// </summary>
        [Description("任务完成")]
        Finish = 900,
        /// <summary>
        /// ä»»åŠ¡æŒ‚èµ·
        /// </summary>
        [Description("任务挂起")]
        Pending = 970,
        /// <summary>
        /// ä»»åŠ¡å–æ¶ˆ
        /// </summary>
        [Description("任务取消")]
        Cancel = 980,
        /// <summary>
        /// ä»»åС异叏
        /// </summary>
        [Description("任务异常")]
        Exception = 990,
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
@@ -7,65 +7,7 @@
namespace WIDESEA_Common.TaskEnum
{
    public enum TaskInboundTypeEnum
    {
        /// <summary>
        /// å…¥åº“
        /// </summary>
        [Description("入库")]
        Inbound = 200,
        /// <summary>
        /// ç›˜ç‚¹å…¥åº“
        /// </summary>
        [Description("盘点入库")]
        InInventory = 201,
        /// <summary>
        /// åˆ†æ‹£å…¥åº“
        /// </summary>
        [Description("分拣入库")]
        InPick = 202,
        /// <summary>
        /// è´¨æ£€å…¥åº“
        /// </summary>
        [Description("质检入库")]
        InQuality = 203,
        /// <summary>
        /// æµ‹è¯•架入库
        /// </summary>
        [Description("测试架入库")]
        TestInbound = 204,
    }
    public enum TaskOutboundTypeEnum
    {
        /// <summary>
        /// å‡ºåº“
        /// </summary>
        [Description("出库")]
        Outbound = 100,
        /// <summary>
        /// ç›˜ç‚¹å‡ºåº“
        /// </summary>
        [Description("盘点出库")]
        OutInventory = 101,
        /// <summary>
        /// åˆ†æ‹£å‡ºåº“
        /// </summary>
        [Description("分拣出库")]
        OutPick = 102,
        /// <summary>
        /// è´¨æ£€å‡ºåº“
        /// </summary>
        [Description("质检出库")]
        OutQuality = 103,
        /// <summary>
        /// æµ‹è¯•架出库
        /// </summary>
        [Description("测试架出库")]
        OutTestStand = 104,
    }
    public enum TaskRelocationTypeEnum
    public enum TaskTypeEnum
    {
        /// <summary>
        /// åº“内移库
@@ -76,11 +18,126 @@
        /// åº“外移库
        /// </summary>
        [Description("库外移库")]
        RelocationIn = 301
    }
    public enum TaskOtherTypeEnum
    {
        RelocationIn = 301,
        /// <summary>
        /// å…¥åº“
        /// </summary>
        [Description("入库")]
        Inbound = 1050,
        /// <summary>
        /// ç›˜ç‚¹å…¥åº“
        /// </summary>
        [Description("盘点入库")]
        InInventory = 1100,
        /// <summary>
        /// åˆ†æ‹£å…¥åº“
        /// </summary>
        [Description("分拣入库")]
        InPick = 1150,
        /// <summary>
        /// è´¨æ£€å…¥åº“
        /// </summary>
        [Description("质检入库")]
        InQuality = 1200,
        /// <summary>
        /// æµ‹è¯•架入库
        /// </summary>
        [Description("测试架入库")]
        TestInbound = 2000,
        /// <summary>
        /// æ²¹å¢¨ä»“入库
        /// </summary>
        [Description("油墨仓入库")]
        PrintingInbound = 2050,
        /// <summary>
        /// è¾…料仓入库
        /// </summary>
        [Description("辅料仓入库")]
        AccessoryInbound = 2100,
        /// <summary>
        /// æ¿æ–™ä»“入库
        /// </summary>
        [Description("板料仓入库")]
        SheetInbound = 2150,
        /// <summary>
        /// å¹²è†œä»“入库
        /// </summary>
        [Description("干膜仓入库")]
        DryfilmInbound = 2200,
        /// <summary>
        /// PP仓入库
        /// </summary>
        [Description("PP仓入库")]
        PPInbound = 2250,
        /// <summary>
        /// æˆå“ä»“入库
        /// </summary>
        [Description("成品仓入库")]
        ProductInbound = 2300,
        /// <summary>
        /// é˜»ç„Šä»“入库
        /// </summary>
        [Description("阻焊仓入库")]
        SolderInbound = 2350,
        /// <summary>
        /// å‡ºåº“
        /// </summary>
        [Description("出库")]
        Outbound = 3000,
        /// <summary>
        /// ç›˜ç‚¹å‡ºåº“
        /// </summary>
        [Description("盘点出库")]
        OutInventory = 3050,
        /// <summary>
        /// åˆ†æ‹£å‡ºåº“
        /// </summary>
        [Description("分拣出库")]
        OutPick = 3100,
        /// <summary>
        /// è´¨æ£€å‡ºåº“
        /// </summary>
        [Description("质检出库")]
        OutQuality = 3150,
        /// <summary>
        /// æµ‹è¯•架出库
        /// </summary>
        [Description("测试架出库")]
        TestOutbound = 4000,
        /// <summary>
        /// æ²¹å¢¨ä»“出库
        /// </summary>
        [Description("油墨仓出库")]
        PrintingOutbound = 4050,
        /// <summary>
        /// è¾…料仓出库
        /// </summary>
        [Description("辅料仓出库")]
        AccessoryOutbound = 4100,
        /// <summary>
        /// æ¿æ–™ä»“出库
        /// </summary>
        [Description("板料仓出库")]
        SheetOutbound = 4150,
        /// <summary>
        /// å¹²è†œä»“出库
        /// </summary>
        [Description("干膜仓出库")]
        DryfilmOutbound = 4200,
        /// <summary>
        /// PP仓出库
        /// </summary>
        [Description("PP仓出库")]
        PPOutbound = 4250,
        /// <summary>
        /// æˆå“ä»“出库
        /// </summary>
        [Description("成品仓出库")]
        ProductOutbound = 4300,
        /// <summary>
        /// é˜»ç„Šä»“出库
        /// </summary>
        [Description("阻焊仓出库")]
        SolderOutbound = 4350,
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Common.WareHouseEnum
{
    /// <summary>
    /// ä»“库
    /// HA57 = æ·®å®‰äºŒåŽ‚ - æ¿æ–™ä»“<br/>
    /// HA58 = æ·®å®‰äºŒåŽ‚ - PP仓<br/>
    /// HA60 = æ·®å®‰äºŒåŽ‚ - è¾…料仓<br/>
    /// HA64 = æ·®å®‰äºŒåŽ‚ - æµ‹è¯•架仓<br/>
    /// HA71 = æ·®å®‰äºŒåŽ‚ - æˆå“ä»“<br/>
    /// HA72 = æ·®å®‰äºŒåŽ‚ - å°¾æ•°ä»“<br/>
    /// HA73 = æ·®å®‰äºŒåŽ‚ - ç ”发仓<br/>
    /// HA101 = æ·®å®‰äºŒåŽ‚ - æˆå“ä»“平库<br/>
    /// HA152 = æ·®å®‰äºŒåŽ‚ - å¹²è†œä»“<br/>
    /// HA153 = æ·®å®‰äºŒåŽ‚ - æ²¹å¢¨ä»“<br/>
    /// </summary>
    public enum WarehouseEnum
    {
        /// <summary>
        /// æ¿æ–™ä»“
        /// </summary>
        [Description("板料仓")]
        HA57,
        /// <summary>
        /// PP仓
        /// </summary>
        [Description("PP仓")]
        HA58,
        /// <summary>
        /// è¾…料仓
        /// </summary>
        [Description("辅料仓")]
        HA60,
        /// <summary>
        /// æµ‹è¯•架仓
        /// </summary>
        [Description("测试架仓")]
        HA64,
        /// <summary>
        /// æˆå“ä»“
        /// </summary>
        [Description("成品仓")]
        HA71,
        /// <summary>
        /// å°¾æ•°ä»“
        /// </summary>
        [Description("尾数仓")]
        HA72,
        /// <summary>
        /// ç ”发仓
        /// </summary>
        [Description("研发仓")]
        HA73,
        /// <summary>
        /// æˆå“ä»“平库
        /// </summary>
        [Description("成品仓平库")]
        HA101,
        /// <summary>
        /// å¹²è†œä»“
        /// </summary>
        [Description("干膜仓")]
        HA152,
        /// <summary>
        /// æ²¹å¢¨ä»“
        /// </summary>
        [Description("油墨仓")]
        HA153
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/AGV/AgvResponseContent.cs
@@ -6,6 +6,7 @@
namespace WIDESEA_DTO.AGV
{
    #region å¼ƒç”¨
    public class AgvResponseContent
    {
        /// <summary>
@@ -25,4 +26,5 @@
        /// </summary>
        public string Data { get; set; }
    }
    #endregion
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpRequestContent.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_DTO.ERP
{
    public class ErpRequestContent
    {
        public string Data { get ; set; }
        public string Rdata { get; set; }
        public int res { get ; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/TestToolModel.cs
@@ -14,9 +14,9 @@
    public class TestToolOutModel
    {
        /// <summary>
        /// æµ‹æž¶æ‰˜ç›˜ç¼–码
        /// æµ‹è¯•架批次号
        /// </summary>
        [PropertyValidate("测架托盘编码", NotNullAndEmpty = true)]
        [PropertyValidate("测试架批次号", NotNullAndEmpty = true)]
        public string ToolCode { get; set; }
        /// <summary>
        /// ç›®æ ‡åœ°å€ç 
@@ -29,17 +29,17 @@
    /// æµ‹è¯•架报废模型
    /// </summary>
    [ModelValidate]
    public class TestToolScrapModel
    public class TestToolScrap
    {
        /// <summary>
        /// æµ‹æž¶ç¼–码
        /// æµ‹è¯•架批次号
        /// </summary>
        [PropertyValidate("测架编码", NotNullAndEmpty = true)]
        [PropertyValidate("测试架批次号", NotNullAndEmpty = true)]
        public string ToolCode { get; set; }
    }
    /// <summary>
    /// æµ‹è¯•架退库模型
    /// æµ‹è¯•架退库
    /// </summary>
    [ModelValidate]
    public class TestToolBackModel
@@ -51,9 +51,24 @@
        public string SourceAddressCode { get; set; }
        /// <summary>
        /// æµ‹è¯•架编码
        /// æµ‹è¯•架批次号
        /// </summary>
        [PropertyValidate("测试架编码", NotNullAndEmpty = true)]
        [PropertyValidate("测试架批次号", NotNullAndEmpty = true)]
        public string TestToolCode { get; set; }
    }
    /// <summary>
    ///测试架同步
    /// </summary>
    public class TestToolSynInfo
    {
        /// <summary>
        /// æµ‹è¯•架批次号
        /// </summary>
        public string ToolCode { get; set; }
        /// <summary>
        /// åˆå§‹å¯¿å‘½
        /// </summary>
        public int Life { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/AGVService/InvokeAGVService.cs
@@ -12,6 +12,7 @@
namespace WIDESEA_External.AGVService
{
    #region å¼ƒç”¨
    public class InvokeAGVService : IInvokeAGVService
    {
        public static IInvokeAGVService Intance
@@ -93,4 +94,5 @@
            return new AgvResponseContent();
        }
    }
    #endregion
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/ERPService/InvokeERPService.cs
@@ -3,8 +3,11 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.APIEnum;
using WIDESEA_Core.Helper;
using WIDESEA_External.Model;
using WIDESEA_IBasicRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_External.ERPService
{
@@ -13,8 +16,11 @@
    /// </summary>
    public class InvokeERPService : IInvokeERPService
    {
        string serviceIp = "";
        private readonly IApiInfoRepository _apiInfoRepository;
        public InvokeERPService(IApiInfoRepository apiInfoRepository)
        {
            _apiInfoRepository= apiInfoRepository;
        }
        /// <summary>
        /// ERP收货单接口调用
        /// </summary>
@@ -22,8 +28,7 @@
        /// <returns></returns>
        public string InvokeMatReceiveApi(ERPReceiveModel receiveModel)
        {
            string serviceAddress = "";
            Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x=>x.ApiCode==APIEnum.InvokeMatReceiveApi.ToString());
            ERPBaseModel<ERPReceiveModel> model = new ERPBaseModel<ERPReceiveModel>()
            {
                Data = receiveModel,
@@ -31,8 +36,7 @@
                Type = "toTCWMSReceive",
                SecurityCode = ""
            };
            string response = HttpHelper.Post(serviceIp + serviceAddress, model.Serialize());
            string response = HttpHelper.Post(apiInfo.ApiAddress, model.Serialize());
            return response;
        }
@@ -43,7 +47,7 @@
        /// <returns></returns>
        public string InvokeCheckOrderApi(ERPCheckModel checkModel)
        {
            string serviceAddress = "";
            Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.InvokeCheckOrderApi.ToString());
            ERPBaseModel<ERPCheckModel> model = new ERPBaseModel<ERPCheckModel>()
            {
                Data = checkModel,
@@ -52,7 +56,7 @@
                SecurityCode = ""
            };
            string response = HttpHelper.Post(serviceIp + serviceAddress, model.Serialize());
            string response = HttpHelper.Post(apiInfo.ApiAddress, model.Serialize());
            return response;
        }
@@ -63,7 +67,7 @@
        /// <returns></returns>
        public string InvokeInboundOrderApi(ERPInboundModel inboundModel)
        {
            string serviceAddress = "";
            Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.InvokeInboundOrderApi.ToString());
            ERPBaseModel<ERPInboundModel> model = new ERPBaseModel<ERPInboundModel>()
            {
                Data = inboundModel,
@@ -72,7 +76,25 @@
                SecurityCode = ""
            };
            string response = HttpHelper.Post(serviceIp + serviceAddress, model.Serialize());
            string response = HttpHelper.Post(apiInfo.ApiAddress, model.Serialize());
            return response;
        }
        /// <summary>
        /// ERP物料出库接口调用
        /// </summary>
        /// <param name="outboundModel"></param>
        /// <returns></returns>
        public string InvokeOutboundOrderApi(ERPOutboundModel outboundModel)
        {
            Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.InvokeOutboundOrderApi.ToString());
            ERPBaseModel<ERPOutboundModel> model = new ERPBaseModel<ERPOutboundModel>()
            {
                Data = outboundModel,
                Desc = "材料出库",
                Type = "toBomMaterialOutTC",
                SecurityCode = "LxkgPgN3$U"
            };
            string response = HttpHelper.Post(apiInfo.ApiAddress, model.Serialize());
            return response;
        }
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/IAGVService/IInvokeAGVService.cs
@@ -9,6 +9,7 @@
namespace WIDESEA_External.AGVService
{
    #region å¼ƒç”¨
    public interface IInvokeAGVService:IDependency
    {
        /// <summary>
@@ -25,4 +26,5 @@
        WebResponseContent AgvSecureReply(AgvSecureReplyModel secureReplyModel);
        AgvResponseContent AgvUpdateTask(AgvUpdateModel agvUpdateModel);
    }
    #endregion
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/IERPService/IInvokeERPService.cs
@@ -33,5 +33,6 @@
        /// <param name="inboundModel"></param>
        /// <returns></returns>
        string InvokeInboundOrderApi(ERPInboundModel inboundModel);
        string InvokeOutboundOrderApi(ERPOutboundModel outboundModel);
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPOutboundModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_External.Model
{
    /// <summary>
    /// å‡ºåº“单回传ERP
    /// </summary>
    public class ERPOutboundModel
    {
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// </summary>
        public int Way { get; set; }
        /// <summary>
        /// ä¸»é”®å€¼
        /// </summary>
        public string UniqueTag { get; set; }
        /// <summary>
        /// å‡ºåº“单号
        /// </summary>
        public string Code { get; set; }
        /// <summary>
        /// ä»“库编码
        /// </summary>
        public string WarehouseCode { get; set; }
        /// <summary>
        /// å•据备注
        /// </summary>
        public string Docremark { get; set; }
        /// <summary>
        /// å‘料部门编码
        /// </summary
        public string Deptno { get; set; }
        /// <summary>
        /// å‘料部门名称
        /// </summary
        public string DeptName { get; set; }
        /// <summary>
        /// å‘料时间
        /// </summary
        public DateTime? Createtime { get; set; }
        /// <summary>
        /// å‘料人员
        /// </summary
        public string Createuser { get; set; }
        /// <summary>
        ///
        /// </summary
        public List<ERPOutPick> Picklist { get; set; }
    }
    public class ERPOutPick
    {
        /// <summary>
        /// å‘料行号
        /// </summary>
        public string Rowindex { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–码
        /// </summary>
        public string Material { get; set; }
        /// <summary>
        /// æ€»æ•°é‡
        /// </summary>
        public float Qty { get; set; }
        /// <summary>
        ///
        /// </summary>
        public List<ERPOutPickDetail> Dataitem { get; set; }
    }
    public class ERPOutPickDetail
    {
        /// <summary>
        /// ç‰©æ–™æ‰¹æ¬¡
        /// </summary>
        public string Lotno { get; set; }
        /// <summary>
        /// æ•°é‡
        /// </summary>
        public float Qty { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/WIDESEA_External.csproj
@@ -10,6 +10,7 @@
    <ProjectReference Include="..\WIDESEA_Common\WIDESEA_Common.csproj" />
    <ProjectReference Include="..\WIDESEA_Core\WIDESEA_Core.csproj" />
    <ProjectReference Include="..\WIDESEA_DTO\WIDESEA_DTO.csproj" />
    <ProjectReference Include="..\WIDESEA_IBasicRepository\WIDESEA_IBasicRepository.csproj" />
  </ItemGroup>
</Project>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IApiInfoRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IBasicRepository
{
    /// <summary>
    /// æŽ¥å£ä¿¡æ¯ä»“储接口层
    /// </summary>
    public interface IApiInfoRepository : IRepository<Dt_ApiInfo>
    {
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IApiInfoService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
using WIDESEA_DTO.Basic;
using WIDESEA_DTO.ERP;
using WIDESEA_IBasicRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IBasicService
{
    public interface IApiInfoService : IService<Dt_ApiInfo>
    {
        IApiInfoRepository Repository { get; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -93,5 +93,11 @@
        /// <param name="taskNum">任务号</param>
        /// <returns></returns>
        WebResponseContent OutboundTaskCompleted(int taskNum);
        /// <summary>
        /// æµ‹è¯•架退库
        /// </summary>
        /// <param name="backModel"></param>
        /// <returns></returns>
        MesResponseContent TestReturnStock(TestToolBackModel backModel);
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs
@@ -1,6 +1,7 @@
using AutoMapper;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -9,6 +10,7 @@
using System.Threading.Tasks;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
@@ -18,6 +20,7 @@
using WIDESEA_DTO.ERP;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Outbound;
using WIDESEA_External.ERPService;
using WIDESEA_External.Model;
using WIDESEA_IBasicService;
using WIDESEA_IOutboundRepository;
@@ -37,16 +40,18 @@
        private readonly IStockInfoService _stockInfoService;
        private readonly IStockInfoRepository _stockInfoRepository;
        public IOutboundOrderRepository Repository => BaseDal;
        private readonly IInvokeERPService _invokeERPService;
        public OutboundOrderService(IOutboundOrderRepository BaseDal, IMapper mapper,IUnitOfWorkManage unitOfWorkManage, IBasicService basicService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IStockInfoService stockInfoService,
          IStockInfoRepository stockInfoRepository) : base(BaseDal)
          IStockInfoRepository stockInfoRepository, IInvokeERPService invokeERPService) : base(BaseDal)
        {
            _mapper = mapper;
            _unitOfWorkManage=unitOfWorkManage;
            _basicService = basicService;
            _outboundOrderDetailRepository = outboundOrderDetailRepository;
            _stockInfoService = stockInfoService;
            _stockInfoRepository= stockInfoRepository;
            _stockInfoRepository = stockInfoRepository;
            _invokeERPService = invokeERPService;
        }
        public WebResponseContent ReceiveOutOrder(ErpOutOrderDTO model)
@@ -81,7 +86,6 @@
                        }
                        else
                        {
                            Dt_StockInfo? stockInfo = null;
                            Dt_OutboundOrderDetail outboundOrderDetail = new Dt_OutboundOrderDetail()
                            {
                                RowNo = Convert.ToInt32(model.RowNo),
@@ -92,17 +96,27 @@
                                OrderQuantity = model.Qty,
                                OrderId = oldOutboundOrder.Id
                            };
                            List<Dt_StockInfo>? stockInfos = new List<Dt_StockInfo>();
                            //ERP上传测试仓领料单更新对应库存状态
                            if (warehouse.WarehouseId == 1)
                            if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString())
                            {
                                //获取出库单库存
                                stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId).Includes(x => x.Details).Where(x => x.Details.Any(x => x.MaterielCode == model.MCode && x.BatchNo == model.MLot && x.InboundOrderRowNo == Convert.ToInt32(model.RowNo))).First();
                                stockInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt();
                                WebResponseContent responseContent = TestOutStocksUpdate(warehouse, model);
                                if (!responseContent.Status)
                                {
                                    return responseContent;
                                }
                                stockInfos = responseContent.Data as List<Dt_StockInfo>;
                            }
                            _unitOfWorkManage.BeginTran();
                            if (stockInfo != null)
                            if (stockInfos.Count>0)
                            {
                                _stockInfoRepository.UpdateData(stockInfo);
                                _stockInfoRepository.UpdateData(stockInfos);
                                //测试架库给ERP上报出库完成
                                if (!TestOutBack(stockInfos, warehouse, model).Status)
                                {
                                    _unitOfWorkManage.RollbackTran();
                                    return WebResponseContent.Instance.Error($"测试架出库上报失败");
                                }
                            }
                            _outboundOrderDetailRepository.AddData(outboundOrderDetail);
                            _unitOfWorkManage.CommitTran();
@@ -129,21 +143,31 @@
                            WarehouseId = warehouse.WarehouseId,
                            Details = new List<Dt_OutboundOrderDetail> { outboundOrderDetail }
                        };
                        Dt_StockInfo? stockInfo = null;
                        //ERP上传测试仓领料单更新对应库存状态
                        if (warehouse.WarehouseId==1)
                        List<Dt_StockInfo>? stockInfos = new List<Dt_StockInfo>();
                        //ERP上传测试仓领料单更新对应库存状态
                        if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString())
                        {
                            //获取出库单库存
                            stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId).Includes(x => x.Details).Where(x => x.Details.Any(x => x.MaterielCode == model.MCode && x.BatchNo == model.MLot && x.InboundOrderRowNo == Convert.ToInt32(model.RowNo))).First();
                            stockInfo.StockStatus=StockStatusEmun.入库完成.ObjToInt();
                            WebResponseContent responseContent = TestOutStocksUpdate(warehouse, model);
                            if (!responseContent.Status)
                            {
                                return responseContent;
                            }
                            stockInfos = responseContent.Data as List<Dt_StockInfo>;
                        }
                        _unitOfWorkManage.BeginTran();
                        if (stockInfo!=null)
                        if (stockInfos.Count > 0)
                        {
                            _stockInfoRepository.UpdateData(stockInfo);
                            _stockInfoRepository.UpdateData(stockInfos);
                            //测试架库给ERP上报出库完成
                            if (!TestOutBack(stockInfos, warehouse, model).Status)
                            {
                                _unitOfWorkManage.RollbackTran();
                                return WebResponseContent.Instance.Error($"测试架出库上报失败");
                            }
                        }
                        Db.InsertNav(outboundOrder).Include(x => x.Details).ExecuteCommand();
                        _unitOfWorkManage.CommitTran();
                    }
                }
                else if (model.Way == 2)
@@ -189,7 +213,82 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// æ›´æ”¹å‡ºåº“单库存状态
        /// </summary>
        /// <param name="warehouse"></param>
        /// <param name="model"></param>
        /// <returns></returns>
        public WebResponseContent TestOutStocksUpdate(Dt_Warehouse warehouse, ErpOutOrderDTO model)
        {
            try
            {
                //获取出库单库存
                List<Dt_StockInfo> stockInfos = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId).OrderBy(x => x.CreateDate).Includes(x => x.Details).Where(x => x.Details.Any(x => x.MaterielCode == model.MCode)).Take((int)(model.Qty)).ToList();
                if (model.Qty > stockInfos.Count)
                {
                    return WebResponseContent.Instance.Error($"物料:{model.MCode}库存不足");
                }
                //更改状态
                stockInfos.ForEach(x =>
                {
                    x.StockStatus = StockStatusEmun.入库完成.ObjToInt();
                });
                return WebResponseContent.Instance.OK("成功", stockInfos);
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        ///推送测试架出库
        public WebResponseContent TestOutBack(List<Dt_StockInfo> stockInfos,Dt_Warehouse warehouse, ErpOutOrderDTO model)
        {
            try
            {
                //测试架库给ERP上报出库完成
                List<ERPOutPickDetail> pickDetails = stockInfos.Select(x => new ERPOutPickDetail()
                {
                    Lotno = x.Details[0].BatchNo,
                    Qty = x.Details[0].StockQuantity
                }).ToList();
                ERPOutPick outPick = new ERPOutPick()
                {
                    Rowindex = model.RowNo,
                    Material = model.MCode,
                    Qty = model.Qty,
                    Dataitem = pickDetails
                };
                ERPOutboundModel inboundModel = new ERPOutboundModel()
                {
                    Way = 1,
                    UniqueTag = model.OrderNo,
                    Code = model.OrderNo,
                    WarehouseCode = warehouse.WarehouseCode,
                    Docremark = "",
                    Deptno = model.DepartmentCode,
                    DeptName = model.DepartmentName,
                    Createtime = DateTime.Now,
                    Createuser = "WMS",
                    Picklist = new List<ERPOutPick>() { outPick },
                };
                string response = _invokeERPService.InvokeOutboundOrderApi(inboundModel);
                ErpRequestContent requestContent=response.DeserializeObject<ErpRequestContent>();
                if (requestContent.res==1)
                {
                    return WebResponseContent.Instance.OK(requestContent.Data);
                }
                else
                {
                    return WebResponseContent.Instance.Error(requestContent.Data);
                }
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        //public WebResponseContent FeedbackOutbondIssue(List<Dt_OutStockLockInfo> outStockLockInfos)
        //{
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs
@@ -470,12 +470,12 @@
                            List<object> data = new List<object>();
                            {
                                Type type = typeof(TaskInStatusEnum);
                                List<int> enums = Enum.GetValues(typeof(TaskInStatusEnum)).Cast<int>().ToList();
                                Type type = typeof(TaskStatusEnum);
                                List<int> enums = Enum.GetValues(typeof(TaskStatusEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(TaskInStatusEnum).GetField(((TaskInStatusEnum)item).ToString());
                                    FieldInfo? fieldInfo = typeof(TaskStatusEnum).GetField(((TaskStatusEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
@@ -489,25 +489,25 @@
                                }
                            }
                            {
                                Type type = typeof(TaskOutStatusEnum);
                                List<int> enums = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
                                        data.Add(new { key = item.ToString(), value = description.Description });
                                    }
                                    else
                                    {
                                        data.Add(new { key = item.ToString(), value = item.ToString() });
                                    }
                                    index++;
                                }
                            }
                            //{
                            //    Type type = typeof(TaskStatusEnum);
                            //    List<int> enums = Enum.GetValues(typeof(TaskStatusEnum)).Cast<int>().ToList();
                            //    int index = 0;
                            //    foreach (var item in enums)
                            //    {
                            //        FieldInfo? fieldInfo = typeof(TaskStatusEnum).GetField(((TaskStatusEnum)item).ToString());
                            //        DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                            //        if (description != null)
                            //        {
                            //            data.Add(new { key = item.ToString(), value = description.Description });
                            //        }
                            //        else
                            //        {
                            //            data.Add(new { key = item.ToString(), value = item.ToString() });
                            //        }
                            //        index++;
                            //    }
                            //}
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs
@@ -8,9 +8,11 @@
using WIDESEA_Common.OtherEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
using WIDESEA_DTO;
using WIDESEA_DTO.ERP;
using WIDESEA_DTO.MES;
using WIDESEA_ITaskInfoRepository;
using WIDESEA_ITaskInfoService;
@@ -30,14 +32,15 @@
            MesResponseContent responseContent = new MesResponseContent();
            try
            {
                //获取库存记录 warehouseID暂定先用固定值 TEST
                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.WarehouseId == 1 &&
                  x.PalletCode == model.ToolCode &&
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==WarehouseEnum.HA64.ToString());
                //获取库存记录
                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
                  x.WarehouseId == warehouse.WarehouseId &&
                  x.StockStatus==(int)StockStatusEmun.入库完成)
                .Includes(x => x.Details).First();
                .Includes(x => x.Details).Where(x => x.Details.Any(x => x.MaterielCode == model.ToolCode)).First();
                if (stockInfo==null)
                {
                    return responseContent.Error($"测试架托盘:{model.ToolCode}无库存记录");
                    return responseContent.Error($"测试架:{model.ToolCode}无可用库存");
                }
                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode &&
                  x.WarehouseId == stockInfo.WarehouseId &&
@@ -45,7 +48,7 @@
                  (x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut));
                if (locationInfo==null)
                {
                    return responseContent.Error($"货位:{stockInfo.LocationCode}出库条件不满足");
                    return responseContent.Error($"测试架货位:{stockInfo.LocationCode}出库条件不满足");
                }
                //生成测试架出库任务 é”å®šåº“å­˜ æ›´æ”¹è´§ä½çŠ¶æ€
                Dt_Task taskOut = new()
@@ -57,8 +60,8 @@
                    Roadway = locationInfo.RoadwayNo,
                    SourceAddress = stockInfo.LocationCode,
                    TargetAddress = "",
                    TaskStatus = (int)TaskOutStatusEnum.OutNew,
                    TaskType = (int)TaskOutboundTypeEnum.OutTestStand,
                    TaskStatus = (int)TaskStatusEnum.New,
                    TaskType = (int)TaskTypeEnum.TestOutbound,
                    TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                    PalletType = stockInfo.PalletType,
                    WarehouseId = stockInfo.WarehouseId,
@@ -66,6 +69,7 @@
                stockInfo.StockStatus = (int)StockStatusEmun.出库锁定;
                LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus;
                locationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
                //判断是否有出库单信息
                _unitOfWorkManage.BeginTran();
                //更新库存状态
                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
@@ -76,6 +80,8 @@
                //加入货位变动记录
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, locationStatus, LocationChangeType.OutboundAssignLocation, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", taskOut.TaskNum);
                _unitOfWorkManage.CommitTran();
                //将任务推送到WCS
                PushTasksToWCS();
                responseContent.OK();
            }
            catch (Exception ex)
@@ -85,5 +91,65 @@
            }
            return responseContent;
        }
        /// <summary>
        /// æµ‹è¯•架退库
        /// </summary>
        /// <returns></returns>
        public MesResponseContent TestReturnStock(TestToolBackModel backModel)
        {
            MesResponseContent responseContent = new MesResponseContent();
            try
            {
            }
            catch (Exception ex)
            {
                responseContent.Error(ex.Message);
            }
            return responseContent;
        }
        /// <summary>
        /// æµ‹è¯•架报废
        /// </summary>
        /// <returns></returns>
        public MesResponseContent TestScrap(TestToolScrap toolScrap)
        {
            MesResponseContent responseContent = new MesResponseContent();
            try
            {
                //获取测试架批次号库存
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA64.ToString());
                //获取库存记录
                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
                  x.WarehouseId == warehouse.WarehouseId)
                .Includes(x => x.Details).Where(x => x.Details.Any(x => x.MaterielCode == toolScrap.ToolCode)).First();
            }
            catch (Exception ex)
            {
                responseContent.Error(ex.Message);
            }
            return responseContent;
        }
        /// <summary>
        /// åŒæ­¥æµ‹è¯•架寿命
        /// </summary>
        /// <param name="toolSynInfo"></param>
        /// <returns></returns>
        public WebResponseContent TestSynStock(TestToolSynInfo toolSynInfo)
        {
            WebResponseContent content= new WebResponseContent();
            try
            {
                Root<TestToolSynInfo> root = new Root<TestToolSynInfo>()
                {
                };
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -57,6 +57,7 @@
        private readonly IRecordService _recordService;
        private readonly IOutboundService _outboundService;
        private readonly IStockService _stockService;
        private readonly IBasicRepository _basicRepository;
        public ITaskRepository Repository => BaseDal;
@@ -66,11 +67,11 @@
                {nameof(Dt_Task.CreateDate),OrderByType.Asc},
            };
        public List<int> TaskInboundTypes => typeof(TaskInboundTypeEnum).GetEnumIndexList();
        public List<int> TaskTypes => typeof(TaskTypeEnum).GetEnumIndexList();
        public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList();
        public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList();
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService) : base(BaseDal)
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService, IBasicRepository basicRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _unitOfWorkManage = unitOfWorkManage;
@@ -79,6 +80,7 @@
            _recordService = recordService;
            _outboundService = outboundService;
            _stockService = stockService;
            _basicRepository = basicRepository;
        }
        /// <summary>
@@ -89,8 +91,7 @@
        {
            try
            {
                List<Dt_Task> tasks = BaseDal.QueryData(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew));
                List<Dt_Task> tasks = BaseDal.QueryData(x => (TaskTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskStatusEnum.New));
                List<WMSTaskDTO> taskDTOs = _mapper.Map<List<WMSTaskDTO>>(tasks);
                string response = HttpHelper.Post("http://127.0.0.1:9291/api/Task/ReceiveTask", taskDTOs.Serialize());
@@ -118,7 +119,7 @@
                    return WebResponseContent.Instance.Error($"未找到该任务信息");
                }
                if (task.TaskType != TaskInboundTypeEnum.Inbound.ObjToInt())
                if (task.TaskType != TaskTypeEnum.Inbound.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"任务类型错误");
                }
@@ -154,7 +155,7 @@
                locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
                //测试架入库库存状态
                if (task.TaskType == TaskInboundTypeEnum.TestInbound.ObjToInt())
                if (task.TaskType == TaskTypeEnum.TestInbound.ObjToInt())
                {
                    stockInfo.StockStatus = StockStatusEmun.入库完成未建出库单.ObjToInt();
                }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -34,7 +34,7 @@
                    return WebResponseContent.Instance.Error($"该托盘已生成任务");
                }
                if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskInStatusEnum.InNew.ObjToInt()) != null)
                if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null)
                {
                    return WebResponseContent.Instance.Error($"该站点已有未执行的任务");
                }
@@ -62,8 +62,8 @@
                    Roadway = "",
                    SourceAddress = stationCode,
                    TargetAddress = "",
                    TaskType = TaskInboundTypeEnum.Inbound.ObjToInt(),
                    TaskStatus = TaskInStatusEnum.InNew.ObjToInt(),
                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
                };
                stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt();
@@ -107,7 +107,7 @@
                task.Roadway = roadwayNo;
                task.TargetAddress = locationInfo.LocationCode;
                task.TaskStatus = TaskInStatusEnum.SC_InExecute.ObjToInt();
                task.TaskStatus = TaskStatusEnum.SC_Execute.ObjToInt();
                LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -45,8 +45,8 @@
                            Roadway = locationInfo.RoadwayNo,
                            SourceAddress = stockInfo.LocationCode,
                            TargetAddress = "",
                            TaskStatus = TaskOutStatusEnum.OutNew.ObjToInt(),
                            TaskType = TaskOutboundTypeEnum.Outbound.ObjToInt(),
                            TaskStatus = TaskStatusEnum.New.ObjToInt(),
                            TaskType = TaskTypeEnum.Outbound.ObjToInt(),
                            TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                            PalletType = stockInfo.PalletType,
                            WarehouseId = stockInfo.WarehouseId,
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/AGV/AgvController.cs
@@ -25,6 +25,7 @@
namespace WIDESEA_WMSServer.Controllers.ERP
{
    #region å¼ƒç”¨
    /// <summary>
    /// ç‰¹åˆ›AGV接口
    /// </summary>
@@ -64,4 +65,5 @@
        }
    }
    #endregion
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs
@@ -44,5 +44,15 @@
        {
            return _taskService.TestToolOut(model.Content);
        }
        /// <summary>
        /// æŽ¥æ”¶MES测试架退库
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("TestReturnStock"), AllowAnonymous, MethodParamsValidate]
        public MesResponseContent TestReturnStock([FromBody] Root<TestToolBackModel> model)
        {
            return _taskService.TestReturnStock(model.Content);
        }
    }
}
ÏîÄ¿×ÊÁÏ/½Ó¿ÚÎĵµ/MESÒµÎñÁ÷³ÌͼV1.0.xlsx
Binary files differ