From 12073c36dec0c1955095c2ad2b23f7339f4ac65a Mon Sep 17 00:00:00 2001 From: tongfei <244188119@qq.com> Date: Sat, 28 Oct 2023 16:47:28 +0800 Subject: [PATCH] =?UTF-8?q?app=E5=92=8C=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/LoginController.cs | 13 + src/WMS.Web.Api/appsettings.json | 1 + src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml | 45 ++ src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 430 ++++++++++++++++++ src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 60 +++ src/WMS.Web.Core/Dto/Login/LoginInDto.cs | 5 + src/WMS.Web.Core/Dto/Login/LoginRequest.cs | 42 ++ src/WMS.Web.Core/Dto/Login/TagInfoDto.cs | 13 + .../Dto/Login/Temp/LoginTempDto.cs | 27 ++ .../Login/Temp/v3/LoginJsonCompanyTempDto.cs | 13 + .../Login/Temp/v3/LoginJsonDeptV3TempDto.cs | 13 + .../Dto/Login/Temp/v3/LoginJsonOrgTempDto.cs | 13 + .../Dto/Login/Temp/v3/LoginJsonRoleTempDto.cs | 13 + .../Login/Temp/v3/LoginJsonTokenV3TempDto.cs | 30 ++ src/WMS.Web.Core/Dto/Login/UserInfoV3Dto.cs | 30 ++ src/WMS.Web.Core/Help/HttpClientHelp.cs | 31 ++ .../IService/Public/ILoginService.cs | 8 + src/WMS.Web.Domain/Mappers/AppMapper.cs | 43 +- src/WMS.Web.Domain/Options/SoaOptions.cs | 5 + .../Services/Public/LoginService.cs | 167 +++++++ 20 files changed, 997 insertions(+), 5 deletions(-) create mode 100644 src/WMS.Web.Core/Dto/Login/LoginRequest.cs create mode 100644 src/WMS.Web.Core/Dto/Login/TagInfoDto.cs create mode 100644 src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonCompanyTempDto.cs create mode 100644 src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonDeptV3TempDto.cs create mode 100644 src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonOrgTempDto.cs create mode 100644 src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonRoleTempDto.cs create mode 100644 src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonTokenV3TempDto.cs create mode 100644 src/WMS.Web.Core/Dto/Login/UserInfoV3Dto.cs diff --git a/src/WMS.Web.Api/Controllers/LoginController.cs b/src/WMS.Web.Api/Controllers/LoginController.cs index 36c1f793..2d396afb 100644 --- a/src/WMS.Web.Api/Controllers/LoginController.cs +++ b/src/WMS.Web.Api/Controllers/LoginController.cs @@ -36,6 +36,19 @@ namespace WMS.Web.Api.Controllers return result; } + /// + /// 登录-APP和小程序 + /// + /// + /// + [HttpPost] + [Route("LoginInPwd")] + public async Task> LoginInPwd([FromBody] LoginRequest dto) + { + var result = await _loginService.GetUserInfo(dto.UserName,dto.Password); + return result; + } + /// /// 退出登录 /// diff --git a/src/WMS.Web.Api/appsettings.json b/src/WMS.Web.Api/appsettings.json index 90c8e382..8ecb789c 100644 --- a/src/WMS.Web.Api/appsettings.json +++ b/src/WMS.Web.Api/appsettings.json @@ -28,6 +28,7 @@ }, "SoaOptions": { "ModuleID": 25, + "Url_V3": "http://dev.uc.v3.f2b211.com", "Url": "http://dev.uc.f2b211.com", "AppId": "100528847652388864", "AppSecret": "fa950a1fe690fe610338084b49db7db9", diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index 25d628ba..ffc12e5a 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -59,6 +59,13 @@ + + + 登录-APP和小程序 + + + + 退出登录 @@ -91,6 +98,44 @@ + + + 出库单 + + + + + 列表 + + + + + + + 保存 + + + + + + + 同步金蝶 + + + + + + + 出库计划单 + + + + + 列表 + + + + 系统配置 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index f2d9ee9b..9b25f77a 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -510,6 +510,11 @@ 用户信息 + + + + + token信息 @@ -550,6 +555,36 @@ ops自己产生的token 给前端验证用的 + + + 登录请求对象 + + + + + 账号 + + + + + 密码 + + + + + + + + + + + + + + + + + 登录后:请求相关全部信息对象 @@ -735,6 +770,36 @@ 加密后的用户数据 + + + 登录后获取的:token 信息-和单点系统的字段一一对应 + + + + + 后续与单点通信验证token + + + + + access token过期时间 + + + + + 用于access_token过期后刷新用 + + + + + 加密后的用户数据 + + + + + 用户在单点中维一ID + + 人员ID @@ -795,6 +860,11 @@ 用户类型:1为员工,2为供应商,3为客户 + + + 用户在单点中维一ID + + 物料规格型号 @@ -895,6 +965,326 @@ 类型:1-整箱移货上级,2-整箱移货下级 + + + 出库单任务列表 + + + + + 单据Id + + + + + 单据编号 + + + + + 单据状态 + + + + + 单据类型 + + + + + 操作人(出库人) + + + + + 操作时间(出库时间) + + + + + 来源单号 + + + + + 销售订单号 + + + + + 发货组织 + + + + + 收货客户 + + + + + 物料名称 + + + + + 物料编码 + + + + + 物料规格型号 + + + + + 仓库ID + + + + + 应出库数量 + + + + + 已出库数量 + + + + + 订单明细备注 + + + + + 创建时间(erp那边的创建时间) + + + + + 出库单任务 + + + + + 单据类型(出库单下拉列表) + + + + + 单据状态 + + + + + 创建时间(出库时间) + + + + + 创建时间(出库时间) + + + + + 来源单号 + + + + + 发货组织 + + + + + 收货客户 + + + + + 物料编码 + + + + + 仓库ID + + + + + 出库列表详情 + + + + + 主键 订单编号 + + + + + 单据状态 + + + + + 单据类型 + + + + + 创建人 + + + + + 创建时间(出库时间) + + + + + 同步成功或者失败 null 就是未同步 + + + + + 来源单号 + + + + + 销售订单号 + + + + + 发货组织 + + + + + 收货客户 + + + + + 物料名称 + + + + + 物料编码 + + + + + 物料规格型号 + + + + + 仓库ID + + + + + 出库数量 + + + + + 出库单列表请求 + + + + + 单据类型(出库单下拉列表) + + + + + 创建人 + + + + + 创建时间(出库时间) + + + + + 创建时间(出库时间) + + + + + 同步成功或者失败 null 就是未同步 + + + + + 来源单号 + + + + + 发货组织 + + + + + 收货客户 + + + + + 物料编码 + + + + + 仓库ID + + + + + 出库单保存 + + + + + 来源单号 + + + + + 销售订单号 + + + + + 发货组织 + + + + + 收货客户 + + + + + 物料Id + + + + + 仓库ID + + + + + 出库数量 + + 组织Id(所有列表页都需要 全局) @@ -955,6 +1345,46 @@ 盘点单明细 + + + 箱Id + + + + + 物料ID + + + + + 单位ID + + + + + 仓库ID + + + + + 仓位ID + + + + + 盘点前数量(wms系统数量) + + + + + 盘点实际数量(实际仓库数量) + + + + + 备注 + + 盘点单列表 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index e1db52e0..bb3c6d39 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -582,6 +582,12 @@ 明细 + + + 创建 + + + wms出库单明细 @@ -921,6 +927,11 @@ 改箱 移箱服务 + + + 出库服务 + + 盘点单服务 @@ -950,6 +961,14 @@ + + + 获取单点用户信息 + + + + + 登录退出 @@ -1340,6 +1359,11 @@ 单点系统地址 + + + 单点系统地址 + + 应用id @@ -1396,6 +1420,18 @@ + + + 出库服务 + + + + + 同步金蝶 + + + + erp数据交互服务 @@ -1507,6 +1543,15 @@ + + + 创建token + + + + + + 得到单点用户信息 @@ -1514,6 +1559,14 @@ + + + 获取单点用户信息 + + + + + 登录退出 @@ -1758,6 +1811,13 @@ + + + 同步金蝶 + + + + 出入库回退类型 diff --git a/src/WMS.Web.Core/Dto/Login/LoginInDto.cs b/src/WMS.Web.Core/Dto/Login/LoginInDto.cs index 2e9e8b11..f7fb4556 100644 --- a/src/WMS.Web.Core/Dto/Login/LoginInDto.cs +++ b/src/WMS.Web.Core/Dto/Login/LoginInDto.cs @@ -17,6 +17,11 @@ namespace WMS.Web.Core.Dto.Login /// public UserInfoDto UserInfo { get; set; } + /// + /// + /// + public UserInfoV3Dto UserInfoV3 { get; set; } + /// /// token信息 /// diff --git a/src/WMS.Web.Core/Dto/Login/LoginRequest.cs b/src/WMS.Web.Core/Dto/Login/LoginRequest.cs new file mode 100644 index 00000000..9c9316de --- /dev/null +++ b/src/WMS.Web.Core/Dto/Login/LoginRequest.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Login +{ + /// + /// 登录请求对象 + /// + public class LoginRequest + { + /// + /// 账号 + /// + public string UserName { get; set; } + + /// + /// 密码 + /// + public string Password { get; set; } + } + + public class LoginAuthorizeRequest : LoginRequest + { + /// + /// + /// + public string ClientId { get; set; } + + /// + /// + /// + public string ClientSecret { get; set; } + + /// + /// + /// + public string GrantType { get; set; } + + public string Scope { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/Login/TagInfoDto.cs b/src/WMS.Web.Core/Dto/Login/TagInfoDto.cs new file mode 100644 index 00000000..c30673ef --- /dev/null +++ b/src/WMS.Web.Core/Dto/Login/TagInfoDto.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Login +{ + public class TagInfoDto + { + public int Id { get; set; } + public string Name { get; set; } + public string Code { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/Login/Temp/LoginTempDto.cs b/src/WMS.Web.Core/Dto/Login/Temp/LoginTempDto.cs index 0c961568..f23a001f 100644 --- a/src/WMS.Web.Core/Dto/Login/Temp/LoginTempDto.cs +++ b/src/WMS.Web.Core/Dto/Login/Temp/LoginTempDto.cs @@ -40,4 +40,31 @@ namespace WMS.Web.Core.Dto.Login.Temp /// public string encryptedData { get; set; } } + + /// + /// 登录后获取的:token 信息-和单点系统的字段一一对应 + /// + public class LoginTempV2Dto + { + /// + /// 后续与单点通信验证token + /// + public string access_token { get; set; } + + /// + ///access token过期时间 + /// + public int access_expired_at { get; set; } + + + /// + /// 用于access_token过期后刷新用 + /// + public string refresh_token { get; set; } + + /// + /// 加密后的用户数据 + /// + public string encrypted_data { get; set; } + } } diff --git a/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonCompanyTempDto.cs b/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonCompanyTempDto.cs new file mode 100644 index 00000000..760474bd --- /dev/null +++ b/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonCompanyTempDto.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Login.Temp +{ + public class LoginJsonCompanyTempDto + { + public int company_id { get; set; } + public string company_name { get; set; } + public string company_code { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonDeptV3TempDto.cs b/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonDeptV3TempDto.cs new file mode 100644 index 00000000..b1a92abb --- /dev/null +++ b/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonDeptV3TempDto.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Login.Temp.v3 +{ + public class LoginJsonDeptV3TempDto + { + public int dept_id { get; set; } + public string dept_name { get; set; } + public string dept_code { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonOrgTempDto.cs b/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonOrgTempDto.cs new file mode 100644 index 00000000..5dc21753 --- /dev/null +++ b/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonOrgTempDto.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Login.Temp +{ + public class LoginJsonOrgTempDto + { + public int org_id { get; set; } + public string org_name { get; set; } + public string org_code { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonRoleTempDto.cs b/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonRoleTempDto.cs new file mode 100644 index 00000000..3e935898 --- /dev/null +++ b/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonRoleTempDto.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Login.Temp.v3 +{ + public class LoginJsonRoleTempDto + { + public int role_id { get; set; } + public string role_name { get; set; } + public string role_code { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonTokenV3TempDto.cs b/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonTokenV3TempDto.cs new file mode 100644 index 00000000..05d998d8 --- /dev/null +++ b/src/WMS.Web.Core/Dto/Login/Temp/v3/LoginJsonTokenV3TempDto.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Login.Temp.v3 +{ + public class LoginJsonTokenV3TempDto + { + /// + /// 用户在单点中维一ID + /// + public int id { get; set; } + + public string dingtalk_uid { get; set; } + + public string dingtalk_unionid { get; set; } + + public string nickname { get; set; } + public string realname { get; set; } + + public string mobile { get; set; } + + public int identity { get; set; } + + public LoginJsonCompanyTempDto company { get; set; } + public List orgs { get; set; } + public List depts { get; set; } + public List roles { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/Login/UserInfoV3Dto.cs b/src/WMS.Web.Core/Dto/Login/UserInfoV3Dto.cs new file mode 100644 index 00000000..7b3b50a0 --- /dev/null +++ b/src/WMS.Web.Core/Dto/Login/UserInfoV3Dto.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Login +{ + public class UserInfoV3Dto + { + /// + /// 用户在单点中维一ID + /// + public int Id { get; set; } + + public string DingtalkUid { get; set; } + + public string DingtalkUnionid { get; set; } + + public string Nickname { get; set; } + public string Realname { get; set; } + + public string Mobile { get; set; } + + public int Identity { get; set; } + + public TagInfoDto Company { get; set; } + public List Orgs { get; set; } = new List(); + public List Depts { get; set; }= new List(); + public List Roles { get; set; }= new List(); + } +} diff --git a/src/WMS.Web.Core/Help/HttpClientHelp.cs b/src/WMS.Web.Core/Help/HttpClientHelp.cs index a003dd8a..994e9771 100644 --- a/src/WMS.Web.Core/Help/HttpClientHelp.cs +++ b/src/WMS.Web.Core/Help/HttpClientHelp.cs @@ -9,6 +9,7 @@ using System.Net.Http.Headers; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; +using WMS.Web.Core.Dto.Login; namespace WMS.Web.Core.Help { @@ -81,6 +82,36 @@ namespace WMS.Web.Core.Help return respData; } + public string PostHttp(string url, LoginAuthorizeRequest reqData) + { + var str = string.Format("client_id={0}&client_secret={1}&grant_type={2}&username={3}&password={4}&scope={5}", + reqData.ClientId, reqData.ClientSecret, reqData.GrantType, reqData.UserName, reqData.Password,reqData.Scope); + ASCIIEncoding encoding = new ASCIIEncoding(); + byte[] byte1 = encoding.GetBytes(str); + HttpContent httpContent = new StringContent(str); + httpContent.Headers.Expires = DateTime.Now; + httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); + httpContent.Headers.ContentLength = byte1.Length; + httpContent.Headers.ContentType.CharSet = "utf-8"; + HttpClient httpClient = new HttpClient(); + httpClient.BaseAddress = new Uri(url); + httpClient.Timeout = new TimeSpan(0, 0, 10); + + HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result; + if (response.IsSuccessStatusCode) + { + var resData = response.Content.ReadAsStringAsync().Result; + return resData; + + } + else + { + var resData = response.Content.ReadAsStringAsync().Result; + return resData; + } + + } + public string PostHttpNoData(string url, string cookieValue = "") { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); diff --git a/src/WMS.Web.Domain/IService/Public/ILoginService.cs b/src/WMS.Web.Domain/IService/Public/ILoginService.cs index 3fe2c687..50d508df 100644 --- a/src/WMS.Web.Domain/IService/Public/ILoginService.cs +++ b/src/WMS.Web.Domain/IService/Public/ILoginService.cs @@ -19,6 +19,14 @@ namespace WMS.Web.Domain.IService.Public /// Task> GetUserInfoAsync(string code); + /// + /// 获取单点用户信息 + /// + /// + /// + /// + Task> GetUserInfo(string username, string password); + /// /// 登录退出 /// diff --git a/src/WMS.Web.Domain/Mappers/AppMapper.cs b/src/WMS.Web.Domain/Mappers/AppMapper.cs index be35a77b..5c0cb91e 100644 --- a/src/WMS.Web.Domain/Mappers/AppMapper.cs +++ b/src/WMS.Web.Domain/Mappers/AppMapper.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Text; using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Dto.Login.Temp; +using WMS.Web.Core.Dto.Login.Temp.v3; namespace WMS.Web.Domain.Mappers { @@ -14,7 +15,7 @@ namespace WMS.Web.Domain.Mappers { public AppMapper() { - + //pc端登录的相关dto CreateMap() .ForMember(x => x.Email, ops => ops.MapFrom(x => x.email)) .ForMember(x => x.Avatar, ops => ops.MapFrom(x => x.avatar)) @@ -25,10 +26,42 @@ namespace WMS.Web.Domain.Mappers .ReverseMap(); CreateMap() - .ForMember(x => x.Id, ops => ops.MapFrom(x => x.id)) - .ForMember(x => x.DeptCode, ops => ops.MapFrom(x => x.dept_code)) - .ForMember(x => x.DeptName, ops => ops.MapFrom(x => x.dept_name)) - .ForMember(x => x.ManagerId, ops => ops.MapFrom(x => x.manager)).ReverseMap(); + .ForMember(x => x.Id, ops => ops.MapFrom(x => x.id)) + .ForMember(x => x.DeptCode, ops => ops.MapFrom(x => x.dept_code)) + .ForMember(x => x.DeptName, ops => ops.MapFrom(x => x.dept_name)) + .ForMember(x => x.ManagerId, ops => ops.MapFrom(x => x.manager)).ReverseMap(); + + //app端和小程序端登录的相关dto + + + CreateMap() + .ForMember(x => x.Id, ops => ops.MapFrom(x => x.dept_id)) + .ForMember(x => x.Name, ops => ops.MapFrom(x => x.dept_name)) + .ForMember(x => x.Code, ops => ops.MapFrom(x => x.dept_code)).ReverseMap(); + CreateMap() + .ForMember(x => x.Id, ops => ops.MapFrom(x => x.company_id)) + .ForMember(x => x.Name, ops => ops.MapFrom(x => x.company_name)) + .ForMember(x => x.Code, ops => ops.MapFrom(x => x.company_code)).ReverseMap(); + CreateMap() + .ForMember(x => x.Id, ops => ops.MapFrom(x => x.role_id)) + .ForMember(x => x.Name, ops => ops.MapFrom(x => x.role_name)) + .ForMember(x => x.Code, ops => ops.MapFrom(x => x.role_code)).ReverseMap(); + + CreateMap() + .ForMember(x => x.Id, ops => ops.MapFrom(x => x.id)) + .ForMember(x => x.DingtalkUid, ops => ops.MapFrom(x => x.dingtalk_uid)) + .ForMember(x => x.DingtalkUnionid, ops => ops.MapFrom(x => x.dingtalk_unionid)) + .ForMember(x => x.Nickname, ops => ops.MapFrom(x => x.nickname)) + .ForMember(x => x.Realname, ops => ops.MapFrom(x => x.realname)) + .ForMember(x => x.Mobile, ops => ops.MapFrom(x => x.mobile)) + .ForMember(x => x.Identity, ops => ops.MapFrom(x => x.identity)) + .ForMember(x => x.Company, ops => ops.MapFrom(x => x.company)) + .ForMember(x => x.Orgs, opt => opt.Ignore()) + .ForMember(x => x.Depts, opt => opt.Ignore()) + .ForMember(x => x.Roles, opt => opt.Ignore()).ReverseMap(); + + + } } } diff --git a/src/WMS.Web.Domain/Options/SoaOptions.cs b/src/WMS.Web.Domain/Options/SoaOptions.cs index 3458899b..55ecafed 100644 --- a/src/WMS.Web.Domain/Options/SoaOptions.cs +++ b/src/WMS.Web.Domain/Options/SoaOptions.cs @@ -11,6 +11,11 @@ namespace WMS.Web.Domain.Options /// public string Url { get; set; } + /// + /// 单点系统地址 + /// + public string Url_V3 { get; set; } + /// /// 应用id /// diff --git a/src/WMS.Web.Domain/Services/Public/LoginService.cs b/src/WMS.Web.Domain/Services/Public/LoginService.cs index 5edc633c..5733ddea 100644 --- a/src/WMS.Web.Domain/Services/Public/LoginService.cs +++ b/src/WMS.Web.Domain/Services/Public/LoginService.cs @@ -10,6 +10,7 @@ using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Dto.Login.Temp; +using WMS.Web.Core.Dto.Login.Temp.v3; using WMS.Web.Core.Help; using WMS.Web.Core.Internal.Results; using WMS.Web.Core.Internal.Security; @@ -67,6 +68,30 @@ namespace WMS.Web.Domain.Services.Public }); } + /// + /// 创建token + /// + /// + /// + /// + /// + private async Task CreateToken(UserInfoDto data, LoginTempV2Dto tempDto, string NewToken) + { + return await Task.Run(() => + { + + DateTime expires_time = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)).AddSeconds(tempDto.access_expired_at); + AccessTokenDto accessToken = new AccessTokenDto() + { + Token = NewToken, + PhpToken = tempDto.access_token, + RefreshToken = tempDto.refresh_token, + Expired = expires_time + }; + return accessToken; + }); + } + /// /// 得到单点用户信息 /// @@ -190,6 +215,148 @@ namespace WMS.Web.Domain.Services.Public } } + /// + /// 获取单点用户信息 + /// + /// + /// + /// + public async Task> GetUserInfo(string username, string password) + { + //JsonObject reqData = new JsonObject(); + //reqData.Add("client_id", _soaOptions.AppId); + //reqData.Add("client_secret", _soaOptions.AppSecret); + //reqData.Add("grant_type", "password"); + //reqData.Add("username", username); + //reqData.Add("password", password); + + var reqData = new LoginAuthorizeRequest(); + reqData.ClientId = _soaOptions.AppId; + reqData.ClientSecret = _soaOptions.AppSecret; + reqData.GrantType = "password"; + reqData.UserName = username; + reqData.Scope = "credentials"; + + var md5 = System.Security.Cryptography.MD5.Create(); + var md5Pwd= BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(password))); + md5Pwd = md5Pwd.Replace("-", string.Empty); + + + + reqData.Password = md5Pwd.ToLower(); + + + //这个是登录的时候给前端验证的token,以及传给php单点那边的一个session值,用于单点退出时,通知ops退出 + string NewToken = Guid.NewGuid().ToString("N"); + try + { + string result = _httpClientHelp.PostHttp(_soaOptions.Url_V3 + "/uc/authorize", reqData); + var jObject = JsonObject.Parse(result); + + LoginInDto r = new LoginInDto(); + r.UserInfo = new UserInfoDto(); + r.TokenInfo = new AccessTokenDto(); + var login_result = jObject["code"] == 0 ? "成功" : "失败"; + _logger.LogInformation($"登录信息APP和小程序:单点->{login_result}"); + + if (jObject["code"] == 0) + { + string datajson = jObject["data"].ToString(); + var _loginDto = JsonConvert.DeserializeObject(datajson); + + #region 解码 + string enptStr = _loginDto.encrypted_data; + List enptlist = enptStr.Trim().Split(',').ToList(); + string str = RSA.DecryptSection(_soaOptions.PrivateKey, enptlist); + var entity = JsonConvert.DeserializeObject(str); + #endregion + + //映射登录信息 + var userInfo_v3 = _mapper.Map(entity); + //userInfo_v3.Orgs = _mapper.Map>(entity.orgs); + //userInfo_v3.Depts = _mapper.Map>(entity.depts); + //userInfo_v3.Roles = _mapper.Map>(entity.roles); + + _logger.LogInformation($"登录信息:用户ID->{entity.id}"); + + //HTTP请求获取登录信息:人员,客户,供应商,公司 + var loginRequest = new LoginSingleRequest() + { + UserId = entity.id, + + }; + var loginResponse_result = await _singleDataService.GetSingleDataNoCache, LoginSingleRequest, SingleLoginAction> + (loginRequest, SingleLoginAction.Staff, type: SingleControllerType.Login); + + //绑定返回对象的登录信息 + var staffName = "Null"; + var token = await CreateToken(r.UserInfo, _loginDto, NewToken); + r.TokenInfo = token; + if (loginResponse_result.Success && loginResponse_result.Data != null) + { + var loginResponse = loginResponse_result.Data; + if (loginResponse.Staff != null) + { + r.UserInfo.StaffId = loginResponse.Staff.Id; + staffName = loginResponse.Staff.Name; + } + } + r.UserInfo.CompanyId = userInfo_v3.Company.Id; + r.UserInfo.CompanyName = userInfo_v3.Company.Name; + r.UserInfo.UcId = userInfo_v3.Id; + r.UserInfo.SeesionId ="";//app和程序类型登录授权没有这个字段 + + r.UserInfo.Identity = userInfo_v3.Identity; + r.UserInfo.OrgId = entity.orgs.FirstOrDefault()?.org_id; + r.UserInfo.CustomerId = null; + r.UserInfo.SupplierId = null; + r.SignedIn = true; + _logger.LogInformation($"登录信息:用户人员信息->{staffName}({r.UserInfo.StaffId}),公司名称->{r.UserInfo.CompanyName}"); + + //登录后缓存登录的用户信息和token信息 + var loginInfo = new LoginInDto(); + loginInfo.UserInfo = r.UserInfo; + loginInfo.TokenInfo = token; + + var ops_login_time = token.Expired.AddDays(1) - DateTime.Now;//用于正式 + _redisClientService.SetStringKey($"wms_login_{token.Token}", loginInfo, ops_login_time); + + //登录成功移出对应的用户token黑名单:应为新的token产生,移除登录的信息 + string blacktoken = _redisClientService.GetStringKey($"wms_black_token_{r.UserInfo.UcId}"); + if (!string.IsNullOrEmpty(blacktoken)) + { + this.RemoveLoginInfo(blacktoken); + _redisClientService.RemoveStringKey($"wms_black_token_{r.UserInfo.UcId}"); + } + if (r == null || r.UserInfo == null || r.TokenInfo == null) + return Result.ReFailure("授权失败,请重新登录", 401); + return Result.ReSuccess(r); + } + else + { + var errno_text = "登陆失败:" + jObject["errmsg"]; + r.SignedIn = false; + string datajson_sessid = jObject["data"]["uc_sessid"]; + //调用单点的退出接口 + result = _httpClientHelp.GetHttp(_soaOptions.Url + "/uc/authorize/signin_out", true, cookieValue: datajson_sessid); + jObject = JsonObject.Parse(result); + if (jObject["errno"] == 0) + { + _logger.LogInformation("用户信息登录:" + errno_text); + return Result.ReFailure("拒绝用户证书试图访问此web站点,请与站点管理员联系以建立用户证书权限", 403); + } + else + { + return Result.ReFailure(jObject["errmsg"], jObject["errno"]); + } + } + } + catch (Exception ex) + { + return Result.ReFailure("授权失败,请重新登录", 401); + } + } + /// /// 登录退出 ///