diff --git a/ds-wms-service/DS.Module.Core/Constants/MultiLanguageConst.cs b/ds-wms-service/DS.Module.Core/Constants/MultiLanguageConst.cs
index f65f7b1e..7506a799 100644
--- a/ds-wms-service/DS.Module.Core/Constants/MultiLanguageConst.cs
+++ b/ds-wms-service/DS.Module.Core/Constants/MultiLanguageConst.cs
@@ -1400,7 +1400,20 @@ public static class MultiLanguageConst
///
[Description("作废成功")]
public const string BookingSlotDeleteSucc = "BookingSlot_DeleteSucc";
-
+
+ ///
+ /// 舱位变更比对结果不存在
+ ///
+ [Description("舱位变更比对结果不存在")]
+ public const string BookingSlotCompareNull = "BookingSlot_CompareNull";
+
+ ///
+ /// 获取舱位变更比对结果错误,比对内容不存在
+ ///
+ [Description("获取舱位变更比对结果错误,比对内容不存在")]
+ public const string BookingSlotCompareJsonNull = "BookingSlot_CompareJsonNull";
+
+
#endregion
diff --git a/ds-wms-service/DS.Module.Core/Enums/TaskPlat/TaskSourceEnum.cs b/ds-wms-service/DS.Module.Core/Enums/TaskPlat/TaskSourceEnum.cs
index 05ea112c..0acca91b 100644
--- a/ds-wms-service/DS.Module.Core/Enums/TaskPlat/TaskSourceEnum.cs
+++ b/ds-wms-service/DS.Module.Core/Enums/TaskPlat/TaskSourceEnum.cs
@@ -64,7 +64,7 @@ namespace DS.Module.Core
///
/// 工作流
///
- [Description("系统")]
+ [Description("工作流")]
WORK_FLOW,
}
}
diff --git a/ds-wms-service/DS.Module.Core/Enums/TaskPlat/TaskStatLevelEnum.cs b/ds-wms-service/DS.Module.Core/Enums/TaskPlat/TaskStatLevelEnum.cs
new file mode 100644
index 00000000..25c36ca3
--- /dev/null
+++ b/ds-wms-service/DS.Module.Core/Enums/TaskPlat/TaskStatLevelEnum.cs
@@ -0,0 +1,26 @@
+using System.ComponentModel;
+
+namespace DS.Module.Core
+{
+ ///
+ /// 任务统计分类枚举
+ ///
+ public enum TaskStatLevelEnum
+ {
+ ///
+ /// 异常
+ ///
+ [Description("异常")]
+ EXCPTION,
+ ///
+ /// 个人
+ ///
+ [Description("个人")]
+ PERSON,
+ ///
+ /// 公共
+ ///
+ [Description("公共")]
+ PUBLIC
+ }
+}
diff --git a/ds-wms-service/DS.Module.Core/Utils/EnumUtil.cs b/ds-wms-service/DS.Module.Core/Utils/EnumUtil.cs
index 150be6e0..e53ccab8 100644
--- a/ds-wms-service/DS.Module.Core/Utils/EnumUtil.cs
+++ b/ds-wms-service/DS.Module.Core/Utils/EnumUtil.cs
@@ -1,4 +1,5 @@
-using System.ComponentModel;
+using System.Collections.Concurrent;
+using System.ComponentModel;
using System.Reflection;
namespace DS.Module.Core;
@@ -8,6 +9,9 @@ namespace DS.Module.Core;
///
public static class EnumUtil
{
+ // 枚举显示字典缓存
+ private static readonly ConcurrentDictionary> EnumShowNameDict = new ConcurrentDictionary>();
+
///
/// 字符串转Enum
///
@@ -58,4 +62,39 @@ public static class EnumUtil
return 0;
}
}
+
+
+ ///
+ /// 获取枚举对象Key与名称的字典(缓存)
+ ///
+ ///
+ ///
+ public static Dictionary GetEnumDictionaryWithKey(this Type enumType)
+ {
+ if (!enumType.IsEnum)
+ throw new ArgumentException("Type '" + enumType.Name + "' is not an enum.");
+
+ // 查询缓存
+ var enumDic = EnumShowNameDict.ContainsKey(enumType) ? EnumShowNameDict[enumType] : new Dictionary();
+ if (enumDic.Count != 0)
+ return enumDic;
+
+ string[] fieldstrs = Enum.GetNames(enumType);
+ // 取枚举类型的Key/Value字典集合
+ enumDic = fieldstrs.Select(item =>
+ {
+ object[] arr = enumType.GetField(item).GetCustomAttributes(typeof(DescriptionAttribute), true);
+
+ return new
+ {
+ Key = item,
+ Val = ((DescriptionAttribute)arr[0]).Description
+ };
+ }).ToDictionary(a => a.Key, b => b.Val);
+
+ // 缓存
+ EnumShowNameDict[enumType] = enumDic;
+
+ return enumDic;
+ }
}
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.ContainerManagementApi/Controllers/ApiController.cs b/ds-wms-service/DS.WMS.ContainerManagementApi/Controllers/ApiController.cs
new file mode 100644
index 00000000..e50631a2
--- /dev/null
+++ b/ds-wms-service/DS.WMS.ContainerManagementApi/Controllers/ApiController.cs
@@ -0,0 +1,18 @@
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+
+namespace DS.WMS.ContainerManagementApi.Controllers;
+
+///
+/// WebApi控制器基类
+///
+[Authorize]
+[ApiController]
+[Route("containerManagementApi/[controller]")]
+public abstract class ApiController : Controller
+{
+ // ///
+ // /// 获取用户信息
+ // ///
+ // public UserInfo UserDetails => Request.GetUserInfo();
+}
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.ContainerManagementApi/Controllers/CM_CurrentStateController.cs b/ds-wms-service/DS.WMS.ContainerManagementApi/Controllers/CM_CurrentStateController.cs
new file mode 100644
index 00000000..bf5678ea
--- /dev/null
+++ b/ds-wms-service/DS.WMS.ContainerManagementApi/Controllers/CM_CurrentStateController.cs
@@ -0,0 +1,95 @@
+using DS.Module.Core;
+using DS.Module.Core.Data;
+using DS.WMS.ContainerManagement.Info.Dtos;
+using DS.WMS.ContainerManagement.Info.Entity;
+using DS.WMS.ContainerManagement.Info.Interface;
+using DS.WMS.Core.Code.Dtos;
+using DS.WMS.Core.Op.Dtos;
+using DS.WMS.Core.Op.Interface;
+using DS.WMS.Core.Op.View;
+using Microsoft.AspNetCore.Mvc;
+
+namespace DS.WMS.ContainerManagementApi.Controllers;
+
+///
+/// 集装箱管理
+///
+public class CM_CurrentStateController : ApiController
+{
+ private readonly ICM_CurrentStateService _invokeService;
+
+ ///
+ /// 构造函数
+ ///
+ ///
+ public CM_CurrentStateController(ICM_CurrentStateService invokeService)
+ {
+ _invokeService = invokeService;
+ }
+
+ ///
+ /// 列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("GetCM_CurrentStateList")]
+ public async Task>> GetCM_CurrentStateList([FromBody] PageRequest request)
+ {
+ var res = await _invokeService.GetListByPage(request);
+ return res;
+ }
+
+ ///
+ /// 直接编辑状态
+ ///
+ ///
+ [HttpPost]
+ [Route("EditCM_CurrentState")]
+ public DataResult EditCM_CurrentState([FromBody] CM_CurrentStateReq model)
+ {
+ var res = _invokeService.EditCM_CurrentState(model);
+ return res;
+ }
+
+
+ ///
+ /// 查看状态详情
+ ///
+ ///
+ ///
+ [HttpGet]
+ [Route("GetCM_CurrentStateInfo")]
+ public DataResult GetCM_CurrentStateInfo([FromQuery] string id)
+ {
+ var res = _invokeService.GetCM_CurrentStateInfo(id);
+ return res;
+ }
+
+ /////
+ ///// 费用锁定
+ /////
+ ///// 主表Ids
+ /////
+ //[HttpPost]
+ //[Route("FeeLocking")]
+ //public DataResult FeeLocking([FromBody] IdModel req)
+ //{
+ // var res = _invokeService.FeeLocking(req);
+ // return res;
+ //}
+
+
+ /////
+ ///// 费用解除锁定
+ /////
+ ///// 主表Ids
+ /////
+ //[HttpPost]
+ //[Route("FeeUnLocking")]
+ //public DataResult FeeUnLocking([FromBody] IdModel req)
+ //{
+ // var res = _invokeService.FeeUnLocking(req);
+ // return res;
+ //}
+}
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.ContainerManagementApi/DS.WMS.ContainerManagementApi.csproj b/ds-wms-service/DS.WMS.ContainerManagementApi/DS.WMS.ContainerManagementApi.csproj
new file mode 100644
index 00000000..9f6d401c
--- /dev/null
+++ b/ds-wms-service/DS.WMS.ContainerManagementApi/DS.WMS.ContainerManagementApi.csproj
@@ -0,0 +1,24 @@
+
+
+
+ net8.0
+ enable
+ enable
+ true
+ True
+ bin\Debug\net8.0\Api.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ds-wms-service/DS.WMS.ContainerManagementApi/DS.WMS.ContainerManagementApi.http b/ds-wms-service/DS.WMS.ContainerManagementApi/DS.WMS.ContainerManagementApi.http
new file mode 100644
index 00000000..d2a062b9
--- /dev/null
+++ b/ds-wms-service/DS.WMS.ContainerManagementApi/DS.WMS.ContainerManagementApi.http
@@ -0,0 +1,6 @@
+@DS.WMS.ContainerManagementApi_HostAddress = http://localhost:5011
+
+GET {{DS.WMS.ContainerManagementApi_HostAddress}}/weatherforecast/
+Accept: application/json
+
+###
diff --git a/ds-wms-service/DS.WMS.ContainerManagementApi/Logs/internal-nlog.txt b/ds-wms-service/DS.WMS.ContainerManagementApi/Logs/internal-nlog.txt
new file mode 100644
index 00000000..30eb1c52
--- /dev/null
+++ b/ds-wms-service/DS.WMS.ContainerManagementApi/Logs/internal-nlog.txt
@@ -0,0 +1,42 @@
+2024-07-25 15:40:36.9950 Info Registered target NLog.Targets.FileTarget(Name=allfile)
+2024-07-25 15:40:37.0123 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
+2024-07-25 15:40:37.0161 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
+2024-07-25 15:40:37.0333 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
+2024-07-25 15:40:37.0333 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\ds8-solution-pro\ds-wms-service\DS.WMS.ContainerManagementApi\bin\Debug\net8.0\nlog.config
+2024-07-25 15:40:37.0333 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
+2024-07-25 15:40:37.0498 Info Configuration initialized.
+2024-07-25 15:41:29.0953 Info Registered target NLog.Targets.FileTarget(Name=allfile)
+2024-07-25 15:41:29.1107 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
+2024-07-25 15:41:29.1107 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
+2024-07-25 15:41:29.1294 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
+2024-07-25 15:41:29.1294 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\ds8-solution-pro\ds-wms-service\DS.WMS.ContainerManagementApi\bin\Debug\net8.0\nlog.config
+2024-07-25 15:41:29.1444 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
+2024-07-25 15:41:29.1444 Info Configuration initialized.
+2024-07-25 16:17:59.0630 Info Registered target NLog.Targets.FileTarget(Name=allfile)
+2024-07-25 16:17:59.0872 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
+2024-07-25 16:17:59.0946 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
+2024-07-25 16:17:59.1151 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
+2024-07-25 16:17:59.1151 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\ds8-solution-pro\ds-wms-service\DS.WMS.ContainerManagementApi\bin\Debug\net8.0\nlog.config
+2024-07-25 16:17:59.1292 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
+2024-07-25 16:17:59.1292 Info Configuration initialized.
+2024-07-25 16:19:07.1595 Info Registered target NLog.Targets.FileTarget(Name=allfile)
+2024-07-25 16:19:07.1728 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
+2024-07-25 16:19:07.1728 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
+2024-07-25 16:19:07.1911 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
+2024-07-25 16:19:07.1911 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\ds8-solution-pro\ds-wms-service\DS.WMS.ContainerManagementApi\bin\Debug\net8.0\nlog.config
+2024-07-25 16:19:07.1911 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
+2024-07-25 16:19:07.2052 Info Configuration initialized.
+2024-07-25 16:24:33.7032 Info Registered target NLog.Targets.FileTarget(Name=allfile)
+2024-07-25 16:24:33.7032 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
+2024-07-25 16:24:33.7248 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
+2024-07-25 16:24:33.7460 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
+2024-07-25 16:24:33.7541 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\ds8-solution-pro\ds-wms-service\DS.WMS.ContainerManagementApi\bin\Debug\net8.0\nlog.config
+2024-07-25 16:24:33.7541 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
+2024-07-25 16:24:33.7696 Info Configuration initialized.
+2024-07-25 16:34:52.0017 Info Registered target NLog.Targets.FileTarget(Name=allfile)
+2024-07-25 16:34:52.0017 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
+2024-07-25 16:34:52.0175 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
+2024-07-25 16:34:52.0332 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
+2024-07-25 16:34:52.0332 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\ds8-solution-pro\ds-wms-service\DS.WMS.ContainerManagementApi\bin\Debug\net8.0\nlog.config
+2024-07-25 16:34:52.0332 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
+2024-07-25 16:34:52.0509 Info Configuration initialized.
diff --git a/ds-wms-service/DS.WMS.ContainerManagementApi/Program.cs b/ds-wms-service/DS.WMS.ContainerManagementApi/Program.cs
new file mode 100644
index 00000000..6bc37b0c
--- /dev/null
+++ b/ds-wms-service/DS.WMS.ContainerManagementApi/Program.cs
@@ -0,0 +1,86 @@
+using Autofac;
+using Autofac.Extensions.DependencyInjection;
+using DS.Module.AutofacModule;
+using DS.Module.Core;
+using DS.Module.Core.Extensions;
+using DS.Module.Core.ServiceExtensions;
+using DS.Module.Jwt;
+using DS.Module.MultiLanguage;
+using DS.Module.SqlSugar;
+using DS.Module.Swagger;
+using DS.Module.UserModule;
+using NLog.Web;
+using Swashbuckle.AspNetCore.SwaggerUI;
+
+var builder = WebApplication.CreateBuilder(args);
+var environment = builder.Environment.EnvironmentName;
+Console.WriteLine("ǰ:" + environment);
+//ע
+builder.Configuration
+ // .SetBasePath(builder.Environment.ContentRootPath)
+ .AddJsonFile(path: "appsettings.json", optional: false, reloadOnChange: true)
+ // .AddJsonFile(path: $"appsettings.{environment}.json", optional: true, reloadOnChange: true)
+ .Build();
+builder.Configuration.AddEnvironmentVariables();
+builder.Logging.AddNLog("nlog.config");
+// Add services to the container.
+//Autofacע
+builder.Host
+ .UseServiceProviderFactory(new AutofacServiceProviderFactory())
+ .ConfigureContainer(builder => { builder.RegisterModule(new AutofacModuleRegister()); });
+
+builder.Services.AddAppWebInstal();
+builder.Services.AddCorsInstall();
+builder.Services.AddUserModuleInstall(); //û
+builder.Services.AddSqlSugarInstall();
+builder.Services.AddSwaggerInstall();
+builder.Services.AddJwtInstall();
+builder.Services.AddSaasDbInstall();//ֿ
+builder.Services.AddMultiLanguageInstall();//Է
+// builder.Services.AddEndpointsApiExplorer();
+// builder.Services.AddSwaggerGen();
+
+//builder.Services.AddCrawlerModuleInstall();//ٷ
+
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+// if (app.Environment.IsDevelopment())
+// {
+// app.UseSwagger();
+// app.UseSwaggerUI();
+// }
+//swagger
+// app.UseSwagger();
+var documentName = AppSetting.app(new string[] { "SwaggerDoc", "ContactName" });
+app
+ .UseSwagger(c => { c.RouteTemplate = "{documentName}/swagger.json"; })
+ .UseSwaggerUI(c =>
+ {
+ c.SwaggerEndpoint("/" + documentName + "/swagger.json",
+ AppSetting.app(new string[] { "SwaggerDoc", "ContactName" }));
+ c.DocExpansion(DocExpansion.None);//DocExpansionΪNone۵з
+ c.DefaultModelExpandDepth(-1);//-1 ɲʾModels
+ });
+//
+var policyName = AppSetting.app(new string[] { "Cors", "PolicyName" });
+if (!policyName.IsNullOrEmpty())
+{
+ app.UseCors(policyName); //ӿм
+}
+
+app.UseRouting();
+
+app.UseStaticFiles();
+//м
+app.UseMiddleware();
+// //־м
+// app.UseMiddleware();
+
+// ȿ֤
+app.UseAuthentication();
+// ȻȨм
+app.UseAuthorization();
+app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
+
+app.Run();
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.ContainerManagementApi/Properties/launchSettings.json b/ds-wms-service/DS.WMS.ContainerManagementApi/Properties/launchSettings.json
new file mode 100644
index 00000000..153510ec
--- /dev/null
+++ b/ds-wms-service/DS.WMS.ContainerManagementApi/Properties/launchSettings.json
@@ -0,0 +1,41 @@
+{
+ "$schema": "http://json.schemastore.org/launchsettings.json",
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:52580",
+ "sslPort": 44370
+ }
+ },
+ "profiles": {
+ "http": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "applicationUrl": "http://localhost:5011",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "https": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "applicationUrl": "https://localhost:7026;http://localhost:5011",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+}
diff --git a/ds-wms-service/DS.WMS.ContainerManagementApi/appsettings.Development.json b/ds-wms-service/DS.WMS.ContainerManagementApi/appsettings.Development.json
new file mode 100644
index 00000000..0c208ae9
--- /dev/null
+++ b/ds-wms-service/DS.WMS.ContainerManagementApi/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ }
+}
diff --git a/ds-wms-service/DS.WMS.ContainerManagementApi/appsettings.json b/ds-wms-service/DS.WMS.ContainerManagementApi/appsettings.json
new file mode 100644
index 00000000..a97587c4
--- /dev/null
+++ b/ds-wms-service/DS.WMS.ContainerManagementApi/appsettings.json
@@ -0,0 +1,89 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ },
+ "AllowedHosts": "*",
+ "JwtSettings": {
+ "Issuer": "vol.core.owner",
+ "Audience": "vol.core",
+ "User": "C5ABA9E202D94C43A3CA66002BF77FAF",
+ "SecretKey": "sdfsdfsrty45634kkhllghtdgdfss345t678fs"
+ },
+ "Cors": {
+ "PolicyName": "WMSCore.API",
+ "Url": "http://localhost:8000,http://localhost:5999,http://localhost:8088,http://localhost:5173,http://0.0.0.0:5999,http://0.0.0.0:9995,http://localhost:9995,http://60.209.125.238:9995,http://localhost:3000,https://localhost:3100,http://47.104.255.182:3100,http://47.104.255.182:3110,https://localhost:3110,http://localhost:8080,http://localhost:8081,http://localhost:8082,http://localhost:8083,http://localhost:8084"
+ },
+ "DBInfo": {
+ "DefaultDbConnId": "1288018625843826688",
+ "DefaultDbType": 0,
+ "DefaultDbString": "server=60.209.125.238;port=32006;uid=root;pwd=Djy@Mysql.test;database=shippingweb8_dev",
+ "DBS": [
+ {
+ "ConnId": "1288018625843826680",
+ "DBType": 0,
+ "Enabled": false,
+ "HitRate": 40,
+ "Connection": "server=60.209.125.238;port=32006;uid=root;pwd=Djy@Mysql.test;database=shippingweb8_log"
+ }
+ ]
+ },
+ "SwaggerDoc": {
+ "ContactName": "WmsContainerManagementAPI",
+ "ContactEmail": "Wms API.Core@xxx.com",
+ "ContactUrl": "https://www.xxx.com",
+ "Version": "1.0",
+ "Title": "Wms ContainerManagement API",
+ "Description": "Wms ContainerManagement API"
+ },
+ "Middleware": {
+ "RecordAccessLogs": {
+ "Enabled": true,
+ "IgnoreApis": "/api/permission/getnavigationbar,/api/monitor/getids4users,/api/monitor/getaccesslogs,/api/monitor/server,/api/monitor/getactiveusers,/api/monitor/server,"
+ }
+ },
+ "FileSettings": {
+ "BasePath": "", //基础路径,不配置则使用当前系统目录
+ "RelativePath": "LinkAttach",
+ "FileType": [ ".xls", ".xlsx", ".pdf", ".jpg", ".png", ".txt", ".pms" ]
+ },
+ //打印模板
+ "PrintTemplate": {
+ "BasePath": "", //基础路径,不配置则使用当前系统目录
+ "RelativePath": "Upload/PrintTemplate",
+ "FileType": [ ".frx", ".xls" ]
+ },
+ "TempFile": {
+ "Path": "TempFiles",
+ "RemainHours": 2
+ },
+ "PrintService": {
+ "IP": "60.209.125.238",
+ "Port": "3009",
+ "AccessKey": "1777229107311022080",
+ "AccessSecret": "d816e6fe938f24e2f205db129d31286a",
+ "GetModuleListUrl": "/printApi/OpenPrint/GetPrintModuleList",
+ "GetTemplateListUrl": "/printApi/OpenPrint/GetPrintTemplateList",
+ "GetJsonPrintInfoUrl": "/printApi/OpenPrint/GetOpenJsonPrintInfo"
+ },
+ "DjyService": {
+ "IP": "60.209.125.238",
+ "Port": "35100",
+ "AccessKey": "6b050e757c1e405489e19602dd81ebbe",
+ "AccessSecret": "51d564741c761e0760f62d904f13c193009e74d0af9f72e2dc67f9320b8ae42580e2339745aee1bf",
+ "SaveServiceProjectUrl": "/EmbedProjectGoodsStatus/SaveServiceProject",
+ "CancelServiceProjectUrl": "/EmbedProjectGoodsStatus/CancelServiceProject",
+ "GetServiceProjectListUrl": "/EmbedProjectGoodsStatus/GetServiceProjectList",
+ "GetServiceStatusListUrl": "/EmbedProjectGoodsStatus/GetServiceStatusList",
+ "SaveServiceStatusUrl": "/EmbedProjectGoodsStatus/SaveServiceStatus",
+ "CancelServiceStatusUrl": "/EmbedProjectGoodsStatus/CancelServiceStatus"
+ },
+ "ExcuteRuleService": {
+ "IP": "47.104.73.97",
+ "Port": "7115",
+ "SenderKey": "SEFBZkh5V3R1TGxtdlBIcTF4QmNMWURCS08vb2EvTzVxS0F0eDFKdlgyS3lKVUx6K3JRRE94Q2kvcWZMRytZeWxyVkhLdk9hRGpzVStPamhIUXd5NU9FMjhFTktwUlZ2eThJZGlQd3p5dUk9",
+ "SendUrl": "/api/RulesEngineManage/ExcuteWorkFlow"
+ }
+}
diff --git a/ds-wms-service/DS.WMS.ContainerManagementApi/nlog.config b/ds-wms-service/DS.WMS.ContainerManagementApi/nlog.config
new file mode 100644
index 00000000..46e6f7cb
--- /dev/null
+++ b/ds-wms-service/DS.WMS.ContainerManagementApi/nlog.config
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.Core/ContainerManagement/Dtos/CM_CurrentStateReq.cs b/ds-wms-service/DS.WMS.Core/ContainerManagement/Dtos/CM_CurrentStateReq.cs
new file mode 100644
index 00000000..72d3027c
--- /dev/null
+++ b/ds-wms-service/DS.WMS.Core/ContainerManagement/Dtos/CM_CurrentStateReq.cs
@@ -0,0 +1,136 @@
+using DS.Module.Core;
+using FluentValidation;
+using SqlSugar;
+
+namespace DS.WMS.ContainerManagement.Info.Dtos;
+
+///
+/// 集装箱当前状态 请求实体
+///
+public class CM_CurrentStateReq
+{
+ ///
+ /// 主键Id
+ ///
+ public long Id { get; set; }
+ ///
+ /// 集装箱号
+ ///
+ public string Cntrno { get; set; }
+
+ //
+ /// Desc:箱型
+ ///
+ public string Ctnall { get; set; }
+
+ ///
+ /// Desc:是否上线(是否管理中)
+ ///
+ public bool IsOnline { get; set; } = false;
+
+ ///
+ /// Desc:新旧箱 空白/used/new
+ ///
+ public string UsedState { get; set; }
+
+ ///
+ /// Desc:箱主
+ ///
+ public string CtnOwner { get; set; }
+
+
+ ///
+ /// Desc:业务所属分部
+ ///
+ public string Corpid { get; set; }
+
+ ///
+ /// Desc:箱来源: 自有箱/短租租入/长租租入/买箱
+ ///
+ public string CtnSource { get; set; }
+
+ ///
+ /// Desc:箱业务状态: 短租租出 长租租出 单程 卖箱
+ ///
+ public string CtnBizState { get; set; } = "0";
+
+ ///
+ /// Desc:箱业务编号:当前
+ ///
+ public string Billno { get; set; }
+
+ ///
+ /// Desc:关联放箱单号
+ ///
+ public string CtnReleaseNo { get; set; }
+
+ ///
+ /// Desc:箱状态
+ ///
+ public string CtnState { get; set; }
+
+ ///
+ /// Desc:箱损坏/维修状态
+ ///
+ public string CtnBreakState { get; set; }
+
+ ///
+ /// Desc:当前港口
+ ///
+ public string Portid { get; set; }
+
+ ///
+ /// Desc:码头或场站
+ ///
+ public string Depot { get; set; }
+
+ ///
+ /// Desc:运输工具
+ ///
+ public string VehicleName { get; set; }
+
+ ///
+ /// Desc:当前业务编号
+ ///
+ public string Mblno { get; set; }
+
+
+ ///
+ /// Desc:业务委托单位
+ ///
+ public string CustomerName { get; set; }
+
+
+ ///
+ /// Desc:ETD
+ ///
+ public DateTime? ETD { get; set; }
+
+ ///
+ /// Desc:ETD
+ ///
+ public DateTime? ETA { get; set; }
+
+
+ ///
+ /// Desc:状态时间
+ ///
+ public DateTime? StateTime { get; set; }
+}
+
+///
+/// 验证
+///
+public class CM_CurrentStateReqValidator : AbstractValidator
+{
+ ///
+ /// 构造函数
+ ///
+ public CM_CurrentStateReqValidator()
+ {
+ this.RuleFor(o => o.Cntrno)
+ .NotEmpty().WithName("集装箱号");
+ this.RuleFor(o => o.Ctnall)
+ .NotEmpty().WithName("箱型");
+ }
+}
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.Core/ContainerManagement/Dtos/CM_CurrentStateRes.cs b/ds-wms-service/DS.WMS.Core/ContainerManagement/Dtos/CM_CurrentStateRes.cs
new file mode 100644
index 00000000..dc1f13e3
--- /dev/null
+++ b/ds-wms-service/DS.WMS.Core/ContainerManagement/Dtos/CM_CurrentStateRes.cs
@@ -0,0 +1,117 @@
+using DS.Module.Core;
+using SqlSugar;
+
+namespace DS.WMS.ContainerManagement.Info.Dtos;
+
+///
+/// 集装箱当前状态 返回实体
+///
+public class CM_CurrentStateRes
+{
+ ///
+ /// 主键Id
+ ///
+ public long Id { get; set; }
+ ///
+ /// 集装箱号
+ ///
+ public string Cntrno { get; set; }
+
+ //
+ /// Desc:箱型
+ ///
+ public string Ctnall { get; set; }
+
+ ///
+ /// Desc:是否上线(是否管理中)
+ ///
+ public bool IsOnline { get; set; } = false;
+
+ ///
+ /// Desc:新旧箱 空白/used/new
+ ///
+ public string UsedState { get; set; }
+
+ ///
+ /// Desc:箱主
+ ///
+ public string CtnOwner { get; set; }
+
+ ///
+ /// Desc:业务所属分部
+ ///
+ public string Corpid { get; set; }
+
+ ///
+ /// Desc:箱来源: 自有箱/短租租入/长租租入/买箱
+ ///
+ public string CtnSource { get; set; }
+
+ ///
+ /// Desc:箱业务状态: 短租租出 长租租出 单程 卖箱
+ ///
+ public string CtnBizState { get; set; } = "0";
+
+ ///
+ /// Desc:箱业务编号:当前
+ ///
+ public string Billno { get; set; }
+
+ ///
+ /// Desc:关联放箱单号
+ ///
+ public string CtnReleaseNo { get; set; }
+
+ ///
+ /// Desc:箱状态
+ ///
+ public string CtnState { get; set; }
+
+ ///
+ /// Desc:箱损坏/维修状态
+ ///
+ public string CtnBreakState { get; set; }
+
+ ///
+ /// Desc:当前港口
+ ///
+ public string Portid { get; set; }
+
+ ///
+ /// Desc:码头或场站
+ ///
+ public string Depot { get; set; }
+
+ ///
+ /// Desc:运输工具
+ ///
+ public string VehicleName { get; set; }
+
+ ///
+ /// Desc:当前业务编号
+ ///
+ public string Mblno { get; set; }
+
+
+ ///
+ /// Desc:业务委托单位
+ ///
+ public string CustomerName { get; set; }
+
+
+ ///
+ /// Desc:ETD
+ ///
+ public DateTime? ETD { get; set; }
+
+ ///
+ /// Desc:ETD
+ ///
+ public DateTime? ETA { get; set; }
+
+
+ ///
+ /// Desc:状态时间
+ ///
+ public DateTime? StateTime { get; set; }
+}
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.Core/ContainerManagement/Entity/CM_CurrentState.cs b/ds-wms-service/DS.WMS.Core/ContainerManagement/Entity/CM_CurrentState.cs
new file mode 100644
index 00000000..8dacc9cc
--- /dev/null
+++ b/ds-wms-service/DS.WMS.Core/ContainerManagement/Entity/CM_CurrentState.cs
@@ -0,0 +1,136 @@
+using DS.Module.Core;
+using DS.Module.Core.Data;
+using SqlSugar;
+
+namespace DS.WMS.ContainerManagement.Info.Entity;
+
+///
+/// 集装箱当前状态
+///
+[SqlSugar.SugarTable("CM_CurrentState", "箱管_当前状态")]
+public class CM_CurrentState : BaseOrgModel
+{
+ ///
+ /// Desc:集装箱号
+ ///
+ [SugarColumn(ColumnDescription = "集装箱号", IsNullable = false, Length = 20)]
+ public string Cntrno { get; set; }
+
+ ///
+ /// Desc:箱型
+ ///
+ [SugarColumn(ColumnDescription = "箱型", IsNullable = false, Length = 20)]
+ public string Ctnall { get; set; }
+
+ ///
+ /// Desc:是否上线(是否管理中)
+ ///
+ [SugarColumn(ColumnDescription = "是否上线", IsNullable = false,DefaultValue ="0")]
+ public bool IsOnline { get; set; } = false;
+
+ ///
+ /// Desc:新旧箱 空白/used/new
+ ///
+ [SugarColumn(ColumnDescription = "新旧箱", IsNullable = true, Length = 20)]
+ public string UsedState { get; set; }
+
+ ///
+ /// Desc:箱主
+ ///
+ [SugarColumn(ColumnDescription = "箱主", IsNullable = true, Length = 50)]
+ public string CtnOwner { get; set; }
+
+ ///
+ /// Desc:业务所属分部
+ ///
+ [SugarColumn(ColumnDescription = "业务所属分部", IsNullable = true, Length = 50)]
+ public string Corpid { get; set; }
+
+ ///
+ /// Desc:箱来源: 自有箱/短租租入/长租租入/买箱
+ ///
+ [SugarColumn(ColumnDescription = "箱来源", IsNullable = true, Length = 20)]
+ public string CtnSource { get; set; }
+
+ ///
+ /// Desc:箱业务状态: 短租租出 长租租出 单程 卖箱
+ ///
+ [SugarColumn(ColumnDescription = "箱业务状态", DefaultValue = "")]
+ public string CtnBizState { get; set; } = "0";
+
+ ///
+ /// Desc:箱业务编号:当前
+ ///
+ [SugarColumn(ColumnDescription = "箱业务编号", IsNullable = true, Length = 50)]
+ public string Billno { get; set; }
+
+ ///
+ /// Desc:关联放箱单号
+ ///
+ [SugarColumn(ColumnDescription = "关联放箱单号", Length = 50)]
+ public string CtnReleaseNo { get; set; }
+
+ ///
+ /// Desc:箱状态
+ ///
+ [SugarColumn(ColumnDescription = "箱状态", IsNullable = true, Length = 20)]
+ public string CtnState { get; set; }
+
+ ///
+ /// Desc:箱损坏/维修状态
+ ///
+ [SugarColumn(ColumnDescription = "箱损坏/维修状态", IsNullable = true, Length = 20)]
+ public string CtnBreakState { get; set; }
+
+ ///
+ /// Desc:当前港口
+ ///
+ [SugarColumn(ColumnDescription = "当前港口", IsNullable = true, Length = 50)]
+ public string Portid { get; set; }
+
+ ///
+ /// Desc:码头或场站
+ ///
+ [SugarColumn(ColumnDescription = "码头或场站", IsNullable = true, Length = 50)]
+ public string Depot { get; set; }
+
+ ///
+ /// Desc:运输工具
+ ///
+ [SugarColumn(ColumnDescription = "运输工具", IsNullable = true, Length = 50)]
+ public string VehicleName { get; set; }
+
+ ///
+ /// Desc:当前业务编号
+ ///
+ [SugarColumn(ColumnDescription = "当前业务编号", IsNullable = true, Length = 50)]
+ public string Mblno { get; set; }
+
+
+ ///
+ /// Desc:业务委托单位
+ ///
+ [SugarColumn(ColumnDescription = "业务委托单位", IsNullable = true, Length = 50)]
+ public string CustomerName { get; set; }
+
+
+ ///
+ /// Desc:ETD
+ ///
+ [SugarColumn(ColumnDescription = "ETD", IsNullable = true)]
+ public DateTime? ETD { get; set; }
+
+ ///
+ /// Desc:ETD
+ ///
+ [SugarColumn(ColumnDescription = "ETA", IsNullable = true)]
+ public DateTime? ETA { get; set; }
+
+
+ ///
+ /// Desc:状态时间
+ ///
+ [SugarColumn(ColumnDescription = "状态时间", IsNullable = true)]
+ public DateTime? StateTime { get; set; }
+
+}
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.Core/ContainerManagement/Interface/ICM_CurrentStateService.cs b/ds-wms-service/DS.WMS.Core/ContainerManagement/Interface/ICM_CurrentStateService.cs
new file mode 100644
index 00000000..73562116
--- /dev/null
+++ b/ds-wms-service/DS.WMS.Core/ContainerManagement/Interface/ICM_CurrentStateService.cs
@@ -0,0 +1,33 @@
+using DS.Module.Core;
+using DS.WMS.ContainerManagement.Info.Dtos;
+using DS.WMS.Core.Info.Dtos;
+using DS.WMS.Core.Op.View;
+using DS.WMS.Core.Sys.Dtos;
+
+namespace DS.WMS.ContainerManagement.Info.Interface;
+
+public interface ICM_CurrentStateService
+{
+ ///
+ /// 列表
+ ///
+ ///
+ ///
+ //DataResult> GetListByPage(PageRequest request);
+ public Task>> GetListByPage(PageRequest request);
+
+
+ ///
+ /// 编辑
+ ///
+ ///
+ ///
+ DataResult EditCM_CurrentState(CM_CurrentStateReq model);
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ DataResult GetCM_CurrentStateInfo(string id);
+}
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.Core/ContainerManagement/Method/ClientAccountDateService.cs b/ds-wms-service/DS.WMS.Core/ContainerManagement/Method/ClientAccountDateService.cs
new file mode 100644
index 00000000..3bc46a14
--- /dev/null
+++ b/ds-wms-service/DS.WMS.Core/ContainerManagement/Method/ClientAccountDateService.cs
@@ -0,0 +1,115 @@
+using DS.Module.Core;
+using DS.Module.Core.Extensions;
+using DS.Module.SqlSugar;
+using DS.Module.UserModule;
+using DS.WMS.ContainerManagement.Info.Dtos;
+using DS.WMS.ContainerManagement.Info.Entity;
+using DS.WMS.ContainerManagement.Info.Interface;
+using DS.WMS.Core.Info.Dtos;
+using DS.WMS.Core.Info.Entity;
+using DS.WMS.Core.Info.Interface;
+using DS.WMS.Core.Op.View;
+using DS.WMS.Core.Sys.Entity;
+using Mapster;
+using Microsoft.Extensions.DependencyInjection;
+using SqlSugar;
+
+namespace DS.WMS.ContainerManagement.Info.Method;
+
+public class CM_CurrentStateService : ICM_CurrentStateService
+{
+ private readonly IServiceProvider _serviceProvider;
+ private readonly ISqlSugarClient db;
+ private readonly IUser user;
+ private readonly ISaasDbService saasService;
+
+ ///
+ ///
+ ///
+ ///
+ public CM_CurrentStateService(IServiceProvider serviceProvider)
+ {
+ _serviceProvider = serviceProvider;
+ db = _serviceProvider.GetRequiredService();
+ user = _serviceProvider.GetRequiredService();
+ saasService = _serviceProvider.GetRequiredService();
+ }
+
+ ///
+ /// 列表
+ ///
+ ///
+ ///
+ public async Task>> GetListByPage(PageRequest request)
+ {
+ var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
+ //序列化查询条件
+ var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition);
+ var data = tenantDb.Queryable()
+ .Where(whereList)
+ .Select().ToQueryPage(request.PageCondition);
+ return data;
+ }
+ //public async Task>> GetListByPage(PageRequest request)
+ //{
+ // var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
+ // //序列化查询条件
+ // var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition);
+ // var data = await tenantDb.Queryable()
+ // .Where(whereList)
+ // .ToQueryPageAsync(request.PageCondition);
+ // return data;
+ //}
+
+
+ ///
+ /// 编辑
+ ///
+ ///
+ ///
+ public DataResult EditCM_CurrentState(CM_CurrentStateReq req)
+ {
+ var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
+ if (req.Id == 0)
+ {
+ //if (tenantDb.Queryable().Where(x => x.AccountType == req.AccountType &&
+ // x.AccountType == req.AccountType &&
+ // x.SaleId == req.SaleId &&
+ // x.BeginDate == req.BeginDate &&
+ // x.EndDate == req.EndDate).Any())
+ //{
+ // return DataResult.Failed("客户账期信息已存在!", MultiLanguageConst.ClientAccountDateExist);
+ //}
+
+ var data = req.Adapt();
+
+ var entity = tenantDb.Insertable(data).ExecuteReturnEntity();
+
+ return DataResult.Successed("添加成功!", entity.Id, MultiLanguageConst.DataCreateSuccess);
+ }
+ else
+ {
+ var info = tenantDb.Queryable().Where(x => x.Id == req.Id).First();
+
+ info = req.Adapt(info);
+
+ tenantDb.Updateable(info).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
+ return DataResult.Successed("更新成功!", MultiLanguageConst.DataUpdateSuccess);
+ }
+ }
+
+ ///
+ /// 详情
+ ///
+ ///
+ ///
+ public DataResult GetCM_CurrentStateInfo(string id)
+ {
+ var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
+ var data = tenantDb.Queryable()
+ .Where(a => a.Id == long.Parse(id))
+ .Select()
+ .First();
+ return DataResult.Success(data, MultiLanguageConst.DataQuerySuccess);
+ }
+}
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.Core/Op/Entity/BookingSlot/BookingSlotBase.cs b/ds-wms-service/DS.WMS.Core/Op/Entity/BookingSlot/BookingSlotBase.cs
index 96674243..74aa8e61 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Entity/BookingSlot/BookingSlotBase.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Entity/BookingSlot/BookingSlotBase.cs
@@ -240,7 +240,7 @@ namespace DS.WMS.Core.Op.Entity
///
/// 截港时间
///
- [SqlSugar.SugarColumn(ColumnDescription = "样单截止日期", IsNullable = true)]
+ [SqlSugar.SugarColumn(ColumnDescription = "截港时间", IsNullable = true)]
public Nullable CYCutDate { get; set; }
///
diff --git a/ds-wms-service/DS.WMS.Core/Op/Interface/BookingSlot/IBookingSlotService.cs b/ds-wms-service/DS.WMS.Core/Op/Interface/BookingSlot/IBookingSlotService.cs
index 4259edc9..a312d7df 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Interface/BookingSlot/IBookingSlotService.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Interface/BookingSlot/IBookingSlotService.cs
@@ -121,7 +121,7 @@ namespace DS.WMS.Core.Op.Interface
/// 舱位主键
/// 批次号
/// 返回舱位变更比对结果
- Task> GetSlotCompareResult(long id, string batchNo);
+ Task>> GetSlotCompareResult(long id, string batchNo);
///
/// 导入舱位
diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/BookingSlot/BookingSlotService.cs b/ds-wms-service/DS.WMS.Core/Op/Method/BookingSlot/BookingSlotService.cs
index 0d8b104a..0b22b8a6 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Method/BookingSlot/BookingSlotService.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Method/BookingSlot/BookingSlotService.cs
@@ -978,7 +978,7 @@ namespace DS.WMS.Core.Op.Method
dto.DataObj.CtnList.ForEach(t =>
{
- if (!string.IsNullOrWhiteSpace(t.CtnAll) && string.IsNullOrWhiteSpace(t.CtnCode))
+ if ((!string.IsNullOrWhiteSpace(t.CtnAll) && string.IsNullOrWhiteSpace(t.CtnCode)) || (!string.IsNullOrWhiteSpace(t.CtnAll) && t.CtnAll == t.CtnCode))
{
var ctnCode = ctnCodeList.FirstOrDefault(a => !string.IsNullOrWhiteSpace(a.CtnName) &&
a.CtnName.Equals(t.CtnAll, StringComparison.OrdinalIgnoreCase));
@@ -1799,7 +1799,8 @@ namespace DS.WMS.Core.Op.Method
}
}
- var list = await GetAvailableSlots(null, model.MergeList, null);
+ var getRlt = await GetAvailableSlots(null, model.MergeList, null);
+ var list = getRlt.Data;
//舱位合票失败,校验库存为不可用,请确认正确的库存
if (list.Count == 0)
@@ -1853,14 +1854,14 @@ namespace DS.WMS.Core.Op.Method
/// 可选:分页信息
public async Task>> GetAvailableSlots(BookingSlotBaseDto input,PageWithTotal pageInfo)
{
- var result = await GetAvailableSlots(input, null, pageInfo);
+ var rlt = await GetAvailableSlots(input, null, pageInfo);
SqlSugarPagedList pageResult = new()
{
PageIndex = pageInfo.PageNo,
PageSize = pageInfo.PageSize,
TotalCount = pageInfo.Total,
- Items = result,
+ Items = rlt.Data,
};
return DataResult>.Success(pageResult);
}
@@ -1874,7 +1875,7 @@ namespace DS.WMS.Core.Op.Method
/// 筛选条件2:舱位主键列表
/// 筛选条件3:分页
/// 可用的舱位列表(含可用的箱子列表)
- public async Task> GetAvailableSlots(BookingSlotBaseDto slotInput = null,
+ public async Task>> GetAvailableSlots(BookingSlotBaseDto slotInput = null,
List slotIdListInput = null,
PageWithTotal pageInfo = null)
{
@@ -1985,7 +1986,7 @@ namespace DS.WMS.Core.Op.Method
}
}
- return result;
+ return DataResult>.Success(result);
}
#endregion
@@ -2022,8 +2023,9 @@ namespace DS.WMS.Core.Op.Method
}
var slotIdList = slots.Select(s => s.Id).ToList();
+ var lsRlt = await GetAvailableSlots(null, slotIdList);
// 查询可用舱位及箱子列表
- var latestSlotList = await GetAvailableSlots(null, slotIdList);
+ var latestSlotList = lsRlt.Data;
// 判断余量是否满足需求
foreach (var inSlotItem in slots)
@@ -2210,20 +2212,20 @@ namespace DS.WMS.Core.Op.Method
SaleId = generateModel.SaleId.HasValue ? generateModel.SaleId.Value : 0,
Sale = generateModel.SaleName,
OperatorId = generateModel.OpId.HasValue ? generateModel.OpId.Value : 0,
- //op = generateModel.OpName,
+ OperatorName = generateModel.OpName,
Doc = generateModel.DocId.HasValue ? generateModel.DocId.Value : 0,
- //DOC = generateModel.DocName,
+ DocName = generateModel.DocName,
//ROUTEID = generateModel.RouteID?.ToString(),
//ROUTE = generateModel.Route,
//CZRemark = generateModel.CZRemark,
//ShenQingXiangShi = generateModel.ShenQingXiangShi,
//LineManageID = generateModel.LineManageID?.ToString(),
//LineName = generateModel.LineManage,
- //CLOSEVGMDATE = bookingSlotBase.VGMSubmissionCutDate,
+ VGMCloseDate = bookingSlotBase.VGMSubmissionCutDate,
ClosingDate = bookingSlotBase.CYCutDate,
CloseDocDate = bookingSlotBase.SICutDate,
CustomerService = generateModel.CustServiceId.HasValue ? generateModel.CustServiceId.Value : 0,
- //CUSTSERVICE = generateModel.CustServiceName,
+ CustomerServiceName = generateModel.CustServiceName,
LoadPort = bookingSlotBase.PortLoad,
LoadPortId = bookingSlotBase.PortLoadId.HasValue ? bookingSlotBase.PortLoadId.Value : 0,
@@ -2429,7 +2431,7 @@ namespace DS.WMS.Core.Op.Method
Note = djyCustomerContactMan.Note,
CreateTime = DateTime.Now,
CreateBy = long.Parse(user.UserId),
- //CreatedUserName = UserManager.Name
+ CreateUserName = user.UserName
};
tenantDb.Insertable(bookingContact).ExecuteCommand();
@@ -2442,7 +2444,7 @@ namespace DS.WMS.Core.Op.Method
bookingContact.Note = djyCustomerContactMan.Note;
bookingContact.UpdateTime = DateTime.Now;
bookingContact.UpdateBy = long.Parse(user.UserId);
- //bookingContact.UpdatedUserName = UserManager.Name;
+ bookingContact.UpdateUserName = user.UserName;
tenantDb.Updateable(bookingContact).UpdateColumns(it => new
{
@@ -2451,7 +2453,7 @@ namespace DS.WMS.Core.Op.Method
it.Note,
it.UpdateTime,
it.UpdateBy,
- //it.UpdatedUserName
+ it.UpdateUserName
}).ExecuteCommand();
}
@@ -3469,10 +3471,6 @@ namespace DS.WMS.Core.Op.Method
}
#endregion
- Task>> IBookingSlotService.GetAvailableSlots(BookingSlotBaseDto slotInput, List slotIdListInput, PageWithTotal pageInfo)
- {
- throw new NotImplementedException();
- }
///
/// 舱位台账查询
@@ -3662,10 +3660,42 @@ namespace DS.WMS.Core.Op.Method
throw new NotImplementedException();
}
- Task> IBookingSlotService.GetSlotCompareResult(long id, string batchNo)
+ #region 获取舱位变更比对结果
+ ///
+ /// 获取舱位变更比对结果
+ ///
+ /// 舱位主键
+ /// 批次号
+ /// 返回舱位变更比对结果
+ public async Task>> GetSlotCompareResult(long id, string batchNo)
{
- throw new NotImplementedException();
+ var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
+
+ var compareInfo = await tenantDb.Queryable()
+ .FirstAsync(t => t.SlotId == id && t.CompareBatchNo == batchNo);
+
+ if (compareInfo == null)
+ {
+ //舱位变更比对结果不存在
+ throw new Exception(MultiLanguageConst.GetDescription(nameof(MultiLanguageConst.BookingSlotCompareNull)));
+ }
+
+ if (string.IsNullOrWhiteSpace(compareInfo.CompareRlt))
+ {
+ //获取舱位变更比对结果错误,比对内容不存在
+ throw new Exception(MultiLanguageConst.GetDescription(nameof(MultiLanguageConst.BookingSlotCompareJsonNull)));
+ }
+
+ if (!string.IsNullOrWhiteSpace(compareInfo.CompareRlt))
+ {
+ var data = JsonConvert.DeserializeObject>(compareInfo.CompareRlt);
+
+ return DataResult>.Success(data);
+ }
+
+ return DataResult>.FailedData(new List());
}
+ #endregion
#region 获取舱位详情列表
///
diff --git a/ds-wms-service/DS.WMS.Core/TaskPlat/Dtos/TaskUserStatItem.cs b/ds-wms-service/DS.WMS.Core/TaskPlat/Dtos/TaskUserStatItem.cs
new file mode 100644
index 00000000..ed178fc8
--- /dev/null
+++ b/ds-wms-service/DS.WMS.Core/TaskPlat/Dtos/TaskUserStatItem.cs
@@ -0,0 +1,62 @@
+namespace DS.WMS.Core.TaskPlat.Dtos
+{
+ public class TaskUserStatResultInfo
+ {
+ ///
+ /// 第一层(异常/个人/公共)
+ ///
+ public List LevelTop { get; set; }
+
+ ///
+ /// 第二层(待处理/已完成/已取消/已挂起)
+ ///
+ public List LevelNext { get; set; }
+
+ ///
+ /// 任务类型树(按照任务类型展示)
+ ///
+ public List LevelTree { get; set; }
+ }
+ ///
+ /// 用户任务统计展示
+ ///
+ public class TaskUserStatItem
+ {
+ ///
+ /// 排序值
+ ///
+ public int SortNo { get; set; }
+
+ ///
+ /// 展示代码
+ ///
+ public string Key { get; set; }
+
+ ///
+ /// 展示名称
+ ///
+ public string Name { get; set; }
+
+ ///
+ /// 记录条数
+ ///
+ public int Total { get; set; }
+
+ ///
+ /// 执行KEY
+ ///
+ public string ActionKey { get; set; }
+
+ }
+
+
+ public class TaskUserStatItemNext: TaskUserStatItem
+ {
+ public string TopKey { get; set; }
+ }
+
+ public class TaskUserStatItemTree : TaskUserStatItemNext
+ {
+ public string NextKey { get; set; }
+ }
+}
diff --git a/ds-wms-service/DS.WMS.Core/TaskPlat/Entity/TaskBaseInfo.cs b/ds-wms-service/DS.WMS.Core/TaskPlat/Entity/TaskBaseInfo.cs
index e87ff106..df95e1eb 100644
--- a/ds-wms-service/DS.WMS.Core/TaskPlat/Entity/TaskBaseInfo.cs
+++ b/ds-wms-service/DS.WMS.Core/TaskPlat/Entity/TaskBaseInfo.cs
@@ -251,11 +251,11 @@ namespace DS.WMS.Core.TaskPlat.Entity
[SugarColumn(ColumnDescription = "批次统计", IsNullable = true, Length = 50)]
public string? BATCH_STATIC { get; set; }
- ///
- /// 大简云userid
- ///
- [SugarColumn(ColumnDescription = "大简云userid", IsNullable = true, Length = 50)]
- public string? DJYUserId { get; set; }
+ /////
+ ///// 大简云userid
+ /////
+ //[SugarColumn(ColumnDescription = "大简云userid", IsNullable = true, Length = 50)]
+ //public string? DJYUserId { get; set; }
}
diff --git a/ds-wms-service/DS.WMS.Core/TaskPlat/Interface/ITaskManageService.cs b/ds-wms-service/DS.WMS.Core/TaskPlat/Interface/ITaskManageService.cs
index 7eb57732..2b72c5d7 100644
--- a/ds-wms-service/DS.WMS.Core/TaskPlat/Interface/ITaskManageService.cs
+++ b/ds-wms-service/DS.WMS.Core/TaskPlat/Interface/ITaskManageService.cs
@@ -6,6 +6,13 @@ namespace DS.WMS.Core.TaskPlat.Interface
{
public interface ITaskManageService
{
+ ///
+ /// 获取登陆人相关的任务统计信息
+ ///
+ /// 是否强制计算
+ /// 返回回执
+ Task> GetCurrentTotalStat(bool isReCalc);
+
///
/// 任务台台账列表查询
///
diff --git a/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageService.cs b/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageService.cs
index 567c2288..51cbef5b 100644
--- a/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageService.cs
+++ b/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageService.cs
@@ -7,7 +7,6 @@ using DS.WMS.Core.TaskPlat.Dtos;
using DS.WMS.Core.TaskPlat.Entity;
using DS.WMS.Core.TaskPlat.Interface;
using Mapster;
-using Masuit.Tools.Systems;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
@@ -160,7 +159,7 @@ namespace DS.WMS.Core.TaskPlat.Method
CUSTOMER_ID = info.Main.CustomerId,
CUSTOMER_NAME = info.Main.CustomerName,
BATCH_STATIC = info.Main.BatchStatic,
- DJYUserId = info.Head.DJYUserId,
+ //DJYUserId = info.Head.DJYUserId,
OUT_BS_NO = info.Head.BSNO,
CreateTime = DateTime.Now,
};
@@ -469,12 +468,12 @@ namespace DS.WMS.Core.TaskPlat.Method
if (TaskBaseTypeEnum.BC.ToString() == taskInfo.TASK_BASE_TYPE)
{
fileInfo.FILE_CATEGORY = TaskFileCategoryEnum.BC.ToString();
- fileInfo.FILE_CATEGORY_NAME = TaskFileCategoryEnum.BC.GetDescription();
+ fileInfo.FILE_CATEGORY_NAME = TaskFileCategoryEnum.BC.EnumDescription();
}
else if (TaskBaseTypeEnum.BC_MODIFY.ToString() == taskInfo.TASK_BASE_TYPE)
{
fileInfo.FILE_CATEGORY = TaskFileCategoryEnum.BC_MODIFY.ToString();
- fileInfo.FILE_CATEGORY_NAME = TaskFileCategoryEnum.BC_MODIFY.GetDescription();
+ fileInfo.FILE_CATEGORY_NAME = TaskFileCategoryEnum.BC_MODIFY.EnumDescription();
}
}
else
@@ -484,7 +483,7 @@ namespace DS.WMS.Core.TaskPlat.Method
System.Enum.TryParse(file.FileCategory, out fileCategoryEnum);
fileInfo.FILE_CATEGORY = fileCategoryEnum.ToString();
- fileInfo.FILE_CATEGORY_NAME = fileCategoryEnum.GetDescription();
+ fileInfo.FILE_CATEGORY_NAME = fileCategoryEnum.EnumDescription();
}
if (string.IsNullOrWhiteSpace(fileInfo.FILE_NAME))
@@ -686,108 +685,639 @@ namespace DS.WMS.Core.TaskPlat.Method
{
taskType = (TaskBaseTypeEnum)temp;
};
+
+ var userId = long.Parse(user.UserId);
+ DataResult> result;
switch (taskType)
{
case TaskBaseTypeEnum.BC:
{
- var result = await tenantDb.Queryable()
- .LeftJoin((t, bc) => t.Id == bc.TASK_ID)
- .Where(whereList)
- .Select((t, bc) => new
- {
- Id = t.Id.SelectAll(),
- bc.BUSI_TYPE,
- bc.SHIPPER,
- bc.CONSIGNEE,
- bc.NOTIFYPARTY,
- bc.BC_MODIFY_TIMES,
- bc.BC_MODIFY_DATE,
- //bc.MBL_NO,
- bc.VESSEL,
- bc.VOYNO,
- bc.CARRIER,
- bc.PLACERECEIPT,
- bc.PORTLOAD,
- bc.CLOSING_DATE,
- bc.VGM_CUTOFF_TIME,
- bc.ETA,
- //bc.ETD,
- bc.POD_ETA,
- bc.CUT_SINGLE_TIME,
- bc.PORTDISCHARGE,
- bc.PLACEDELIVERY,
- bc.SHIPPING_METHOD,
- bc.SERVICE,
- bc.PRETRANS_MODE,
- bc.DESCRIPTION,
- bc.ISSUEPLACE,
- bc.COLLECTION_TERMINAL,
- bc.CONTRACTNO,
- bc.PREPARDAT,
- bc.SHIP_AGENT,
- bc.YARD,
- bc.YARD_CONTACT_USR,
- bc.YARD_CONTACT_TEL,
- bc.FST_CUSTOMER_SER_USRNAME,
- bc.FST_CUSTOMER_SER_TEL,
- bc.FST_CUSTOMER_SER_EMAIL,
- bc.REMARK1,
- bc.CY_CUTOFF_TIME,
- bc.CARRIERID,
- bc.LANECODE,
- bc.LANENAME,
- bc.CARRIAGE_TYPE,
- bc.CARRIAGE_TYPE_NAME,
- bc.BOOKING_SLOT_TYPE,
- bc.BOOKING_SLOT_TYPE_NAME,
- bc.CTN_STAT,
- bc.WEEK_AT,
- bc.DETENSION_FREE_DAYS,
- bc.SI_CUT_DATE,
- bc.MANIFEST_CUT_DATE,
- bc.MDGF_CUT_DATE,
- bc.TRANSFER_PORT_1,
- bc.TRANSFER_PORT_2,
- bc.SECOND_VESSEL,
- bc.SECOND_VOYNO,
- bc.SECOND_ETD,
- bc.SECOND_ETA,
- //bc.STATUS,
- bc.FILE_MD5,
- bc.LAST_TOBOOKING_DATE,
- bc.FROM_EMAIL,
- bc.RECV_EMAIL,
- bc.BOOKING_ORDER_ID,
- bc.BOOKING_SLOT_ID,
- bc.BOOKING_COMFIRM_DATE,
- bc.BATCH_NO,
- bc.CUSTOM_SI_CUT_DATE,
- bc.IS_SET_AUTO_EMAIL,
- bc.IS_SEND_EMAIL,
- bc.DIFF_NUM,
- bc.AUTO_SEND_USER,
- bc.PROCESS_STATUS,
- bc.PROCESS_RESULT,
- bc.PROCESS_DATE,
- bc.PRICE_CALCULATION_DATE
- })
- .ToQueryPageAsync(querySearch.PageCondition);
+ result = await tenantDb.Queryable().LeftJoin((t, a) => t.Id == a.TaskId)
+ .LeftJoin((t, a, bc) => t.Id == bc.TASK_ID)
+ .Where(whereList)
+ .Where((t, a) => a.UserId == userId || t.CreateBy == userId)
+ .Select((t, a, bc) => new
+ {
+ Id = t.Id.SelectAll(),
+ bc.BUSI_TYPE,
+ bc.SHIPPER,
+ bc.CONSIGNEE,
+ bc.NOTIFYPARTY,
+ bc.BC_MODIFY_TIMES,
+ bc.BC_MODIFY_DATE,
+ //bc.MBL_NO,
+ bc.VESSEL,
+ bc.VOYNO,
+ bc.CARRIER,
+ bc.PLACERECEIPT,
+ bc.PORTLOAD,
+ bc.CLOSING_DATE,
+ bc.VGM_CUTOFF_TIME,
+ bc.ETA,
+ //bc.ETD,
+ bc.POD_ETA,
+ bc.CUT_SINGLE_TIME,
+ bc.PORTDISCHARGE,
+ bc.PLACEDELIVERY,
+ bc.SHIPPING_METHOD,
+ bc.SERVICE,
+ bc.PRETRANS_MODE,
+ bc.DESCRIPTION,
+ bc.ISSUEPLACE,
+ bc.COLLECTION_TERMINAL,
+ bc.CONTRACTNO,
+ bc.PREPARDAT,
+ bc.SHIP_AGENT,
+ bc.YARD,
+ bc.YARD_CONTACT_USR,
+ bc.YARD_CONTACT_TEL,
+ bc.FST_CUSTOMER_SER_USRNAME,
+ bc.FST_CUSTOMER_SER_TEL,
+ bc.FST_CUSTOMER_SER_EMAIL,
+ bc.REMARK1,
+ bc.CY_CUTOFF_TIME,
+ bc.CARRIERID,
+ bc.LANECODE,
+ bc.LANENAME,
+ bc.CARRIAGE_TYPE,
+ bc.CARRIAGE_TYPE_NAME,
+ bc.BOOKING_SLOT_TYPE,
+ bc.BOOKING_SLOT_TYPE_NAME,
+ bc.CTN_STAT,
+ bc.WEEK_AT,
+ bc.DETENSION_FREE_DAYS,
+ bc.SI_CUT_DATE,
+ bc.MANIFEST_CUT_DATE,
+ bc.MDGF_CUT_DATE,
+ bc.TRANSFER_PORT_1,
+ bc.TRANSFER_PORT_2,
+ bc.SECOND_VESSEL,
+ bc.SECOND_VOYNO,
+ bc.SECOND_ETD,
+ bc.SECOND_ETA,
+ //bc.STATUS,
+ bc.FILE_MD5,
+ bc.LAST_TOBOOKING_DATE,
+ bc.FROM_EMAIL,
+ bc.RECV_EMAIL,
+ bc.BOOKING_ORDER_ID,
+ bc.BOOKING_SLOT_ID,
+ bc.BOOKING_COMFIRM_DATE,
+ bc.BATCH_NO,
+ bc.CUSTOM_SI_CUT_DATE,
+ bc.IS_SET_AUTO_EMAIL,
+ bc.IS_SEND_EMAIL,
+ bc.DIFF_NUM,
+ bc.AUTO_SEND_USER,
+ bc.PROCESS_STATUS,
+ bc.PROCESS_RESULT,
+ bc.PROCESS_DATE,
+ bc.PRICE_CALCULATION_DATE
+ })
+ .ToQueryPageAsync(querySearch.PageCondition);
return result;
}
- default:
+ case TaskBaseTypeEnum.SI_FEEDBACK:
+ {
+ result = await tenantDb.Queryable().LeftJoin((t, a) => t.Id == a.TaskId)
+ .LeftJoin((t, a, bc) => t.Id == bc.TASK_ID)
+ .Where(whereList)
+ .Where((t, a) => a.UserId == userId || t.CreateBy == userId)
+ .Select((t, a, bc) => new
+ {
+ PK_ID = t.Id.SelectAll(),
+ bc.CARRIER,
+ //bc.MBL_NO,
+ bc.TAKE_ISSUETYPE_NAME,
+ bc.ISSUETYPE,
+ bc.NOTICE_DATE,
+ bc.BOOKING_ID,
+ bc.SUBMITTED_DATE,
+ bc.BILLOF_NUM,
+ bc.RELEASE_INSTRUCTION,
+ bc.SI_SUBTYPE,
+ bc.SHIPPER,
+ bc.CONSIGNEE,
+ bc.NOTIFYPARTY,
+ bc.NOTIFYPARTY2,
+ bc.TRANSPORT_RECEIVER,
+ bc.MARKS,
+ bc.HSCODE,
+ bc.DESCRIPTION,
+ bc.PKGS,
+ bc.KINDPKGS,
+ bc.KGS,
+ bc.CBM,
+ bc.VESSEL,
+ bc.VOYNO,
+ bc.COMMODITY,
+ bc.PLACERECEIPTID,
+ bc.PLACERECEIPT,
+ bc.PORTLOADID,
+ bc.PORTLOAD,
+ bc.PORTDISCHARGEID,
+ bc.PORTDISCHARGE,
+ bc.PLACEDELIVERYID,
+ bc.PLACEDELIVERY,
+ bc.PROCESS_STATUS,
+ bc.IS_SET_AUTO_UPD_BOOKING,
+ bc.PROCESS_RESULT,
+ bc.PROCESS_DATE,
+ bc.DIFF_NUM,
+ bc.IS_UPDATE_BOOKING,
+ bc.UPDATE_BOOKING_DATE
+ })
+ .ToQueryPageAsync(querySearch.PageCondition);
+ return result;
+ }
+ case TaskBaseTypeEnum.INVOICE_BILL_MAIL:
+ {
+ result = await tenantDb.Queryable().LeftJoin((t, a) => t.Id == a.TaskId)
+ .LeftJoin((t, a, bc) => t.Id == bc.TASK_PKID)
+ .Where(whereList)
+ .Where((t, a) => a.UserId == userId || t.CreateBy == userId)
+ .Select((t, a, bc) => new
+ {
+ PK_ID = t.Id.SelectAll(),
+ bc.TASK_PKID,
+ //bc.MBL_NO,
+ bc.INVOICE_NO,
+ bc.CANCEL_NO,
+ bc.TOTAL_AMOUNT,
+ bc.IS_DONGSH_RECV,
+ bc.IS_DONGSH_RESULT,
+ bc.DONGSH_RECV_TIME,
+ bc.DONGSH_RESULT_TIME,
+ bc.DONGSH_RECV_REASON
+ })
+ .ToQueryPageAsync(querySearch.PageCondition);
+ return result;
+ }
+ case TaskBaseTypeEnum.TRUCK_DISPATCH:
+ {
+ result = await tenantDb.Queryable().LeftJoin((t, a) => t.Id == a.TaskId)
+ .LeftJoin((t, a, bc) => t.Id == bc.TASK_ID)
+ .Where(whereList)
+ .Where((t, a) => a.UserId == userId || t.CreateBy == userId)
+ .Select((t, a, bc) => new
+ {
+ PK_ID = t.Id.SelectAll(),
+ bc.TASK_ID,
+ bc.BookingTruckId,
+ bc.BookingId,
+ bc.TruckId,
+ bc.TruckCode,
+ bc.TruckName,
+ bc.ToName,
+ bc.Attn,
+ bc.AttnTel,
+ bc.AttnMail,
+ bc.AttnFax,
+ bc.FromName,
+ bc.FromTel,
+ bc.FromMail,
+ bc.FromMobile,
+ bc.FromFax,
+ bc.KGS,
+ bc.Fee,
+ bc.PayMethod,
+ bc.PayMethodName,
+ bc.TruckTime,
+ bc.YARDID,
+ bc.YARD,
+ bc.YARDCONTRACT,
+ bc.YARDCONTRACTTEL,
+ bc.FactoryId,
+ bc.FactoryCode,
+ bc.FactoryName,
+ bc.FactoryContact,
+ bc.FactoryTel,
+ bc.ReturnTime,
+ bc.InYardID,
+ bc.InYard,
+ bc.InYardContact,
+ bc.InYardContractTel,
+ //bc.NeedArriveTime,
+ bc.ClosingTime,
+ bc.PickUpTime,
+ bc.IsGuaJi,
+ //bc.Status,
+ bc.Attention,
+ bc.Remark,
+ bc.DispatcherId,
+ bc.DispatcherName,
+ bc.TruckFlowNo,
+ bc.TaskNo,
+ bc.Vessel,
+ bc.VoyNo,
+ bc.MBLNo,
+ bc.CntrTotal,
+ bc.FactoryAddr
+ })
+ .ToQueryPageAsync(querySearch.PageCondition);
+ return result;
+ }
+ case TaskBaseTypeEnum.CUT_MODIFY:
+ {
+ result = await tenantDb.Queryable().LeftJoin((t, a) => t.Id == a.TaskId)
+ .LeftJoin((t, a, bc) => t.Id == bc.TASK_ID)
+ .Where(whereList)
+ .Where((t, a) => a.UserId == userId || t.CreateBy == userId)
+ .Select((t, a, bc) => new
+ {
+ PK_ID = t.Id.SelectAll(),
+ bc.TASK_ID,
+ bc.CARRIER,
+ bc.VESSEL,
+ bc.VOYNO,
+ bc.NOTICE_DATE
+ })
+ .ToQueryPageAsync(querySearch.PageCondition);
+ return result;
+ }
+ case TaskBaseTypeEnum.ROLLING_NOMINATION:
+ case TaskBaseTypeEnum.TRANSFER_NOMINATION:
+ {
+ result = await tenantDb.Queryable().LeftJoin((t, a) => t.Id == a.TaskId)
+ .LeftJoin((t, a, bc) => t.Id == bc.TASK_ID)
+ .Where(whereList)
+ .Where((t, a) => a.UserId == userId || t.CreateBy == userId)
+ .Select((t, a, bc) => new
+ {
+ PK_ID = t.Id.SelectAll(),
+ bc.TASK_ID,
+ bc.PLAN_TYPE,
+ bc.BATCH_NO,
+ bc.CARRIERID,
+ bc.CARRIER,
+ bc.CONFIRM_DEAD_LINE,
+ bc.READ_CREATE_TIME,
+ bc.ROLL_DOUBLE_REMARK,
+ bc.PLAN_TXT,
+ //bc.REMARK,
+ bc.TASK_BATCH_TOTAL,
+ bc.TASK_BATCH_PER_TOTAL
+ })
+ .ToQueryPageAsync(querySearch.PageCondition);
+ return result;
+ }
+ case TaskBaseTypeEnum.DRAFT:
+ {
+ result = await tenantDb.Queryable().LeftJoin((t, a) => t.Id == a.TaskId)
+ .LeftJoin((t, a, bc) => t.Id == bc.TASK_ID)
+ .Where(whereList)
+ .Where((t, a) => a.UserId == userId || t.CreateBy == userId)
+ .Select((t, a, bc) => new
+ {
+ PK_ID = t.Id.SelectAll(),
+ bc.TASK_ID,
+ bc.CARRIER,
+ //bc.MBL_NO,
+ bc.BOOKING_ID,
+ bc.IS_CHANGE,
+ bc.IS_EMAIL_SEND,
+ bc.SEND_EMAIL_DATE,
+ bc.NOTICE_DATE,
+ })
+ .ToQueryPageAsync(querySearch.PageCondition);
+ return result;
+ }
+ case TaskBaseTypeEnum.POD_DISCHARGE_FULL:
+ case TaskBaseTypeEnum.POD_GATEOUT_FULL:
+ {
+ result = await tenantDb.Queryable().LeftJoin((t, a) => t.Id == a.TaskId)
+ .LeftJoin((t, a, bc) => t.Id == bc.TASK_ID)
+ .Where(whereList)
+ .Where((t, a) => a.UserId == userId || t.CreateBy == userId)
+ .Select((t, a, bc) => new
+ {
+ PK_ID = t.Id.SelectAll(),
+ bc.TASK_ID,
+ bc.CARRIER,
+ bc.NOTICE_TYPE,
+ bc.NOTICE_TYPE_NAME,
+ //bc.MBL_NO,
+ bc.NOTICE_DATE
+ }).ToQueryPageAsync(querySearch.PageCondition);
+ return result;
+ }
+ case TaskBaseTypeEnum.CAUTION_NOTICE:
+ {
+ result = await tenantDb.Queryable().LeftJoin((t, a) => t.Id == a.TaskId)
+ .LeftJoin((t, a, bc) => t.Id == bc.TASK_ID)
+ .Where(whereList)
+ .Where((t, a) => a.UserId == userId || t.CreateBy == userId)
+ .Select((t, a, bc) => new
+ {
+ PK_ID = t.Id.SelectAll(),
+ bc.TASK_ID,
+ bc.SOURCE_SYSTEM,
+ bc.SOURCE_BUSI_TYPE,
+ bc.SOURCE_BUSI_TYPENAME,
+ bc.NOTIFY_CONTENT,
+ //bc.MBL_NO,
+ bc.CARRIER,
+ bc.CAUTION_NOTICE_TYPE,
+ bc.IS_WEEK_DIFF,
+ bc.IS_PRICE_DATE_DIFF,
+ bc.IS_TRANSFER,
+ bc.IS_VESSEL_CHANGE,
+ bc.IS_CUT_DATE_ADVANCED,
+ bc.BOOKING_ID,
+ bc.BOOKING_SLOT_ID,
+ bc.SOURCE_TASK_ID,
+ bc.OLD_VAL,
+ bc.NEW_VAL,
+ }).ToQueryPageAsync(querySearch.PageCondition);
+ return result;
+ }
+ case TaskBaseTypeEnum.ROUTE_CUT_CHANGE:
{
- var result = await tenantDb.Queryable()
+ result = await tenantDb.Queryable().LeftJoin((t, a) => t.Id == a.TaskId)
+ .LeftJoin((t, a, bc) => t.Id == bc.TASK_ID)
.Where(whereList)
- .Select(t => new
- {
- Id = t.Id.SelectAll()
- })
- .ToQueryPageAsync(querySearch.PageCondition);
+ .Where((t, a) => a.UserId == userId || t.CreateBy == userId)
+ .Select((t, a, bc) => new
+ {
+ PK_ID = t.Id.SelectAll(),
+ bc.TASK_ID,
+ bc.VESSEL,
+ bc.VOYNO,
+ bc.CARRIER,
+ bc.READ_PORTLOAD,
+ bc.ORIG_ETD,
+ bc.MDGF_CUT_DATE,
+ bc.ETA,
+ //bc.ETD,
+ bc.SI_CUT_DATE,
+ bc.TM_SHIFT_CUT_DATE,
+ bc.VGM_CUTOFF_TIME,
+ bc.CY_CUT_DATE,
+ bc.ROUTE_CODE,
+ bc.EMAIL_SUBJECT,
+ bc.WEEK,
+ bc.PORTLOADID,
+ bc.PORTLOAD
+
+ }).ToQueryPageAsync(querySearch.PageCondition);
return result;
}
+ default:
+ {
+ result = await tenantDb.Queryable().LeftJoin((t, a) => t.Id == a.TaskId)
+ .Where(whereList)
+ .Where((t, a) => a.UserId == userId || t.CreateBy == userId)
+ .Select(t => t)
+ .ToQueryPageAsync(querySearch.PageCondition);
+ return result;
+ }
+ }
+ }
+ ///
+ /// 获取登陆人相关的任务统计信息
+ ///
+ /// 是否强制计算
+ /// 返回回执
+ public async Task> GetCurrentTotalStat(bool isReCalc)
+ {
+ TaskUserStatResultInfo resultInfo = new TaskUserStatResultInfo
+ {
+ LevelTop = new List(),
+ LevelNext = new List(),
+ LevelTree = new List()
+ };
+
+ /*
+ 1、首先判断当前登陆人是否有统计记录,如果没有触发统计生成统计记录。
+ 2、如果isReCalc=true,表示强制重新统计数据,并重新更新统计数据。
+ 3、按照统计类型(个人/公共)、任务状态、是否异常分组汇总,并写入统计表。
+ */
+
+ //var userTendInfo = await _sysUserRepository.AsQueryable()
+ // .LeftJoin((usr, ten) => usr.TenantId == ten.Id)
+ // .Where(usr => usr.Id == UserManager.UserId)
+ // .Select((usr, ten) => new { User = usr, Tend = ten }).FirstAsync();
+
+ //if (userTendInfo == null)
+ // throw Oops.Oh($"当前用户关联租户信息获取失败");
+
+ ////var statList = _taskStatManageInfoRepository.AsQueryable().Where(t => (t.USER_ID == userTendInfo.User.Id
+ ////&& t.STAT_TYPE == TaskStatLevelEnum.PERSON.ToString()) || (t.COMP_ID == userTendInfo.Tend.Id && t.STAT_TYPE == TaskStatLevelEnum.PUBLIC.ToString())).ToList();
+
+ ////菜单375504048771141=我的任务台账
+ //List userlist = await _sysDataUserMenuService.GetDataScopeList(MenuConst.MenuTaskManage);
+
+ //bool isAdmin = userlist == null;
+
+ var tenantDb = saasDbService.GetBizDbScopeById(user.TenantId);
+
+ var userId = long.Parse(user.UserId);
+ //任务列表分组统计
+ var groupList = await tenantDb.Queryable()
+ .LeftJoin((t, a) => t.Id == a.TaskId)
+ .Where((t, a) => t.IS_PUBLIC == 1
+ || t.CreateBy == userId
+ || (t.IS_PUBLIC == 0 && a.UserId == userId))
+ .GroupBy(t => new { t.TASK_TYPE, t.STATUS, t.IS_EXCEPT, t.IS_PUBLIC })
+ .Select(t => new
+ {
+ Total = SqlFunc.AggregateCount(t.Id),
+ TaskType = t.TASK_TYPE,
+ Status = t.STATUS,
+ IsExcept = t.IS_EXCEPT,
+ IsPublic = t.IS_PUBLIC
+ }).ToListAsync();
+
+ var exceptList = groupList
+ .Where(t => t.IsExcept == 1).ToList();
+
+ var personList = groupList
+ .Where(t => t.IsExcept == 0 && t.IsPublic == 0).ToList();
+
+ var publicList = groupList
+ .Where(t => t.IsExcept == 0 && t.IsPublic == 1).ToList();
+
+ #region 异常
+ if (exceptList.Count > 0)
+ {
+ resultInfo.LevelTop.Add(new TaskUserStatItem
+ {
+ Key = TaskStatLevelEnum.EXCPTION.ToString(),
+ Name = TaskStatLevelEnum.EXCPTION.EnumDescription(),
+ Total = exceptList.Sum(t => t.Total),
+ SortNo = (int)TaskStatLevelEnum.EXCPTION,
+ ActionKey = TaskStatLevelEnum.EXCPTION.ToString()
+ });
+
+ var nextList = new List();
+
+ exceptList.GroupBy(t => t.Status)
+ .Select(t => new { Key = t.Key, Total = t.ToList().Sum(p => p.Total) })
+ .ToList().ForEach(t =>
+ {
+ TaskStatusEnum currEnum = (TaskStatusEnum)System.Enum.Parse(typeof(TaskStatusEnum), t.Key);
+
+ nextList.Add(new TaskUserStatItemNext
+ {
+ TopKey = TaskStatLevelEnum.EXCPTION.ToString(),
+ Key = currEnum.ToString(),
+ Name = currEnum.EnumDescription(),
+ Total = t.Total,
+ SortNo = (int)currEnum,
+ ActionKey = $"{TaskStatLevelEnum.EXCPTION.ToString()}#{currEnum.ToString()}"
+ });
+
+ });
+
+ if (nextList.Count > 0)
+ resultInfo.LevelNext.AddRange(nextList.OrderBy(t => t.SortNo).ToList());
+
+ exceptList.GroupBy(t => new { t.Status, t.TaskType })
+ .Select(t => new { Key = t.Key, Total = t.ToList().Sum(p => p.Total) })
+ .ToList().ForEach(t =>
+ {
+ //TaskBusiTypeEnum currEnum = (TaskBusiTypeEnum)System.Enum.Parse(typeof(TaskBusiTypeEnum), t.Key.TaskType);
+ TaskBaseTypeEnum currEnum = (TaskBaseTypeEnum)System.Enum.Parse(typeof(TaskBaseTypeEnum), t.Key.TaskType);
+
+ resultInfo.LevelTree.Add(new TaskUserStatItemTree
+ {
+ TopKey = TaskStatLevelEnum.EXCPTION.ToString(),
+ NextKey = t.Key.Status,
+ Key = currEnum.ToString(),
+ Name = currEnum.EnumDescription(),
+ Total = t.Total,
+ SortNo = (int)currEnum,
+ ActionKey = $"{TaskStatLevelEnum.EXCPTION.ToString()}#{t.Key.Status}#{currEnum.ToString()}"
+ });
+
+ });
+ }
+ #endregion
+
+ #region 个人
+ if (personList.Count > 0)
+ {
+ resultInfo.LevelTop.Add(new TaskUserStatItem
+ {
+ Key = TaskStatLevelEnum.PERSON.ToString(),
+ Name = TaskStatLevelEnum.PERSON.EnumDescription(),
+ Total = personList.Sum(t => t.Total),
+ SortNo = (int)TaskStatLevelEnum.PERSON,
+ ActionKey = TaskStatLevelEnum.PERSON.ToString()
+ });
+
+ var nextList = new List();
+ personList.GroupBy(t => t.Status)
+ .Select(t => new { Key = t.Key, Total = t.ToList().Sum(p => p.Total) })
+ .ToList().ForEach(t =>
+ {
+ TaskStatusEnum currEnum = (TaskStatusEnum)System.Enum.Parse(typeof(TaskStatusEnum), t.Key);
+
+ nextList.Add(new TaskUserStatItemNext
+ {
+ TopKey = TaskStatLevelEnum.PERSON.ToString(),
+ Key = currEnum.ToString(),
+ Name = currEnum.EnumDescription(),
+ Total = t.Total,
+ SortNo = (int)currEnum,
+ ActionKey = $"{TaskStatLevelEnum.PERSON.ToString()}#{currEnum.ToString()}"
+ });
+
+ });
+
+ if (nextList.Count > 0)
+ resultInfo.LevelNext.AddRange(nextList.OrderBy(t => t.SortNo).ToList());
+
+ personList.GroupBy(t => new { t.Status, t.TaskType })
+ .Select(t => new { Key = t.Key, Total = t.ToList().Sum(p => p.Total) })
+ .ToList().ForEach(t =>
+ {
+ //TaskBusiTypeEnum currEnum = (TaskBusiTypeEnum)System.Enum.Parse(typeof(TaskBusiTypeEnum), t.Key.TaskType);
+ TaskBaseTypeEnum currEnum = (TaskBaseTypeEnum)System.Enum.Parse(typeof(TaskBaseTypeEnum), t.Key.TaskType);
+
+ resultInfo.LevelTree.Add(new TaskUserStatItemTree
+ {
+ TopKey = TaskStatLevelEnum.PERSON.ToString(),
+ NextKey = t.Key.Status,
+ Key = currEnum.ToString(),
+ Name = currEnum.EnumDescription(),
+ Total = t.Total,
+ SortNo = (int)currEnum,
+ ActionKey = $"{TaskStatLevelEnum.PERSON.ToString()}#{t.Key.Status}#{currEnum.ToString()}"
+ });
+
+ });
}
+ #endregion
+
+ #region 公共
+ if (publicList.Count > 0)
+ {
+ resultInfo.LevelTop.Add(new TaskUserStatItem
+ {
+ Key = TaskStatLevelEnum.PUBLIC.ToString(),
+ Name = TaskStatLevelEnum.PUBLIC.EnumDescription(),
+ Total = publicList.Sum(t => t.Total),
+ SortNo = (int)TaskStatLevelEnum.PUBLIC,
+ ActionKey = TaskStatLevelEnum.PUBLIC.ToString()
+ });
+
+ var nextList = new List();
+
+ publicList.GroupBy(t => t.Status)
+ .Select(t => new { Key = t.Key, Total = t.ToList().Sum(p => p.Total) })
+ .ToList().ForEach(t =>
+ {
+ TaskStatusEnum currEnum = (TaskStatusEnum)System.Enum.Parse(typeof(TaskStatusEnum), t.Key);
+
+ nextList.Add(new TaskUserStatItemNext
+ {
+ TopKey = TaskStatLevelEnum.PUBLIC.ToString(),
+ Key = currEnum.ToString(),
+ Name = currEnum.EnumDescription(),
+ Total = t.Total,
+ SortNo = (int)currEnum,
+ ActionKey = $"{TaskStatLevelEnum.PUBLIC.ToString()}#{currEnum.ToString()}"
+ });
+
+ });
+
+ if (nextList.Count > 0)
+ resultInfo.LevelNext.AddRange(nextList.OrderBy(t => t.SortNo).ToList());
+
+ publicList.GroupBy(t => new { t.Status, t.TaskType })
+ .Select(t => new { Key = t.Key, Total = t.ToList().Sum(p => p.Total) })
+ .ToList().ForEach(t =>
+ {
+ //TaskBusiTypeEnum currEnum = (TaskBusiTypeEnum)System.Enum.Parse(typeof(TaskBusiTypeEnum), t.Key.TaskType);
+ TaskBaseTypeEnum currEnum = (TaskBaseTypeEnum)System.Enum.Parse(typeof(TaskBaseTypeEnum), t.Key.TaskType);
+
+ resultInfo.LevelTree.Add(new TaskUserStatItemTree
+ {
+ TopKey = TaskStatLevelEnum.PUBLIC.ToString(),
+ NextKey = t.Key.Status,
+ Key = currEnum.ToString(),
+ Name = currEnum.EnumDescription(),
+ Total = t.Total,
+ SortNo = (int)currEnum,
+ ActionKey = $"{TaskStatLevelEnum.PUBLIC.ToString()}#{t.Key.Status}#{currEnum.ToString()}"
+ });
+
+ });
+ }
+ #endregion
+
+ if (resultInfo.LevelTree != null && resultInfo.LevelTree.Count > 0)
+ {
+ resultInfo.LevelTree = resultInfo.LevelTree.OrderBy(x => x.SortNo).ToList();
+ }
+
+ return DataResult.Success(resultInfo);
}
+
+
+
#region 私有方法
///
diff --git a/ds-wms-service/DS.WMS.Gateway/ocelot.json b/ds-wms-service/DS.WMS.Gateway/ocelot.json
index 434de900..d1e7d446 100644
--- a/ds-wms-service/DS.WMS.Gateway/ocelot.json
+++ b/ds-wms-service/DS.WMS.Gateway/ocelot.json
@@ -199,6 +199,24 @@
"Type": "RoundRobin"
}
},
+ {
+ "DownstreamPathTemplate": "/containerManagementApi/{url}",
+ "DownstreamScheme": "http",
+ "DownstreamHostAndPorts": [
+ {
+ "Host": "localhost",
+ "Port": 3005
+ }
+ ],
+ "UpstreamPathTemplate": "/containerManagementApi/{url}",
+ "UpstreamHttpMethod": [
+ "Get",
+ "Post"
+ ],
+ "LoadBalancerOptions": {
+ "Type": "RoundRobin"
+ }
+ },
{
"DownstreamPathTemplate": "/LinkAttach/{url}",
"DownstreamScheme": "http",
diff --git a/ds-wms-service/DS.WMS.OpApi/Controllers/BookingSlotServiceController.cs b/ds-wms-service/DS.WMS.OpApi/Controllers/BookingSlotServiceController.cs
index 9e08504e..82b307fd 100644
--- a/ds-wms-service/DS.WMS.OpApi/Controllers/BookingSlotServiceController.cs
+++ b/ds-wms-service/DS.WMS.OpApi/Controllers/BookingSlotServiceController.cs
@@ -182,7 +182,7 @@ namespace DS.WMS.OpApi.Controllers
[Route("GetSlotCompareResult")]
public async Task>> GetSlotCompareResult([FromQuery] long id, [FromQuery] string batchNo)
{
- return null;//await _bookingSlotService.GetSlotCompareResult(id, batchNo);
+ return await _bookingSlotService.GetSlotCompareResult(id, batchNo);
}
#endregion
@@ -208,9 +208,9 @@ namespace DS.WMS.OpApi.Controllers
/// 返回回执
[HttpPost]
[Route("CreateBookingOrder")]
- public async Task CreateBookingOrder([FromBody] BookingGenerateDto model)
+ public async Task> CreateBookingOrder([FromBody] BookingGenerateDto model)
{
- return null;// await _bookingSlotService.CreateBookingOrder(model);
+ return await _bookingSlotService.CreateBookingOrder(model);
}
#endregion
diff --git a/ds-wms-service/DS.WMS.TaskApi/Controllers/TaskManageController.cs b/ds-wms-service/DS.WMS.TaskApi/Controllers/TaskManageController.cs
index 0c8b2e31..0c6a6e2f 100644
--- a/ds-wms-service/DS.WMS.TaskApi/Controllers/TaskManageController.cs
+++ b/ds-wms-service/DS.WMS.TaskApi/Controllers/TaskManageController.cs
@@ -28,7 +28,7 @@ public class TaskManageController : ApiController
/// 返回回执
[HttpPost("CreateTaskJob")]
[ApiUser(ApiCode = "BCTaskManage"), AllowAnonymous]
- public async Task> CreateTaskJob(TaskManageOrderMessageInfo info)
+ public async Task CreateTaskJob(TaskManageOrderMessageInfo info)
{
var result = await taskManageService.InitTaskJob(info);
return result;
@@ -43,7 +43,7 @@ public class TaskManageController : ApiController
/// 返回回执
[HttpPost("CreateBCTaskJob")]
[ApiUser(ApiCode = "BCTaskManage"), AllowAnonymous]
- public async Task> CreateBCTaskJob(IFormFile file, IFormFile modifyFile, [FromForm] string jsonData)
+ public async Task CreateBCTaskJob(IFormFile file, IFormFile modifyFile, [FromForm] string jsonData)
{
TaskManageOrderMessageInfo? info = JsonConvert.DeserializeObject(jsonData);
if (info == null)
@@ -77,6 +77,65 @@ public class TaskManageController : ApiController
return result;
}
+
+ ///
+ /// 获取登陆人相关的任务统计信息
+ ///
+ /// 是否强制计算
+ [HttpPost("GetCurrentTotalStat")]
+ public async Task> GetCurrentTotalStat([FromQuery] bool isReCalc = false)
+ {
+ var result = await taskManageService.GetCurrentTotalStat(isReCalc);
+ return result;
+ }
+
+ ///
+ /// 取消任务(可批量)
+ ///
+ /// 任务主键数组
+ /// 返回结果
+ [HttpPost("CancelTask")]
+ public async Task> CancelTask([FromBody] string[] Ids)
+ {
+ return default;
+ //var result = await taskManageService.GetCurrentTotalStat(isReCalc);
+ //return result;
+ }
+
+
+ ///
+ /// 获取任务台相关的枚举类型的值
+ ///
+ [HttpPost("GetTaskPlatEnumDict")]
+ public DataResult