diff --git a/ds-wms-service/DS.Module.Core/Extensions/Extensions.cs b/ds-wms-service/DS.Module.Core/Extensions/Extensions.cs
index 21a43ec7..894c5286 100644
--- a/ds-wms-service/DS.Module.Core/Extensions/Extensions.cs
+++ b/ds-wms-service/DS.Module.Core/Extensions/Extensions.cs
@@ -158,6 +158,23 @@ public static partial class Extensions
return reval;
}
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static long ObjToLong(this object thisValue)
+ {
+ long reval = 0;
+ if (thisValue == null) return 0;
+ if (thisValue != DBNull.Value && long.TryParse(thisValue.ToString(), out reval))
+ {
+ return reval;
+ }
+
+ return reval;
+ }
+
///
///
///
diff --git a/ds-wms-service/DS.Module.Core/Filters/ApiUserFilter.cs b/ds-wms-service/DS.Module.Core/Filters/ApiUserFilter.cs
index a664f443..522ee333 100644
--- a/ds-wms-service/DS.Module.Core/Filters/ApiUserFilter.cs
+++ b/ds-wms-service/DS.Module.Core/Filters/ApiUserFilter.cs
@@ -57,17 +57,31 @@ namespace DS.Module.Core.Filters
if (user != null && tenant != null)
{
- ClaimsIdentity identity = new ClaimsIdentity("AuthenticationTypes.Federation");
- identity.AddClaims(new List
+ // 认证方式1:生成Token赋值到httpContext.Headers["Authorization"]
+ var tokenModel = new JwtHelper.JwtTokenModel
{
- new Claim(JwtRegisteredClaimNames.Jti, user.Id.ToString()),
- new Claim("UserName", user.UserName),
- new Claim("TenantId", user.TenantId.ToString()),
- new Claim("TenantName", tenant.Name),
- new Claim("OrgId", user.DefaultOrgId.ToString()),
- });
- ClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(identity);
- httpContext.User = claimsPrincipal;
+ Uid = user!.Id.ToString(),
+ Name = user.UserName,
+ OrgId = user.DefaultOrgId.ToString(),
+ TenantId = user.TenantId.ToString(),
+ TenantName = tenant!.Name,
+ };
+ var token = JwtHelper.Encrypt(tokenModel, false, true);
+
+ httpContext!.Request.Headers["Authorization"] = "Bearer " + token;
+
+ // 认证方式2:生成ClaimsIdentity赋值到httpContext.User
+ //ClaimsIdentity identity = new ClaimsIdentity("AuthenticationTypes.Federation");
+ //identity.AddClaims(new List
+ //{
+ // new Claim(JwtRegisteredClaimNames.Jti, user.Id.ToString()),
+ // new Claim("UserName", user.UserName),
+ // new Claim("TenantId", user.TenantId.ToString()),
+ // new Claim("TenantName", tenant.Name),
+ // new Claim("OrgId", user.DefaultOrgId.ToString()),
+ //});
+ //ClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(identity);
+ //httpContext.User = claimsPrincipal;
return next();
}
}
diff --git a/ds-wms-service/DS.Module.SqlSugar/SqlsugarHelper.cs b/ds-wms-service/DS.Module.SqlSugar/SqlsugarHelper.cs
index c3a1be1e..a684bb0c 100644
--- a/ds-wms-service/DS.Module.SqlSugar/SqlsugarHelper.cs
+++ b/ds-wms-service/DS.Module.SqlSugar/SqlsugarHelper.cs
@@ -56,7 +56,7 @@ namespace DS.Module.SqlSugar
{
var orgId = ((dynamic)entityInfo.EntityValue).OrgId;
if (orgId == null || orgId == 0)
- entityInfo.SetValue(user.GetOrgId());
+ entityInfo.SetValue(user.OrgId);
}
if (entityInfo.PropertyName == "CreateBy")
diff --git a/ds-wms-service/DS.Module.SqlSugar/SqlsugarInstall.cs b/ds-wms-service/DS.Module.SqlSugar/SqlsugarInstall.cs
index 34265a63..1035c738 100644
--- a/ds-wms-service/DS.Module.SqlSugar/SqlsugarInstall.cs
+++ b/ds-wms-service/DS.Module.SqlSugar/SqlsugarInstall.cs
@@ -85,8 +85,8 @@ public static class SqlsugarInstall
// }
// });
//}
- var httpContextAccessor = services.GetService();
- var user = services.GetService();
+ //var httpContextAccessor = services.GetService();
+ //var user = services.GetService();
//if (user.IsNullOrEmpty())
//{
// user = new AspNetUser(httpContextAccessor)
@@ -110,7 +110,7 @@ public static class SqlsugarInstall
var dbProvider = db.GetConnectionScope((string)c.ConfigId);
- // var user = services.GetService();
+ var user = services.GetService();
//单例参数配置,所有上下文生效
dbProvider.Ado.CommandTimeOut = 30;
dbProvider.Aop.OnLogExecuting = (sql, pars) =>
@@ -189,7 +189,7 @@ public static class SqlsugarInstall
{
var orgId = ((dynamic)entityInfo.EntityValue).OrgId;
if (orgId == null || orgId == 0)
- entityInfo.SetValue(user.GetOrgId());
+ entityInfo.SetValue(user.OrgId);
}
if (entityInfo.PropertyName == "CreateBy")
@@ -273,7 +273,7 @@ public static class SqlsugarInstall
};
//全局过滤租户
- dbProvider.QueryFilter.AddTableFilter(m => m.TenantId == user.GetTenantId());
+ dbProvider.QueryFilter.AddTableFilter(m => m.TenantId == long.Parse(user.TenantId));
//全局过滤机构Id
dbProvider.QueryFilter.AddTableFilter(m => m.OrgId == user.OrgId);
//全局软删除过滤
diff --git a/ds-wms-service/DS.Module.UserModule/AspNetUser.cs b/ds-wms-service/DS.Module.UserModule/AspNetUser.cs
index 52d73534..7df89035 100644
--- a/ds-wms-service/DS.Module.UserModule/AspNetUser.cs
+++ b/ds-wms-service/DS.Module.UserModule/AspNetUser.cs
@@ -1,7 +1,5 @@
-using DS.Module.Core;
-using DS.Module.Core.Extensions;
+using DS.Module.Core.Extensions;
using Microsoft.AspNetCore.Http;
-using Newtonsoft.Json;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
@@ -16,439 +14,67 @@ public class AspNetUser : IUser
_accessor = accessor;
}
- public UserInfo UserInfo => GetUserInfo();
+ public string UserId => GetClaimValueByType("jti") ?? "90001";
+ public string UserName => GetClaimValueByType("UserName") ?? "IUser获取UserName意外为空";
+ public string TenantId => GetClaimValueByType("TenantId") ?? "90002";
+ public string TenantName => GetClaimValueByType("TenantName") ?? "IUser获取TenantName意外为空";
+ public long OrgId => GetClaimValueByType("OrgId")?.ObjToLong() ?? 90003;
- //public string GetToken()
- //{
- // return _accessor.HttpContext?.Request?.Headers["Authorization"].ToString().Replace("Bearer ", "");
- //}
- //public string UserId => GetClaimValueByType("jti").FirstOrDefault().ObjToString();
- private string _userId;
- public string UserId
+
+ public string? GetClaimValueByType(string claimType)
{
- get
- {
- if (_userId == null)
- {
- var claimValue = GetClaimValueByType("jti").FirstOrDefault();
- _userId = claimValue != null ? claimValue.ObjToString() : GetUserId().ToString();
- }
- return _userId;
- }
- set
- {
- _userId = value;
- }
+ return Claims.Where(x => x.Type == claimType).Select(x => x.Value).FirstOrDefault();
}
- private string _userName;
- public string UserName
+ private List? _claims;
+ public List Claims
{
get
{
- if (_userName == null)
+ if (_claims == null || _claims.Count == 0)
{
- var claimValue = GetClaimValueByType("UserName").FirstOrDefault();
- _userName = claimValue != null ? claimValue.ObjToString() : "管理员";
+ _claims = GetClaimsIdentity().ToList();
}
- return _userName;
- }
- set
- {
- _userName = value;
+ return _claims;
}
}
- private string _tenantName;
- public string TenantName
- {
- get
- {
- if (_tenantName == null)
- {
- var claimValue = GetClaimValueByType("TenantName").FirstOrDefault();
- _tenantName = claimValue != null ? claimValue.ObjToString() : "系统租户";
- }
- return _tenantName;
- }
- set
- {
- _tenantName = value;
- }
- }
- public long GetTenantId()
- {
- var token = GetToken();
- if (string.IsNullOrEmpty(token))
- {
- return 2;
- }
-
- var jwtHandler = new JwtSecurityTokenHandler();
- if (!jwtHandler.CanReadToken(token))
- {
- return 3;
- }
- JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
- var tenantIdClaim = jwtToken.Claims.FirstOrDefault(x => x.Type == "TenantId");
-
- return tenantIdClaim != null ? Convert.ToInt64(tenantIdClaim.Value) : 4;
- }
-
- //public long GetTenantId()
- //{
- // // return _accessor.HttpContext?.Request?.Headers["Authorization"].ToString().Replace("Bearer ", "");
- // var tenantId = String.Empty;
- // var token = _accessor.HttpContext?.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last()
- // ?? _accessor.HttpContext?.Request.Headers["X-Token"].FirstOrDefault()
- // ?? _accessor.HttpContext?.Request.Query["Token"].FirstOrDefault()
- // ?? _accessor.HttpContext?.Request.Cookies["Token"];
- // // token校验
- // var jwtHandler = new JwtSecurityTokenHandler();
- // if (!token.IsNullOrEmpty() && jwtHandler.CanReadToken(token))
- // {
- // JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
-
- // tenantId = jwtToken.Claims.First(x => x.Type == "TenantId").Value;
- // }
-
- // return Convert.ToInt64(tenantId);
- //}
-
- public long GetOrgId()
+ IEnumerable GetClaimsIdentity()
{
- //if (_orgId == 0)
- //{
- // var claimValue = GetClaimValueByType("OrgId").FirstOrDefault();
- // _orgId = claimValue != null ? long.Parse(claimValue) : 0;
- //}
- //return _orgId;
-
+ if (_accessor.HttpContext == null) return ArraySegment.Empty;
+
var token = GetToken();
- if (string.IsNullOrEmpty(token))
- {
- return 5;
- }
-
- var jwtHandler = new JwtSecurityTokenHandler();
- if (!jwtHandler.CanReadToken(token))
- {
- return 6;
- }
-
- JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
- var orgIdClaim = jwtToken.Claims.FirstOrDefault(x => x.Type == "OrgId");
-
- return orgIdClaim != null ? Convert.ToInt64(orgIdClaim.Value) : 7;
- }
-
- public long GetUserId()
- {
- var token = GetToken();
- if (string.IsNullOrEmpty(token))
- {
- return 8;
- }
-
- var jwtHandler = new JwtSecurityTokenHandler();
- if (!jwtHandler.CanReadToken(token))
- {
- return 9;
- }
-
- JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
- var userIdClaim = jwtToken.Claims.FirstOrDefault(x => x.Type == "jti");
-
- return userIdClaim != null ? Convert.ToInt64(userIdClaim.Value) : 10;
- }
-
- //public long GetOrgId()
- //{
- // // return _accessor.HttpContext?.Request?.Headers["Authorization"].ToString().Replace("Bearer ", "");
- // var orgId = String.Empty;
- // var token = _accessor.HttpContext?.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last()
- // ?? _accessor.HttpContext?.Request.Headers["X-Token"].FirstOrDefault()
- // ?? _accessor.HttpContext?.Request.Query["Token"].FirstOrDefault()
- // ?? _accessor.HttpContext?.Request.Cookies["Token"];
- // // token校验
- // var jwtHandler = new JwtSecurityTokenHandler();
- // if (!token.IsNullOrEmpty() && jwtHandler.CanReadToken(token))
- // {
- // JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
-
- // orgId = jwtToken.Claims.First(x => x.Type == "OrgId").Value;
- // }
- // return Convert.ToInt64(orgId);
- //}
-
- //public string GetCompanyId()
- //{
- // // return _accessor.HttpContext?.Request?.Headers["Authorization"].ToString().Replace("Bearer ", "");
- // var companyId = String.Empty;
- // var token = _accessor.HttpContext?.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last()
- // ?? _accessor.HttpContext?.Request.Headers["X-Token"].FirstOrDefault()
- // ?? _accessor.HttpContext?.Request.Query["Token"].FirstOrDefault()
- // ?? _accessor.HttpContext?.Request.Cookies["Token"];
- // // token校验
- // var jwtHandler = new JwtSecurityTokenHandler();
- // if (!token.IsNullOrEmpty() && jwtHandler.CanReadToken(token))
- // {
- // JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
-
- // companyId = jwtToken.Claims.First(x => x.Type == "OrgId").Value;
- // }
- // return companyId;
- //}
-
- public string GetCompanyId()
- {
- var token = GetToken();
- if (string.IsNullOrEmpty(token))
- {
- return string.Empty;
- }
var jwtHandler = new JwtSecurityTokenHandler();
- if (!jwtHandler.CanReadToken(token))
- {
- return string.Empty;
- }
-
- JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
- var companyIdClaim = jwtToken.Claims.FirstOrDefault(x => x.Type == "OrgId");
-
- return companyIdClaim?.Value ?? "0000000001";
- }
-
- //public string TenantId => GetClaimValueByType("TenantId").FirstOrDefault().ObjToString();
- private string _tenantId;
-
- public string TenantId
- {
- get
+ if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token))
{
- if (_tenantId == null)
- {
- var tenantIdClaim = GetClaimValueByType("TenantId").FirstOrDefault();
- _tenantId = tenantIdClaim != null ? tenantIdClaim.ObjToString() : GetTenantId().ToString();
- }
- return _tenantId;
+ JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
+ return jwtToken.Claims;
}
- set
+ else
{
- _tenantId = value;
+ return ArraySegment.Empty;
}
}
-
- // public string CompanyId => GetClaimValueByType("CompanyId").FirstOrDefault().ObjToString();
- private string _companyId;
-
- public string CompanyId
+ public bool IsAuthenticated()
{
- get
- {
- if (_companyId == null)
- {
- var companyIdClaim = GetClaimValueByType("CompanyId").FirstOrDefault();
- _companyId = companyIdClaim != null ? companyIdClaim.ObjToString() : "东胜软件";
- }
- return _companyId;
- }
- set
- {
- _companyId = value;
- }
+ return _accessor.HttpContext?.User?.Identity?.IsAuthenticated ?? false;
}
-
- // public string OrgId => GetClaimValueByType("OrgId").FirstOrDefault().ObjToString();
- private long _orgId;
-
- public long OrgId
- {
- get
- {
- if (_orgId == 0)
- {
- var orgIdClaim = GetClaimValueByType("OrgId").FirstOrDefault();
- _orgId = orgIdClaim != null ? long.Parse(orgIdClaim) : GetOrgId();
- }
- return _orgId;
- }
- set
- {
- _orgId = value;
- }
- }
-
- public UserInfo GetUserInfo()
- {
- var user = _accessor.HttpContext?.User;
- if (user == null || !user.Claims.Any())
- {
- return null;
- // return GetDefaultUserInfo();
- }
-
- var token = GetToken();
- if (string.IsNullOrEmpty(token))
- {
- return null;
- // return GetDefaultUserInfo();
- }
-
- var jwtHandler = new JwtSecurityTokenHandler();
- if (!jwtHandler.CanReadToken(token))
- {
- return null;
- // return GetDefaultUserInfo();
- }
-
- JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
- var userInfoJson = jwtToken.Claims.First().Value;
- var userInfo = JsonConvert.DeserializeObject(userInfoJson);
-
- return userInfo ?? null;
- }
-
public string GetToken()
{
- if (_accessor == null || _accessor.HttpContext == null)
- {
- return "东胜软件";
- }
-
- var request = _accessor.HttpContext.Request;
-
- var authorizationHeader = request.Headers["Authorization"].FirstOrDefault();
- if (!string.IsNullOrEmpty(authorizationHeader))
- {
- return authorizationHeader.Split(" ").Last();
- }
-
- return request.Headers["X-Token"].FirstOrDefault()
- ?? request.Query["Token"].FirstOrDefault()
- ?? request.Cookies["Token"]
- ?? "东胜软件";
- }
-
- #region 优化前
-
- //public string GetToken()
- //{
- // var headers = _accessor.HttpContext?.Request?.Headers;
- // if (headers != null && headers.ContainsKey("Authorization"))
- // {
- // return headers["Authorization"].ToString().Replace("Bearer ", "");
- // }
- // return null;
- //}
- //public UserInfo GetUserInfo()
- //{
- // if (_accessor.HttpContext.User.Claims == null)
- // {
- // return new UserInfo()
- // {
- // CompanyId = "1",
- // CompanyName = "初始化",
- // Token = "初始化",
- // UserCode = "初始化",
- // UserId = "00000000",
- // UserName = "初始化",
- // };
- // }
-
- // //var json = _accessor.HttpContext.User.Claims;
- // //获取上传token,可自定义扩展
- // var httphedad = _accessor.HttpContext.Request;
- // var token = httphedad.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last()
- // ?? httphedad.Headers["X-Token"].FirstOrDefault()
- // ?? httphedad.Query["Token"].FirstOrDefault()
- // ?? httphedad.Cookies["Token"];
- // // token校验
- // var jwtHandler = new JwtSecurityTokenHandler();
- // var userInfo = new UserInfo();
- // if (!token.IsNullOrEmpty() && jwtHandler.CanReadToken(token))
- // {
- // JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
- // var UserId = jwtToken.Claims.First().Value;
- // // userInfo = db.Queryable()
- // // .Where(a =>
- // // a.Deleted == false && a.Id == user.Id)
- // // .Select(a => new UserInfo
- // // {
- // // UserId = a.Id, UserCode = a.UserCode, UserName = a.NickName,
- // // // OrgId = a.OrgId.ToString(), CompanyName = a.CustomerName
- // // }).First();
- // // var t1 = JsonConvert.DeserializeObject(temp);
- // userInfo = JsonConvert.DeserializeObject(jwtToken.Claims.First().Value);
- // }
-
- // return userInfo;
- //}
-
- //public IEnumerable GetClaimsIdentity()
- //{
- // var claims = _accessor.HttpContext.User.Claims.ToList();
- // var headers = _accessor.HttpContext.Request.Headers;
- // foreach (var header in headers)
- // {
- // claims.Add(new Claim(header.Key, header.Value));
- // }
- // return claims;
- //}
-
- #endregion 优化前
-
- ///
- /// 保持在请求上下文中的所有声明 不为空
- ///
- ///
- public IEnumerable GetClaimsIdentity()
- {
- var claims = new List();
- var user = _accessor.HttpContext?.User;
- if (user != null)
+ var token = _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", "");
+ if (!string.IsNullOrWhiteSpace(token))
{
- claims.AddRange(user.Claims);
+ return token;
}
+ return "IUser通过GetToken()获取Token意外为空";
- var headers = _accessor.HttpContext?.Request?.Headers;
- if (headers != null)
- {
- foreach (var header in headers)
- {
- foreach (var value in header.Value)
- {
- if (!string.IsNullOrEmpty(value))
- {
- claims.Add(new Claim(header.Key, value));
- }
- }
- }
- }
-
- return claims;
- }
-
- #region 键值对获取相应的内容 如果内容不存在则返回默认值 GetClaimValueByType
-
- ///
- /// 键值对获取相应的内容 如果内容不存在则返回默认值
- ///
- ///
- ///
- public List GetClaimValueByType(string ClaimType)
- {
- var claimsIdentity = GetClaimsIdentity();
- // if (claimsIdentity == null || !claimsIdentity.Any(item => item.Type == ClaimType))
- // {
- // return new List { "jti", "TenantId", "CompanyId", "OrgId" }; // 返回包含默认参数的列表
- // }
-
- return claimsIdentity.Where(item => item.Type == ClaimType).Select(item => item.Value).ToList();
+ //有需要再返回
+ //return _accessor.HttpContext?.Request.Headers["X-Token"].FirstOrDefault()
+ // ?? _accessor.HttpContext?.Request.Query["Token"].FirstOrDefault()
+ // ?? _accessor.HttpContext?.Request.Cookies["Token"]
+ // ?? "东胜软件";
}
-
- #endregion 键值对获取相应的内容 如果内容不存在则返回默认值 GetClaimValueByType
}
\ No newline at end of file
diff --git a/ds-wms-service/DS.Module.UserModule/IUser.cs b/ds-wms-service/DS.Module.UserModule/IUser.cs
index 931cc274..fc97627f 100644
--- a/ds-wms-service/DS.Module.UserModule/IUser.cs
+++ b/ds-wms-service/DS.Module.UserModule/IUser.cs
@@ -1,5 +1,4 @@
-using DS.Module.Core;
-
+
namespace DS.Module.UserModule;
///
@@ -7,57 +6,41 @@ namespace DS.Module.UserModule;
///
public interface IUser
{
- ///
- /// 获取用户信息
- ///
- UserInfo UserInfo { get; }
-
///
/// 获取用户ID
///
string UserId { get; }
-
///
/// 获取用户名称
///
string UserName { get; }
- ///
- /// 获取公司ID
- ///
- string CompanyId { get; }
///
/// 租户ID
///
string TenantId { get; }
-
///
/// 租户名称
///
string TenantName { get; }
+
///
/// 机构ID
///
long OrgId { get; }
///
- /// 获取机构ID
- ///
- long GetOrgId();
-
- ///
- /// 获取公司ID
+ /// 返回Token
///
- string GetCompanyId();
+ string GetToken();
///
- /// 获取租户ID
+ /// 根据Claim类型返回Claim的值
///
- long GetTenantId();
-
+ string? GetClaimValueByType(string claimType);
+
///
- /// 获取Token
+ /// 返回当前用户是否已经过认证
///
- ///
- string GetToken();
+ bool IsAuthenticated();
}
\ No newline at end of file
diff --git a/ds-wms-service/DS.Module.UserModule/UserModuleInstall.cs b/ds-wms-service/DS.Module.UserModule/UserModuleInstall.cs
index 1a7cb518..9ed07247 100644
--- a/ds-wms-service/DS.Module.UserModule/UserModuleInstall.cs
+++ b/ds-wms-service/DS.Module.UserModule/UserModuleInstall.cs
@@ -17,6 +17,7 @@ public static class UserModuleInstall
if (services == null) throw new ArgumentNullException(nameof(services));
services.AddSingleton();
+ //services.AddTransient();
services.AddScoped();
}
}
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.Core/Code/Interface/IDataRuleTemplateService.cs b/ds-wms-service/DS.WMS.Core/Code/Interface/IDataRuleTemplateService.cs
index ebb70279..88fc6e38 100644
--- a/ds-wms-service/DS.WMS.Core/Code/Interface/IDataRuleTemplateService.cs
+++ b/ds-wms-service/DS.WMS.Core/Code/Interface/IDataRuleTemplateService.cs
@@ -44,4 +44,12 @@ public interface IDataRuleTemplateService
///
Task>> GetDataRuleTemplateSelectList(string id, string ruleType);
+
+ ///
+ /// 数据权限模板复制
+ ///
+ ///
+ ///
+
+ public Task BatchCopyDataRuleTemplate(IdModel req);
}
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.Core/Code/Method/CodeDataRuleService.cs b/ds-wms-service/DS.WMS.Core/Code/Method/CodeDataRuleService.cs
index e3aac2c2..67e1cae3 100644
--- a/ds-wms-service/DS.WMS.Core/Code/Method/CodeDataRuleService.cs
+++ b/ds-wms-service/DS.WMS.Core/Code/Method/CodeDataRuleService.cs
@@ -137,7 +137,7 @@ namespace DS.WMS.Core.Code.Method
return await Task.FromResult(DataResult.Failed("权限复制人员不能为空!"));
}
- if (db.Queryable().Where(x=> !req.CopyUserIds.Contains(x.Id)).Any()) {
+ if (db.Queryable().Where(x=> req.CopyUserIds.Contains(x.Id)).Count() == 0) {
return await Task.FromResult(DataResult.Failed("请检查复制人员信息!"));
}
@@ -165,6 +165,7 @@ namespace DS.WMS.Core.Code.Method
{
UserId = userInfo.Id,
UserName = userInfo.UserName,
+ TemplateName = rule.TemplateName,
VisibleTemplateId = rule.VisibleTemplateId,
VisibleRuleScope = rule.VisibleRuleScope,
VisibleRuleScopeName = rule.VisibleRuleScopeName,
@@ -257,6 +258,7 @@ namespace DS.WMS.Core.Code.Method
{
UserId = userInfo.Id,
UserName = userInfo.UserName,
+ TemplateName = currentTemplate.TemplateName,
VisibleTemplateId = currentTemplate.Id,
VisibleRuleScope = currentTemplate.RuleScope,
VisibleRuleScopeName = currentTemplate.RuleScopeName,
@@ -363,6 +365,7 @@ namespace DS.WMS.Core.Code.Method
{
UserId = userInfo.Id,
UserName = userInfo.UserName,
+ TemplateName = currentTemplate.TemplateName,
OperateTemplateId = currentTemplate.Id,
OperateRuleScope = currentTemplate.RuleScope,
OperateRuleScopeName = currentTemplate.RuleScopeName,
diff --git a/ds-wms-service/DS.WMS.Core/Code/Method/CodeFormCopyService.cs b/ds-wms-service/DS.WMS.Core/Code/Method/CodeFormCopyService.cs
index a183b957..a6271c2d 100644
--- a/ds-wms-service/DS.WMS.Core/Code/Method/CodeFormCopyService.cs
+++ b/ds-wms-service/DS.WMS.Core/Code/Method/CodeFormCopyService.cs
@@ -64,7 +64,7 @@ public class CodeFormCopyService : IFormCopyService
if (req.Id == 0)
{
if (tenantDb.Queryable()
- .Where(x => x.OrgId == user.GetOrgId() && x.PermissionId == req.PermissionId && x.CreateBy == long.Parse(user.UserId)).Any())
+ .Where(x => x.OrgId == user.OrgId && x.PermissionId == req.PermissionId && x.CreateBy == long.Parse(user.UserId)).Any())
{
return DataResult.Failed("表单复制字段设置已存在!", MultiLanguageConst.FormCopyExist);
}
diff --git a/ds-wms-service/DS.WMS.Core/Code/Method/CodeFormSetService.cs b/ds-wms-service/DS.WMS.Core/Code/Method/CodeFormSetService.cs
index 87882597..f1df413a 100644
--- a/ds-wms-service/DS.WMS.Core/Code/Method/CodeFormSetService.cs
+++ b/ds-wms-service/DS.WMS.Core/Code/Method/CodeFormSetService.cs
@@ -65,7 +65,7 @@ public class CodeFormSetService : IFormSetService
if (req.Id == 0)
{
if (tenantDb.Queryable()
- .Where(x => x.OrgId == user.GetOrgId() && x.PermissionId == req.PermissionId && x.FormNo == req.FormNo).Any())
+ .Where(x => x.OrgId == user.OrgId && x.PermissionId == req.PermissionId && x.FormNo == req.FormNo).Any())
{
return DataResult.Failed("表单设置已存在!", MultiLanguageConst.FormSetExist);
}
diff --git a/ds-wms-service/DS.WMS.Core/Code/Method/CodeQuerySetService.cs b/ds-wms-service/DS.WMS.Core/Code/Method/CodeQuerySetService.cs
index f22e17f8..eba2ac4e 100644
--- a/ds-wms-service/DS.WMS.Core/Code/Method/CodeQuerySetService.cs
+++ b/ds-wms-service/DS.WMS.Core/Code/Method/CodeQuerySetService.cs
@@ -65,7 +65,7 @@ public class CodeQuerySetService : IQuerySetService
if (req.Id == 0)
{
if (tenantDb.Queryable()
- .Where(x => x.OrgId == user.GetOrgId() && x.PermissionId == req.PermissionId && x.TagNo == req.TagNo).Any())
+ .Where(x => x.OrgId == user.OrgId && x.PermissionId == req.PermissionId && x.TagNo == req.TagNo).Any())
{
return DataResult.Failed("查询条件设置已存在!", MultiLanguageConst.QuerySetExist);
}
diff --git a/ds-wms-service/DS.WMS.Core/Code/Method/CodeSequenceService.cs b/ds-wms-service/DS.WMS.Core/Code/Method/CodeSequenceService.cs
index d83570fb..62ba96da 100644
--- a/ds-wms-service/DS.WMS.Core/Code/Method/CodeSequenceService.cs
+++ b/ds-wms-service/DS.WMS.Core/Code/Method/CodeSequenceService.cs
@@ -57,7 +57,7 @@ public class CodeSequenceService : ICodeSequenceService
if (req.Id == 0)
{
- if (tenantDb.Queryable().Where(x => x.PermissionId == req.PermissionId && x.OrderNo == req.OrderNo).Any())
+ if (tenantDb.Queryable().Where(x => x.PermissionId == req.PermissionId && x.SequenceName == req.SequenceName).Any())
{
return DataResult.Failed("基础编码已存在!", MultiLanguageConst.SequenceExist);
}
diff --git a/ds-wms-service/DS.WMS.Core/Code/Method/DataRuleTemplateService.cs b/ds-wms-service/DS.WMS.Core/Code/Method/DataRuleTemplateService.cs
index c3469b9e..431eade7 100644
--- a/ds-wms-service/DS.WMS.Core/Code/Method/DataRuleTemplateService.cs
+++ b/ds-wms-service/DS.WMS.Core/Code/Method/DataRuleTemplateService.cs
@@ -93,7 +93,7 @@ namespace DS.WMS.Core.Code.Method
{
var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
var data = await tenantDb.Queryable()
- .Where(x => x.Id == long.Parse(id) && x.Status == StatusEnum.Enable)
+ .Where(x => x.Id == long.Parse(id))
.Select()
.FirstAsync();
return await Task.FromResult(DataResult.Success(data, MultiLanguageConst.DataQuerySuccess));
@@ -127,5 +127,25 @@ namespace DS.WMS.Core.Code.Method
}
return await Task.FromResult(DataResult.Successed("删除成功!", MultiLanguageConst.DataDelSuccess));
}
+
+ public async Task BatchCopyDataRuleTemplate(IdModel req)
+ {
+ var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
+ var list = await tenantDb.Queryable().Where(x => req.Ids.Contains(x.Id)).ToListAsync();
+ var newList = new List();
+ if (list.Count > 0)
+ {
+ foreach (var item in list) {
+
+ var temp = item.Adapt();
+ temp.Id = 0;
+ temp.TemplateName = item.TemplateName +"-复制";
+ newList.Add(temp);
+ }
+
+ await tenantDb.Insertable(newList).ExecuteCommandAsync();
+ }
+ return await Task.FromResult(DataResult.Successed("复制成功!", MultiLanguageConst.DataCopySuccess));
+ }
}
}
diff --git a/ds-wms-service/DS.WMS.Core/Fee/Dtos/ReportContext.cs b/ds-wms-service/DS.WMS.Core/Fee/Dtos/ReportContext.cs
new file mode 100644
index 00000000..68cecea5
--- /dev/null
+++ b/ds-wms-service/DS.WMS.Core/Fee/Dtos/ReportContext.cs
@@ -0,0 +1,48 @@
+using DS.Module.Core;
+using DS.Module.UserModule;
+using DS.WMS.Core.Op.Entity;
+using SqlSugar;
+
+namespace DS.WMS.Core.Fee.Dtos
+{
+ ///
+ /// 报表生成上下文
+ ///
+ public class ReportContext
+ {
+ ///
+ /// 服务提供程序
+ ///
+ public IServiceProvider ServiceProvider { get; internal set; }
+
+ ///
+ /// 获取主库访问对象
+ ///
+ public ISqlSugarClient Db { get; internal set; }
+
+ ///
+ /// 获取租户库访问对象
+ ///
+ public ISqlSugarClient TenantDb { get; internal set; }
+
+ ///
+ /// 请求用户
+ ///
+ public IUser User { get; internal set; }
+
+ ///
+ /// 操作结果,用于记录错误信息
+ ///
+ public DataResult? ErrorResult { get; set; }
+
+ ///
+ /// 业务类型
+ ///
+ public BusinessType BusinessType { get; set; } = BusinessType.OceanShippingExport;
+
+ ///
+ /// 业务ID
+ ///
+ public long[] Ids { get; set; } = [];
+ }
+}
diff --git a/ds-wms-service/DS.WMS.Core/Fee/Interface/IFeeRecordService.cs b/ds-wms-service/DS.WMS.Core/Fee/Interface/IFeeRecordService.cs
index 0c3b8950..57b0dee0 100644
--- a/ds-wms-service/DS.WMS.Core/Fee/Interface/IFeeRecordService.cs
+++ b/ds-wms-service/DS.WMS.Core/Fee/Interface/IFeeRecordService.cs
@@ -96,12 +96,13 @@ public interface IFeeRecordService
Task WriteBackStatusAsync(long businessId, BusinessType businessType);
///
- /// 获取费用核算单打印信息
+ /// 获取费用打印信息
///
+ /// 数据提供程序
/// 业务类型
/// 费用记录ID
///
- Task> GetPrintInfoAsync(BusinessType businessType, params long[] idArray);
+ Task> GetPrintInfoAsync(string providerName, BusinessType businessType, params long[] idArray);
///
/// 设置发票启用状态
diff --git a/ds-wms-service/DS.WMS.Core/Fee/Interface/IReportProvider.cs b/ds-wms-service/DS.WMS.Core/Fee/Interface/IReportProvider.cs
new file mode 100644
index 00000000..81f69d00
--- /dev/null
+++ b/ds-wms-service/DS.WMS.Core/Fee/Interface/IReportProvider.cs
@@ -0,0 +1,17 @@
+using DS.WMS.Core.Fee.Dtos;
+
+namespace DS.WMS.Core.Fee.Interface
+{
+ ///
+ /// 用于输出报表的数据提供程序
+ ///
+ public interface IReportProvider
+ {
+ ///
+ /// 返回所需的JSON格式的数据
+ ///
+ /// 报表输出上下文
+ ///
+ Task GetDataAsync(ReportContext context);
+ }
+}
diff --git a/ds-wms-service/DS.WMS.Core/Fee/Method/FeeRecordService.cs b/ds-wms-service/DS.WMS.Core/Fee/Method/FeeRecordService.cs
index e1cb5cb2..09e3a304 100644
--- a/ds-wms-service/DS.WMS.Core/Fee/Method/FeeRecordService.cs
+++ b/ds-wms-service/DS.WMS.Core/Fee/Method/FeeRecordService.cs
@@ -222,7 +222,7 @@ namespace DS.WMS.Core.Fee.Method
item.Quantity = ctn == null ? 0 : ctn.CtnNum.GetValueOrDefault();
break;
}
- }
+ }
//计算税费
item.SetTax();
@@ -927,110 +927,33 @@ namespace DS.WMS.Core.Fee.Method
}
///
- /// 获取费用核算单打印信息
+ /// 获取费用打印信息
///
+ ///
/// 业务类型
/// 费用记录ID
///
- public async Task> GetPrintInfoAsync(BusinessType businessType, params long[] idArray)
- {
- CostAccountingForm form = null;
- switch (businessType)
- {
- case BusinessType.OceanShippingExport:
- form = await GetOceanShippingExportAsync(idArray);
- break;
- case BusinessType.OceanShippingImport:
-
- break;
- default:
- return DataResult.Failed(string.Format(
- MultiLanguageConst.BusinessNotSupported, businessType.GetDescription()));
- }
-
- if (form != null)
- {
- long UserId = long.Parse(User.UserId);
- form.Creator = Db.Queryable().Where(x => x.Id == UserId).Select(x => x.UserName).First();
-
- form.ReceivableRMB = form.Details.FindAll(x => x.Type == FeeType.Receivable && x.Currency == FeeCurrency.RMB_CODE).Sum(x => x.Amount);
- form.PayableRMB = form.Details.FindAll(x => x.Type == FeeType.Payable && x.Currency == FeeCurrency.RMB_CODE).Sum(x => x.Amount);
- form.ReceivableUSD = form.Details.FindAll(x => x.Type == FeeType.Receivable && x.Currency == FeeCurrency.USD_CODE).Sum(x => x.Amount);
- form.PayableUSD = form.Details.FindAll(x => x.Type == FeeType.Payable && x.Currency == FeeCurrency.USD_CODE).Sum(x => x.Amount);
- form.ReceivableOther = form.Details.FindAll(x => x.Type == FeeType.Receivable && (x.Currency != FeeCurrency.RMB_CODE && x.Currency != FeeCurrency.USD_CODE)).Sum(x => x.Amount);
- form.PayableOther = form.Details.FindAll(x => x.Type == FeeType.Payable && (x.Currency == FeeCurrency.RMB_CODE && x.Currency != FeeCurrency.USD_CODE)).Sum(x => x.Amount);
-
- //获取美元汇率
- var fees = new List {
- new FeeRecord { Currency = FeeCurrency.USD_CODE, FeeType = FeeType.Receivable },
- new FeeRecord { Currency = FeeCurrency.USD_CODE, FeeType = FeeType.Payable }
- };
- await FetchExchangeRateAsync(fees);
- form.ExchangeRate = fees[0].ExchangeRate.HasValue ? fees[0].ExchangeRate.Value : 1;
- form.TotalReceivable = Math.Round(form.ReceivableUSD * form.ExchangeRate, 4, MidpointRounding.ToEven) + form.ReceivableRMB + form.ReceivableOther;
- form.TotalPayable = Math.Round(form.PayableUSD * form.ExchangeRate, 4, MidpointRounding.ToEven) + form.PayableRMB + form.PayableOther;
- }
-
- return DataResult.Success(form);
- }
-
- //获取海运出口打印数据
- async Task GetOceanShippingExportAsync(params long[] idArray)
+ public async Task> GetPrintInfoAsync(string providerName, BusinessType businessType, params long[] idArray)
{
- CostAccountingForm form = null;
- var list = await TenantDb.Queryable().InnerJoin((x, y) => x.BusinessId == y.Id)
- .Where((x, y) => idArray.Contains(x.Id)
- //&& x.FeeStatus == FeeStatus.SettlementCompleted
- ).Select((x, y) => new
- {
- x.FeeType,
- x.FeeName,
- x.Currency,
- x.ExchangeRate,
- x.Amount,
- x.CustomerName,
- y.CustomerNo, //业务编号
- y.AccountDate, //会计期间
- y.ETA,
- y.ETD,
- y.Voyno,
- y.MBLNO,
- y.Carrier,
- y.LoadPort,
- y.DischargePort,
- y.CntrTotal, //Volume
- y.IssueType //放单方式
- }).ToListAsync();
-
- if (list.Count == 0)
- return form;
+ Type type = Type.GetType(providerName, false);
+ if (type == null)
+ return DataResult.Failed("未能找到数据提供程序");
- var item = list[0];
- form = new CostAccountingForm
+ var provider = Fasterflect.ConstructorExtensions.CreateInstance(type) as IReportProvider;
+ var context = new ReportContext
{
- BusinessNo = item.CustomerNo,
- AccountingPeriod = item.AccountDate,
- ETA = item.ETA,
- ETD = item.ETD,
- Voy = item.Voyno,
- MBLNo = item.MBLNO,
- Carrier = item.Carrier,
- POL = item.LoadPort,
- POD = item.DischargePort,
- Volume = item.CntrTotal,
- ReleaseType = item.IssueType,
- PrintTime = DateTime.Now,
- Details = list.Select(x => new CostAccountingDetail
- {
- Amount = x.Amount,
- Currency = x.Currency,
- CustomerName = x.CustomerName,
- FeeName = x.FeeName,
- Type = x.FeeType
- }).ToList()
+ BusinessType = businessType,
+ Ids = idArray,
+ Db = Db,
+ TenantDb = TenantDb,
+ User = User,
+ ServiceProvider = ServiceProvider
};
+ var data = provider.GetDataAsync(context);
+ if (context.ErrorResult == null)
+ return DataResult.Success(data);
- return form;
+ return DataResult.Failed(context.ErrorResult.Message, context.ErrorResult.MultiCode);
}
///
diff --git a/ds-wms-service/DS.WMS.Core/Fee/Method/ReportProviders/CostAccountingReport.cs b/ds-wms-service/DS.WMS.Core/Fee/Method/ReportProviders/CostAccountingReport.cs
new file mode 100644
index 00000000..da389dca
--- /dev/null
+++ b/ds-wms-service/DS.WMS.Core/Fee/Method/ReportProviders/CostAccountingReport.cs
@@ -0,0 +1,123 @@
+using DS.Module.Core;
+using DS.WMS.Core.Fee.Dtos;
+using DS.WMS.Core.Fee.Entity;
+using DS.WMS.Core.Fee.Interface;
+using DS.WMS.Core.Op.Entity;
+using DS.WMS.Core.Sys.Entity;
+using Masuit.Tools.Systems;
+using Microsoft.Extensions.DependencyInjection;
+using SqlSugar;
+
+namespace DS.WMS.Core.Fee.Method.ReportProviders
+{
+ ///
+ /// 费用核算单
+ ///
+ public class CostAccountingReport : IReportProvider
+ {
+ public async Task GetDataAsync(ReportContext context)
+ {
+ CostAccountingForm? form = null;
+ switch (context.BusinessType)
+ {
+ case BusinessType.OceanShippingExport:
+ form = await GetOceanShippingExportAsync(context.TenantDb, context.Ids);
+ break;
+ case BusinessType.OceanShippingImport:
+
+ break;
+ default:
+ context.ErrorResult = DataResult.Failed(string.Format(MultiLanguageConst.GetDescription(
+ MultiLanguageConst.BusinessNotSupported), context.BusinessType.GetDescription()));
+ break;
+ }
+
+ if (form != null)
+ {
+ long UserId = long.Parse(context.User.UserId);
+ form.Creator = context.Db.Queryable().Where(x => x.Id == UserId).Select(x => x.UserName).First();
+
+ form.ReceivableRMB = form.Details.FindAll(x => x.Type == FeeType.Receivable && x.Currency == FeeCurrency.RMB_CODE).Sum(x => x.Amount);
+ form.PayableRMB = form.Details.FindAll(x => x.Type == FeeType.Payable && x.Currency == FeeCurrency.RMB_CODE).Sum(x => x.Amount);
+ form.ReceivableUSD = form.Details.FindAll(x => x.Type == FeeType.Receivable && x.Currency == FeeCurrency.USD_CODE).Sum(x => x.Amount);
+ form.PayableUSD = form.Details.FindAll(x => x.Type == FeeType.Payable && x.Currency == FeeCurrency.USD_CODE).Sum(x => x.Amount);
+ form.ReceivableOther = form.Details.FindAll(x => x.Type == FeeType.Receivable && (x.Currency != FeeCurrency.RMB_CODE && x.Currency != FeeCurrency.USD_CODE)).Sum(x => x.Amount);
+ form.PayableOther = form.Details.FindAll(x => x.Type == FeeType.Payable && (x.Currency == FeeCurrency.RMB_CODE && x.Currency != FeeCurrency.USD_CODE)).Sum(x => x.Amount);
+
+ //获取美元汇率
+ var currencyService = context.ServiceProvider.GetRequiredService();
+ var exchange = new ExchangeRate
+ {
+ CurrencyFrom = FeeCurrency.USD_CODE,
+ CurrencyTo = FeeCurrency.RMB_CODE
+ };
+ exchange = (await currencyService.GetExchangeRateAsync(exchange))?.Data;
+
+ form.ExchangeRate = exchange.Rate;
+ form.TotalReceivable = Math.Round(form.ReceivableUSD * form.ExchangeRate, 4, MidpointRounding.ToEven) + form.ReceivableRMB + form.ReceivableOther;
+ form.TotalPayable = Math.Round(form.PayableUSD * form.ExchangeRate, 4, MidpointRounding.ToEven) + form.PayableRMB + form.PayableOther;
+ }
+
+ return form;
+ }
+
+ //获取海运出口打印数据
+ static async Task GetOceanShippingExportAsync(ISqlSugarClient tenantDb, params long[] idArray)
+ {
+ CostAccountingForm form = null;
+ var list = await tenantDb.Queryable().InnerJoin((x, y) => x.BusinessId == y.Id)
+ .Where((x, y) => idArray.Contains(x.Id)
+ //&& x.FeeStatus == FeeStatus.SettlementCompleted
+ ).Select((x, y) => new
+ {
+ x.FeeType,
+ x.FeeName,
+ x.Currency,
+ x.ExchangeRate,
+ x.Amount,
+ x.CustomerName,
+ y.CustomerNo, //业务编号
+ y.AccountDate, //会计期间
+ y.ETA,
+ y.ETD,
+ y.Voyno,
+ y.MBLNO,
+ y.Carrier,
+ y.LoadPort,
+ y.DischargePort,
+ y.CntrTotal, //Volume
+ y.IssueType //放单方式
+ }).ToListAsync();
+
+ if (list.Count == 0)
+ return form;
+
+ var item = list[0];
+ form = new CostAccountingForm
+ {
+ BusinessNo = item.CustomerNo,
+ AccountingPeriod = item.AccountDate,
+ ETA = item.ETA,
+ ETD = item.ETD,
+ Voy = item.Voyno,
+ MBLNo = item.MBLNO,
+ Carrier = item.Carrier,
+ POL = item.LoadPort,
+ POD = item.DischargePort,
+ Volume = item.CntrTotal,
+ ReleaseType = item.IssueType,
+ PrintTime = DateTime.Now,
+ Details = list.Select(x => new CostAccountingDetail
+ {
+ Amount = x.Amount,
+ Currency = x.Currency,
+ CustomerName = x.CustomerName,
+ FeeName = x.FeeName,
+ Type = x.FeeType
+ }).ToList()
+ };
+
+ return form;
+ }
+ }
+}
diff --git a/ds-wms-service/DS.WMS.Core/Info/Method/ClientInfoService.cs b/ds-wms-service/DS.WMS.Core/Info/Method/ClientInfoService.cs
index 509178e6..6a0eb122 100644
--- a/ds-wms-service/DS.WMS.Core/Info/Method/ClientInfoService.cs
+++ b/ds-wms-service/DS.WMS.Core/Info/Method/ClientInfoService.cs
@@ -275,13 +275,15 @@ public class ClientInfoService : ServiceBase, IClientInfoService
if (request.OtherQueryCondition?.ClientTag != null)
{
+ //合并到主查询条件
var props = Array.FindAll(request.OtherQueryCondition.ClientTag.GetType().GetProperties(), x => x.Name.StartsWith("Is") && x.PropertyType == typeof(bool));
+ List list = [];
foreach (var prop in props)
{
object val = prop.Get(request.OtherQueryCondition.ClientTag);
if (val != null && val is bool value && value)
{
- whereList.Add(new ConditionalModel
+ list.Add(new ConditionalModel
{
ConditionalType = ConditionalType.Equal,
FieldName = "ct." + prop.Name,
@@ -289,6 +291,8 @@ public class ClientInfoService : ServiceBase, IClientInfoService
});
}
}
+
+ query = query.Where(list);
}
var result = await query.Select((c, c1, c2, ct) => new ClientInfoRes
diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/TaskService.cs b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/TaskService.cs
index c7757341..78dba382 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/TaskService.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/TaskService.cs
@@ -463,7 +463,7 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
{
BusinessTask task = await GetQuery(request.BusinessId, request.BusinessType, request.TaskType).FirstAsync();
if (task == null)
- return DataResult.FailedWithDesc(nameof(MultiLanguageConst.EmptyData));
+ return DataResult.FailedWithDesc(nameof(MultiLanguageConst.TaskNotExists));
if (task.TaskStatus == TaskStatusEnum.Complete)
return DataResult.FailedWithDesc(nameof(MultiLanguageConst.TaskCompleted));
//if (task.TaskStatus == TaskStatusEnum.Cancel)
@@ -869,16 +869,20 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
if (callback.FlowStatus == FlowStatusEnum.Reject)
{
var task = await GetQuery(callback.BusinessId, callback.BusinessType, callback.AuditType.Value).FirstAsync();
- //创建驳回任务以进行通知
- await CreateTaskAsync(new TaskCreationRequest
+ var request = new TaskCreationRequest
{
BusinessId = callback.BusinessId,
BusinessType = callback.BusinessType,
TaskTypeName = GetRejectedType(callback.AuditType.Value).ToString(),
RecvUserIdList = [task.CreateBy] //通知任务发起人
- });
+ };
+ //创建驳回任务以进行通知
+ await CreateTaskAsync(request);
+
+ //更新任务描述为驳回原因
+ await SetTaskBaseDescription(callback.BusinessId, request.TaskType, callback.RejectReason);
- remark += ";驳回理由:" + callback.RejectReason;
+ remark += ";驳回原因:" + callback.RejectReason;
}
long userId = long.Parse(User.UserId);
diff --git a/ds-wms-service/DS.WMS.Core/Sys/Method/CommonService.cs b/ds-wms-service/DS.WMS.Core/Sys/Method/CommonService.cs
index aee297a0..e1e52b0d 100644
--- a/ds-wms-service/DS.WMS.Core/Sys/Method/CommonService.cs
+++ b/ds-wms-service/DS.WMS.Core/Sys/Method/CommonService.cs
@@ -104,7 +104,7 @@ public class CommonService : ICommonService
public DataResult GetUserInfo()
{
var userId = long.Parse(user.UserId);
- var tenantId = user.GetTenantId();
+ var tenantId = long.Parse(user.TenantId);
var tokenModel = new JwtHelper.JwtTokenModel
{
Uid = user.UserId,
@@ -292,7 +292,7 @@ public class CommonService : ICommonService
}
var userId = long.Parse(user.UserId);
- var tenantId = user.GetTenantId();
+ var tenantId = long.Parse(user.TenantId);
var tokenModel = new JwtHelper.JwtTokenModel
{
@@ -507,7 +507,7 @@ public class CommonService : ICommonService
public async Task> GetClientUserInfo()
{
var userId = long.Parse(user.UserId);
- var tenantId = user.GetTenantId();
+ var tenantId = long.Parse(user.TenantId);
//取第一个机构
var orgRelations = await db.Queryable().Filter(null, true)
.LeftJoin((a, b) => a.OrgId == b.Id)
@@ -526,7 +526,7 @@ public class CommonService : ICommonService
{
Uid = user.UserId,
Name = userInfo.UserName,
- OrgId = user.GetOrgId().ToString(),
+ OrgId = user.OrgId.ToString(),
TenantId = tenantId.ToString(),
TenantName = tenant.Name
};
@@ -544,7 +544,7 @@ public class CommonService : ICommonService
// ClientId = a.ClientId,
IsUseSystem = a.IsUseSystem,
RefreshToken = refreshToken,
- OrgId = user.GetOrgId().ToString(),
+ OrgId = user.OrgId.ToString(),
Tel = a.Tel,
Email = a.Email,
Phone = a.Phone,
@@ -575,7 +575,7 @@ public class CommonService : ICommonService
public DataResult ChangeOrg(string id)
{
var userId = user.UserId;
- var tenantId = user.GetTenantId();
+ var tenantId = long.Parse(user.TenantId);
var sysUser = db.Queryable().First(x => x.Id == long.Parse(userId));
if (sysUser.IsNull())
{
@@ -614,7 +614,7 @@ public class CommonService : ICommonService
public async Task>> GetClientUserPermissionByToken()
{
List list = new List();
- _logger.LogInformation("GetClientUserPermissionByToken临时日志:user.UserId={userId},user.TenantId={TenantId},user.GetTenantId={GetTenantId}", user.UserId, user.TenantId, user.GetTenantId());
+ _logger.LogInformation("GetClientUserPermissionByToken临时日志:user.UserId={userId},user.TenantId={TenantId}", user.UserId, user.TenantId);
var userId = long.Parse(user.UserId);
@@ -1447,7 +1447,7 @@ public class CommonService : ICommonService
var userInfo = db.Queryable().First(x => x.Id == long.Parse(user.UserId));
if (userInfo.UserType == 0)
{
- return db.Queryable(); //超级管理员特权
+ return tenantDb.Queryable(); //超级管理员特权
}
var moduleName = typeof(T).Name.ToLower();
@@ -1461,18 +1461,18 @@ public class CommonService : ICommonService
if ((long)rule.VisibleTemplateId == 0)
{
- return db.Queryable();
+ return tenantDb.Queryable();
}
var ruleInfo = tenantDb.Queryable().First(x => x.Id == (long)rule.VisibleTemplateId);
if (ruleInfo.DataRules.IsNull())
{
- return db.Queryable();
+ return tenantDb.Queryable();
}
if (ruleInfo.RuleScope == "all")
{
- return db.Queryable().ClearFilter();
+ return tenantDb.Queryable().ClearFilter();
}
if (ruleInfo.RuleScope == "none")
{
@@ -1488,18 +1488,30 @@ public class CommonService : ICommonService
}
if (ruleInfo.RuleScope == "self_dept")
{
+ if (String.IsNullOrEmpty(userInfo.DeptName))
+ {
+ SqlSugar.Check.ExceptionEasy("NO Operation", "当前员工没有默认归属部门!");
+ }
var deptUsers = db.Queryable().Where(x => x.DeptId == userInfo.DeptId).Select(x => x.Id).ToList();
ruleInfo.DataRules = ruleInfo.DataRules.Replace(DataRuleConst.LoginDept, string.Join(",", deptUsers));
}
if (ruleInfo.RuleScope == "select_org")
{
- var orgUsers = db.Queryable().Where(x => x.DefaultOrgId == userInfo.DefaultOrgId).Select(x => x.Id).ToList();
- ruleInfo.DataRules = ruleInfo.DataRules.Replace(DataRuleConst.LoginDept, string.Join(",", orgUsers));
+ //var orgUsers = db.Queryable().Where(x => x.DefaultOrgId == userInfo.DefaultOrgId).Select(x => x.Id).ToList();
+ //ruleInfo.DataRules = ruleInfo.DataRules.Replace(DataRuleConst.LoginDept, string.Join(",", orgUsers));
var conditions1 = ruleInfo.DataRules.ConvertSqlSugarExpression();
var conditionalModels1 =
db.ConfigQuery.Context.Utilities.JsonToConditionalModels(
JsonConvert.SerializeObject(conditions1));
- return db.Queryable().ClearFilter().Where(conditionalModels1);
+ return tenantDb.Queryable().ClearFilter().Where(conditionalModels1);
+ }
+ if (ruleInfo.RuleScope == "select_user")
+ {
+ var conditions2 = ruleInfo.DataRules.ConvertSqlSugarExpression();
+ var conditionalModels2 =
+ db.ConfigQuery.Context.Utilities.JsonToConditionalModels(
+ JsonConvert.SerializeObject(conditions2));
+ return tenantDb.Queryable().ClearFilter().Where(conditionalModels2);
}
#endregion
@@ -1509,7 +1521,7 @@ public class CommonService : ICommonService
var conditionalModels =
db.ConfigQuery.Context.Utilities.JsonToConditionalModels(
JsonConvert.SerializeObject(conditions));
- return db.Queryable().Where(conditionalModels);
+ return tenantDb.Queryable().Where(conditionalModels);
}
#region 获取数据库表及字段属性
diff --git a/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageBaseService.cs b/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageBaseService.cs
index 269956ad..b7196c7d 100644
--- a/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageBaseService.cs
+++ b/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageBaseService.cs
@@ -7,9 +7,11 @@ using DS.Module.DjyServiceStatus;
using DS.Module.SqlSugar;
using DS.Module.UserModule;
using DS.WMS.Core.Code.Dtos;
+using DS.WMS.Core.Flow.Entity;
using DS.WMS.Core.Map.Dtos;
using DS.WMS.Core.Op.Dtos;
using DS.WMS.Core.Op.Entity;
+using DS.WMS.Core.Op.Entity.TaskInteraction;
using DS.WMS.Core.Op.Interface;
using DS.WMS.Core.TaskPlat.Dtos;
using DS.WMS.Core.TaskPlat.Entity;
@@ -97,6 +99,8 @@ namespace DS.WMS.Core.TaskPlat.Method
//任务不考虑OrgId,这里去掉
tenantDb.QueryFilter.Clear();
+ var masterDb = serviceProvider.GetRequiredService();
+
try
{
var taskList = await tenantDb.Queryable().Where(x => taskIds.Contains(x.Id)).ToListAsync(x => new
@@ -137,8 +141,12 @@ namespace DS.WMS.Core.TaskPlat.Method
});
allocationList.AddRange(allots);
}
+ // 用于更新工作流的任务
+ var userIdStr = string.Join(',', userInfo.Select(x => x.RecvUserId));
+ var businessIdList = taskList.Where(x => x.OUT_BS_NO != null && x.OUT_BS_NO != 0).Select(x => x.OUT_BS_NO).Distinct().ToList();
- await tenantDb.Ado.BeginTranAsync();
+ //await tenantDb.Ado.BeginTranAsync();
+ await tenantDb.AsTenant().BeginTranAsync();
var idList = await tenantDb.Queryable().Where(x => taskIdList.Contains(x.TaskId)).Select(x => x.Id).ToListAsync();
await tenantDb.Deleteable(x => idList.Contains(x.Id)).ExecuteCommandAsync();
@@ -149,12 +157,40 @@ namespace DS.WMS.Core.TaskPlat.Method
.SetColumns(x => x.IS_PUBLIC == 0)
.Where(x => taskIdList.Contains(x.Id))
.ExecuteCommandAsync();
+ foreach (var item in taskList)
+ {
+ if (item.OUT_BS_NO is not null or 0 && Enum.TryParse(typeof(TaskBaseTypeEnum), item.TASK_TYPE, out object? taskType))
+ {
+ await tenantDb.Updateable()
+ .SetColumns(x => x.RecvUsers == userIdStr)
+ .Where(x => x.BusinessId == item.OUT_BS_NO && x.TaskType == (TaskBaseTypeEnum)taskType)
+ .ExecuteCommandAsync();
+
+ var id = await masterDb.Queryable()
+ .ClearFilter(typeof(ITenantId))
+ .Where(y => y.BusinessId == item.OUT_BS_NO && y.AuditType == (TaskBaseTypeEnum)taskType)
+ .OrderByDescending(y => y.Id)
+ .Select(y => y.Id)
+ .FirstAsync();
+ if (id != 0)
+ {
+ await masterDb.Updateable()
+ .SetColumns(x => x.MakerList == userIdStr)
+ .Where(x => x.Id == id)
+ .ExecuteCommandAsync();
+ }
+ }
+ }
- await tenantDb.Ado.CommitTranAsync();
+
+
+ //await tenantDb.Ado.CommitTranAsync();
+ await tenantDb.AsTenant().CommitTranAsync();
}
catch (Exception)
{
- await tenantDb.Ado.RollbackTranAsync();
+ //await tenantDb.Ado.RollbackTranAsync();
+ await tenantDb.AsTenant().RollbackTranAsync();
throw;
}
}
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 e3917e52..fb708220 100644
--- a/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageService.cs
+++ b/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageService.cs
@@ -260,14 +260,14 @@ namespace DS.WMS.Core.TaskPlat.Method
logger.LogInformation("批次={no} 接收到创建任务报文 报文={msg}", batchNo, JsonConvert.SerializeObject(info));
SqlSugarScopeProvider tenantDb = saasDbService.GetBizDbScopeById(user.TenantId);
- //var sql = tenantDb.Queryable().Where(x => x.Id > 232 ).ToSqlString();
- //var a = user.UserId;
- //var aa = user.TenantId;
- //var a343 = user.GetTenantId();
- //var sfdfd = user.TenantName;
- //var b = user.GetOrgId();
- //var b232 = user.OrgId;
+ // 人员信息测试用
+ //var a1 = user.UserId;
+ //var b1 = user.UserName;
+ //var c1 = user.TenantId;
+ //var d1 = user.TenantName;
+ //var e1 = user.OrgId;
+ //var sql = tenantDb.Queryable().Where(x => x.Id > 232).ToSqlString();
TaskBaseInfo taskInfo = null;
@@ -2613,6 +2613,12 @@ namespace DS.WMS.Core.TaskPlat.Method
portLoadTaskIdList = temp.Select(x => x.TASK_ID).ToArray();
}
}
+ //// 下属任务统计
+ //var underTaskQueryable = tenantDb.Queryable()
+ // .LeftJoin((t, a) => t.Id == a.TaskId)
+ // .LeftJoin((t, a, s) => t.OUT_BS_NO == s.Id);
+
+
//任务列表分组统计
var queryable = tenantDb.Queryable()
@@ -3099,7 +3105,19 @@ namespace DS.WMS.Core.TaskPlat.Method
///
public async Task TestTaskFlow(string taskType, long taskId, int testType)
{
+
var tenantDb = saasDbService.GetBizDbScopeById(user.TenantId);
+
+
+ // 人员信息测试用
+ var a1 = user.UserId;
+ var b1 = user.UserName;
+ var c1 = user.TenantId;
+ var d1 = user.TenantName;
+ var e1 = user.OrgId;
+ var sql = tenantDb.Queryable().Where(x => x.Id > 232).ToSqlString();
+
+
var t11 = tenantDb.ContextID;
switch (testType)
{
diff --git a/ds-wms-service/DS.WMS.FeeApi/Controllers/FeeRecordController.cs b/ds-wms-service/DS.WMS.FeeApi/Controllers/FeeRecordController.cs
index cdc86f1c..f73793fc 100644
--- a/ds-wms-service/DS.WMS.FeeApi/Controllers/FeeRecordController.cs
+++ b/ds-wms-service/DS.WMS.FeeApi/Controllers/FeeRecordController.cs
@@ -3,6 +3,7 @@ using DS.Module.Core.Data;
using DS.WMS.Core.Fee.Dtos;
using DS.WMS.Core.Fee.Entity;
using DS.WMS.Core.Fee.Interface;
+using DS.WMS.Core.Fee.Method.ReportProviders;
using DS.WMS.Core.Op.Entity;
using Microsoft.AspNetCore.Mvc;
@@ -204,12 +205,16 @@ namespace DS.WMS.FeeApi.Controllers
/// 费用记录ID
///
[HttpPost, Route("GetPrintInfo")]
- public async Task> GetPrintInfoAsync(IdModel model)
+ public async Task> GetPrintInfoAsync(IdModel model)
{
if (model == null || model.Ids?.Length == 0)
- return DataResult.Failed("参数无效", MultiLanguageConst.IllegalRequest);
+ return DataResult.Failed("参数无效", MultiLanguageConst.IllegalRequest);
- return await _feeService.GetPrintInfoAsync((BusinessType)model.BusinessType.Value, model.Ids);
+ string providerName = model.Value?.ToString();
+ if (string.IsNullOrEmpty(providerName))
+ providerName = typeof(CostAccountingReport).AssemblyQualifiedName;
+
+ return await _feeService.GetPrintInfoAsync(providerName, (BusinessType)model.BusinessType.Value, model.Ids);
}
///
diff --git a/ds-wms-service/DS.WMS.FeeApi/Properties/PublishProfiles/FolderProfile1.pubxml.user b/ds-wms-service/DS.WMS.FeeApi/Properties/PublishProfiles/FolderProfile1.pubxml.user
index cc12734c..e0b095ab 100644
--- a/ds-wms-service/DS.WMS.FeeApi/Properties/PublishProfiles/FolderProfile1.pubxml.user
+++ b/ds-wms-service/DS.WMS.FeeApi/Properties/PublishProfiles/FolderProfile1.pubxml.user
@@ -5,7 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<_PublishTargetUrl>D:\Publish\DS8\FeeApi
- True|2024-09-13T02:44:56.1241214Z||;False|2024-09-13T10:44:26.6088271+08:00||;False|2024-09-13T10:44:06.1615137+08:00||;False|2024-09-13T10:43:19.2432517+08:00||;False|2024-09-13T10:38:18.1663387+08:00||;True|2024-09-06T18:49:17.9435308+08:00||;True|2024-09-06T17:01:39.6646353+08:00||;True|2024-09-06T10:27:36.9990456+08:00||;True|2024-09-06T09:48:23.4236094+08:00||;True|2024-09-05T13:57:23.8452431+08:00||;True|2024-09-05T10:21:34.6675149+08:00||;True|2024-09-05T09:12:44.5610882+08:00||;True|2024-09-04T10:07:38.3707398+08:00||;True|2024-09-04T09:52:47.0574599+08:00||;True|2024-09-03T16:41:23.7516960+08:00||;True|2024-09-03T15:22:31.8718097+08:00||;True|2024-09-03T10:01:09.7656702+08:00||;False|2024-09-03T09:46:46.8956531+08:00||;True|2024-09-02T17:07:41.0268500+08:00||;True|2024-09-02T13:50:22.0203254+08:00||;True|2024-09-02T13:34:23.3441546+08:00||;True|2024-08-30T11:25:14.7431645+08:00||;True|2024-08-29T16:38:26.3491372+08:00||;True|2024-08-29T16:32:31.8580864+08:00||;False|2024-08-29T16:30:41.4763198+08:00||;True|2024-08-09T09:18:05.8484398+08:00||;True|2024-08-09T08:45:38.7858906+08:00||;True|2024-08-05T11:37:07.3133020+08:00||;True|2024-07-24T16:45:58.2272340+08:00||;True|2024-07-24T15:48:52.0128987+08:00||;True|2024-07-23T17:41:01.7494842+08:00||;True|2024-07-23T17:25:11.8773492+08:00||;True|2024-07-23T17:07:16.5460273+08:00||;True|2024-07-22T08:59:23.3235603+08:00||;True|2024-07-12T17:35:11.1225017+08:00||;True|2024-07-11T11:40:17.3581147+08:00||;True|2024-07-04T17:20:50.0175739+08:00||;True|2024-07-02T11:26:14.2092751+08:00||;True|2024-07-02T09:21:51.3513605+08:00||;True|2024-07-01T17:47:56.0407256+08:00||;True|2024-07-01T16:42:55.7374984+08:00||;True|2024-07-01T15:49:58.9266967+08:00||;True|2024-07-01T14:35:48.1117178+08:00||;True|2024-07-01T11:41:52.2969338+08:00||;True|2024-07-01T11:13:02.6561160+08:00||;True|2024-06-28T15:28:43.1470725+08:00||;True|2024-06-28T15:16:20.1999596+08:00||;True|2024-06-28T15:14:56.2534743+08:00||;True|2024-06-28T15:02:41.3033806+08:00||;True|2024-06-28T13:37:28.2462742+08:00||;True|2024-06-28T11:06:30.7400535+08:00||;True|2024-06-26T15:24:17.1939896+08:00||;True|2024-06-26T14:33:06.3530466+08:00||;True|2024-06-26T09:45:24.4055568+08:00||;True|2024-06-25T15:45:57.6052473+08:00||;True|2024-06-25T10:17:17.7408916+08:00||;False|2024-06-25T10:16:23.5639654+08:00||;False|2024-06-25T10:15:28.3857721+08:00||;False|2024-06-25T10:10:59.5536995+08:00||;False|2024-06-25T10:07:10.4050937+08:00||;True|2024-06-24T15:22:18.2672769+08:00||;True|2024-06-24T15:01:04.8153621+08:00||;False|2024-06-24T15:00:29.9618848+08:00||;True|2024-06-24T14:07:19.9401637+08:00||;False|2024-06-24T14:06:36.1250570+08:00||;True|2024-06-21T15:13:57.4273503+08:00||;True|2024-06-21T15:04:37.8218608+08:00||;True|2024-06-21T14:12:48.0266638+08:00||;True|2024-06-21T13:52:30.0950155+08:00||;True|2024-06-20T11:02:42.9508506+08:00||;True|2024-06-19T11:43:01.1899282+08:00||;True|2024-06-19T11:23:01.2938141+08:00||;True|2024-06-18T08:51:21.6222152+08:00||;True|2024-06-17T09:20:35.0804494+08:00||;True|2024-06-17T08:41:58.1319484+08:00||;True|2024-06-17T08:38:09.0137102+08:00||;True|2024-06-14T15:19:45.7395180+08:00||;True|2024-06-14T14:38:49.7094421+08:00||;True|2024-06-14T14:27:39.2815370+08:00||;True|2024-06-14T09:42:21.5397525+08:00||;True|2024-06-13T16:03:39.8475642+08:00||;True|2024-06-13T14:12:10.1725629+08:00||;True|2024-06-13T10:46:52.6971321+08:00||;True|2024-06-11T17:03:44.8328978+08:00||;True|2024-06-06T17:41:51.1810315+08:00||;True|2024-06-06T10:57:27.8273617+08:00||;True|2024-06-04T14:23:21.3742450+08:00||;True|2024-05-31T17:01:42.4717460+08:00||;True|2024-05-31T13:56:03.0734064+08:00||;True|2024-05-31T08:45:52.3549394+08:00||;True|2024-05-30T17:16:32.8907958+08:00||;True|2024-05-30T16:18:06.9957657+08:00||;True|2024-05-29T15:44:18.4051203+08:00||;True|2024-05-29T15:11:03.1518632+08:00||;True|2024-05-29T14:52:26.0823495+08:00||;True|2024-05-29T11:17:20.2245101+08:00||;True|2024-05-29T08:36:28.9569161+08:00||;True|2024-05-28T08:44:31.4427261+08:00||;False|2024-05-28T08:44:02.5254826+08:00||;True|2024-05-27T15:16:32.9413631+08:00||;
+ True|2024-09-13T06:31:12.4598160Z||;True|2024-09-13T10:44:56.1241214+08:00||;False|2024-09-13T10:44:26.6088271+08:00||;False|2024-09-13T10:44:06.1615137+08:00||;False|2024-09-13T10:43:19.2432517+08:00||;False|2024-09-13T10:38:18.1663387+08:00||;True|2024-09-06T18:49:17.9435308+08:00||;True|2024-09-06T17:01:39.6646353+08:00||;True|2024-09-06T10:27:36.9990456+08:00||;True|2024-09-06T09:48:23.4236094+08:00||;True|2024-09-05T13:57:23.8452431+08:00||;True|2024-09-05T10:21:34.6675149+08:00||;True|2024-09-05T09:12:44.5610882+08:00||;True|2024-09-04T10:07:38.3707398+08:00||;True|2024-09-04T09:52:47.0574599+08:00||;True|2024-09-03T16:41:23.7516960+08:00||;True|2024-09-03T15:22:31.8718097+08:00||;True|2024-09-03T10:01:09.7656702+08:00||;False|2024-09-03T09:46:46.8956531+08:00||;True|2024-09-02T17:07:41.0268500+08:00||;True|2024-09-02T13:50:22.0203254+08:00||;True|2024-09-02T13:34:23.3441546+08:00||;True|2024-08-30T11:25:14.7431645+08:00||;True|2024-08-29T16:38:26.3491372+08:00||;True|2024-08-29T16:32:31.8580864+08:00||;False|2024-08-29T16:30:41.4763198+08:00||;True|2024-08-09T09:18:05.8484398+08:00||;True|2024-08-09T08:45:38.7858906+08:00||;True|2024-08-05T11:37:07.3133020+08:00||;True|2024-07-24T16:45:58.2272340+08:00||;True|2024-07-24T15:48:52.0128987+08:00||;True|2024-07-23T17:41:01.7494842+08:00||;True|2024-07-23T17:25:11.8773492+08:00||;True|2024-07-23T17:07:16.5460273+08:00||;True|2024-07-22T08:59:23.3235603+08:00||;True|2024-07-12T17:35:11.1225017+08:00||;True|2024-07-11T11:40:17.3581147+08:00||;True|2024-07-04T17:20:50.0175739+08:00||;True|2024-07-02T11:26:14.2092751+08:00||;True|2024-07-02T09:21:51.3513605+08:00||;True|2024-07-01T17:47:56.0407256+08:00||;True|2024-07-01T16:42:55.7374984+08:00||;True|2024-07-01T15:49:58.9266967+08:00||;True|2024-07-01T14:35:48.1117178+08:00||;True|2024-07-01T11:41:52.2969338+08:00||;True|2024-07-01T11:13:02.6561160+08:00||;True|2024-06-28T15:28:43.1470725+08:00||;True|2024-06-28T15:16:20.1999596+08:00||;True|2024-06-28T15:14:56.2534743+08:00||;True|2024-06-28T15:02:41.3033806+08:00||;True|2024-06-28T13:37:28.2462742+08:00||;True|2024-06-28T11:06:30.7400535+08:00||;True|2024-06-26T15:24:17.1939896+08:00||;True|2024-06-26T14:33:06.3530466+08:00||;True|2024-06-26T09:45:24.4055568+08:00||;True|2024-06-25T15:45:57.6052473+08:00||;True|2024-06-25T10:17:17.7408916+08:00||;False|2024-06-25T10:16:23.5639654+08:00||;False|2024-06-25T10:15:28.3857721+08:00||;False|2024-06-25T10:10:59.5536995+08:00||;False|2024-06-25T10:07:10.4050937+08:00||;True|2024-06-24T15:22:18.2672769+08:00||;True|2024-06-24T15:01:04.8153621+08:00||;False|2024-06-24T15:00:29.9618848+08:00||;True|2024-06-24T14:07:19.9401637+08:00||;False|2024-06-24T14:06:36.1250570+08:00||;True|2024-06-21T15:13:57.4273503+08:00||;True|2024-06-21T15:04:37.8218608+08:00||;True|2024-06-21T14:12:48.0266638+08:00||;True|2024-06-21T13:52:30.0950155+08:00||;True|2024-06-20T11:02:42.9508506+08:00||;True|2024-06-19T11:43:01.1899282+08:00||;True|2024-06-19T11:23:01.2938141+08:00||;True|2024-06-18T08:51:21.6222152+08:00||;True|2024-06-17T09:20:35.0804494+08:00||;True|2024-06-17T08:41:58.1319484+08:00||;True|2024-06-17T08:38:09.0137102+08:00||;True|2024-06-14T15:19:45.7395180+08:00||;True|2024-06-14T14:38:49.7094421+08:00||;True|2024-06-14T14:27:39.2815370+08:00||;True|2024-06-14T09:42:21.5397525+08:00||;True|2024-06-13T16:03:39.8475642+08:00||;True|2024-06-13T14:12:10.1725629+08:00||;True|2024-06-13T10:46:52.6971321+08:00||;True|2024-06-11T17:03:44.8328978+08:00||;True|2024-06-06T17:41:51.1810315+08:00||;True|2024-06-06T10:57:27.8273617+08:00||;True|2024-06-04T14:23:21.3742450+08:00||;True|2024-05-31T17:01:42.4717460+08:00||;True|2024-05-31T13:56:03.0734064+08:00||;True|2024-05-31T08:45:52.3549394+08:00||;True|2024-05-30T17:16:32.8907958+08:00||;True|2024-05-30T16:18:06.9957657+08:00||;True|2024-05-29T15:44:18.4051203+08:00||;True|2024-05-29T15:11:03.1518632+08:00||;True|2024-05-29T14:52:26.0823495+08:00||;True|2024-05-29T11:17:20.2245101+08:00||;True|2024-05-29T08:36:28.9569161+08:00||;True|2024-05-28T08:44:31.4427261+08:00||;False|2024-05-28T08:44:02.5254826+08:00||;
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.MainApi/Controllers/CodeDataRuleTemplateController.cs b/ds-wms-service/DS.WMS.MainApi/Controllers/CodeDataRuleTemplateController.cs
index 3f2d3304..f8b3a916 100644
--- a/ds-wms-service/DS.WMS.MainApi/Controllers/CodeDataRuleTemplateController.cs
+++ b/ds-wms-service/DS.WMS.MainApi/Controllers/CodeDataRuleTemplateController.cs
@@ -87,4 +87,17 @@ public class CodeDataRuleTemplateController : ApiController
var res =await _invokeService.BatchDelDataRuleTemplate(req);
return res;
}
+
+ ///
+ /// 批量复制
+ ///
+ /// Ids
+ ///
+ [HttpPost]
+ [Route("BatchCopyDataRuleTemplate")]
+ public async Task BatchCopyDataRuleTemplate([FromBody] IdModel req)
+ {
+ var res = await _invokeService.BatchCopyDataRuleTemplate(req);
+ return res;
+ }
}
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.MainApi/DS.WMS.MainApi.csproj.user b/ds-wms-service/DS.WMS.MainApi/DS.WMS.MainApi.csproj.user
index 996c16b7..f2a959bf 100644
--- a/ds-wms-service/DS.WMS.MainApi/DS.WMS.MainApi.csproj.user
+++ b/ds-wms-service/DS.WMS.MainApi/DS.WMS.MainApi.csproj.user
@@ -1,6 +1,6 @@
- D:\Code\DS\ds8-solution-pro\ds-wms-service\DS.WMS.MainApi\Properties\PublishProfiles\FolderProfile.pubxml
+ D:\Code\ds8-solution-pro\ds-wms-service\DS.WMS.MainApi\Properties\PublishProfiles\FolderProfile.pubxml
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.OpApi/DS.WMS.OpApi.csproj.user b/ds-wms-service/DS.WMS.OpApi/DS.WMS.OpApi.csproj.user
index da141c5a..fb7be066 100644
--- a/ds-wms-service/DS.WMS.OpApi/DS.WMS.OpApi.csproj.user
+++ b/ds-wms-service/DS.WMS.OpApi/DS.WMS.OpApi.csproj.user
@@ -1,7 +1,7 @@
- E:\MyCode\Dongsheng8\ds-wms-service\DS.WMS.OpApi\Properties\PublishProfiles\FolderProfile.pubxml
+ D:\Source\Repos\DS8\ds-wms-service\DS.WMS.OpApi\Properties\PublishProfiles\FolderProfile.pubxml
MvcControllerEmptyScaffolder
root/Common/MVC/Controller