From 01ee01d139a8ea9369fda84baee41d5ee9e7e437 Mon Sep 17 00:00:00 2001
From: zhangxiaofeng <1939543722@qq.com>
Date: Fri, 13 Sep 2024 11:06:42 +0800
Subject: [PATCH 1/5] =?UTF-8?q?AspNetUser=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../DS.Module.Core/Extensions/Extensions.cs | 17 +
.../DS.Module.SqlSugar/SqlsugarHelper.cs | 2 +-
.../DS.Module.SqlSugar/SqlsugarInstall.cs | 4 +-
.../DS.Module.UserModule/AspNetUser.cs | 447 ++----------------
ds-wms-service/DS.Module.UserModule/IUser.cs | 35 +-
.../Code/Method/CodeFormCopyService.cs | 2 +-
.../Code/Method/CodeFormSetService.cs | 2 +-
.../Code/Method/CodeQuerySetService.cs | 2 +-
.../DS.WMS.Core/Sys/Method/CommonService.cs | 14 +-
.../TaskPlat/Method/TaskManageService.cs | 12 +
10 files changed, 92 insertions(+), 445 deletions(-)
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.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..49aa37b0 100644
--- a/ds-wms-service/DS.Module.SqlSugar/SqlsugarInstall.cs
+++ b/ds-wms-service/DS.Module.SqlSugar/SqlsugarInstall.cs
@@ -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..6576a630 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,76 @@ public class AspNetUser : IUser
_accessor = accessor;
}
- public UserInfo UserInfo => GetUserInfo();
+ public string UserId => GetClaimValueByType("jti").FirstOrDefault() ?? "90001";
+ public string UserName => GetClaimValueByType("UserName").FirstOrDefault() ?? "IUser获取UserName意外为空";
+ public string TenantId => GetClaimValueByType("TenantId").FirstOrDefault() ?? "90002";
+ public string TenantName => GetClaimValueByType("TenantName").FirstOrDefault() ?? "IUser获取TenantName意外为空";
+ public long OrgId => GetClaimValueByType("OrgId").FirstOrDefault()?.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
- {
- get
- {
- if (_userId == null)
- {
- var claimValue = GetClaimValueByType("jti").FirstOrDefault();
- _userId = claimValue != null ? claimValue.ObjToString() : GetUserId().ToString();
- }
- return _userId;
- }
- set
- {
- _userId = value;
- }
- }
- private string _userName;
- public string UserName
+ public List GetClaimValueByType(string claimType)
{
- get
- {
- if (_userName == null)
- {
- var claimValue = GetClaimValueByType("UserName").FirstOrDefault();
- _userName = claimValue != null ? claimValue.ObjToString() : "管理员";
- }
- return _userName;
- }
- set
- {
- _userName = value;
- }
+ return Claims.Where(x => x.Type == claimType).Select(x => x.Value).ToList();
}
- private string _tenantName;
- public string TenantName
+
+ private List? _claims;
+ public List Claims
{
get
{
- if (_tenantName == null)
+ if (_claims == null || _claims.Count == 0)
{
- var claimValue = GetClaimValueByType("TenantName").FirstOrDefault();
- _tenantName = claimValue != null ? claimValue.ObjToString() : "系统租户";
+ _claims = GetClaimsIdentity().ToList();
}
- return _tenantName;
- }
- set
- {
- _tenantName = value;
+ return _claims;
}
}
- 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))
+ if (!IsAuthenticated())
{
- return 5;
- }
+ var token = GetToken();
- 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 (_tenantId == null)
+ var jwtHandler = new JwtSecurityTokenHandler();
+ if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token))
{
- var tenantIdClaim = GetClaimValueByType("TenantId").FirstOrDefault();
- _tenantId = tenantIdClaim != null ? tenantIdClaim.ObjToString() : GetTenantId().ToString();
+ JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
+ return jwtToken.Claims;
}
- return _tenantId;
- }
- set
- {
- _tenantId = value;
}
- }
- // public string CompanyId => GetClaimValueByType("CompanyId").FirstOrDefault().ObjToString();
- private string _companyId;
+ var claims = _accessor.HttpContext.User.Claims.ToList() ?? [];
- public string CompanyId
- {
- get
- {
- if (_companyId == null)
- {
- var companyIdClaim = GetClaimValueByType("CompanyId").FirstOrDefault();
- _companyId = companyIdClaim != null ? companyIdClaim.ObjToString() : "东胜软件";
- }
- return _companyId;
- }
- set
- {
- _companyId = value;
- }
- }
-
- // 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;
- }
+ // 如果有从Claims中获取HttpHeader的需求,把这里放开
+ //var headers = _accessor.HttpContext.Request.Headers;
+ //foreach (var header in headers)
+ //{
+ // claims.Add(new Claim(header.Key, header.Value));
+ //}
+ return claims;
}
-
- public UserInfo GetUserInfo()
+ public bool IsAuthenticated()
{
- 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;
+ return _accessor.HttpContext?.User?.Identity?.IsAuthenticated ?? false;
}
-
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))
+ var token = _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", "");
+ if (!string.IsNullOrWhiteSpace(token))
{
- return authorizationHeader.Split(" ").Last();
+ return token;
}
+ return "IUser通过GetToken()获取Token意外为空";
- return request.Headers["X-Token"].FirstOrDefault()
- ?? request.Query["Token"].FirstOrDefault()
- ?? request.Cookies["Token"]
- ?? "东胜软件";
+ //有需要再返回
+ //return _accessor.HttpContext?.Request.Headers["X-Token"].FirstOrDefault()
+ // ?? _accessor.HttpContext?.Request.Query["Token"].FirstOrDefault()
+ // ?? _accessor.HttpContext?.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)
- {
- claims.AddRange(user.Claims);
- }
-
- 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();
- }
-
- #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..ed231f8b 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();
-
+ List GetClaimValueByType(string claimType);
+
///
- /// 获取Token
+ /// 返回当前用户是否已经过认证
///
- ///
- string GetToken();
+ bool IsAuthenticated();
}
\ No newline at end of file
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/Sys/Method/CommonService.cs b/ds-wms-service/DS.WMS.Core/Sys/Method/CommonService.cs
index aee297a0..3b0eed1c 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);
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..b68d7cc9 100644
--- a/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageService.cs
+++ b/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageService.cs
@@ -3099,7 +3099,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)
{
From 8bc2067ef967b16fffbfc2495881ad5e4cebd5ba Mon Sep 17 00:00:00 2001
From: zhangxiaofeng <1939543722@qq.com>
Date: Fri, 13 Sep 2024 13:31:32 +0800
Subject: [PATCH 2/5] =?UTF-8?q?ApiUserFilter=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../DS.Module.Core/Filters/ApiUserFilter.cs | 34 +++++++++++++------
.../DS.Module.UserModule/AspNetUser.cs | 14 ++++----
ds-wms-service/DS.Module.UserModule/IUser.cs | 2 +-
.../TaskPlat/Method/TaskManageService.cs | 16 ++++-----
4 files changed, 40 insertions(+), 26 deletions(-)
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.UserModule/AspNetUser.cs b/ds-wms-service/DS.Module.UserModule/AspNetUser.cs
index 6576a630..9f42c0f4 100644
--- a/ds-wms-service/DS.Module.UserModule/AspNetUser.cs
+++ b/ds-wms-service/DS.Module.UserModule/AspNetUser.cs
@@ -14,18 +14,18 @@ public class AspNetUser : IUser
_accessor = accessor;
}
- public string UserId => GetClaimValueByType("jti").FirstOrDefault() ?? "90001";
- public string UserName => GetClaimValueByType("UserName").FirstOrDefault() ?? "IUser获取UserName意外为空";
- public string TenantId => GetClaimValueByType("TenantId").FirstOrDefault() ?? "90002";
- public string TenantName => GetClaimValueByType("TenantName").FirstOrDefault() ?? "IUser获取TenantName意外为空";
- public long OrgId => GetClaimValueByType("OrgId").FirstOrDefault()?.ObjToLong() ?? 90003;
+ 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 List GetClaimValueByType(string claimType)
+ public string? GetClaimValueByType(string claimType)
{
- return Claims.Where(x => x.Type == claimType).Select(x => x.Value).ToList();
+ return Claims.Where(x => x.Type == claimType).Select(x => x.Value).FirstOrDefault();
}
private List? _claims;
diff --git a/ds-wms-service/DS.Module.UserModule/IUser.cs b/ds-wms-service/DS.Module.UserModule/IUser.cs
index ed231f8b..fc97627f 100644
--- a/ds-wms-service/DS.Module.UserModule/IUser.cs
+++ b/ds-wms-service/DS.Module.UserModule/IUser.cs
@@ -37,7 +37,7 @@ public interface IUser
///
/// 根据Claim类型返回Claim的值
///
- List GetClaimValueByType(string claimType);
+ string? GetClaimValueByType(string claimType);
///
/// 返回当前用户是否已经过认证
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 b68d7cc9..00f5d2d5 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;
From 20fcfca0e2da5278fe97c3146f8ff5b3491539fb Mon Sep 17 00:00:00 2001
From: cjy
Date: Fri, 13 Sep 2024 14:44:22 +0800
Subject: [PATCH 3/5] =?UTF-8?q?=E6=8D=A2Token=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../DS.Module.UserModule/AspNetUser.cs | 35 ++++++-------------
.../DS.Module.UserModule/UserModuleInstall.cs | 1 +
.../Code/Method/CodeSequenceService.cs | 2 +-
3 files changed, 13 insertions(+), 25 deletions(-)
diff --git a/ds-wms-service/DS.Module.UserModule/AspNetUser.cs b/ds-wms-service/DS.Module.UserModule/AspNetUser.cs
index 9f42c0f4..b2af5b7d 100644
--- a/ds-wms-service/DS.Module.UserModule/AspNetUser.cs
+++ b/ds-wms-service/DS.Module.UserModule/AspNetUser.cs
@@ -33,39 +33,26 @@ public class AspNetUser : IUser
{
get
{
- if (_claims == null || _claims.Count == 0)
- {
- _claims = GetClaimsIdentity().ToList();
- }
- return _claims;
+ return GetClaimsIdentity().ToList();
}
}
IEnumerable GetClaimsIdentity()
{
if (_accessor.HttpContext == null) return ArraySegment.Empty;
+
+ var token = GetToken();
- if (!IsAuthenticated())
+ var jwtHandler = new JwtSecurityTokenHandler();
+ if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token))
{
- var token = GetToken();
-
- var jwtHandler = new JwtSecurityTokenHandler();
- if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token))
- {
- JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
- return jwtToken.Claims;
- }
+ JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
+ return jwtToken.Claims;
+ }
+ else
+ {
+ return ArraySegment.Empty;
}
-
- var claims = _accessor.HttpContext.User.Claims.ToList() ?? [];
-
- // 如果有从Claims中获取HttpHeader的需求,把这里放开
- //var headers = _accessor.HttpContext.Request.Headers;
- //foreach (var header in headers)
- //{
- // claims.Add(new Claim(header.Key, header.Value));
- //}
- return claims;
}
public bool IsAuthenticated()
{
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/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);
}
From ff0a271a64e9a034566ba5b74e9fe1d58294b8b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B5=87=E6=96=87=E9=BE=99?=
Date: Fri, 13 Sep 2024 16:03:01 +0800
Subject: [PATCH 4/5] =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E4=BB=BB=E5=8A=A1?=
=?UTF-8?q?=E9=A9=B3=E5=9B=9E=E6=97=B6=E6=9B=B4=E6=96=B0=E9=A9=B3=E5=9B=9E?=
=?UTF-8?q?=E7=90=86=E7=94=B1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../DS.WMS.Core/Fee/Dtos/ReportContext.cs | 48 +++++++
.../Fee/Interface/IFeeRecordService.cs | 5 +-
.../Fee/Interface/IReportProvider.cs | 17 +++
.../Fee/Method/FeeRecordService.cs | 115 +++-------------
.../ReportProviders/CostAccountingReport.cs | 123 ++++++++++++++++++
.../Op/Method/TaskInteraction/TaskService.cs | 14 +-
.../Controllers/FeeRecordController.cs | 11 +-
7 files changed, 227 insertions(+), 106 deletions(-)
create mode 100644 ds-wms-service/DS.WMS.Core/Fee/Dtos/ReportContext.cs
create mode 100644 ds-wms-service/DS.WMS.Core/Fee/Interface/IReportProvider.cs
create mode 100644 ds-wms-service/DS.WMS.Core/Fee/Method/ReportProviders/CostAccountingReport.cs
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/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.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);
}
///
From db284882610298c26f4f913eba789b6c1269a16a Mon Sep 17 00:00:00 2001
From: zhangxiaofeng <1939543722@qq.com>
Date: Fri, 13 Sep 2024 17:19:55 +0800
Subject: [PATCH 5/5] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=BB=E5=BA=93SqlSuga?=
=?UTF-8?q?rScope=E5=AF=B9IUser=E7=9A=84=E5=8F=96=E5=80=BC=E6=96=B9?=
=?UTF-8?q?=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ds-wms-service/DS.Module.SqlSugar/SqlsugarInstall.cs | 6 +++---
ds-wms-service/DS.Module.UserModule/AspNetUser.cs | 6 +++++-
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/ds-wms-service/DS.Module.SqlSugar/SqlsugarInstall.cs b/ds-wms-service/DS.Module.SqlSugar/SqlsugarInstall.cs
index 49aa37b0..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) =>
diff --git a/ds-wms-service/DS.Module.UserModule/AspNetUser.cs b/ds-wms-service/DS.Module.UserModule/AspNetUser.cs
index b2af5b7d..7df89035 100644
--- a/ds-wms-service/DS.Module.UserModule/AspNetUser.cs
+++ b/ds-wms-service/DS.Module.UserModule/AspNetUser.cs
@@ -33,7 +33,11 @@ public class AspNetUser : IUser
{
get
{
- return GetClaimsIdentity().ToList();
+ if (_claims == null || _claims.Count == 0)
+ {
+ _claims = GetClaimsIdentity().ToList();
+ }
+ return _claims;
}
}