Code/WCS/WIDESEAWCS_Server/.claude/settings.local.json
@@ -4,7 +4,11 @@ "Bash(dotnet new:*)", "Bash(dotnet add:*)", "Bash(dotnet test:*)", "Bash(dotnet build WIDESEAWCS_Server.sln --nologo -v q)" "Bash(dotnet build WIDESEAWCS_Server.sln --nologo -v q)", "Bash(find . -maxdepth 2 -type f -name \"*.csproj\" 2>/dev/null | head -20)", "Bash(find . -name \"*.md\" -o -name \"docs\" -type d 2>/dev/null | head -20)", "Bash(ls -la WIDESEAWCS_Core/*.cs 2>/dev/null | wc -l)", "Bash(find . -name \"*.cs\" -not -path \"*/bin/*\" -not -path \"*/obj/*\" -exec wc -l {} + | tail -1)" ] } } Code/WCS/WIDESEAWCS_Server/docs/superpowers/specs/2026-03-11-wcs-ddd-refactor-design.md
@@ -79,6 +79,15 @@ // é¢åäºä»¶ private List<IDomainEvent> _domainEvents = new(); // å ¬å ±å±æ§è®¿é®å¨ public DeviceId Id => _id; public DeviceName Name => _name; public DeviceType Type => _type; public DeviceStatus Status => _status; public DeviceAddress Address => _address; public DateTime LastConnectedAt => _lastConnectedAt; public DateTime LastHeartbeatAt => _lastHeartbeatAt; // è¡ä¸ºæ¹æ³ public void Connect() { @@ -112,6 +121,12 @@ _properties.Add(DeviceProperty.Create(key, value)); } // ç¶æè®¾ç½®æ¹æ³ï¼ä¾ç¶ææºä½¿ç¨ï¼ internal void SetStatus(DeviceStatus status) { _status = status; } public IReadOnlyCollection<IDomainEvent> GetDomainEvents() => _domainEvents.AsReadOnly(); public void ClearDomainEvents() => _domainEvents.Clear(); } @@ -124,7 +139,9 @@ private List<DeviceId> _deviceIds; private GroupStrategy _strategy; private int _currentIndex; private static readonly Random _random = Random.Shared; // 设å¤ç»èåæ ¹ï¼ç»§ç»ï¼ public void AddDevice(DeviceId deviceId) { if (_deviceIds.Contains(deviceId)) @@ -148,7 +165,7 @@ case GroupStrategy.RoundRobin: return _deviceIds[_currentIndex++ % _deviceIds.Count]; case GroupStrategy.Random: return _deviceIds[new Random().Next(_deviceIds.Count)]; return _deviceIds[_random.Next(_deviceIds.Count)]; default: return _deviceIds[0]; } @@ -342,7 +359,84 @@ } ``` ### 2.4 ä»å¨æ¥å£è®¾è®¡ ### 2.4 åºç¡è®¾æ½ç±»å®ä¹ ```csharp // èåæ ¹åºç±» public abstract class AggregateRoot<TId> { public TId Id { get; protected set; } public int Version { get; private set; } private readonly List<IDomainEvent> _domainEvents = new(); protected AggregateRoot() { } protected AggregateRoot(TId id) { Id = id; } public IReadOnlyCollection<IDomainEvent> GetDomainEvents() => _domainEvents.AsReadOnly(); public void ClearDomainEvents() => _domainEvents.Clear(); protected void AddDomainEvent(IDomainEvent domainEvent) { _domainEvents.Add(domainEvent); } } // é¢åäºä»¶æ¥å£ public interface IDomainEvent { DateTime OccurredOn { get; } } // é¢åäºä»¶åºç±» public abstract record DomainEvent : IDomainEvent { public DateTime OccurredOn { get; init; } = DateTime.UtcNow; } // é¢åäºä»¶è°åº¦å¨æ¥å£ public interface IDomainEventDispatcher { Task Dispatch(IDomainEvent domainEvent); Task DispatchAsync(IEnumerable<IDomainEvent> domainEvents); } // ä»»å¡éåæ¥å£ public interface ITaskQueue { Task Enqueue<T>(T item) where T : class; Task<T> Dequeue<T>() where T : class; Task<int> Count(); } // ä»å¨åºæ¥å£ public interface IRepository<TEntity, TId> where TEntity : AggregateRoot<TId> { Task<TEntity?> GetById(TId id); Task Add(TEntity entity); Task Update(TEntity entity); Task Delete(TId id); } // å·¥ä½åå æ¥å£ public interface IUnitOfWork : IDisposable { ITransaction BeginTransaction(); Task Commit(); Task Rollback(); } public interface ITransaction : IDisposable { Task Commit(); Task Rollback(); } ``` ### 2.5 ä»å¨æ¥å£è®¾è®¡ ```csharp // 设å¤ä»å¨æ¥å£ Code/WMS/WIDESEA_WMSServer/.claude/settings.local.json
@@ -2,7 +2,43 @@ "permissions": { "allow": [ "Bash(claude plugin:*)", "Bash(cp:*)" "Bash(cp:*)", "Bash(xargs wc:*)", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_Common/WIDESEA_Common.csproj --no-incremental 2>&1 | head -50)", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_Core/WIDESEA_Core.csproj --no-incremental 2>&1 | head -50)", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_Model/WIDESEA_Model.csproj --no-incremental 2>&1 | head -50)", "Bash(find /e/è¿ é·ä¸è½½/WIDESEA_WMSServer -name \"*.cs\" -not -path \"*/bin/*\" -not -path \"*/obj/*\" -not -path \"*/.vs/*\" | xargs grep -l \"console.log\\\\|Console.WriteLine\\\\|debugger\" | head -10)", "Bash(find /e/è¿ é·ä¸è½½/WIDESEA_WMSServer -name \"*.cs\" -not -path \"*/bin/*\" -not -path \"*/obj/*\" -not -path \"*/.vs/*\" | xargs grep -h \"catch\\\\s*{\\\\s*}\" | wc -l)", "Bash(find /e/è¿ é·ä¸è½½/WIDESEA_WMSServer -name \"*.cs\" -not -path \"*/bin/*\" -not -path \"*/obj/*\" -not -path \"*/.vs/*\" -exec grep -l \"public\\\\s+.*\\\\\\(\\\\\\)\" {} \\\\; | wc -l)", "Bash(find /e/è¿ é·ä¸è½½/WIDESEA_WMSServer -name \"*.cs\" -not -path \"*/bin/*\" -not -path \"*/obj/*\" -not -path \"*/.vs/*\" -exec grep -l \"new\\\\s+List\\\\|new\\\\s+Dictionary\" {} \\\\; | wc -l)", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_IBasicService/WIDESEA_IBasicService.csproj)", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_BasicService/WIDESEA_BasicService.csproj)", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_BasicService/WIDESEA_BasicService.csproj 2>&1 | grep -i \"error\")", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_Common/WIDESEA_Common.csproj --no-incremental 2>&1)", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_Core/WIDESEA_Core.csproj --no-incremental 2>&1)", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_Model/WIDESEA_Model.csproj --no-incremental 2>&1)", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_Core/WIDESEA_Core.csproj --no-incremental 2>&1 | tail -20)", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_IInboundService/WIDESEA_IInboundService.csproj 2>&1 | grep -i \"error\")", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_InboundService/WIDESEA_InboundService.csproj 2>&1 | grep -i \"error\")", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_Common/WIDESEA_Common.csproj --no-incremental 2>&1 | grep -E \"\\(é误|é误|å·²æåçæ|warning\\)\" | tail -10)", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_IOutboundService/WIDESEA_IOutboundService.csproj WIDESEA_OutboundService/WIDESEA_OutboundService.csproj 2>&1 | grep -i \"error\")", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_Core/WIDESEA_Core.csproj --no-incremental 2>&1 | grep -E \"\\(é误|error|å·²æåçæ|warnings\\)\" | tail -10)", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_Model/WIDESEA_Model.csproj --no-incremental 2>&1 | grep -E \"\\(é误|error|å·²æåçæ|warnings\\)\" | tail -10)", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_OutboundService/WIDESEA_OutboundService.csproj 2>&1 | grep -i \"error\")", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_StockService/WIDESEA_StockService.csproj 2>&1 | grep -i \"error\")", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_ICheckService/WIDESEA_ICheckService.csproj WIDESEA_CheckService/WIDESEA_CheckService.csproj 2>&1 | grep -i \"error\")", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_CheckService/WIDESEA_CheckService.csproj 2>&1 | grep -i \"error\")", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_IRecordRecordService/WIDESEA_IRecordService.csproj WIDESEA_RecordService/WIDESEA_RecordService.csproj 2>&1 | grep -i \"error\")", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_RecordService/WIDESEA_RecordService.csproj 2>&1 | grep -i \"error\")", "Bash(cd \"E:\\\\è¿ é·ä¸è½½\\\\WIDESEA_WMSServer\" && dotnet build WIDESEA_TaskInfoService/WIDESEA_TaskInfoService.csproj 2>&1 | grep -i \"error\")", "Bash(cd \"E:/è¿ é·ä¸è½½/WIDESEA_WMSServer/WIDESEA_DTO\" && mv GradingMachine/OutPutDto.cs GradingMachine/OutputDto.cs && mv GradingMachine/InputDto.cs GradingMachine/GradingMachineInputDto.cs)", "Bash(cd \"E:/è¿ é·ä¸è½½/WIDESEA_WMSServer\" && dotnet build WIDESEA_WMSServer/WIDESEA_WMSServer.csproj --configuration Debug 2>&1 | head -100)", "Bash(cd \"E:/è¿ é·ä¸è½½/WIDESEA_WMSServer\" && dotnet build --configuration Debug 2>&1 | tail -50)", "Bash(cd \"E:/è¿ é·ä¸è½½/WIDESEA_WMSServer\" && dotnet build --configuration Debug 2>&1 | tail -30)", "Bash(cd \"E:/è¿ é·ä¸è½½/WIDESEA_WMSServer\" && dotnet build --configuration Debug 2>&1 | tail -20)", "Bash(cd \"E:/è¿ é·ä¸è½½/WIDESEA_WMSServer\" && dotnet build --configuration Debug 2>&1 | tail -25)", "Bash(cd \"E:/è¿ é·ä¸è½½/WIDESEA_WMSServer\" && dotnet build --configuration Debug 2>&1 | grep -A 2 -B 2 \"error CS0\")", "Bash(cd \"E:/è¿ é·ä¸è½½/WIDESEA_WMSServer\" && dotnet build --configuration Debug 2>&1 | tail -10)" ] } } Code/WMS/WIDESEA_WMSServer/REFACTOR_PLAN.md
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,738 @@ # WIDESEA WMS ç³»ç»éæè®¡å ## é¡¹ç®æ¦åµ ### 项ç®åºæ¬ä¿¡æ¯ - **项ç®åç§°**: WIDESEA_WMSServer ä»åºç®¡çç³»ç» - **项ç®ç±»å**: ASP.NET Core 6.0 Web API - **代ç è§æ¨¡**: 351个C#æä»¶,约912è¡ä»£ç - **æ¨¡åæ°é**: 20个模å - **æ¶ææ¨¡å¼**: å屿¶æ (Model-DTO-Repository-Service-API) ### 项ç®ç»æ ``` WIDESEA_WMSServer/ # 主APIé¡¹ç® WIDESEA_Model/ # æ°æ®æ¨¡åå± WIDESEA_DTO/ # æ°æ®ä¼ è¾å¯¹è±¡å± WIDESEA_Core/ # æ ¸å¿åºç¡æ¶æå± âââ BaseRepository/ # æ°æ®ä»å¨å± âââ BaseServices/ # åºç¡æå¡å± âââ DB/ # æ°æ®åºé ç½® âââ Helper/ # è¾ å©å·¥å ·ç±» âââ Utilities/ # å·¥å ·ç±» âââ Middlewares/ # ä¸é´ä»¶ âââ ... WIDESEA_Common/ # å ¬å ±æä¸¾å常é WIDESEA_BasicService/ # åºç¡ä¿¡æ¯æå¡å®ç° WIDESEA_InboundService/ # å ¥åºæå¡å®ç° WIDESEA_OutboundService/ # åºåºæå¡å®ç° WIDESEA_StockService/ # åºåæå¡å®ç° WIDESEA_CheckService/ # çç¹æå¡å®ç° WIDESEA_SystemService/ # ç³»ç»æå¡å®ç° WIDESEA_RecordService/ # è®°å½æå¡å®ç° WIDESEA_TaskInfoService/ # ä»»å¡ä¿¡æ¯æå¡å®ç° ``` --- ## åç°çé®é¢æ¸ å ### ä¸ãé«ä¼å 级é®é¢ (P0 - ç«å³å¤ç) #### 1.1 空å¼å¸¸æè·å (严é) **é®é¢æè¿°**: å¤å¤ä»£ç ä¸åå¨ç©ºçcatchå,ä¼éèå¼å¸¸å¯¼è´é¾ä»¥è°è¯ **å½±åèå´**: 7个æä»¶ **示ä¾ä½ç½®**: - `WIDESEA_Core/BaseServices/ServiceBase.cs:114` - 空catchå - `WIDESEA_Core/Helper/ObjectExtension.cs:51-54` - 空catchå - `WIDESEA_Core/DB/BaseDBConfig.cs:32-34` - 空catchå - `WIDESEA_Core/BaseModels/PageDataOptions.cs` - 空catchå - `WIDESEA_Core/Middlewares/ApiLogMiddleware.cs` - 空catchå - `WIDESEA_Core/Utilities/EntityProperties.cs` - 空catchå - `WIDESEA_SystemService/Sys_MenuService.cs` - 空catchå - `WIDESEA_SystemService/Sys_UserService.cs` - 空catchå **éæå»ºè®®**: ```csharp // ä¸å¥½çåæ³ try { ... } catch { } // 好çåæ³ try { // ä¸å¡é»è¾ } catch (Exception ex) { _logger.LogError(ex, "æä½å¤±è´¥"); throw; } ``` **é¢ä¼°å·¥ä½é**: 2人天 --- #### 1.2 å½åè§èé误 (严é) **é®é¢æè¿°**: å ³é®å®ä½ç±»å卿¼åé误 **å½±åèå´**: åºç¡å®ä½å± **示ä¾ä½ç½®**: - `WIDESEA_Core/DB/Models/BaseEntity.cs:44` - `Creater` åºä¸º `Creator` - 该æ¼åéè¯¯å¨æ°æ®åºæ å°ãåºååãå¯¼å ¥å¯¼åºçå¤å¤ä½¿ç¨ **éæå»ºè®®**: 1. ä¿®æ£ `BaseEntity.Creater` 为 `Creator` 2. æ·»å æ°æ®åºåå«åæ å°ä¿æå ¼å®¹æ§ 3. å ¨å±æç´¢æ¿æ¢ææå¼ç¨ **é¢ä¼°å·¥ä½é**: 3人天 --- #### 1.3 æ é循ç¯çº¿ç¨é£é© (严é) **é®é¢æè¿°**: Loggerç±»ä½¿ç¨ `while(true)` æ é循ç¯,缺ä¹åæ¶æºå¶ **å½±åä½ç½®**: `WIDESEA_Core/LogHelper/Logger.cs:32-66` **éæå»ºè®®**: ```csharp // 使ç¨CancellationTokenæ¿ä»£while(true) private readonly CancellationTokenSource _cts = new(); static async void StartWriteLog() { try { while (!_cts.IsCancellationRequested) { // å¤çé»è¾ await Task.Delay(5000, _cts.Token); } } catch (OperationCanceledException) { // æ£å¸¸åæ¶ } } // æ·»å Disposeæ¹æ³éæ¾èµæº public static void Dispose() => _cts.Cancel(); ``` **é¢ä¼°å·¥ä½é**: 1人天 --- #### 1.4 TODOæ³¨éæªå®æ (é«) **é®é¢æè¿°**: 代ç ä¸å卿ªå®æçTODO注é **å½±åèå´**: 5个æä»¶ **示ä¾ä½ç½®**: - `WIDESEA_Core/Helper/HTTP/HttpClientHelper.cs:181,211,222` - TODO:æ¥å¿è®°å½ - `WIDESEA_WMSServer/Program.cs` - TODO项 **éæå»ºè®®**: 宿ææTODOæ è®°çåè½æå 餿 ç¨çTODO **é¢ä¼°å·¥ä½é**: 1人天 --- ### äºãä¸ä¼å 级é®é¢ (P1 - è¿æå¤ç) #### 2.1 代ç éå¤ä¸¥é (é«) **é®é¢æè¿°**: RepositoryBaseåServiceBaseä¸åå¨å¤§ééå¤ä»£ç **RepositoryBaseéå¤**: - åæ¥æ¹æ³ä¸å¼æ¥æ¹æ³é»è¾å®å ¨éå¤ (约50ä¸ªæ¹æ³) - 示ä¾: `QureyDataById` å `QureyDataByIdAsync` åªæ¯è°ç¨å¼æ¥çæ¬ **ServiceBaseéå¤**: - CRUDæä½ä»£ç éå¤ - å页æ¥è¯¢é»è¾éå¤ - å¯¼å ¥å¯¼åºé»è¾éå¤ **éæå»ºè®®**: 1. ä½¿ç¨æºä»£ç çæå¨èªå¨çæå¼æ¥æ¹æ³ 2. æåå ¬å ±é»è¾å°æ©å±æ¹æ³ 3. 使ç¨Template Method模å¼åå°éå¤ **é¢ä¼°å·¥ä½é**: 5人天 --- #### 2.2 æ¹æ³è¿é¿ (ä¸) **é®é¢æè¿°**: åä¸ªæ¹æ³è¡æ°è¿å¤,å¯è¯»æ§å·® **示ä¾**: - `ServiceBase.GetPageData()` - 43è¡ - `ServiceBase.ValidatePageOptions()` - 52è¡ - `ServiceBase.GetWhereExpression()` - 121è¡ - `ServiceBase.UpdateData()` - 63è¡ **éæå»ºè®®**: å°å¤§æ¹æ³æåä¸ºå°æ¹æ³,æ¯ä¸ªæ¹æ³ä¸è¶ è¿20è¡ **é¢ä¼°å·¥ä½é**: 4人天 --- #### 2.3 æ··ç¨JSONåºåååº (ä¸) **é®é¢æè¿°**: åæ¶ä½¿ç¨ Newtonsoft.Json å System.Text.Json **å½±åèå´**: 16个æä»¶æ··ç¨ **示ä¾**: - `HttpClientHelper.cs` ä½¿ç¨ Newtonsoft.Json - `ServiceBase.cs` ä½¿ç¨ Newtonsoft.Json - `Program.cs` ä½¿ç¨ System.Text.Json **éæå»ºè®®**: ç»ä¸ä½¿ç¨ System.Text.Json (.NET Core宿¹æ¨è) **é¢ä¼°å·¥ä½é**: 3äººæ¥ --- #### 2.4 è¿åº¦ä½¿ç¨dynamicç±»å (ä¸) **é®é¢æè¿°**: 大é使ç¨dynamic,éä½ç±»åå®å ¨åIDEæ¯æ **示ä¾ä½ç½®**: - `Logger.cs:19,151-169` - 使ç¨dynamicä½ä¸ºæ¥å¿å¯¹è±¡ - `BaseDBConfig.cs:57` - 使ç¨dynamicæ¥æ¶æ°æ®åºæ¥è¯¢ç»æ **éæå»ºè®®**: ```csharp // å®ä¹æç¡®çæ¥å¿å®ä½ public class LogEntry { public DateTime BeginDate { get; set; } public DateTime EndDate { get; set; } public string RequestParam { get; set; } public string ResponseParam { get; set; } // ... } ``` **é¢ä¼°å·¥ä½é**: 2人天 --- #### 2.5 硬ç¼ç å符串åéæ³æ°å (ä¸) **é®é¢æè¿°**: 大é硬ç¼ç å¼,缺ä¹å¸¸éå®ä¹ **示ä¾**: - `Logger.cs:37` - 硬ç¼ç 500 (æ¹éæå ¥å¤§å°) - `Logger.cs:42` - 硬ç¼ç 5000 (轮询é´é) - `PDAController.cs:79` - 硬ç¼ç æä»¶åæ ¼å¼ - åç§è·¯å¾å符串硬ç¼ç **éæå»ºè®®**: æå为常éæé 置项 ```csharp public static class LogConstants { public const int BatchSize = 500; public const int FlushIntervalMs = 5000; } ``` **é¢ä¼°å·¥ä½é**: 2人天 --- #### 2.6 åå°æ§è½å¼é (ä¸) **é®é¢æè¿°**: ServiceBaseä¸é¢ç¹ä½¿ç¨åå°è·å屿§ä¿¡æ¯ **示ä¾ä½ç½®**: - `ServiceBase.TProperties` - æ¯æ¬¡é½éæ°è·å - `ObjectExtension.DicToModel` - 使ç¨åå°èµå¼ **éæå»ºè®®**: 1. ç¼å PropertyInfo 2. èè使ç¨ç¼è¯è¡¨è¾¾å¼æ¿ä»£åå° 3. ä½¿ç¨ Source Generator çææ å°ä»£ç **é¢ä¼°å·¥ä½é**: 3人天 --- #### 2.7 注é缺失 (ä¸) **é®é¢æè¿°**: 大鿹æ³ç¼ºå°XMLææ¡£æ³¨é **ç»è®¡**: 约50%çå ¬å ±æ¹æ³æ²¡ææ³¨é **示ä¾**: - `RepositoryBase` ä¸å¤§é¨åæ¹æ³ç¼ºå°æ³¨é - `ServiceBase` ä¸å¤æé»è¾ç¼ºå°æ³¨é - ä¸å¡æå¡å±æ¹æ³ç¼ºå°æ³¨é **éæå»ºè®®**: 为ææå ¬å ±APIæ·»å XMLææ¡£æ³¨é ```csharp /// <summary> /// éè¿ä¸»é®æ¥è¯¢æ°æ® /// </summary> /// <param name="id">主é®å¼</param> /// <returns>æ¥è¯¢å°çå®ä½,æªæ¾å°è¿ånull</returns> public TEntity QueryById(object id) { ... } ``` **é¢ä¼°å·¥ä½é**: 5人天 --- ### ä¸ãä½ä¼å 级é®é¢ (P2 - é¿æä¼å) #### 3.1 å¤ç§æ·ä»£ç 被注é (ä½) **é®é¢æè¿°**: RepositoryBaseä¸çå¤ç§æ·æ¶æä»£ç å ¨é¨è¢«æ³¨é **å½±åä½ç½®**: `RepositoryBase.cs:24-55` **éæå»ºè®®**: è¦ä¹å 餿 ç¨ä»£ç ,è¦ä¹å®æå¤ç§æ·åè½ **é¢ä¼°å·¥ä½é**: 2人天 --- #### 3.2 ä»åºé 置代ç 被注é (ä½) **é®é¢æè¿°**: SqlsugarSetupä¸ç读åå离é 置被注é **å½±åä½ç½®**: `SqlsugarSetup.cs:66-119` **éæå»ºè®®**: å 餿å¯ç¨è¯»åå离åè½ **é¢ä¼°å·¥ä½é**: 1人天 --- #### 3.3 缺å°åå æµè¯ (é«) **é®é¢æè¿°**: 项ç®ä¸å®å ¨æ²¡æåå æµè¯ **建议**: æ·»å æ ¸å¿ä¸å¡é»è¾çåå æµè¯ **é¢ä¼°å·¥ä½é**: 10人天 --- #### 3.4 缺å°APIææ¡£ (ä¸) **é®é¢æè¿°**: åªä¾èµSwaggerèªå¨çæ,缺å°è¯¦ç»çä½¿ç¨ææ¡£ **建议**: ç¼åAPIä½¿ç¨ææ¡£åæ¶æè®¾è®¡ææ¡£ **é¢ä¼°å·¥ä½é**: 5人天 --- #### 3.5 Console.WriteLineå¨ç产代ç (ä½) **é®é¢æè¿°**: å¤å¤ä½¿ç¨Console.WriteLine **示ä¾ä½ç½®**: - `Logger.cs:64` - å¼å¸¸æ¶è¾åºå°Console - `BaseDBConfig.cs:52` - SQLé误è¾åºå°Console - `SqlsugarSetup.cs:58-60` - SQLæå° **éæå»ºè®®**: ä½¿ç¨æ£å¼çæ¥å¿æ¡æ¶ **é¢ä¼°å·¥ä½é**: 2人天 --- #### 3.6 èµæºéæ¾ä¸å½ (ä¸) **é®é¢æè¿°**: é¨åIDisposableèµæºæªæ£ç¡®éæ¾ **示ä¾**: - `Logger` 类没æå®ç°IDisposable - `HttpClientHelper` çSqlConnectionå¯è½æªéæ¾ **éæå»ºè®®**: å®ç°IDisposableæ¨¡å¼ **é¢ä¼°å·¥ä½é**: 2人天 --- ## éæä¼å 级æåº ### 第ä¸é¶æ®µ: ä¿®å¤ä¸¥éé®é¢ (é¢è®¡10人天) 1. â ä¿®å¤ææç©ºå¼å¸¸æè·å (2人天) 2. â ä¿®æ£å½åè§èé误 - Creater -> Creator (3人天) 3. â ä¿®å¤æ é循ç¯çº¿ç¨é£é© (1人天) 4. â å®æææ¸ çTODO注é (1人天) 5. â å 餿³¨éæçå¤ä½ä»£ç (2人天) 6. â 使ç¨ç»ä¸æ¥å¿æ¡æ¶æ¿ä»£Console (1人天) ### 第äºé¶æ®µ: æ¹å代ç è´¨é (é¢è®¡19人天) 7. â åå°ä»£ç éå¤ - Repository弿¥æ¹æ³ (5人天) 8. â æåè¿é¿æ¹æ³ (4人天) 9. â ç»ä¸JSONåºåååº (3人æ¥) 10. â åå°dynamicä½¿ç¨ (2人天) 11. â æåéæ³æ°åå硬ç¼ç (2人天) 12. â ä¼ååå°æ§è½ (3人天) ### 第ä¸é¶æ®µ: å®åææ¡£åæµè¯ (é¢è®¡15人天) 13. â æ·»å XMLææ¡£æ³¨é (5人天) 14. â æ·»å åå æµè¯ (10人天) ### 第åé¶æ®µ: æ¶æä¼å (é¢è®¡10人天) 15. â å®ç°IDisposableæ¨¡å¼ (2人天) 16. â ä¼åèµæºç®¡ç (2人天) 17. â æ·»å æ§è½çæ§ (2人天) 18. â ä¼åç¼åçç¥ (2人天) 19. â ç¼åæ¶æææ¡£ (2人天) **æ»é¢ä¼°å·¥ä½é**: 约54äººæ¥ (约10.8人å¨) --- ## 详ç»éæå»ºè®® ### 建议1: å®ç°ç»ä¸çå¼å¸¸å¤çæºå¶ **å½åé®é¢**: å¼ç±»å¤ç忣,没æç»ä¸çç¥ **è§£å³æ¹æ¡**: ```csharp // å®ä¹èªå®ä¹å¼å¸¸åºç±» public abstract class WmsException : Exception { public string ErrorCode { get; } public WmsException(string code, string message) : base(message) { ErrorCode = code; } } // ä¸å¡å¼å¸¸ public class BusinessException : WmsException { public BusinessException(string code, string message) : base(code, message) { } } // ç»ä¸å¼å¸¸å¤çä¸é´ä»¶ public class GlobalExceptionHandlerMiddleware { public async Task InvokeAsync(HttpContext context, RequestDelegate next) { try { await next(context); } catch (WmsException ex) { context.Response.StatusCode = 400; await context.Response.WriteAsJsonAsync(new { success = false, errorCode = ex.ErrorCode, message = ex.Message }); } catch (Exception ex) { context.Response.StatusCode = 500; await context.Response.WriteAsJsonAsync(new { success = false, message = "æå¡å¨å é¨é误" }); } } } ``` --- ### 建议2: éææ¥å¿ç³»ç» **å½åé®é¢**: Loggerç±»ä½¿ç¨æ é循ç¯,ç±»åä¸å®å ¨ **è§£å³æ¹æ¡**: ```csharp public class WmsLogger : ILogger, IDisposable { private readonly Channel<LogEntry> _logChannel; private readonly Task _processingTask; private readonly CancellationTokenSource _cts; public WmsLogger() { var options = new BoundedChannelOptions(1000) { FullMode = BoundedChannelFullMode.Wait }; _logChannel = Channel.CreateBounded<LogEntry>(options); _cts = new CancellationTokenSource(); _processingTask = Task.Run(() => ProcessLogsAsync(_cts.Token)); } public async Task LogAsync(LogEntry entry) { await _logChannel.Writer.WriteAsync(entry); } private async Task ProcessLogsAsync(CancellationToken token) { var batch = new List<LogEntry>(LogConstants.BatchSize); while (!token.IsCancellationRequested) { try { // æ¶éæ¹éæ°æ® while (batch.Count < LogConstants.BatchSize && await _logChannel.Reader.WaitToReadAsync(token)) { while (_logChannel.Reader.TryRead(out var entry)) { batch.Add(entry); } } if (batch.Count > 0) { await BatchInsertAsync(batch); batch.Clear(); } await Task.Delay(LogConstants.FlushIntervalMs, token); } catch (OperationCanceledException) { break; } catch (Exception ex) { // è®°å½å°å¤ç¨ä½ç½® System.Diagnostics.Debug.WriteLine($"æ¥å¿å¤ç失败: {ex.Message}"); } } // å¤çå©ä½æ°æ® if (batch.Count > 0) { await BatchInsertAsync(batch); } } public void Dispose() { _cts.Cancel(); _processingTask.Wait(); _cts.Dispose(); } } ``` --- ### 建议3: 使ç¨ç¼è¯æ¶åå°ä¼å **å½åé®é¢**: è¿è¡æ¶åå°æ§è½å·® **è§£å³æ¹æ¡**: 使ç¨Source Generator ```csharp // å®ä¹æ è®°æ¥å£ public interface IModelMapper<T> where T : class { T MapFrom(Dictionary<string, object> dict); } // Source Generatorèªå¨çæå®ç° // çæä»£ç 示ä¾: public partial class ModelMapper : IModelMapper<YourEntity> { public YourEntity MapFrom(Dictionary<string, object> dict) { return new YourEntity { Id = dict.TryGetValue("Id", out var id) ? (int)id : 0, Name = dict.TryGetValue("Name", out var name) ? (string)name : null, // ... å ¶ä»å±æ§ }; } } ``` --- ### 建议4: å®ç°Repositoryæ¨¡å¼æä½³å®è·µ **å½åé®é¢**: Repositoryèè´£ä¸æ¸ æ° **è§£å³æ¹æ¡**: ```csharp // å®ä¹è§èæ¥å£ public interface IRepository<T> where T : class { Task<T?> GetByIdAsync(object id); Task<IEnumerable<T>> GetAllAsync(); Task<IEnumerable<T>> FindAsync(Expression<Func<T, bool>> predicate); Task AddAsync(T entity); Task AddRangeAsync(IEnumerable<T> entities); Task UpdateAsync(T entity); Task DeleteAsync(object id); Task<int> CountAsync(Expression<Func<T, bool>> predicate = null); } // å®ç°åºç±» public abstract class RepositoryBase<T> : IRepository<T> where T : class { protected readonly ISqlSugarClient Db; public RepositoryBase(ISqlSugarClient db) { Db = db; } public virtual async Task<T?> GetByIdAsync(object id) { return await Db.Queryable<T>().In(id).FirstAsync(); } // ... å ¶ä»å®ç° } // é对ç¹å®å®ä½çRepositoryå¯ä»¥æ©å± public interface IUserRepository : IRepository<User> { Task<User?> GetByUsernameAsync(string username); } public class UserRepository : RepositoryBase<User>, IUserRepository { public UserRepository(ISqlSugarClient db) : base(db) { } public async Task<User?> GetByUsernameAsync(string username) { return await Db.Queryable<User>() .Where(u => u.Username == username) .FirstAsync(); } } ``` --- ### 建议5: å®ç°CQRS模å¼å离读å **å½åé®é¢**: æææä½é½å¨Service䏿··å **è§£å³æ¹æ¡**: ```csharp // å½ä»¤æ¥å£ public interface ICommandHandler<TCommand, TResult> { Task<TResult> HandleAsync(TCommand command); } // æ¥è¯¢æ¥å£ public interface IQueryHandler<TQuery, TResult> { Task<TResult> HandleAsync(TQuery query); } // 示ä¾å½ä»¤ public record CreateInboundOrderCommand( string OrderNo, int SupplierId, List<InboundOrderItem> Items ) : IRequest<InboundOrder>; // ç¤ºä¾æ¥è¯¢ public record GetInboundOrderQuery(int OrderId) : IRequest<InboundOrderDto>; // å½ä»¤å¤çå¨ public class CreateInboundOrderCommandHandler : ICommandHandler<CreateInboundOrderCommand, InboundOrder> { public async Task<InboundOrder> HandleAsync(CreateInboundOrderCommand command) { // å建é»è¾ } } ``` --- ## éææ§è¡æ£æ¥æ¸ å ### 代ç è´¨éæ£æ¥ - [ ] ææç©ºcatchåå·²ç§»é¤ææ·»å æ¥å¿ - [ ] ææpublicæ¹æ³é½æXML注é - [ ] 没æä½¿ç¨Console.WriteLineç代ç - [ ] 没æéæ³æ°åå硬ç¼ç å符串 - [ ] åä¸ªæ¹æ³ä¸è¶ è¿50è¡ - [ ] å个类ä¸è¶ è¿500è¡ - [ ] åå¤æåº¦æ§å¶å¨10以å ### æ¶ææ£æ¥ - [ ] ä¾èµæ³¨å ¥ä½¿ç¨æé 彿°æ³¨å ¥ - [ ] ææIDisposableèµæºé½æ£ç¡®éæ¾ - [ ] 没æå¾ªç¯ä¾èµ - [ ] æ¥å£åå®ç°åç¦»æ¸ æ° - [ ] 屿¬¡åæ,没æè¶å±è°ç¨ ### æ§è½æ£æ¥ - [ ] æ°æ®åºæ¥è¯¢ä½¿ç¨å¼æ¥æ¹æ³ - [ ] åå°ä½¿ç¨å·²ä¼åæç¼å - [ ] éåæä½ä½¿ç¨LINQèéå¾ªç¯ - [ ] å符串æä½ä½¿ç¨StringBuilder ### å®å ¨æ£æ¥ - [ ] SQLæ³¨å ¥é£é©å·²æ¶é¤ - [ ] ææä¿¡æ¯å·²å å¯åå¨ - [ ] APIæéå½ç认è¯åææ - [ ] å¼å¸¸ä¿¡æ¯ä¸æ´é²å é¨ç»è ### æµè¯æ£æ¥ - [ ] æ ¸å¿ä¸å¡é»è¾æåå æµè¯ - [ ] å ³é®APIæéææµè¯ - [ ] æµè¯è¦ççä¸ä½äº60% --- ## é£é©è¯ä¼° ### é«é£é©é¡¹ 1. **æ°æ®æ¨¡åä¿®æ¹é£é©**: ä¿®æ£ `Creater` 为 `Creator` å¯è½å½±åç°ææ°æ®åº - **ç¼è§£æªæ½**: æ·»å æ°æ®åºåå«åæ å°,åæ¹æ¬¡è¿ç§» 2. **éæServiceBaseé£é©**: 该类被大éæå¡ç»§æ¿ - **ç¼è§£æªæ½**: ä¿æå ¬å ±æ¥å£ä¸å,å éæå é¨å®ç° ### ä¸é£é©é¡¹ 1. **ç»ä¸JSONåºé£é©**: å¯è½å½±ååºååå ¼å®¹æ§ - **ç¼è§£æªæ½**: 使ç¨JsonConverterä¿æå ¼å®¹æ§ 2. **æ¿æ¢æ¥å¿ç³»ç»é£é©**: æ¥å¿ä¸¢å¤±é£é© - **ç¼è§£æªæ½**: æ°æ§ç³»ç»å¹¶è¡è¿è¡ä¸æ®µæ¶é´ --- ## 建议çéæå·¥å · 1. **Roslyn Analyzers**: èªå¨æ£æµä»£ç é®é¢ 2. **SonarQube**: 代ç è´¨éåæ 3. **Resharper**: 代ç éæè¾ å© 4. **Source Generator**: èªå¨çæä»£ç 5. **xUnit/NUnit**: åå æµè¯æ¡æ¶ 6. **Moq/NSubstitute**: Mockæ¡æ¶ --- ## æ»ç» ### å ³é®åç° 1. 项ç®éç¨ç»å ¸å屿¶æ,ä½å®ç°ä¸å¤è§è 2. åå¨ä¸¥éç代ç éå¤å空å¼å¸¸æè·é®é¢ 3. ç¼ºå°æµè¯åææ¡£ 4. æä¸å®çææ¯åºå¡éè¦æ¸ ç ### æ ¸å¿å»ºè®® 1. **ç«å³ä¿®å¤**: 空å¼å¸¸æè·åãå½åéè¯¯ãæ é循ç¯é£é© 2. **çææ¹è¿**: åå°ä»£ç éå¤ãç»ä¸ææ¯æ ãæ·»å 注é 3. **é¿æä¼å**: å®åæµè¯ãä¼åæ¶æãæåæ§è½ ### 颿æ¶ç - 代ç å¯ç»´æ¤æ§æå 50% - Bugæ°ééä½ 30% - æ°åè½å¼åæçæå 25% - ç³»ç»æ§è½æå 15% --- **ææ¡£çææ¶é´**: 2026-03-10 **åæå·¥å ·çæ¬**: Claude Code Analysis **项ç®çæ¬**: WIDESEA_WMSServer v1.0 Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs
@@ -2,19 +2,50 @@ namespace WIDESEA_BasicService { /// <summary> /// åºç¡ä¿¡æ¯æå¡èåå®ç°ç±» /// </summary> public class BasicService : IBasicService { /// <summary> /// æçç¼ç ä¸å¡å± /// </summary> public IPalletCodeInfoService PalletCodeInfoService { get; } /// <summary> /// è´§ä½ä¸å¡å± /// </summary> public ILocationInfoService LocationInfoService { get; } /// <summary> /// ç©æä¸å¡å± /// </summary> public IMaterielInfoService MaterielInfoService { get; } /// <summary> /// ä»åºä¸å¡å± /// </summary> public IWarehouseService WarehouseService { get; } /// <summary> /// ç©æç¼ç ä¸å¡å± /// </summary> public IMaterielCodeInfoService MaterielCodeInfoService { get; } public BasicService(ILocationInfoService locationInfoService, IMaterielInfoService materielInfoService, IWarehouseService warehouseService, IPalletCodeInfoService palletCodeInfoService, IMaterielCodeInfoService materielCodeInfoService) /// <summary> /// æé 彿° /// </summary> /// <param name="locationInfoService">è´§ä½ä¿¡æ¯æå¡</param> /// <param name="materielInfoService">ç©æä¿¡æ¯æå¡</param> /// <param name="warehouseService">ä»åºä¿¡æ¯æå¡</param> /// <param name="palletCodeInfoService">æçç¼ç ä¿¡æ¯æå¡</param> /// <param name="materielCodeInfoService">ç©æç¼ç ä¿¡æ¯æå¡</param> public BasicService( ILocationInfoService locationInfoService, IMaterielInfoService materielInfoService, IWarehouseService warehouseService, IPalletCodeInfoService palletCodeInfoService, IMaterielCodeInfoService materielCodeInfoService) { LocationInfoService = locationInfoService; MaterielInfoService = materielInfoService; Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs
@@ -1,4 +1,4 @@ using WIDESEA_Common.LocationEnum; using WIDESEA_Common.LocationEnum; using WIDESEA_Common.TaskEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; @@ -7,25 +7,43 @@ using WIDESEA_DTO.Basic; using WIDESEA_IBasicService; using WIDESEA_Model.Models; using WIDESEA_Common.CommonEnum; namespace WIDESEA_BasicService { /// <summary> /// è´§ä½ä¿¡æ¯æå¡å®ç°ç±» /// </summary> public partial class LocationInfoService : ServiceBase<Dt_LocationInfo, IRepository<Dt_LocationInfo>>, ILocationInfoService { public IRepository<Dt_LocationInfo> Repository => BaseDal; public IRepository<Dt_Task> _taskRepository { get; } private readonly IRepository<Dt_Task> _taskRepository; private readonly IRepository<Dt_StockInfo> _stockInfoRepository; public IRepository<Dt_StockInfo> _stockInfoRepository { get; set; } public LocationInfoService(IRepository<Dt_LocationInfo> BaseDal, IRepository<Dt_Task> taskRepository, IRepository<Dt_StockInfo> stockInfoRepository) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> /// <param name="taskRepository">ä»»å¡ä»å¨</param> /// <param name="stockInfoRepository">åºåä¿¡æ¯ä»å¨</param> public LocationInfoService( IRepository<Dt_LocationInfo> baseDal, IRepository<Dt_Task> taskRepository, IRepository<Dt_StockInfo> stockInfoRepository) : base(baseDal) { _taskRepository = taskRepository; _stockInfoRepository = stockInfoRepository; } /// <summary> /// è·åè´§ä½ä¿¡æ¯ä»å¨ /// </summary> public IRepository<Dt_LocationInfo> Repository => BaseDal; /// <summary> /// æ¹éå¯ç¨è´§ä½ /// </summary> /// <param name="keys">è´§ä½ä¸»é®æ°ç»</param> /// <returns>æä½ç»æ</returns> public WebResponseContent LocationEnableStatus(int[] keys) { var locationInfos = Repository.QueryData(x => keys.Contains(x.Id)); @@ -37,6 +55,8 @@ /// <summary> /// æ¹éç¦ç¨è´§ä½ /// </summary> /// <param name="keys">è´§ä½ä¸»é®æ°ç»</param> /// <returns>æä½ç»æ</returns> public WebResponseContent LocationDisableStatus(int[] keys) { var locationInfos = Repository.QueryData(x => keys.Contains(x.Id)); @@ -48,16 +68,22 @@ /// <summary> /// å个å¯ç¨è´§ä½ /// </summary> /// <param name="key">è´§ä½ä¸»é®</param> /// <returns>æä½ç»æ</returns> public WebResponseContent LocationEnableStatus(int key) => LocationEnableStatus(new[] { key }); /// <summary> /// å个ç¦ç¨è´§ä½ /// </summary> /// <param name="key">è´§ä½ä¸»é®</param> /// <returns>æä½ç»æ</returns> public WebResponseContent LocationDisableStatus(int key) => LocationDisableStatus(new[] { key }); /// <summary> /// åå§åè´§ä½ /// </summary> /// <param name="dto">åå§åè´§ä½æ°æ®ä¼ è¾å¯¹è±¡</param> /// <returns>æä½ç»æ</returns> public WebResponseContent InitializationLocation(InitializationLocationDTO dto) { try @@ -91,36 +117,11 @@ } } private static int CalculateDepth(int row, int maxRow, int maxDepth, int currentDepth) { int mod = row % maxRow; if (mod == 1) return maxDepth; if (mod == maxDepth + 1) return 1; if (mod > 1 && mod <= maxDepth) return currentDepth - 1; return currentDepth + 1; } private static Dt_LocationInfo CreateLocationInfo(string roadwayNo, int row, int col, int layer, int depth) { return new Dt_LocationInfo { WarehouseId = 0, Row = row, Column = col, Layer = layer, Depth = depth, RoadwayNo = roadwayNo, EnableStatus = EnableStatusEnum.Normal.GetHashCode(), LocationStatus = LocationStatusEnum.Free.GetHashCode(), LocationType = LocationTypeEnum.Undefined.GetHashCode(), LocationCode = $"{row:D3}-{col:D3}-{layer:D3}", //$"{roadwayNo}-{row:D3}-{col:D3}-{layer:D3}-{depth:D2}" LocationName = $"{roadwayNo}å··é{row:D3}è¡{col:D3}å{layer:D3}å±{depth:D2}æ·±" }; } /// <summary> /// è·å空é²è´§ä½ä¿¡æ¯(æ ¹æ®å··éæ¥è¯¢) /// æ ¹æ®å··éè·å空é²è´§ä½ä¿¡æ¯ /// </summary> /// <param name="roadwayNo">å··éç¼å·</param> /// <returns>空é²è´§ä½ä¿¡æ¯ï¼å¦ææªæ¾å°åè¿ånull</returns> public async Task<Dt_LocationInfo?> GetLocationInfo(string roadwayNo) { var locations = await BaseDal.QueryDataAsync(x => @@ -137,13 +138,21 @@ } /// <summary> /// è·åè´§ä½ä¿¡æ¯(æ ¹æ®å··éåè´§ä½ç¼ç æ¥è¯¢) /// æ ¹æ®å··éåè´§ä½ç¼ç è·å空é²è´§ä½ä¿¡æ¯ /// </summary> /// <param name="roadwayNo">å··éç¼å·</param> /// <param name="locationCode">è´§ä½ç¼ç </param> /// <returns>è´§ä½ä¿¡æ¯ï¼å¦ææªæ¾å°åè¿ånull</returns> public async Task<Dt_LocationInfo?> GetLocationInfo(string roadwayNo, string locationCode) { return await BaseDal.QueryFirstAsync(x => x.RoadwayNo == roadwayNo && x.LocationCode == locationCode); } /// <summary> /// æ ¹æ®è´§ä½ç¼ç è·åè´§ä½ä¿¡æ¯ /// </summary> /// <param name="locationCode">è´§ä½ç¼ç </param> /// <returns>è´§ä½ä¿¡æ¯</returns> public async Task<Dt_LocationInfo> GetLocationInfoAsync(string locationCode) { return await BaseDal.QueryFirstAsync(x => x.LocationCode == locationCode); @@ -152,6 +161,8 @@ /// <summary> /// æ´æ°è´§ä½ä¿¡æ¯ /// </summary> /// <param name="locationInfo">è´§ä½ä¿¡æ¯å¯¹è±¡</param> /// <returns>æ´æ°æ¯å¦æå</returns> public async Task<bool> UpdateLocationInfoAsync(Dt_LocationInfo locationInfo) { return await BaseDal.UpdateDataAsync(locationInfo); @@ -160,19 +171,19 @@ /// <summary> /// æ£æ¥å¹¶çæç§»åºä»»å¡æè¿ååºåºä»»å¡ /// </summary> /// <param name="locationID">ä»»å¡å·</param> /// <returns>ä»»å¡å¯¹è±¡</returns> /// <param name="taskNum">ä»»å¡å·</param> /// <returns>ä»»å¡ä¿¡æ¯</returns> public async Task<WebResponseContent> TransferCheckAsync(int taskNum) { WebResponseContent content = new WebResponseContent(); var content = new WebResponseContent(); try { // æ ¹æ®ä»»å¡å·è·åä»»å¡ var outboundTask = await _taskRepository.QueryFirstAsync(x => x.TaskNum == taskNum); if (outboundTask == null) return null; return content.Error("ä»»å¡ä¸åå¨"); var location = await BaseDal.QueryFirstAsync(x => x.LocationCode == outboundTask.SourceAddress); var location = await BaseDal.QueryFirstAsync(x => x.LocationCode == outboundTask.SourceAddress && x.RoadwayNo == outboundTask.Roadway); // æ£æ¥æ¯å¦éè¦è¿è¡ç§»åº if (CheckForInternalTransfer(location)) @@ -202,14 +213,14 @@ } } #region ç§»åºæ¹æ³ #region ç§ææ¹æ³ /// <summary> /// 计ç®ç¸å¯¹çåºä½ID /// </summary> /// <param name="locationID">å½ååºä½ID</param> /// <param name="locationInfo">è´§ä½ä¿¡æ¯</param> /// <returns>ç¸å¯¹çåºä½ID</returns> private string GetRelativeLocationID(Dt_LocationInfo locationInfo) private static string GetRelativeLocationID(Dt_LocationInfo locationInfo) { int line = locationInfo.Row; @@ -232,18 +243,23 @@ { // å¤æè¯¥ä½ç½®æ¯å¦æåºå var stockInfo = await _stockInfoRepository.QueryFirstAsync(x => x.LocationCode == newLocationID); if (stockInfo == null) { // å¦ææ²¡æåºåï¼ç´æ¥è¿åå½ååºåºä»»å¡ return outboundTask; } if (stockInfo == null) { // å¦ææ²¡æåºåï¼ç´æ¥è¿åå½ååºåºä»»å¡ return outboundTask; } else { // 妿æåºåï¼çæç§»åºä»»å¡ var emptyLocation = await GetTransferLocationEmptyAsync(outboundTask.Roadway); var taskNo = await _taskRepository.GetTaskNo(); Dt_Task newTransferTask = new Dt_Task() var newTransferTask = new Dt_Task { CreateDate = DateTime.Now, Creater = App.User.UserName, @@ -256,39 +272,76 @@ SourceAddress = originalLocationID, TaskNum = taskNo, TargetAddress = emptyLocation.LocationCode, TaskType = TaskTypeEnum.Relocation.GetHashCode(), TaskType = TaskTypeEnum.Relocation.GetHashCode() }; return await _taskRepository.Db.Insertable(newTransferTask).ExecuteReturnEntityAsync(); } } /// <summary> /// æ ¹æ®è´§ä½æ¯å¦éè¦ç§»åº /// æ£æ¥è´§ä½æ¯å¦éè¦ç§»åº /// </summary> /// <param name="locationID">è´§ä½ID</param> /// <param name="location">è´§ä½ä¿¡æ¯</param> /// <returns>æ¯å¦éè¦ç§»åº</returns> private bool CheckForInternalTransfer(Dt_LocationInfo location) private static bool CheckForInternalTransfer(Dt_LocationInfo location) { return location.Depth == 2 ? true : false; return location.Depth == 2; } /// <summary> /// æ ¹æ®å··éè·åäºæ·±ä½ç空åºä½ /// </summary> /// <param name="roadway">å··é</param> /// <param name="roadway">å··éç¼å·</param> /// <returns>è´§ä½å¯¹è±¡</returns> private async Task<Dt_LocationInfo> GetTransferLocationEmptyAsync(string roadway) { return await BaseDal.QueryFirstAsync(x => x.Depth == 2 && x.LocationStatus == (LocationStatusEnum.Free.GetHashCode()) && x.RoadwayNo == roadway); //Db.Queryable<Dt_LocationInfo>() //.Where(x => x.Status == LocationEnum.Free.ObjToInt()) //.Where(x => x.Depth == 2.ToString()) //.Where(x => x.Roadway == roadway) //.First(); return await BaseDal.QueryFirstAsync(x => x.Depth == 2 && x.LocationStatus == LocationStatusEnum.Free.GetHashCode() && x.RoadwayNo == roadway); } #endregion ç§»åºæ¹æ³ /// <summary> /// è®¡ç®æ·±åº¦ /// </summary> /// <param name="row">è¡å·</param> /// <param name="maxRow">æå¤§è¡æ°</param> /// <param name="maxDepth">æå¤§æ·±åº¦</param> /// <param name="currentDepth">å½å深度</param> /// <returns>计ç®åçæ·±åº¦</returns> private static int CalculateDepth(int row, int maxRow, int maxDepth, int currentDepth) { int mod = row % maxRow; if (mod == 1) return maxDepth; if (mod == maxDepth + 1) return 1; if (mod > 1 && mod <= maxDepth) return currentDepth - 1; return currentDepth + 1; } /// <summary> /// å建货ä½ä¿¡æ¯ /// </summary> /// <param name="roadwayNo">å··éç¼å·</param> /// <param name="row">è¡å·</param> /// <param name="col">åå·</param> /// <param name="layer">屿°</param> /// <param name="depth">深度</param> /// <returns>è´§ä½ä¿¡æ¯å¯¹è±¡</returns> private static Dt_LocationInfo CreateLocationInfo(string roadwayNo, int row, int col, int layer, int depth) { return new Dt_LocationInfo { WarehouseId = 0, Row = row, Column = col, Layer = layer, Depth = depth, RoadwayNo = roadwayNo, EnableStatus = EnableStatusEnum.Normal.GetHashCode(), LocationStatus = LocationStatusEnum.Free.GetHashCode(), LocationType = LocationTypeEnum.Undefined.GetHashCode(), LocationCode = $"{row:D3}-{col:D3}-{layer:D3}", LocationName = $"{roadwayNo}å··é{row:D3}è¡{col:D3}å{layer:D3}å±{depth:D2}æ·±" }; } #endregion ç§ææ¹æ³ } } Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielCodeInfoService.cs
@@ -1,26 +1,26 @@ using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.WareHouseEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; using WIDESEA_IBasicService; using WIDESEA_Model.Models; namespace WIDESEA_BasicService { /// <summary> /// ç©æç¼ç ä¿¡æ¯æå¡å®ç°ç±» /// </summary> public class MaterielCodeInfoService : ServiceBase<Dt_MaterielCodeInfo, IRepository<Dt_MaterielCodeInfo>>, IMaterielCodeInfoService { public MaterielCodeInfoService(IRepository<Dt_MaterielCodeInfo> BaseDal) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> public MaterielCodeInfoService(IRepository<Dt_MaterielCodeInfo> baseDal) : base(baseDal) { } /// <summary> /// è·åç©æç¼ç ä¿¡æ¯ä»å¨æ¥å£ /// </summary> public IRepository<Dt_MaterielCodeInfo> Repository => BaseDal; } } Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs
@@ -1,24 +1,26 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_IBasicService; using WIDESEA_Model.Models; namespace WIDESEA_BasicService { /// <summary> /// ç©æä¿¡æ¯æå¡å®ç°ç±» /// </summary> public partial class MaterielInfoService : ServiceBase<Dt_MaterielInfo, IRepository<Dt_MaterielInfo>>, IMaterielInfoService { public MaterielInfoService(IRepository<Dt_MaterielInfo> BaseDal) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> public MaterielInfoService(IRepository<Dt_MaterielInfo> baseDal) : base(baseDal) { } /// <summary> /// è·åç©æä¿¡æ¯ä»å¨æ¥å£ /// </summary> public IRepository<Dt_MaterielInfo> Repository => BaseDal; } } Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/PalletCodeInfoService.cs
@@ -1,28 +1,26 @@ using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.CommonEnum; using WIDESEA_Common.WareHouseEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; using WIDESEA_IBasicService; using WIDESEA_Model.Models; namespace WIDESEA_BasicService { /// <summary> /// æçç¼ç ä¿¡æ¯æå¡å®ç°ç±» /// </summary> public class PalletCodeInfoService : ServiceBase<Dt_PalletCodeInfo, IRepository<Dt_PalletCodeInfo>>, IPalletCodeInfoService { public PalletCodeInfoService(IRepository<Dt_PalletCodeInfo> BaseDal) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> public PalletCodeInfoService(IRepository<Dt_PalletCodeInfo> baseDal) : base(baseDal) { } /// <summary> /// è·åæçç¼ç ä¿¡æ¯ä»å¨æ¥å£ /// </summary> public IRepository<Dt_PalletCodeInfo> Repository => BaseDal; } } Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/WarehouseService.cs
@@ -1,39 +1,45 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.CommonEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Caches; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_IBasicService; using WIDESEA_Model.Models; using WIDESEA_Core.Helper; using WIDESEA_Common.CommonEnum; using WIDESEA_Core.Caches; using WIDESEA_Core.BaseRepository; namespace WIDESEA_BasicService { /// <summary> /// ä»åºä¿¡æ¯æå¡å®ç°ç±» /// </summary> public partial class WarehouseService : ServiceBase<Dt_Warehouse, IRepository<Dt_Warehouse>>, IWarehouseService { private readonly ICacheService _cacheService; public WarehouseService(IRepository<Dt_Warehouse> BaseDal,ICacheService cacheService) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> /// <param name="cacheService">ç¼åæå¡</param> public WarehouseService(IRepository<Dt_Warehouse> baseDal, ICacheService cacheService) : base(baseDal) { _cacheService = cacheService; } /// <summary> /// è·åä»åºä¿¡æ¯ä»å¨ /// </summary> public IRepository<Dt_Warehouse> Repository => BaseDal; /// <summary> /// æ¹éå¯ç¨ä»åº /// </summary> /// <param name="keys">ä»åºä¸»é®æ°ç»</param> /// <returns></returns> /// <returns>æä½ç»æ</returns> public WebResponseContent WarehouseEnableStatus(int[] keys) { List<Dt_Warehouse> warehouses = Repository.QueryData(x => keys.Contains(x.WarehouseId)); var warehouses = Repository.QueryData(x => keys.Contains(x.WarehouseId)); warehouses.ForEach(x => { x.WarehouseStatus = EnableEnum.Enable.ObjToInt(); @@ -47,10 +53,10 @@ /// æ¹éç¦ç¨ä»åº /// </summary> /// <param name="keys">ä»åºä¸»é®æ°ç»</param> /// <returns></returns> /// <returns>æä½ç»æ</returns> public WebResponseContent WarehouseDisableStatus(int[] keys) { List<Dt_Warehouse> warehouses = Repository.QueryData(x => keys.Contains(x.WarehouseId)); var warehouses = Repository.QueryData(x => keys.Contains(x.WarehouseId)); warehouses.ForEach(x => { x.WarehouseStatus = EnableEnum.Disable.ObjToInt(); @@ -64,7 +70,7 @@ /// å个å¯ç¨ä»åº /// </summary> /// <param name="key">ä»åºä¸»é®</param> /// <returns></returns> /// <returns>æä½ç»æ</returns> public WebResponseContent WarehouseEnableStatus(int key) { return WarehouseEnableStatus(new int[] { key }); @@ -74,12 +80,10 @@ /// å个ç¦ç¨ä»åº /// </summary> /// <param name="key">ä»åºä¸»é®</param> /// <returns></returns> /// <returns>æä½ç»æ</returns> public WebResponseContent WarehouseDisableStatus(int key) { return WarehouseDisableStatus(new int[] { key }); } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs
@@ -1,10 +1,4 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.OrderEnum; using WIDESEA_Core; using WIDESEA_Common.OrderEnum; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; @@ -13,13 +7,23 @@ namespace WIDESEA_CheckService { /// <summary> /// çç¹åç»ææå¡å®ç°ç±» /// </summary> public class CheckOrderResultService : ServiceBase<Dt_CheckOrderResult, IRepository<Dt_CheckOrderResult>>, ICheckOrderResultService { private readonly IUnitOfWorkManage _unitOfWorkManage; public CheckOrderResultService(IRepository<Dt_CheckOrderResult> BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> /// <param name="unitOfWorkManage">å·¥ä½åå 管çå¨</param> public CheckOrderResultService( IRepository<Dt_CheckOrderResult> baseDal, IUnitOfWorkManage unitOfWorkManage) : base(baseDal) { _unitOfWorkManage = unitOfWorkManage; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderService.cs
@@ -1,7 +1,6 @@ using HslCommunication.WebSocket; using HslCommunication.WebSocket; using WIDESEA_Common.CommonEnum; using WIDESEA_Common.OrderEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; @@ -10,12 +9,24 @@ namespace WIDESEA_CheckService { /// <summary> /// çç¹åæå¡å®ç°ç±» /// </summary> public class CheckOrderService : ServiceBase<Dt_CheckOrder, IRepository<Dt_CheckOrder>>, ICheckOrderService { private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly WebSocketServer _webSocketServer; public CheckOrderService(IRepository<Dt_CheckOrder> BaseDal, IUnitOfWorkManage unitOfWorkManage, WebSocketServer webSocketServer) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> /// <param name="unitOfWorkManage">å·¥ä½åå 管çå¨</param> /// <param name="webSocketServer">WebSocket æå¡å¨</param> public CheckOrderService( IRepository<Dt_CheckOrder> baseDal, IUnitOfWorkManage unitOfWorkManage, WebSocketServer webSocketServer) : base(baseDal) { _unitOfWorkManage = unitOfWorkManage; _webSocketServer = webSocketServer; Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/WhetherEnum.cs
@@ -1,24 +1,18 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEA_Common.CommonEnum namespace WIDESEA_Common.CommonEnum { /// <summary> /// æ¯å¦å¼ /// æ¯å¦æä¸¾å¼ /// </summary> public enum WhetherEnum { /// <summary> /// æ¯ /// </summary> True = 1, /// <summary> /// å¦ /// </summary> False = 0 No = 0, /// <summary> /// æ¯ /// </summary> Yes = 1 } } Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/App.cs
@@ -49,7 +49,7 @@ public static readonly IEnumerable<Type> EffectiveTypes; /// <summary>ä¼å 使ç¨App.GetService()æå¨è·åæå¡</summary> public static IServiceProvider RootServices => IsRun || IsBuild ? InternalApp.RootServices : null; public static IServiceProvider? RootServices => IsRun || IsBuild ? InternalApp.RootServices : null; /// <summary>è·åWeb主æºç¯å¢ï¼å¦ï¼æ¯å¦æ¯å¼åç¯å¢ï¼ç产ç¯å¢ç</summary> public static IWebHostEnvironment WebHostEnvironment => InternalApp.WebHostEnvironment; @@ -63,7 +63,7 @@ /// <summary> /// è·å请æ±ä¸ä¸æ /// </summary> public static HttpContext HttpContext => RootServices?.GetService<IHttpContextAccessor>()?.HttpContext; public static HttpContext? HttpContext => RootServices?.GetService<IHttpContextAccessor>()?.HttpContext; public static IUser User => GetService<IUser>(); @@ -108,10 +108,10 @@ return serviceProvider; } public static TService GetService<TService>(bool mustBuild = true) where TService : class public static TService? GetService<TService>(bool mustBuild = true) where TService : class { TService test = App.GetService(typeof(TService), null, mustBuild) as TService; return test; object? service = App.GetService(typeof(TService), null, mustBuild); return service as TService; } /// <summary>è·å请æ±çå卿çæå¡</summary> @@ -119,7 +119,7 @@ /// <param name="serviceProvider"></param> /// <param name="mustBuild"></param> /// <returns></returns> public static TService GetService<TService>(IServiceProvider serviceProvider, bool mustBuild = true) public static TService? GetService<TService>(IServiceProvider? serviceProvider, bool mustBuild = true) where TService : class => (serviceProvider ?? App.GetServiceProvider(typeof(TService), mustBuild, false))?.GetService<TService>(); /// <summary>è·å请æ±çå卿çæå¡</summary> @@ -127,10 +127,10 @@ /// <param name="serviceProvider"></param> /// <param name="mustBuild"></param> /// <returns></returns> public static object GetService(Type type, IServiceProvider serviceProvider = null, bool mustBuild = true) public static object? GetService(Type type, IServiceProvider? serviceProvider = null, bool mustBuild = true) { IServiceProvider? obj2 = (serviceProvider ?? App.GetServiceProvider(type, mustBuild, false)); object obj = obj2?.GetService(type); object? obj = obj2?.GetService(type); return obj; } @@ -177,7 +177,7 @@ /// <typeparam name="TOptions">强类åé项类</typeparam> /// <param name="serviceProvider"></param> /// <returns>TOptions</returns> public static TOptions GetOptions<TOptions>(IServiceProvider serviceProvider = null) where TOptions : class, new() public static TOptions? GetOptions<TOptions>(IServiceProvider? serviceProvider = null) where TOptions : class, new() { IOptions<TOptions> service = App.GetService<IOptions<TOptions>>(serviceProvider ?? App.RootServices, false); return service?.Value; @@ -187,10 +187,10 @@ /// <typeparam name="TOptions">强类åé项类</typeparam> /// <param name="serviceProvider"></param> /// <returns>TOptions</returns> public static TOptions GetOptionsMonitor<TOptions>(IServiceProvider serviceProvider = null) public static TOptions? GetOptionsMonitor<TOptions>(IServiceProvider? serviceProvider = null) where TOptions : class, new() { IOptionsMonitor<TOptions> service = IOptionsMonitor<TOptions>? service = App.GetService<IOptionsMonitor<TOptions>>(serviceProvider ?? App.RootServices, false); return service?.CurrentValue; } @@ -199,10 +199,10 @@ /// <typeparam name="TOptions">强类åé项类</typeparam> /// <param name="serviceProvider"></param> /// <returns>TOptions</returns> public static TOptions GetOptionsSnapshot<TOptions>(IServiceProvider serviceProvider = null) public static TOptions? GetOptionsSnapshot<TOptions>(IServiceProvider? serviceProvider = null) where TOptions : class, new() { IOptionsSnapshot<TOptions> service = App.GetService<IOptionsSnapshot<TOptions>>(serviceProvider, false); IOptionsSnapshot<TOptions>? service = App.GetService<IOptionsSnapshot<TOptions>>(serviceProvider, false); return service?.Value; } Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseController/ApiBaseController.cs
@@ -16,11 +16,11 @@ [Authorize, ApiController] public class ApiBaseController<IService, TEntity> : Controller { protected IService Service; protected readonly IService Service; public ApiBaseController(IService service) { Service = service; Service = service ?? throw new ArgumentNullException(nameof(service)); } /// <summary> @@ -108,12 +108,12 @@ [HttpPost, Route("Export")] public virtual ActionResult Export([FromBody] PageDataOptions loadData) { WebResponseContent result = InvokeService("Export", new object[] { loadData }) as WebResponseContent; if (result.Status) WebResponseContent? result = InvokeService("Export", new object[] { loadData }) as WebResponseContent; if (result != null && result.Status && result.Data != null) return File( System.IO.File.ReadAllBytes(result.Data.ToString()), System.IO.File.ReadAllBytes(result.Data.ToString() ?? string.Empty), System.Net.Mime.MediaTypeNames.Application.Octet, Path.GetFileName(result.Data.ToString()) Path.GetFileName(result.Data.ToString() ?? string.Empty) ?? string.Empty ); return Json(result); } @@ -125,12 +125,12 @@ [HttpPost, HttpGet, Route("DownLoadTemplate")] public virtual ActionResult DownLoadTemplate() { WebResponseContent result = InvokeService("DownLoadTemplate", new object[] { }) as WebResponseContent; if (result.Status) WebResponseContent? result = InvokeService("DownLoadTemplate", new object[] { }) as WebResponseContent; if (result != null && result.Status && result.Data != null) return File( System.IO.File.ReadAllBytes(result.Data.ToString()), System.IO.File.ReadAllBytes(result.Data.ToString() ?? string.Empty), System.Net.Mime.MediaTypeNames.Application.Octet, Path.GetFileName(result.Data.ToString()) Path.GetFileName(result.Data.ToString() ?? string.Empty) ?? string.Empty ); return Json(result); } Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/WebResponseContent.cs
@@ -35,7 +35,7 @@ { get { return new WebResponseContent(); } } public WebResponseContent OK(string message = null, object data = null) public WebResponseContent OK(string? message = null, object? data = null) { Status = true; Message = message; @@ -43,7 +43,7 @@ return this; } public WebResponseContent Error(string message = null) public WebResponseContent Error(string? message = null) { Status = false; Message = message; Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/UnitOfWorkManage.cs
@@ -40,14 +40,16 @@ public UnitOfWork CreateUnitOfWork() { UnitOfWork uow = new UnitOfWork(); uow.Logger = _logger; uow.Db = _sqlSugarClient; uow.Tenant = (ITenant)_sqlSugarClient; uow.IsTran = true; UnitOfWork uow = new UnitOfWork { Logger = _logger, Db = _sqlSugarClient, Tenant = _sqlSugarClient as ITenant, IsTran = true }; uow.Db.Open(); uow.Tenant.BeginTran(); uow.Tenant?.BeginTran(); _logger.LogDebug("UnitOfWork Begin"); return uow; Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Caches/ICacheService.cs
@@ -48,13 +48,13 @@ /// </summary> /// <param name="key">ç¼åKey</param> /// <returns></returns> T Get<T>(string key) where T : class; T? Get<T>(string key) where T : class; /// <summary> /// è·åç¼å /// </summary> /// <param name="key">ç¼åKey</param> /// <returns></returns> string Get(string key); string? Get(string key); } } Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Caches/MemoryCacheService.cs
@@ -9,11 +9,11 @@ { public class MemoryCacheService : ICacheService { protected IMemoryCache _cache; private readonly IMemoryCache _cache; public MemoryCacheService(IMemoryCache cache) { _cache = cache; _cache = cache ?? throw new ArgumentNullException(nameof(cache)); } public bool Add(string key, string value, int expireSeconds = -1, bool isSliding = false) @@ -54,8 +54,7 @@ public void Dispose() { if (_cache != null) _cache.Dispose(); _cache?.Dispose(); GC.SuppressFinalize(this); } @@ -68,7 +67,7 @@ return _cache.Get(key) != null; } public T Get<T>(string key) where T : class public T? Get<T>(string key) where T : class { if (key == null) { Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Filter/ApiAuthorizeFilter.cs
@@ -21,9 +21,7 @@ /// </summary> public class ApiAuthorizeFilter : IAuthorizationFilter { private static readonly string replaceTokenPath = "/api/Sys_User/replaceToken"; private static readonly string loginPath = "/api/Sys_User/login"; private static readonly string vierificationCodePath = "/api/Sys_User/getVierificationCode"; private static readonly string ReplaceTokenPath = "/api/Sys_User/replaceToken"; public ApiAuthorizeFilter() { @@ -84,7 +82,7 @@ DateTime? expDate = context.HttpContext.User.Claims.Where(x => x.Type == JwtRegisteredClaimNames.Exp).Select(x => x.Value).FirstOrDefault()?.GetTimeSpmpToDate(); //卿æ è¯å·æ°token(2021.05.01) int ExpMinutes = AppSettings.Get("ExpMinutes").ObjToInt(); if ((expDate.GetValueOrDefault() - DateTime.Now).TotalMinutes < ExpMinutes / 3 && context.HttpContext.Request.Path != replaceTokenPath) if ((expDate.GetValueOrDefault() - DateTime.Now).TotalMinutes < ExpMinutes / 3 && context.HttpContext.Request.Path != ReplaceTokenPath) { context.HttpContext.Response.Headers.Add("widesea_exp", "1"); } Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/UtilConvert.cs
@@ -538,10 +538,16 @@ /// <param name="dt"></param> /// <param name="utc">T:æUTCæ¶é´è®¡ç®(é»è®¤);F:ææ¬å°æ¶é´è®¡ç®</param> /// <returns></returns> /// <summary> /// æ¥æè½¬ä¸ºunixå¼ /// </summary> /// <param name="dt">æ¥ææ¶é´</param> /// <param name="utc">T:æUTCæ¶é´è®¡ç®(é»è®¤);F:ææ¬å°æ¶é´è®¡ç®</param> /// <returns></returns> public static double ToUnix(this DateTime dt, bool utc = true) { double intResult = 0; System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); System.DateTime startTime = TimeZoneInfo.ConvertTime(new System.DateTime(1970, 1, 1), TimeZoneInfo.Utc, TimeZoneInfo.Local); intResult = (dt - startTime).TotalSeconds; intResult = Math.Round(intResult, 0); return intResult; Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/CachePointGroupDTO.cs
@@ -6,30 +6,69 @@ namespace WIDESEA_DTO.Basic { /// <summary> /// ç¼åç¹åç»æ°æ®ä¼ è¾å¯¹è±¡ /// </summary> public class CachePointGroupDTO { /// <summary> /// ç¹AçID /// </summary> public int IdA { get; set; } /// <summary> /// ç¹BçID /// </summary> public int IdB { get; set; } /// <summary> /// ç¹Açç¼ç /// </summary> public string PointCodeA { get; set; } /// <summary> /// ç¹Bçç¼ç /// </summary> public string PointCodeB { get; set; } /// <summary> /// ç¹Açç±»å /// </summary> public int PointTypeA { get; set; } /// <summary> /// ç¹Bçç±»å /// </summary> public int PointTypeB { get; set; } /// <summary> /// ç¹Açç¶æ /// </summary> public int PointStatusA { get; set; } /// <summary> /// ç¹Bçç¶æ /// </summary> public int PointStatusB { get; set; } /// <summary> /// ç¹Açæ·±åº¦ /// </summary> public int DepthA { get; set; } /// <summary> /// ç¹Bçæ·±åº¦ /// </summary> public int DepthB { get; set; } /// <summary> /// ç¹Açå¯ç¨ç¶æ /// </summary> public int EnableStatusA { get; set; } /// <summary> /// ç¹Bçå¯ç¨ç¶æ /// </summary> public int EnableStatusB { get; set; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/InnerCodeDTO.cs
@@ -6,11 +6,29 @@ namespace WIDESEA_DTO.Basic { /// <summary> /// å é¨ç¼ç æ°æ®ä¼ è¾å¯¹è±¡ /// </summary> public class InnerCodeDTO { public string matCode { get; set; } public string batchNo { get; set; } public string purchaseOrderNo { get; set; } public int qty { get; set; } /// <summary> /// ç©æç¼ç /// </summary> public string MatCode { get; set; } /// <summary> /// æ¹æ¬¡å· /// </summary> public string BatchNo { get; set; } /// <summary> /// éè´è®¢åç¼å· /// </summary> public string PurchaseOrderNo { get; set; } /// <summary> /// æ°é /// </summary> public int Qty { get; set; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/GradingMachine/GradingMachineInputDto.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEA_DTO.GradingMachine { /// <summary> /// å容æè¾å ¥æ°æ®ä¼ è¾å¯¹è±¡ /// </summary> public class GradingMachineInputDto { /// <summary> /// æçå· /// </summary> public string PalletCode { get; set; } /// <summary> /// è´§ä½å· /// </summary> public string LocationCode { get; set; } /// <summary> /// è´§ä½ç¶æ /// </summary> public int LocationStatus { get; set; } /// <summary> /// æ¯å¦æ£å¸¸NGæµç¨ /// </summary> public int IsNG { get; set; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/GradingMachine/OutPutDto.cs
@@ -4,12 +4,12 @@ using System.Text; using System.Threading.Tasks; namespace WIDESEA_DTO namespace WIDESEA_DTO.GradingMachine { /// <summary> /// å容æè¾åºDto /// å容æè¾åºæ°æ®ä¼ è¾å¯¹è±¡ /// </summary> public class OutPutDto public class OutputDto { /// <summary> /// è´§ä½å· Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs
@@ -67,7 +67,7 @@ /// <summary> /// ç¦ç¨ç¶æ /// </summary> public int EnalbeStatus { get; set; } public int EnableStatus { get; set; } /// <summary> /// åºåä¸»é® Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/System/ActionDTO.cs
@@ -6,11 +6,29 @@ namespace WIDESEA_DTO.System { /// <summary> /// æä½æéæ°æ®ä¼ è¾å¯¹è±¡ /// </summary> public class ActionDTO { /// <summary> /// æä½ID /// </summary> public int ActionId { get; set; } /// <summary> /// èåID /// </summary> public int MenuId { get; set; } /// <summary> /// æä½åç§° /// </summary> public string Text { get; set; } /// <summary> /// æä½å¼ /// </summary> public string Value { get; set; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/System/DictionaryDTO.cs
@@ -7,22 +7,22 @@ namespace WIDESEA_DTO.System { /// <summary> /// /// åå ¸æ°æ®ä¼ è¾å¯¹è±¡ /// </summary> public class DictionaryDTO { /// <summary> /// /// é® /// </summary> public object Key { get; set; } /// <summary> /// /// å¼ /// </summary> public object Value { get; set; } /// <summary> /// /// é¢å¤æ°æ® /// </summary> public object Extra { get; set; } } Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/System/UserPermissions.cs
@@ -6,12 +6,34 @@ namespace WIDESEA_DTO.System { /// <summary> /// ç¨æ·æéæ°æ®ä¼ è¾å¯¹è±¡ /// </summary> public class UserPermissionDTO { /// <summary> /// ID /// </summary> public int Id { get; set; } /// <summary> /// ç¶ID /// </summary> public int Pid { get; set; } /// <summary> /// ææ¬åç§° /// </summary> public string Text { get; set; } /// <summary> /// æ¯å¦ä¸ºåºç¨ /// </summary> public bool IsApp { get; set; } /// <summary> /// æä½æéå表 /// </summary> public List<ActionDTO> Actions { get; set; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/System/VueDictionaryDTO.cs
@@ -6,14 +6,29 @@ namespace WIDESEA_DTO.System { /// <summary> /// Vue åå ¸æ°æ®ä¼ è¾å¯¹è±¡ /// </summary> public class VueDictionaryDTO { /// <summary> /// åå ¸ç¼å· /// </summary> public string DicNo { get; set; } /// <summary> /// é ç½® /// </summary> public string Config { get; set; } /// <summary> /// æ°æ® /// </summary> public object Data { get; set; } /// <summary> /// æ¯å¦ä¿åå°ç¼å /// </summary> public bool SaveCache { get; set; } = true; } } Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/UpdateTaskDto.cs
@@ -1,10 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ComponentModel.DataAnnotations; using System.Text.Json.Serialization; namespace WIDESEA_DTO namespace WIDESEA_DTO.Task { /// <summary> /// æ´æ°ä»»å¡ç¶æDTO - ç¨äºå°è£ æ´æ°ä»»å¡ç¶ææéçæ°æ®ï¼å æ¬ä»»å¡IDåæ°ç¶æä¿¡æ¯ @@ -14,11 +11,13 @@ /// <summary> /// id - ä»»å¡IDï¼å¿ 填项ï¼ç¨äºæå®è¦æ´æ°çä»»å¡è®°å½ /// </summary> [Required(ErrorMessage = "ä»»å¡IDä¸è½ä¸ºç©º")] public int Id { get; set; } /// <summary> /// newStatus - æ°ç¶æï¼å¿ 填项ï¼ç¨äºæå®ä»»å¡çæ°ç¶æ /// </summary> [Required(ErrorMessage = "æ°ç¶æä¸è½ä¸ºç©º")] public int NewStatus { get; set; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IBasicService.cs
@@ -1,12 +1,10 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core; namespace WIDESEA_IBasicService { /// <summary> /// åºç¡ä¿¡æ¯æå¡èåæ¥å£ /// </summary> public interface IBasicService: IDependency { /// <summary> @@ -24,8 +22,14 @@ /// </summary> IWarehouseService WarehouseService { get; } /// <summary> /// æçç¼ç ä¸å¡å± /// </summary> IPalletCodeInfoService PalletCodeInfoService { get; } /// <summary> /// ç©æç¼ç ä¸å¡å± /// </summary> IMaterielCodeInfoService MaterielCodeInfoService { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs
@@ -1,90 +1,92 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.CommonEnum; using WIDESEA_Common.CommonEnum; using WIDESEA_Common.LocationEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_DTO.Basic; using WIDESEA_Core; using WIDESEA_Model.Models; namespace WIDESEA_IBasicService { /// <summary> /// è´§ä½ä¿¡æ¯æå¡æ¥å£ /// </summary> public interface ILocationInfoService : IService<Dt_LocationInfo> { /// <summary> /// è·åè´§ä½ä¿¡æ¯ä»å¨æ¥å£ /// </summary> IRepository<Dt_LocationInfo> Repository { get; } /// <summary> /// æ¹éå¯ç¨è´§ä½ /// </summary> /// <param name="keys">è´§ä½ä¸»é®æ°ç»</param> /// <returns></returns> /// <returns>æä½ç»æ</returns> WebResponseContent LocationEnableStatus(int[] keys); /// <summary> /// æ¹éç¦ç¨è´§ä½ /// </summary> /// <param name="keys">è´§ä½ä¸»é®æ°ç»</param> /// <returns></returns> /// <returns>æä½ç»æ</returns> WebResponseContent LocationDisableStatus(int[] keys); /// <summary> /// å个å¯ç¨è´§ä½ /// </summary> /// <param name="key">è´§ä½ä¸»é®</param> /// <returns></returns> /// <returns>æä½ç»æ</returns> WebResponseContent LocationEnableStatus(int key); /// <summary> /// å个ç¦ç¨è´§ä½ /// </summary> /// <param name="key">è´§ä½ä¸»é®</param> /// <returns></returns> /// <returns>æä½ç»æ</returns> WebResponseContent LocationDisableStatus(int key); /// <summary> /// åå§åè´§ä½ /// </summary> /// <param name="initializationLocationDTO"></param> /// <returns></returns> /// <param name="initializationLocationDTO">åå§åè´§ä½æ°æ®ä¼ è¾å¯¹è±¡</param> /// <returns>æä½ç»æ</returns> WebResponseContent InitializationLocation(InitializationLocationDTO initializationLocationDTO); /// <summary> /// è·å空é²è´§ä½ä¿¡æ¯ /// æ ¹æ®å··éè·å空é²è´§ä½ä¿¡æ¯ /// </summary> /// <param name="RoadwayNo">å··é</param> /// <returns></returns> public Task<Dt_LocationInfo?> GetLocationInfo(string RoadwayNo); /// <param name="roadwayNo">å··éç¼å·</param> /// <returns>空é²è´§ä½ä¿¡æ¯ï¼å¦ææªæ¾å°åè¿ånull</returns> Task<Dt_LocationInfo?> GetLocationInfo(string roadwayNo); /// <summary> /// æ´æ°è´§ä½ä¿¡æ¯ /// </summary> /// <param name="locationInfo"></param> /// <returns></returns> public Task<bool> UpdateLocationInfoAsync(Dt_LocationInfo locationInfo); /// <param name="locationInfo">è´§ä½ä¿¡æ¯å¯¹è±¡</param> /// <returns>æ´æ°æ¯å¦æå</returns> Task<bool> UpdateLocationInfoAsync(Dt_LocationInfo locationInfo); /// <summary> /// è·å空é²è´§ä½ä¿¡æ¯(æ ¹æ®å··éåè´§ä½å·æ¥è¯¢) /// æ ¹æ®å··éåè´§ä½å·è·å空é²è´§ä½ä¿¡æ¯ /// </summary> /// <param name="RoadwayNo">å··é</param> /// <returns></returns> public Task<Dt_LocationInfo?> GetLocationInfo(string RoadwayNo, string locationCode); /// <param name="roadwayNo">å··éç¼å·</param> /// <param name="locationCode">è´§ä½ç¼ç </param> /// <returns>è´§ä½ä¿¡æ¯ï¼å¦ææªæ¾å°åè¿ånull</returns> Task<Dt_LocationInfo?> GetLocationInfo(string roadwayNo, string locationCode); /// <summary> /// è·åè´§ä½ä¿¡æ¯ /// æ ¹æ®è´§ä½ç¼ç è·åè´§ä½ä¿¡æ¯ /// </summary> /// <param name="locationCode"></param> /// <returns></returns> public Task<Dt_LocationInfo> GetLocationInfoAsync(string locationCode); /// <param name="locationCode">è´§ä½ç¼ç </param> /// <returns>è´§ä½ä¿¡æ¯</returns> Task<Dt_LocationInfo> GetLocationInfoAsync(string locationCode); /// <summary> /// æ£æ¥å¹¶çæç§»åºä»»å¡æè¿ååºåºä»»å¡ /// </summary> /// <param name="taskNum">ä»»å¡å·</param> /// <returns></returns> public Task<WebResponseContent> TransferCheckAsync(int taskNum); /// <returns>ä»»å¡ä¿¡æ¯</returns> Task<WebResponseContent> TransferCheckAsync(int taskNum); } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielCodeInfoService.cs
@@ -1,16 +1,17 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Model.Models; namespace WIDESEA_IBasicService { /// <summary> /// ç©æç¼ç ä¿¡æ¯æå¡æ¥å£ /// </summary> public interface IMaterielCodeInfoService : IService<Dt_MaterielCodeInfo> { public IRepository<Dt_MaterielCodeInfo> Repository { get; } /// <summary> /// è·åç©æç¼ç ä¿¡æ¯ä»å¨æ¥å£ /// </summary> IRepository<Dt_MaterielCodeInfo> Repository { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielInfoService.cs
@@ -1,18 +1,17 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_DTO.Basic; using WIDESEA_Model.Models; namespace WIDESEA_IBasicService { /// <summary> /// ç©æä¿¡æ¯æå¡æ¥å£ /// </summary> public interface IMaterielInfoService : IService<Dt_MaterielInfo> { /// <summary> /// è·åç©æä¿¡æ¯ä»å¨æ¥å£ /// </summary> IRepository<Dt_MaterielInfo> Repository { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IPalletCodeInfoService.cs
@@ -1,17 +1,17 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Model.Models; namespace WIDESEA_IBasicService { /// <summary> /// æçç¼ç ä¿¡æ¯æå¡æ¥å£ /// </summary> public interface IPalletCodeInfoService : IService<Dt_PalletCodeInfo> { public IRepository<Dt_PalletCodeInfo> Repository { get; } /// <summary> /// è·åæçç¼ç ä¿¡æ¯ä»å¨æ¥å£ /// </summary> IRepository<Dt_PalletCodeInfo> Repository { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IWarehouseService.cs
@@ -1,17 +1,17 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Model.Models; namespace WIDESEA_IBasicService { /// <summary> /// ä»åºä¿¡æ¯æå¡æ¥å£ /// </summary> public interface IWarehouseService : IService<Dt_Warehouse> { /// <summary> /// è·åä»åºä¿¡æ¯ä»å¨æ¥å£ /// </summary> IRepository<Dt_Warehouse> Repository { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_ICheckService/ICheckOrderResultService.cs
@@ -1,14 +1,11 @@ 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_Core.BaseServices; using WIDESEA_Model.Models; namespace WIDESEA_ICheckService { /// <summary> /// çç¹åç»ææå¡æ¥å£ /// </summary> public interface ICheckOrderResultService : IService<Dt_CheckOrderResult> { } Code/WMS/WIDESEA_WMSServer/WIDESEA_ICheckService/ICheckOrderService.cs
@@ -1,14 +1,11 @@ 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_Core.BaseServices; using WIDESEA_Model.Models; namespace WIDESEA_ICheckService { /// <summary> /// çç¹åæå¡æ¥å£ /// </summary> public interface ICheckOrderService : IService<Dt_CheckOrder> { } Code/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetailService.cs
@@ -1,17 +1,17 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Model.Models; namespace WIDESEA_IInboundService { /// <summary> /// å ¥åºåæç»æå¡æ¥å£ /// </summary> public interface IInboundOrderDetailService : IService<Dt_InboundOrderDetail> { /// <summary> /// è·åå ¥åºåæç»ä»å¨æ¥å£ /// </summary> IRepository<Dt_InboundOrderDetail> Repository { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs
@@ -1,20 +1,17 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_DTO; using WIDESEA_DTO.Inbound; using WIDESEA_Model.Models; namespace WIDESEA_IInboundService { /// <summary> /// å ¥åºåæå¡æ¥å£ /// </summary> public interface IInboundOrderService : IService<Dt_InboundOrder> { /// <summary> /// è·åå ¥åºåä»å¨æ¥å£ /// </summary> IRepository<Dt_InboundOrder> Repository { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundService.cs
@@ -1,16 +1,20 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core; namespace WIDESEA_IInboundService { /// <summary> /// å ¥åºæå¡èåæ¥å£ /// </summary> public interface IInboundService : IDependency { /// <summary> /// å ¥åºåæç»æå¡ /// </summary> IInboundOrderDetailService InboundOrderDetailService { get; } IInboundOrderService InbounOrderService { get; } /// <summary> /// å ¥åºåæå¡ /// </summary> IInboundOrderService InboundOrderService { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderDetailService.cs
@@ -1,22 +1,17 @@ using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.LocationEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Enums; using WIDESEA_DTO.Stock; using WIDESEA_Model.Models; namespace WIDESEA_IOutboundService { /// <summary> /// åºåºåæç»æå¡æ¥å£ /// </summary> public interface IOutboundOrderDetailService : IService<Dt_OutboundOrderDetail> { /// <summary> /// è·ååºåºåæç»ä»å¨æ¥å£ /// </summary> IRepository<Dt_OutboundOrderDetail> Repository { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs
@@ -1,20 +1,17 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_DTO.Inbound; using WIDESEA_DTO.Outbound; using WIDESEA_Model.Models; namespace WIDESEA_IOutboundService { /// <summary> /// åºåºåæå¡æ¥å£ /// </summary> public interface IOutboundOrderService : IService<Dt_OutboundOrder> { /// <summary> /// è·ååºåºåä»å¨æ¥å£ /// </summary> IRepository<Dt_OutboundOrder> Repository { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs
@@ -1,18 +1,25 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core; namespace WIDESEA_IOutboundService { /// <summary> /// åºåºæå¡èåæ¥å£ /// </summary> public interface IOutboundService:IDependency { /// <summary> /// åºåºåæç»æå¡ /// </summary> IOutboundOrderDetailService OutboundOrderDetailService { get; } /// <summary> /// åºåºåæå¡ /// </summary> IOutboundOrderService OutboundOrderService { get; } IOutStockLockInfoService OutboundStockLockInfoService { get; } /// <summary> /// åºåºåºåéå®ä¿¡æ¯æå¡ /// </summary> IOutStockLockInfoService OutStockLockInfoService { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordService.cs
@@ -1,18 +1,17 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.LocationEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Model.Models; namespace WIDESEA_IRecordService { /// <summary> /// è´§ä½ç¶æåæ´è®°å½æå¡æ¥å£ /// </summary> public interface ILocationStatusChangeRecordService : IService<Dt_LocationStatusChangeRecord> { /// <summary> /// è·åè´§ä½ç¶æåæ´è®°å½ä»å¨æ¥å£ /// </summary> IRepository<Dt_LocationStatusChangeRecord> Repository { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/IRecordService.cs
@@ -1,16 +1,20 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core; namespace WIDESEA_IRecordService { /// <summary> /// è®°å½æå¡èåæ¥å£ /// </summary> public interface IRecordService : IDependency { ILocationStatusChangeRecordService LocationStatusChangeRecordSetvice { get; } /// <summary> /// è´§ä½ç¶æåæ´è®°å½æå¡ /// </summary> ILocationStatusChangeRecordService LocationStatusChangeRecordService { get; } /// <summary> /// åºåæ°éåæ´è®°å½æå¡ /// </summary> IStockQuantityChangeRecordService StockQuantityChangeRecordService { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/IStockQuantityChangeRecordService.cs
@@ -1,18 +1,17 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.StockEnum; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Enums; using WIDESEA_Model.Models; namespace WIDESEA_IRecordService { /// <summary> /// åºåæ°éåæ´è®°å½æå¡æ¥å£ /// </summary> public interface IStockQuantityChangeRecordService : IService<Dt_StockQuantityChangeRecord> { /// <summary> /// è·ååºåæ°éåæ´è®°å½ä»å¨æ¥å£ /// </summary> IRepository<Dt_StockQuantityChangeRecord> Repository { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs
@@ -4,8 +4,14 @@ namespace WIDESEA_IStockService { /// <summary> /// åºåæç»æå¡æ¥å£ /// </summary> public interface IStockInfoDetailService : IService<Dt_StockInfoDetail> { /// <summary> /// è·ååºåæç»ä»å¨æ¥å£ /// </summary> IRepository<Dt_StockInfoDetail> Repository { get; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs
@@ -4,43 +4,49 @@ namespace WIDESEA_IStockService { /// <summary> /// åºåä¿¡æ¯æå¡æ¥å£ /// </summary> public interface IStockInfoService : IService<Dt_StockInfo> { /// <summary> /// è·ååºåä¿¡æ¯ä»å¨æ¥å£ /// </summary> IRepository<Dt_StockInfo> Repository { get; } /// <summary> /// è·ååºåä¿¡æ¯å表ï¼åºåºæ¥æå°äºå½åæ¶é´ä¸åºåç¶æä¸ºå ¥åºå®æçè®°å½ï¼ /// </summary> /// <returns></returns> public Task<List<Dt_StockInfo>> GetStockInfoAsync(); /// <returns>åºåä¿¡æ¯å表</returns> Task<List<Dt_StockInfo>> GetStockInfoAsync(); /// <summary> /// è·ååºåä¿¡æ¯å表ï¼åºåºæ¥æå°äºå½åæ¶é´ä¸åºåç¶æä¸ºå ¥åºå®æçè®°å½ï¼ä¸ä»åºIDå¹é ï¼ /// </summary> /// <param name="WarehouseId"></param> /// <returns></returns> public Task<List<Dt_StockInfo>> GetStockInfoAsync(int WarehouseId); /// <param name="warehouseId">ä»åºID</param> /// <returns>åºåä¿¡æ¯å表</returns> Task<List<Dt_StockInfo>> GetStockInfoAsync(int warehouseId); /// <summary> /// è·ååºåä¿¡æ¯ï¼æ ¹æ®æçç æ¥è¯¢ï¼ /// </summary> /// <param name="PalletCode"></param> /// <returns></returns> public Task<Dt_StockInfo> GetStockInfoAsync(string PalletCode); /// <param name="palletCode">æçç¼ç </param> /// <returns>åºåä¿¡æ¯</returns> Task<Dt_StockInfo> GetStockInfoAsync(string palletCode); /// <summary> /// æ´æ°åºåæ°æ® /// </summary> /// <param name="stockInfo"></param> /// <returns></returns> public Task<bool> UpdateStockAsync(Dt_StockInfo stockInfo); /// <param name="stockInfo">åºåä¿¡æ¯å¯¹è±¡</param> /// <returns>æ´æ°æ¯å¦æå</returns> Task<bool> UpdateStockAsync(Dt_StockInfo stockInfo); /// <summary> /// æ£ç´¢æå®æçå¨ç»å®ä½ç½®çåºå详ç»ä¿¡æ¯ã /// æ£ç´¢æå®æçå¨ç»å®ä½ç½®çåºå详ç»ä¿¡æ¯ /// </summary> /// <param name="palletCode">请æ±åºåä¿¡æ¯çæçå¯ä¸æ è¯ç¬¦ãä¸è½ä¸º null æç©ºã</param> /// <param name="locationCode">表示æçåå¨ä½ç½®ç代ç ãä¸è½ä¸º null æç©ºã</param> /// <returns>è¡¨ç¤ºå¼æ¥æä½çä»»å¡ãä»»å¡ç»æå å«ä¸ä¸ª <see cref="Dt_StockInfo"/> 对象ï¼è¯¥å¯¹è±¡å 嫿宿çåä½ç½®çåºå详ç»ä¿¡æ¯ãå¦ææªæ¾å°å¹é çåºåä¿¡æ¯ï¼åè¿å nullã</returns> public Task<Dt_StockInfo> GetStockInfoAsync(string palletCode, string locationCode); /// <param name="palletCode">æçç¼ç </param> /// <param name="locationCode">è´§ä½ç¼ç </param> /// <returns>åºåä¿¡æ¯</returns> Task<Dt_StockInfo> GetStockInfoAsync(string palletCode, string locationCode); } } Code/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs
@@ -1,36 +1,59 @@ using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core; using WIDESEA_DTO.Stock; namespace WIDESEA_IStockService { /// <summary> /// åºåæå¡èåæ¥å£ /// </summary> public interface IStockService : IDependency { /// <summary> /// åºåæç»æå¡ /// </summary> IStockInfoDetailService StockInfoDetailService { get; } /// <summary> /// åºåä¿¡æ¯æå¡ /// </summary> IStockInfoService StockInfoService { get; } /// <summary> /// åºåæç»åå²æå¡ /// </summary> IStockInfoDetail_HtyService StockInfoDetail_HtyService { get; } /// <summary> /// åºååå²æå¡ /// </summary> IStockInfo_HtyService StockInfo_HtyService { get; } /// <summary> /// ç»çæä½ /// </summary> /// <param name="stock">åºåæ°æ®ä¼ è¾å¯¹è±¡</param> /// <returns>æä½ç»æ</returns> Task<WebResponseContent> GroupPalletAsync(StockDTO stock); /// <summary> /// æ¢çæä½ /// </summary> /// <param name="stock">åºåæ°æ®ä¼ è¾å¯¹è±¡</param> /// <returns>æä½ç»æ</returns> Task<WebResponseContent> ChangePalletAsync(StockDTO stock); /// <summary> /// æçæä½ /// </summary> /// <param name="stock">åºåæ°æ®ä¼ è¾å¯¹è±¡</param> /// <returns>æä½ç»æ</returns> Task<WebResponseContent> SplitPalletAsync(StockDTO stock); /// <summary> /// å åæºæ¢çåæ´æ°åºåä¿¡æ¯ï¼æ¸ 空åºä½ä¿¡æ¯ï¼ /// </summary> /// <param name="stock"></param> /// <returns></returns> /// <param name="stock">åºåä¿¡æ¯æ°æ®ä¼ è¾å¯¹è±¡</param> /// <returns>æä½ç»æ</returns> Task<WebResponseContent> UpdateStockInfoAsync(StockInfoDTO stock); } } Code/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -18,6 +18,8 @@ using SqlSugar; using System; using System.Collections.Generic; using System.Threading.Tasks; using WIDESEA_DTO.GradingMachine; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; @@ -96,30 +98,30 @@ /// <summary> /// å åæºåæ¾è´§å®æåç©æµéç¥åæå容æå®æä¿¡å· /// </summary> /// <param name="input"></param> /// <returns></returns> public Task<WebResponseContent> InOrOutCompletedAsync(InputDto input); /// <param name="input">å容æè¾å ¥æ°æ®</param> /// <returns>æä½ç»æ</returns> public Task<WebResponseContent> InOrOutCompletedAsync(GradingMachineInputDto input); /// <summary> /// åæå容æå®æ¶åç©æµæ´æ°å容æç¶æä¿¡æ¯ /// </summary> /// <param name="input"></param> /// <returns></returns> public Task<WebResponseContent> SendLocationStatusAsync(InputDto input); /// <param name="input">å容æè¾å ¥æ°æ®</param> /// <returns>æä½ç»æ</returns> public Task<WebResponseContent> SendLocationStatusAsync(GradingMachineInputDto input); /// <summary> /// å容æå·¥ä½å®æåè°ç¨æ¤æ¥å£éç¥ç©æµåºåº /// </summary> /// <param name="input"></param> /// <returns></returns> public Task<WebResponseContent> RequestOutboundAsync(InputDto input); /// <param name="input">å容æè¾å ¥æ°æ®</param> /// <returns>æä½ç»æ</returns> public Task<WebResponseContent> RequestOutboundAsync(GradingMachineInputDto input); /// <summary> /// å ¥åºå®æå容è°ç¨è·åæç䏿¯ä¸ªééçµè¯ /// </summary> /// <param name="input"></param> /// <returns></returns> public Task<WebResponseContent> GetPalletCodeCellAsync(InputDto input); /// <param name="input">å容æè¾å ¥æ°æ®</param> /// <returns>æä½ç»æ</returns> public Task<WebResponseContent> GetPalletCodeCellAsync(GradingMachineInputDto input); /// <summary> /// èªå¨å建åºåºä»»å¡ - æ¥è¯¢å°æåºåå¹¶åå»ºä»»å¡ Code/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetailService.cs
@@ -1,24 +1,25 @@ using Org.BouncyCastle.Crypto; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_IInboundService; using WIDESEA_Model.Models; namespace WIDESEA_InboundService { /// <summary> /// å ¥åºåæç»æå¡å®ç°ç±» /// </summary> public class InboundOrderDetailService : ServiceBase<Dt_InboundOrderDetail, IRepository<Dt_InboundOrderDetail>>, IInboundOrderDetailService { /// <summary> /// è·åå ¥åºåæç»ä»å¨æ¥å£ /// </summary> public IRepository<Dt_InboundOrderDetail> Repository => BaseDal; public InboundOrderDetailService(IRepository<Dt_InboundOrderDetail> BaseDal) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> public InboundOrderDetailService(IRepository<Dt_InboundOrderDetail> baseDal) : base(baseDal) { } } Code/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs
@@ -8,18 +8,32 @@ namespace WIDESEA_InboundService { /// <summary> /// å ¥åºåæå¡å®ç°ç±» /// </summary> public class InboundOrderService : ServiceBase<Dt_InboundOrder, IRepository<Dt_InboundOrder>>, IInboundOrderService { private readonly IMapper _mapper; private readonly IUnitOfWorkManage _unitOfWorkManage; /// <summary> /// è·åå ¥åºåä»å¨æ¥å£ /// </summary> public IRepository<Dt_InboundOrder> Repository => BaseDal; public InboundOrderService(IRepository<Dt_InboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> /// <param name="mapper">对象æ å°å¨</param> /// <param name="unitOfWorkManage">å·¥ä½åå 管çå¨</param> public InboundOrderService( IRepository<Dt_InboundOrder> baseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage) : base(baseDal) { _mapper = mapper; _unitOfWorkManage = unitOfWorkManage; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs
@@ -1,22 +1,33 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_IInboundService; using WIDESEA_IInboundService; namespace WIDESEA_InboundService { /// <summary> /// å ¥åºæå¡èåå®ç°ç±» /// </summary> public class InboundService : IInboundService { /// <summary> /// å ¥åºåæç»æå¡ /// </summary> public IInboundOrderDetailService InboundOrderDetailService { get; } public IInboundOrderService InbounOrderService { get; } /// <summary> /// å ¥åºåæå¡ /// </summary> public IInboundOrderService InboundOrderService { get; } public InboundService(IInboundOrderDetailService inboundOrderDetailService, IInboundOrderService inbounOrderService) /// <summary> /// æé 彿° /// </summary> /// <param name="inboundOrderDetailService">å ¥åºåæç»æå¡</param> /// <param name="inboundOrderService">å ¥åºåæå¡</param> public InboundService( IInboundOrderDetailService inboundOrderDetailService, IInboundOrderService inboundOrderService) { InboundOrderDetailService = inboundOrderDetailService; InbounOrderService = inbounOrderService; InboundOrderService = inboundOrderService; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_Model/LoginInfo.cs
@@ -1,15 +1,18 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEA_Model { /// <summary> /// ç»å½ä¿¡æ¯æ¨¡å /// </summary> public class LoginInfo { public string UserName { get; set; } /// <summary> /// ç¨æ·å /// </summary> public string UserName { get; set; } = string.Empty; public string Password { get; set; } /// <summary> /// å¯ç /// </summary> public string Password { get; set; } = string.Empty; } } Code/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs
@@ -5,16 +5,28 @@ namespace WIDESEA_OutboundService { /// <summary> /// åºåºåæç»æå¡å®ç°ç±» /// </summary> public partial class OutboundOrderDetailService : ServiceBase<Dt_OutboundOrderDetail, IRepository<Dt_OutboundOrderDetail>>, IOutboundOrderDetailService { private readonly IUnitOfWorkManage _unitOfWorkManage; /// <summary> /// è·ååºåºåæç»ä»å¨æ¥å£ /// </summary> public IRepository<Dt_OutboundOrderDetail> Repository => BaseDal; public OutboundOrderDetailService(IRepository<Dt_OutboundOrderDetail> BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> /// <param name="unitOfWorkManage">å·¥ä½åå 管çå¨</param> public OutboundOrderDetailService( IRepository<Dt_OutboundOrderDetail> baseDal, IUnitOfWorkManage unitOfWorkManage) : base(baseDal) { _unitOfWorkManage = unitOfWorkManage; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs
@@ -6,17 +6,32 @@ namespace WIDESEA_OutboundService { /// <summary> /// åºåºåæå¡å®ç°ç±» /// </summary> public class OutboundOrderService : ServiceBase<Dt_OutboundOrder, IRepository<Dt_OutboundOrder>>, IOutboundOrderService { private readonly IMapper _mapper; private readonly IUnitOfWorkManage _unitOfWorkManage; /// <summary> /// è·ååºåºåä»å¨æ¥å£ /// </summary> public IRepository<Dt_OutboundOrder> Repository => BaseDal; public OutboundOrderService(IRepository<Dt_OutboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> /// <param name="mapper">对象æ å°å¨</param> /// <param name="unitOfWorkManage">å·¥ä½åå 管çå¨</param> public OutboundOrderService( IRepository<Dt_OutboundOrder> baseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage) : base(baseDal) { _mapper = mapper; _unitOfWorkManage = unitOfWorkManage; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs
@@ -2,20 +2,40 @@ namespace WIDESEA_OutboundService { /// <summary> /// åºåºæå¡èåå®ç°ç±» /// </summary> public class OutboundService : IOutboundService { /// <summary> /// åºåºåæç»æå¡ /// </summary> public IOutboundOrderDetailService OutboundOrderDetailService { get; } /// <summary> /// åºåºåæå¡ /// </summary> public IOutboundOrderService OutboundOrderService { get; } public IOutStockLockInfoService OutboundStockLockInfoService { get; } /// <summary> /// åºåºåºåéå®ä¿¡æ¯æå¡ /// </summary> public IOutStockLockInfoService OutStockLockInfoService { get; } public OutboundService(IOutboundOrderDetailService outboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outboundStockLockInfoService) /// <summary> /// æé 彿° /// </summary> /// <param name="outboundOrderDetailService">åºåºåæç»æå¡</param> /// <param name="outboundOrderService">åºåºåæå¡</param> /// <param name="outStockLockInfoService">åºåºåºåéå®ä¿¡æ¯æå¡</param> public OutboundService( IOutboundOrderDetailService outboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outStockLockInfoService) { OutboundOrderDetailService = outboundOrderDetailService; OutboundOrderService = outboundOrderService; OutboundStockLockInfoService = outboundStockLockInfoService; OutStockLockInfoService = outStockLockInfoService; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/LocationStatusChangeRecordService.cs
@@ -5,12 +5,22 @@ namespace WIDESEA_RecordService { /// <summary> /// è´§ä½ç¶æåæ´è®°å½æå¡å®ç°ç±» /// </summary> public partial class LocationStatusChangeRecordService : ServiceBase<Dt_LocationStatusChangeRecord, IRepository<Dt_LocationStatusChangeRecord>>, ILocationStatusChangeRecordService { public LocationStatusChangeRecordService(IRepository<Dt_LocationStatusChangeRecord> BaseDal) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> public LocationStatusChangeRecordService(IRepository<Dt_LocationStatusChangeRecord> baseDal) : base(baseDal) { } /// <summary> /// è·åè´§ä½ç¶æåæ´è®°å½ä»å¨æ¥å£ /// </summary> public IRepository<Dt_LocationStatusChangeRecord> Repository => BaseDal; } } Code/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/RecordService.cs
@@ -1,21 +1,32 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_IRecordService; using WIDESEA_IRecordService; namespace WIDESEA_RecordService { /// <summary> /// è®°å½æå¡èåå®ç°ç±» /// </summary> public class RecordService : IRecordService { public ILocationStatusChangeRecordService LocationStatusChangeRecordSetvice { get; } /// <summary> /// è´§ä½ç¶æåæ´è®°å½æå¡ /// </summary> public ILocationStatusChangeRecordService LocationStatusChangeRecordService { get; } /// <summary> /// åºåæ°éåæ´è®°å½æå¡ /// </summary> public IStockQuantityChangeRecordService StockQuantityChangeRecordService { get; } public RecordService(ILocationStatusChangeRecordService locationStatusChangeRecordSetvice, IStockQuantityChangeRecordService stockQuantityChangeRecordService) /// <summary> /// æé 彿° /// </summary> /// <param name="locationStatusChangeRecordService">è´§ä½ç¶æåæ´è®°å½æå¡</param> /// <param name="stockQuantityChangeRecordService">åºåæ°éåæ´è®°å½æå¡</param> public RecordService( ILocationStatusChangeRecordService locationStatusChangeRecordService, IStockQuantityChangeRecordService stockQuantityChangeRecordService) { LocationStatusChangeRecordSetvice = locationStatusChangeRecordSetvice; LocationStatusChangeRecordService = locationStatusChangeRecordService; StockQuantityChangeRecordService = stockQuantityChangeRecordService; } } Code/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/StockQuantityChangeRecordService.cs
@@ -6,14 +6,26 @@ namespace WIDESEA_RecordService { /// <summary> /// åºåæ°éåæ´è®°å½æå¡å®ç°ç±» /// </summary> public partial class StockQuantityChangeRecordService : ServiceBase<Dt_StockQuantityChangeRecord, IRepository<Dt_StockQuantityChangeRecord>>, IStockQuantityChangeRecordService { private readonly IMapper _mapper; public StockQuantityChangeRecordService(IRepository<Dt_StockQuantityChangeRecord> BaseDal, IMapper mapper) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> /// <param name="mapper">对象æ å°å¨</param> public StockQuantityChangeRecordService(IRepository<Dt_StockQuantityChangeRecord> baseDal, IMapper mapper) : base(baseDal) { _mapper = mapper; } /// <summary> /// è·ååºåæ°éåæ´è®°å½ä»å¨æ¥å£ /// </summary> public IRepository<Dt_StockQuantityChangeRecord> Repository => BaseDal; } } Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs
@@ -5,22 +5,42 @@ namespace WIDESEA_StockService { /// <summary> /// åºåæç»æå¡å®ç°ç±» /// </summary> public partial class StockInfoDetailService : ServiceBase<Dt_StockInfoDetail, IRepository<Dt_StockInfoDetail>>, IStockInfoDetailService { public StockInfoDetailService(IRepository<Dt_StockInfoDetail> BaseDal) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> public StockInfoDetailService(IRepository<Dt_StockInfoDetail> baseDal) : base(baseDal) { } /// <summary> /// è·ååºåæç»ä»å¨æ¥å£ /// </summary> public IRepository<Dt_StockInfoDetail> Repository => BaseDal; public bool ExistSerialNumber(string SerialNumber) /// <summary> /// æ£æ¥åºåå·æ¯å¦åå¨ /// </summary> /// <param name="serialNumber">åºåå·</param> /// <returns>æ¯å¦åå¨</returns> public bool ExistSerialNumber(string serialNumber) { return BaseDal.QueryFirst(x => x.SerialNumber == SerialNumber) != null; return BaseDal.QueryFirst(x => x.SerialNumber == serialNumber) != null; } public bool ExistSerialNumbers(List<string> SerialNumbers) /// <summary> /// æ£æ¥åºåå·åè¡¨ä¸æ¯å¦æä»»ä½åºåå·åå¨ /// </summary> /// <param name="serialNumbers">åºåå·å表</param> /// <returns>æ¯å¦åå¨</returns> public bool ExistSerialNumbers(List<string> serialNumbers) { return BaseDal.QueryFirst(x => SerialNumbers.Contains(x.SerialNumber)) != null; return BaseDal.QueryFirst(x => serialNumbers.Contains(x.SerialNumber)) != null; } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs
@@ -1,4 +1,4 @@ using WIDESEA_Common.StockEnum; using WIDESEA_Common.StockEnum; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_IStockService; @@ -6,17 +6,28 @@ namespace WIDESEA_StockService { /// <summary> /// åºåä¿¡æ¯æå¡å®ç°ç±» /// </summary> public partial class StockInfoService : ServiceBase<Dt_StockInfo, IRepository<Dt_StockInfo>>, IStockInfoService { /// <summary> /// è·ååºåä¿¡æ¯ä»å¨æ¥å£ /// </summary> public IRepository<Dt_StockInfo> Repository => BaseDal; public StockInfoService(IRepository<Dt_StockInfo> BaseDal) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> public StockInfoService(IRepository<Dt_StockInfo> baseDal) : base(baseDal) { } /// <summary> /// è·ååºåä¿¡æ¯å表ï¼åºåºæ¥æå°äºå½åæ¶é´ä¸åºåç¶æä¸ºå ¥åºå®æçè®°å½ï¼ /// </summary> /// <returns>åºåä¿¡æ¯å表</returns> public async Task<List<Dt_StockInfo>> GetStockInfoAsync() { return await BaseDal.QueryDataAsync(x => @@ -27,6 +38,8 @@ /// <summary> /// è·ååºåä¿¡æ¯å表ï¼åºåºæ¥æå°äºå½åæ¶é´ä¸åºåç¶æä¸ºå ¥åºå®æçè®°å½ï¼ä¸ä»åºIDå¹é ï¼ /// </summary> /// <param name="warehouseId">ä»åºID</param> /// <returns>åºåä¿¡æ¯å表</returns> public async Task<List<Dt_StockInfo>> GetStockInfoAsync(int warehouseId) { return await BaseDal.QueryDataAsync(x => @@ -38,6 +51,8 @@ /// <summary> /// è·ååºåä¿¡æ¯ï¼æ ¹æ®æçç æ¥è¯¢ï¼ /// </summary> /// <param name="palletCode">æçç¼ç </param> /// <returns>åºåä¿¡æ¯</returns> public async Task<Dt_StockInfo> GetStockInfoAsync(string palletCode) { return await BaseDal.QueryDataNavFirstAsync(x => x.PalletCode == palletCode); @@ -46,18 +61,19 @@ /// <summary> /// æ´æ°åºåæ°æ® /// </summary> /// <param name="stockInfo">åºåä¿¡æ¯å¯¹è±¡</param> /// <returns>æ´æ°æ¯å¦æå</returns> public async Task<bool> UpdateStockAsync(Dt_StockInfo stockInfo) { return await BaseDal.UpdateDataAsync(stockInfo); } /// <summary> /// æ£ç´¢æå®æçå¨ç»å®ä½ç½®çåºå详ç»ä¿¡æ¯ã /// æ£ç´¢æå®æçå¨ç»å®ä½ç½®çåºå详ç»ä¿¡æ¯ /// </summary> /// <param name="palletCode">请æ±åºåä¿¡æ¯çæçå¯ä¸æ è¯ç¬¦ãä¸è½ä¸º null æç©ºã</param> /// <param name="locationCode">表示æçåå¨ä½ç½®ç代ç ãä¸è½ä¸º null æç©ºã</param> /// <returns>è¡¨ç¤ºå¼æ¥æä½çä»»å¡ãä»»å¡ç»æå å«ä¸ä¸ª <see cref="Dt_StockInfo"/> 对象ï¼è¯¥å¯¹è±¡å 嫿宿çåä½ç½®çåºå详ç»ä¿¡æ¯ãå¦ææªæ¾å°å¹é çåºåä¿¡æ¯ï¼åè¿å nullã</returns> /// <param name="palletCode">æçç¼ç </param> /// <param name="locationCode">è´§ä½ç¼ç </param> /// <returns>åºåä¿¡æ¯</returns> public async Task<Dt_StockInfo> GetStockInfoAsync(string palletCode, string locationCode) { return await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode && x.LocationCode == locationCode); Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
@@ -7,16 +7,38 @@ namespace WIDESEA_StockService { /// <summary> /// åºåæå¡ /// åºåæå¡èåå®ç°ç±» /// </summary> public class StockSerivce : IStockService public class StockService : IStockService { /// <summary> /// åºåæç»æå¡ /// </summary> public IStockInfoDetailService StockInfoDetailService { get; } /// <summary> /// åºåä¿¡æ¯æå¡ /// </summary> public IStockInfoService StockInfoService { get; } /// <summary> /// åºåæç»åå²æå¡ /// </summary> public IStockInfoDetail_HtyService StockInfoDetail_HtyService { get; } /// <summary> /// åºååå²æå¡ /// </summary> public IStockInfo_HtyService StockInfo_HtyService { get; } public StockSerivce( /// <summary> /// æé 彿° /// </summary> /// <param name="stockInfoDetailService">åºåæç»æå¡</param> /// <param name="stockInfoService">åºåä¿¡æ¯æå¡</param> /// <param name="stockInfoDetail_HtyService">åºåæç»å岿å¡</param> /// <param name="stockInfo_HtyService">åºåå岿å¡</param> public StockService( IStockInfoDetailService stockInfoDetailService, IStockInfoService stockInfoService, IStockInfoDetail_HtyService stockInfoDetail_HtyService, Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs
@@ -35,7 +35,7 @@ CreateDate = b.CreateDate, Creater = b.Creater, Depth = a.Depth, EnalbeStatus = a.EnableStatus, EnableStatus = a.EnableStatus, Layer = a.Layer, LocationName = a.LocationName, LocationStatus = a.LocationStatus, Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -9,7 +9,7 @@ using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Core; using WIDESEA_DTO; using WIDESEA_DTO.GradingMachine; using WIDESEA_DTO.Task; using WIDESEA_IBasicService; using WIDESEA_IStockService; @@ -566,7 +566,7 @@ /// <summary> /// å åæºåæ¾è´§å®æåç©æµéç¥åæå容æå®æä¿¡å· /// </summary> public async Task<WebResponseContent> InOrOutCompletedAsync(InputDto input) public async Task<WebResponseContent> InOrOutCompletedAsync(GradingMachineInputDto input) { WebResponseContent content = new WebResponseContent(); if (string.IsNullOrWhiteSpace(input.PalletCode) || string.IsNullOrWhiteSpace(input.LocationCode)) @@ -581,7 +581,7 @@ { var location = await _locationInfoService.GetLocationInfoAsync(input.LocationCode); OutPutDto outPutDto = new OutPutDto() OutputDto outPutDto = new OutputDto() { LocationCode = input.LocationCode, PalletCode = input.PalletCode, @@ -592,7 +592,7 @@ } else { OutPutDto outPutDto = new OutPutDto() OutputDto outPutDto = new OutputDto() { LocationCode = input.LocationCode, PalletCode = input.PalletCode, @@ -615,7 +615,7 @@ /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task<WebResponseContent> SendLocationStatusAsync(InputDto input) public async Task<WebResponseContent> SendLocationStatusAsync(GradingMachineInputDto input) { WebResponseContent content = new WebResponseContent(); if (string.IsNullOrWhiteSpace(input.LocationCode)) @@ -652,7 +652,7 @@ /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task<WebResponseContent> RequestOutboundAsync(InputDto input) public async Task<WebResponseContent> RequestOutboundAsync(GradingMachineInputDto input) { WebResponseContent content = new WebResponseContent(); if (string.IsNullOrWhiteSpace(input.LocationCode) || string.IsNullOrWhiteSpace(input.PalletCode)) @@ -711,7 +711,7 @@ /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task<WebResponseContent> GetPalletCodeCellAsync(InputDto input) public async Task<WebResponseContent> GetPalletCodeCellAsync(GradingMachineInputDto input) { WebResponseContent content = new WebResponseContent(); if (string.IsNullOrWhiteSpace(input.PalletCode) || string.IsNullOrWhiteSpace(input.LocationCode)) @@ -725,7 +725,7 @@ { return content.Error("æªæ¾å°å¯¹åºçæç"); } var outPutDtos = stockInfo.Details.Select(x => new OutPutDto() var outPutDtos = stockInfo.Details.Select(x => new OutputDto() { LocationCode = input.LocationCode, PalletCode = input.PalletCode, Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/Task_HtyService.cs
@@ -1,13 +1,21 @@ using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_ITaskInfoService; using WIDESEA_Model.Models; namespace WIDESEA_TaskInfoService; namespace WIDESEA_TaskInfoService { /// <summary> /// ä»»å¡å岿å¡å®ç°ç±» /// </summary> public class Task_HtyService : ServiceBase<Dt_Task_Hty, IRepository<Dt_Task_Hty>>, ITask_HtyService { public Task_HtyService(IRepository<Dt_Task_Hty> BaseDal) : base(BaseDal) /// <summary> /// æé 彿° /// </summary> /// <param name="baseDal">åºç¡æ°æ®è®¿é®å¯¹è±¡</param> public Task_HtyService(IRepository<Dt_Task_Hty> baseDal) : base(baseDal) { } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/PDAController.cs
@@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.IO; using WIDESEA_Core; using WIDESEA_Core.BaseController; using WIDESEA_Core.Helper; @@ -8,14 +9,12 @@ using WIDESEA_IInboundService; using WIDESEA_IOutboundService; using WIDESEA_ITaskInfoService; using System.IO; using WIDESEA_Model.Models; using System; namespace WIDESEA_WMSServer.Controllers { /// <summary> /// PDA /// PDA æ§å¶å¨ - æä¾PDAåºç¨ä¸è½½ãä¸ä¼ åçæ¬æ£æ¥åè½ /// </summary> [Route("api/PDA")] [Authorize, ApiController] @@ -25,6 +24,9 @@ private readonly IOutboundService _outboundService; private readonly ITaskService _taskService; /// <summary> /// æé 彿° /// </summary> public PDAController(ITaskService taskService, IInboundService inboundService, IOutboundService outboundService) { _inboundService = inboundService; @@ -33,37 +35,30 @@ } /// <summary> /// ä¸è½½PDA /// ä¸è½½PDAåºç¨å®è£ å /// </summary> /// <returns></returns> /// <returns>APKæä»¶æé误信æ¯</returns> [HttpPost, HttpGet, Route("DownLoadApp"), AllowAnonymous] public virtual ActionResult DownLoadApp() { string path = $"{AppDomain.CurrentDomain.BaseDirectory}Upload/App/"; if (!Directory.Exists(path)) Directory.CreateDirectory(path); path += "WMS-PDA.apk"; const string appDirectory = "Upload/App/"; const string appFileName = "WMS-PDA.apk"; string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, appDirectory, appFileName); if (System.IO.File.Exists(path)) if (!System.IO.File.Exists(path)) { return Json(WebResponseContent.Instance.Error("æªæ¾å°å®è£ å ")); } byte[] fileBytes = System.IO.File.ReadAllBytes(path); return File( fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, System.IO.Path.GetFileName(path) ); } else { return Json(WebResponseContent.Instance.Error($"æªæ¾å°å®è£ å ")); } return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, appFileName); } /// <summary> /// ä¸ä¼ PDA /// ä¸ä¼ PDAåºç¨å®è£ å /// </summary> /// <param name="fileInput"></param> /// <returns></returns> /// <param name="fileInput">ä¸ä¼ çæä»¶</param> /// <returns>ä¸ä¼ ç»æ</returns> [HttpPost, HttpGet, Route("UploadApp"), AllowAnonymous] [Consumes("multipart/form-data")] public WebResponseContent UploadApp(IEnumerable<IFormFile> fileInput) @@ -71,43 +66,72 @@ try { List<IFormFile> files = fileInput.ToList(); if (files == null || files.Count() == 0) return new WebResponseContent { Status = true, Message = "è¯·éæ©ä¸ä¼ çæä»¶" }; IFormFile formFile = files[0]; string dicPath = $"{AppDomain.CurrentDomain.BaseDirectory}Upload/App/"; if (!Directory.Exists(dicPath)) Directory.CreateDirectory(dicPath); string path = $"{dicPath}WMS-PDA{DateTime.Now:yyyyMMddhhmmss}.apk"; dicPath = $"{dicPath}WMS-PDA.apk"; if (System.IO.File.Exists(dicPath)) System.IO.File.Move(dicPath, path); if (files == null || files.Count == 0) { return new WebResponseContent { Status = false, Message = "è¯·éæ©ä¸ä¼ çæä»¶" }; } using (var stream = new FileStream(dicPath, FileMode.Create)) IFormFile formFile = files[0]; const string appDirectory = "Upload/App/"; const string appFileName = "WMS-PDA.apk"; string directoryPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, appDirectory); if (!Directory.Exists(directoryPath)) { Directory.CreateDirectory(directoryPath); } string backupPath = Path.Combine(directoryPath, $"WMS-PDA{DateTime.Now:yyyyMMddhhmmss}.apk"); string targetPath = Path.Combine(directoryPath, appFileName); // å¤ä»½ç°ææä»¶ if (System.IO.File.Exists(targetPath)) { System.IO.File.Move(targetPath, backupPath); } // ä¿åæ°æä»¶ using (var stream = new FileStream(targetPath, FileMode.Create)) { formFile.CopyTo(stream); } return new WebResponseContent { Status = true, Message = "æä»¶ä¸ä¼ æå" }; } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); return WebResponseContent.Instance.Error($"æä»¶ä¸ä¼ 失败ï¼{ex.Message}"); } } /// <summary> /// è·åPDAçæ¬å·å¹¶æ£æ¥æ¯å¦éè¦æ´æ° /// </summary> /// <param name="version">å½åPDAçæ¬å·</param> /// <returns>æ¯å¦éè¦æ´æ°çæ å¿</returns> [HttpPost, HttpGet, Route("GetPDAVersion"), AllowAnonymous] public WebResponseContent GetPDAVersion(string version) { try { string versionP = AppSettings.Get("PDAVersion"); if (Convert.ToInt32(versionP) > Convert.ToInt32(version)) return WebResponseContent.Instance.OK(data: true); else return WebResponseContent.Instance.OK(data: false); if (string.IsNullOrEmpty(version)) { return WebResponseContent.Instance.Error("çæ¬å·ä¸è½ä¸ºç©º"); } string serverVersion = AppSettings.Get("PDAVersion"); if (int.TryParse(serverVersion, out int serverVersionNum) && int.TryParse(version, out int clientVersionNum)) { bool needUpdate = serverVersionNum > clientVersionNum; return WebResponseContent.Instance.OK(data: needUpdate); } return WebResponseContent.Instance.Error("çæ¬å·æ ¼å¼é误"); } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); return WebResponseContent.Instance.Error($"çæ¬æ£æ¥å¤±è´¥ï¼{ex.Message}"); } } } } Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_UserController.cs
@@ -41,6 +41,11 @@ return Json(Service.Login(loginInfo)); } /// <summary> /// Swagger ç»å½æ¥å£ /// </summary> /// <param name="loginRequest">ç»å½è¯·æ±</param> /// <returns>ç»å½ç»æ</returns> [HttpPost, Route("swgLogin"), AllowAnonymous] public dynamic SwgLogin([FromBody] SwaggerLoginRequest loginRequest) { @@ -71,7 +76,8 @@ } catch (Exception ex) { // è®°å½å¼å¸¸æ¥å¿ return new { result = false, message = ex.Message }; } return new { result = false }; @@ -89,11 +95,17 @@ return Json(Service.ModifyPwd(oldPwd, newPwd)); } /// <summary> /// è·åéªè¯ç /// 注æï¼å½åçæ¬ä½¿ç¨åºå®éªè¯ç "1234" ç¨äºæµè¯ /// </summary> /// <returns>éªè¯ç å¾çåå¯ä¸æ è¯</returns> [HttpGet, Route("getVierificationCode"), AllowAnonymous] public IActionResult GetVierificationCode() { // TODO: ç产ç¯å¢åºå¯ç¨çå®éªè¯ç çæ //var html = MiniProfiler.Current.RenderIncludes(_httpContextAccessor.HttpContext); string code = "1234" /*VierificationCode.RandomText()*/; string code = "1234"; // æµè¯ç¨åºå®éªè¯ç ï¼ç产ç¯å¢åºä½¿ç¨ VierificationCode.RandomText() var data = new { img = VierificationCode.CreateBase64Imgage(code), @@ -107,6 +119,10 @@ { return WebResponseContent.Instance.OK(data: JwtHelper.SerializeJwt(code)); } /// <summary> /// æ¿æ¢Tokenï¼å·æ°ä»¤çï¼ /// </summary> /// <returns>æ°çToken</returns> [HttpPost, Route("replaceToken")] public WebResponseContent ReplaceToken() { @@ -116,7 +132,7 @@ string token = App.User.GetToken(); if (string.IsNullOrEmpty(token)) { return responseContent = WebResponseContent.Instance.Error("tokenæ æï¼è¯·éæ°ç»å½ï¼"); return responseContent.Error("Tokenæ æï¼è¯·éæ°ç»å½ï¼"); } TokenModelJwt tokenModelJwt = new TokenModelJwt() { @@ -128,7 +144,7 @@ string newToken = JwtHelper.IssueJwt(tokenModelJwt); App.User.UpdateToke(newToken, App.User.UserId); return responseContent = WebResponseContent.Instance.OK(data: newToken); return responseContent.OK(data: newToken); } catch (Exception ex) { Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -4,7 +4,7 @@ using WIDESEA_Common.CommonEnum; using WIDESEA_Core; using WIDESEA_Core.BaseController; using WIDESEA_DTO; using WIDESEA_DTO.GradingMachine; using WIDESEA_DTO.Stock; using WIDESEA_DTO.Task; using WIDESEA_ITaskInfoService; @@ -117,7 +117,7 @@ /// <param name="input"></param> /// <returns></returns> [HttpGet, HttpPost, Route("InOrOutCompleted"), AllowAnonymous] public async Task<WebResponseContent?> InOrOutCompletedAsync([FromBody] InputDto input) public async Task<WebResponseContent?> InOrOutCompletedAsync([FromBody] GradingMachineInputDto input) { return await Service.InOrOutCompletedAsync(input); } @@ -128,7 +128,7 @@ /// <param name="input"></param> /// <returns></returns> [HttpGet, HttpPost, Route("SendLocationStatus"), AllowAnonymous] public async Task<WebResponseContent?> SendLocationStatusAsync([FromBody] InputDto input) public async Task<WebResponseContent?> SendLocationStatusAsync([FromBody] GradingMachineInputDto input) { return await Service.SendLocationStatusAsync(input); } @@ -139,7 +139,7 @@ /// <param name="input"></param> /// <returns></returns> [HttpGet, HttpPost, Route("RequestOutbound"), AllowAnonymous] public async Task<WebResponseContent?> RequestOutboundAsync([FromBody] InputDto input) public async Task<WebResponseContent?> RequestOutboundAsync([FromBody] GradingMachineInputDto input) { return await Service.RequestOutboundAsync(input); } @@ -150,7 +150,7 @@ /// <param name="input"></param> /// <returns></returns> [HttpGet, HttpPost, Route("GetPalletCodeCell"), AllowAnonymous] public async Task<WebResponseContent?> GetPalletCodeCellAsync([FromBody] InputDto input) public async Task<WebResponseContent?> GetPalletCodeCellAsync([FromBody] GradingMachineInputDto input) { return await Service.GetPalletCodeCellAsync(input); } Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs
@@ -27,31 +27,31 @@ builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()).ConfigureContainer<ContainerBuilder>(builder => { builder.RegisterModule<AutofacModuleRegister>();//���нӿڲ�ķ���ע�� builder.RegisterModule<AutofacPropertityModuleReg>();// builder.RegisterModule<AutofacModuleRegister>(); // æ³¨åæ¥å£ä¾èµæ³¨å ¥ builder.RegisterModule<AutofacPropertityModuleReg>(); // 注å屿§æ³¨å ¥ }).ConfigureAppConfiguration((hostingContext, config) => { hostingContext.Configuration.ConfigureApplication(); config.Sources.Clear(); config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); }); ; }); builder.ConfigureApplication(); //App.ExpDateTime = DateTime.Parse("2025-03-31 00:00:00");//����ʱ�� // App.ExpDateTime = DateTime.Parse("2025-03-31 00:00:00"); // è®¾ç½®è¿ææ¶é´ // 2�����÷��� builder.Services.AddSingleton(new AppSettings(builder.Configuration));//ע�� builder.Services.AddAllOptionRegister();//��ȡ�����ļ� // 2. é ç½®æå¡ builder.Services.AddSingleton(new AppSettings(builder.Configuration)); // 注åé ç½® builder.Services.AddAllOptionRegister(); // è·åé ç½®æä»¶ builder.Services.AddSingleton<RoundRobinService>(); builder.Services.Configure<AutoOutboundTaskOptions>( builder.Configuration.GetSection("AutoOutboundTask")); builder.Services.AddMemoryCacheSetup();//���� builder.Services.AddMemoryCacheSetup(); // ç¼åæå¡ builder.Services.AddWebSocketSetup(); builder.Services.AddSqlsugarSetup();//SqlSugar �������� builder.Services.AddDbSetup();//Db �������� builder.Services.AddInitializationHostServiceSetup();//Ӧ�ó�ʼ������ע�� builder.Services.AddSqlsugarSetup(); // SqlSugar æ°æ®åºé ç½® builder.Services.AddDbSetup(); // Db æ°æ®åºé ç½® builder.Services.AddInitializationHostServiceSetup(); // åºç¨ç¨åºåå§åæå¡æ³¨å builder.Services.AddHostedService<AutoOutboundTaskBackgroundService>(); //builder.Services.AddHostedService<PermissionDataHostService>();//����Ȩ�� // builder.Services.AddHostedService<PermissionDataHostService>(); // æéæ°æ®æå¡ builder.Services.AddAutoMapperSetup(); builder.Services.AddCorsSetup(); @@ -73,7 +73,7 @@ builder.Services.AddAuthorizationSetup(); builder.Services.AddIpPolicyRateLimitSetup(builder.Configuration);//IPLimit���� �������� builder.Services.AddIpPolicyRateLimitSetup(builder.Configuration); // IPéæµ ä¸é´ä»¶æ³¨å builder.Services.AddScoped<UseServiceDIAttribute>(); @@ -83,7 +83,7 @@ builder.Services.AddControllers(o => { o.Filters.Add(typeof(GlobalExceptionsFilter));//ȫ���쳣 o.Filters.Add(typeof(GlobalExceptionsFilter)); // å ¨å±å¼å¸¸å¤ç }) .AddNewtonsoftJson(options => { @@ -104,16 +104,16 @@ var app = builder.Build(); // 3�������� app.UseMiniProfiler();//���ܷ����� app.ConfigureApplication();//�����ļ� app.UseApplicationSetup();//�������� // 3. é ç½®ä¸é´ä»¶ app.UseMiniProfiler(); // æ§è½åæ app.ConfigureApplication(); // åºç¨é ç½® app.UseApplicationSetup(); // åºç¨å¯å¨ app.UseAllServicesMiddle(builder.Services); app.UseSession(); app.UseSwaggerAuthorized(); app.UseSwaggerMiddle(() => Assembly.GetExecutingAssembly().GetManifestResourceStream("WIDESEA_WMSServer.index.html") ?? throw new Exception("WIDESEA_WMSServer.index.html�ļ�")); app.UseSwaggerMiddle(() => Assembly.GetExecutingAssembly().GetManifestResourceStream("WIDESEA_WMSServer.index.html") ?? throw new Exception("WIDESEA_WMSServer.index.htmlæä»¶ä¸åå¨")); app.UseIpLimitMiddle(); app.UseApiLogMiddleware(); //todo