chengsc
2024-10-24 716b29fea5945ca7dc4419d9f1f980c379312b32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using Microsoft.IdentityModel.Protocols;
using Model.InterFaceModel;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Policy;
using System.Text; 
using Utility.Tools;
using WMS.DAL;
using WMS.Entity.Context;
using WMS.Entity.SysEntity;
using WMS.IBLL.ISysServer;
 
namespace WMS.BLL.SysServer
{
    public class Token : DbHelper<SysToken>,IToken
    {
        private static readonly SqlSugarScope Db = DataContext.Db;
 
        public Token() : base(Db)
        {
        }
        public string GetMesToken(string url)
        {
            try
            {
                var str = "";
 
                //首先判断系统内是否有token值,效期是否失效
                var sysToken = Db.Queryable<SysToken>().First(m => m.IsDel == "0" && m.SystemName == "MES");
                if (sysToken != null && !string.IsNullOrWhiteSpace(sysToken.Token) && sysToken.ExpireTime > DateTime.Now)
                {
                    str = sysToken.Token;
                    return str;  //返回token值
                }
 
                #region 获取新的令牌
                
                var user = MesConfig.MesUser;
                var pass = MesConfig.MesPassWord;
                var secretKey = Md5Tools.CalcMd5(pass);
                var nonce = Guid.NewGuid().ToString("N");
                var timestamp = DateTimeOffset.Now.ToUnixTimeSeconds().ToString();
                
                var info = new string[] { user, secretKey, nonce, timestamp };
                Array.Sort(info,string.CompareOrdinal); //ASCII排序
                var miyao = string.Join("", info); //数组转换成字符串
                var sign = Md5Tools.CalcMd5(miyao);  //签名
 
                var data = new
                {
                    user = user,
                    nonce = nonce,
                    timestamp = timestamp,
                    sign = sign,
                    jwt = true,      //是否返回JWT令牌
                };
                #endregion
 
                #region 通过接口发送至erp 或 mes
                //系统对接后放开
                var jsonData = JsonConvert.SerializeObject(data);
 
                var response = HttpHelper.DoPost(url, jsonData, "MES申请获取令牌", "MES");
 
                var obj = JsonConvert.DeserializeObject<MesTokenModel>(response);//解析返回数据
                
                if (obj.status != "success")
                {
                    throw new Exception("上传失败" + obj.message);
                }
                else
                {
                    var token = obj.Data.token;
                    var expireTime = obj.Data.expire_time;
                    var time = DateTime.Now.AddMilliseconds(double.Parse(expireTime));
                    if (sysToken == null)//添加
                    {
                        var addToken = new SysToken()
                        {
                            SystemName = "MES",
                            Token = token,
                            ExpireTime = time,
                            CreateUser = 0
                        };
                        Db.Insertable(addToken).ExecuteCommand();
                        return token;
                    }
                    else //修改
                    {
                        sysToken.Token = token;
                        sysToken.ExpireTime = time;
                        sysToken.UpdateTime = DateTime.Now;
                        Db.Updateable(sysToken).ExecuteCommand();
                        return token;
                    }
                }
 
                #endregion 
            }
            catch (Exception)
            {
                return "";
            }
        }
    }
}