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); } }
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 }