Exemple #1
0
        public static bool Run(MoredianOrg moredianOrg)
        {
            if (null == moredianOrg)
            {
                return(false);
            }
            try
            {
                #region 获取AppToken
                string app_token = AppTokenRedis.GetAppToken();
                if (string.IsNullOrEmpty(app_token))
                {
                    return(false);
                }
                #endregion

                #region 获取AccessToken
                string access_token = AccessTokenRedis.GetAccessToken(Convert.ToString(moredianOrg.orgId), moredianOrg.orgAuthKey);
                if (string.IsNullOrEmpty(access_token))
                {
                    return(false);
                }
                #endregion
                using (IDbConnection erpConn = new SqlConnection(Config.EntranceConnectionStr))
                {
                    #region 初始化设备信息
                    // 先查询设备列表,如果不存在设备,后续都不用进行了
                    List <dynamic> DeviceList = erpConn.Query("SELECT Id, DeviceSn, DeviceId, CommID, BuildSNum, UnitSNum FROM Tb_HSPR_Entrance_Device WITH(NOLOCK)").ToList();
                    if (null == DeviceList || DeviceList.Count <= 0)
                    {
                        // 如果不存在设备,直接返回,不再进行下一步
                        return(false);
                    }
                    // 先查询未配置DeviceId的列表,去查询DeviceId信息
                    DeviceList = erpConn.Query("SELECT Id, DeviceSn, DeviceId FROM Tb_HSPR_Entrance_Device WITH(NOLOCK) WHERE ISNULL(DeviceId, 0) = 0").ToList();
                    // 检查设备配置信息,如果未获取DeveceId,调用接口查询一下
                    ConcurrentBag <Dictionary <string, string> > CreatedDeviceList = new ConcurrentBag <Dictionary <string, string> >();
                    Parallel.ForEach(new ConcurrentBag <dynamic>(DeviceList), (item) =>
                    {
                        try
                        {
                            string Id                            = Convert.ToString(item.Id);
                            string DeviceSn                      = Convert.ToString(item.DeviceSn);
                            IMoredianApiClient client            = new DefaultMoredianApiClient(Config.MoreDian.APIURL);
                            MoredianQueryDeviceIdRequest request = new MoredianQueryDeviceIdRequest
                            {
                                deviceSn = DeviceSn
                            };
                            MoredianQueryDeviceIdResponse response = client.Execute(request, app_token, access_token);
                            if (response.IsSucc())
                            {
                                string DeviceId = Convert.ToString(response.deviceId);
                                CreatedDeviceList.Add(new Dictionary <string, string>
                                {
                                    { "DeviceId", DeviceId },
                                    { "DeviceSn", DeviceSn },
                                    { "Id", Id }
                                });
                            }
                        }
                        catch (Exception ex)
                        {
                            Log.WriteLog(ex.Message);
                        }
                    });
                    #endregion

                    #region 对查询结果回写进数据库
                    List <Dictionary <string, string> > CreatedDeviceArray = new List <Dictionary <string, string> >(CreatedDeviceList);
                    if (null != CreatedDeviceArray)
                    {
                        CreatedDeviceArray.ForEach(item =>
                        {
                            string DeviceId = item["DeviceId"];
                            string DeviceSn = item["DeviceSn"];
                            string Id       = item["Id"];
                            erpConn.Execute("UPDATE Tb_HSPR_Entrance_Device SET DeviceId = @DeviceId WHERE DeviceSn = @DeviceSn AND Id = @Id", new { DeviceId, DeviceSn, Id });
                        });
                    }
                    #endregion
                    return(true);
                }
            }
            catch (Exception ex)
            {
                // 内部会往外部抛异常,由外层统一接收处理
                Log.WriteLog(ex.Message);
                return(false);
            }
        }
Exemple #2
0
        public static MoredianOrg GetMoredianOrg()
        {
            #region 先从Redis取值
            if (mRedis.KeyExists(KEY_MOREDIAN_ORG))
            {
                string json = mRedis.StringGet(KEY_MOREDIAN_ORG);
                try
                {
                    MoredianOrg moredianOrg = JsonConvert.DeserializeObject <MoredianOrg>(json);
                    // 检查是否存在OrgId以及OrgAuthKey这2个重要参数
                    if (null != moredianOrg && 0 != moredianOrg.orgId && !string.IsNullOrEmpty(moredianOrg.orgAuthKey))
                    {
                        return(moredianOrg);
                    }
                }
                catch (Exception)
                {
                }
            }
            #endregion

            #region  存在的情况下去数据库查询
            using (IDbConnection conn = new SqlConnection(Config.EntranceConnectionStr))
            {
                MoredianOrg moredianOrg = null;
                dynamic     info        = conn.QueryFirstOrDefault("SELECT OrgId,OrgAuthKey FROM Tb_HSPR_Entrance_Org WITH(NOLOCK)");
                if (null == info)
                {
                    #region 数据库也不存在,进行创建
                    IMoredianApiClient       client  = new DefaultMoredianApiClient(Config.MoreDian.APIURL);
                    MoredianCreateOrgRequest request = new MoredianCreateOrgRequest
                    {
                        moredianOrg = new MoredianOrg
                        {
                            orgName = Config.CorpName,
                            tpId    = Config.CorpID
                        }
                    };
                    MoredianCreateOrgResponse response = client.Execute(request);
                    if (null == response || !response.IsSucc())
                    {
                        // 创建失败,需要排查错误信息
                        Log.WriteLog($"创建机构失败({JsonConvert.SerializeObject(response)})");
                        return(null);
                    }
                    moredianOrg = new MoredianOrg
                    {
                        orgId      = response.orgId,
                        orgAuthKey = response.orgAuthKey
                    };
                    #endregion
                }
                else
                {
                    moredianOrg = new MoredianOrg
                    {
                        orgId      = Convert.ToInt64(info.OrgId),
                        orgAuthKey = Convert.ToString(info.OrgAuthKey),
                    };
                }
                // 刷新缓存值
                mRedis.StringSet(KEY_MOREDIAN_ORG, JsonConvert.SerializeObject(moredianOrg));
                return(moredianOrg);
            }
            #endregion
        }