NeximApiUtil.cs 7.9 KB
 
using Model;
using Newtonsoft.Json;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Configuration; 
using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView;
using Http = Model.Http;

namespace BLL
{
    public class NeximApiUtil
    {

        public bool IsEnalbe()
        {
            //判断 Nexim_AuthUrl 是否为空
            if (string.IsNullOrEmpty(Config.Nexim_AuthUrl))
            {
                return false;
            }
            return true;

        }
        private string OK = "ok";
        private string ERROE = "error";
        /**
         * 获取登录的token
         * @return
         */
        private string getAccessToken(out string errMsg)
        { 
            errMsg = "";
            Dictionary<string, object> paramMap = new Dictionary<string, object>();
            paramMap.Add("userName", Config.Nexim_UserName.Val);
            paramMap.Add("password", Config.Nexim_Password.Val);
            //string  paramStr = JsonConvert.ToString(paramMap);
            //LogNet.log.Info("获取Fuji的token参数为:" + paramStr);
            string apiUrl = Config.Nexim_AuthUrl;
            string accessToken = "";
            string result = "";
            try
            {
                string body = JsonConvert.SerializeObject(paramMap);
                result = Model.Http.PostWithHeader(apiUrl, body, new Dictionary<string, string>());
                LogNet.log.Info("获取Fuji的token结果为:" + result);
                Dictionary<string, object> resultObj = JsonConvert.DeserializeObject<Dictionary<string, object>>(result);
                if (resultObj != null && resultObj.ContainsKey("accessToken"))
                {
                    accessToken = resultObj["accessToken"].ToString();
                    if (String.IsNullOrEmpty(accessToken))
                    {
                        errMsg = "accessToken is  null";
                    }
                }
                else
                {
                    errMsg = "result="+ result;
                    LogNet.log.Info("获取Fuji的token失败,原因:" + errMsg);
                }
                return accessToken;
            }
            catch (Exception e)
            {
                errMsg =  e.Message;
                LogNet.log.Info("获取Fuji的token异常:", e); 
                return accessToken;
            }
             

        }

        private string getReelInfo(Dictionary<string, string> reelData, string key)
        {
            string dataKey = key;
            Dictionary<string, string> paramKeyM = GetParamMap();
            if (paramKeyM.ContainsKey(key))
            {
                dataKey = paramKeyM[key];
            }
            if (reelData.ContainsKey(dataKey))
            {
                return reelData[dataKey];
            }
            return "";
        }
        private int getIntReelInfo(Dictionary<string, string> reelData, string key)
        {
            try
            {
                string data = getReelInfo(reelData, key).Trim();

                if (data != "")
                {
                    return Convert.ToInt32(data);
                }
            }
            catch (Exception e)
            {
                LogNet.log.Error(e.ToString());
            }
            return 0;
        }

        private string RI = "RI";
        private string PN = "PN";
        private string QTY = "QTY";
        private string SP = "SP";
        private string BATCH = "BATCH";
        private string PRODATE = "PRODATE";

        private Dictionary<string, string> _paramKeyMap = null;
        private Dictionary<string, string> GetParamMap()
        {
            if (_paramKeyMap == null)
            {
                _paramKeyMap = new Dictionary<string, string>();

                string[] configMap = Config.Nexim_ParamKeyMap; ;
                foreach (string key in configMap)
                {
                    string[] arrys = key.Trim().Split('=');
                    if (arrys.Length == 2 && arrys[0] != "" && arrys[1] != "")
                    {
                        _paramKeyMap.Add(arrys[0], arrys[1]);
                    }
                }
            }
            return _paramKeyMap;
        }

        public bool registerNewDid(Dictionary<string, string> reelData, out string msg)
        {
            msg = "";
            if (!IsEnalbe())
            {
                return true;
            }
            Dictionary<string, string> headerMap = new Dictionary<string, string>(); 
            string token = getAccessToken(out string errmsg);
            if (String.IsNullOrEmpty(token))
            {
                //获取token为空
                msg = "getAccessToken fail:" + errmsg;
                LogNet.log.Info("getAccessToken fail");
                return false;
            }
            headerMap.Add("fujiAccessToken", token);

            Dictionary<string, Object> paramsMap = new Dictionary<string, object>();
            paramsMap.Add("did", getReelInfo(reelData, RI));
            paramsMap.Add("partBarcode", getReelInfo(reelData, PN));
            paramsMap.Add("quantity", getReelInfo(reelData, QTY));
            paramsMap.Add("packageType", "paper");  //默认是paper,
            paramsMap.Add("partsoutWarning", getIntReelInfo(reelData, QTY));
            paramsMap.Add("splicingWarning", getIntReelInfo(reelData, QTY));
            paramsMap.Add("partNumber", getReelInfo(reelData, PN));
            paramsMap.Add("vendorName", getReelInfo(reelData, SP));
            paramsMap.Add("lotName", getReelInfo(reelData, BATCH));
            paramsMap.Add("dateCode", getReelInfo(reelData, PRODATE));
            paramsMap.Add("location", "");
            paramsMap.Add("memo", "");
            paramsMap.Add("note1", "");
            paramsMap.Add("note2", "");
            paramsMap.Add("note3", "");
            paramsMap.Add("note4", "");
            paramsMap.Add("useSplicing", true);
            paramsMap.Add("useTrayPackage", false);
            paramsMap.Add("trayStackCount", 0);
            paramsMap.Add("trayPickupPositionX", 0);
            paramsMap.Add("trayPickupPositionY", 0);
            paramsMap.Add("traySizeX", 0);
            paramsMap.Add("traySizeY", 0);
            List<Dictionary<string, object>> paramList=new List<Dictionary<string, object>>();
            paramList.Add(paramsMap);
            //string paramStr = JSON.toJSONstring(params);
            //LogNet.log.Info("注册Fuji的did参数为:" + paramStr);
            string result = "";
            string apiUrl = Config.Nexim_RegisterDidInfoUrl;
            try
            {
                string body=JsonConvert.SerializeObject (paramList);
                result = Http.PostWithHeader(apiUrl, body, headerMap);
                LogNet.log.Info("注册Fuji的did结果为:" + result);

                Dictionary<string, object> resultObj = JsonConvert.DeserializeObject<Dictionary<string, object>>(result);
                if (resultObj != null && resultObj.ContainsKey("addedCount"))
                {
                    int addedCount = Convert.ToInt32(resultObj["addedCount"]);
                    if (addedCount > 0)
                    {
                        return true;
                    }
                }
                //if (resultObj != null && resultObj.ContainsKey("details"))
                //{

                //    string details = resultObj["details"].ToString();
                //    msg ="Register new did failed: "+ details+". result="+result;
                //}
                //else
                {
                    msg = "Register new did failed : "+result.Replace("\t","").Replace("\n","");
                }

            }
            catch (Exception e)
            {
                //改为英文提示
                msg = "Register new did failed:" + e.Message;
                LogNet.log.Info("注册Fuji的did失败:", e);
            }
            return false;
        }

    }

}