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);
+ }
+ }
+
///
/// 登录退出
///