// 批量下发命令 public APIRst YdBatchControlOfSsr(string v0Fun, string dataValue, string pStr) { APIRst rst = new APIRst(); YdToGw gw = new YdToGw(user.Ledger, user.Uid); V0Fun fun = V0Fun.E; if (Enum.TryParse <V0Fun>(v0Fun, out fun) == false) { rst.rst = false; rst.err.code = (int)ResultCodeDefine.Error; rst.err.msg = "控制命令错误"; return(rst); } //V0Fun fun = V0Fun.Ssr; try { foreach (string s in pStr.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { gw.YdToGwCmd(CommFunc.ConvertDBNullToInt32(s), fun, dataValue); } rst.data = ""; } catch (Exception ex) { rst.rst = false; rst.err.code = (int)ResultCodeDefine.Error; rst.err.msg = ex.Message; FileLog.WriteLog("批量下发命令错误(YdBatchControlOfSsr)", ex.Message + ex.StackTrace); } return(rst); }
// 批量下发命令 private bool YdBatchControlOfSsr(string v0Fun, string dataValue, string pStr) { string msg = ""; YdToGw gw = new YdToGw(user.Ledger, user.Uid); V0Fun fun = V0Fun.E; if (Enum.TryParse <V0Fun>(v0Fun, out fun) == false) { return(false); } //V0Fun fun = V0Fun.Ssr; try { foreach (string s in pStr.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { gw.YdToGwCmd(CommFunc.ConvertDBNullToInt32(s), fun, dataValue); } return(true); } catch (Exception ex) { msg = ex.Message; FileLog.WriteLog("获取状态列表错误 (GetYdBatchControlOfList)", ex.Message + ex.StackTrace); } return(false); }
public APIRst GetYdAlarmOfCmd_Ctrl(int log_id) { APIRst rst = new APIRst(); string msg = ""; if (log_id == 0) { rst.rst = false; rst.err.code = (int)ResultCodeDefine.Error; rst.err.msg = "远程控制ID为空"; return(rst); } YdToGw gw = new YdToGw(user.Ledger, user.Uid); try { bool upDb = false; rst.rst = gw.YdToGwAgain(log_id, out upDb, out msg); rst.data = upDb; rst.err.msg = msg; } catch (Exception ex) { rst.rst = false; rst.err.code = (int)ResultCodeDefine.Error; rst.err.msg = ex.Message; FileLog.WriteLog("重发命令错误 (GetYdAlarmOfCmd_Ctrl)", ex.Message + ex.StackTrace); } return(rst); }
/// <summary> /// 下发继电器状态 /// </summary> /// <returns></returns> public APIRst YdMonitorOfIsRelay(string v0Fun, string dataValue, int module_id) { APIRst rst = new APIRst(); YdToGw gw = new YdToGw(user.Ledger, user.Uid); V0Fun fun = V0Fun.E; if (Enum.TryParse <V0Fun>(v0Fun, out fun) == false) { rst.rst = false; rst.err.code = (int)ResultCodeDefine.Error; rst.err.msg = "控制命令错误"; return(rst); } try { //根据Module_id找到对应的表v0_fun中继电器状态,保存设置的继电器状态 DataTable dt = bll.GetMm_idBymodule_id(module_id); int cnt = 0; if (dt.Rows.Count != 0) { int mm_id = CommFunc.ConvertDBNullToInt32(dt.Rows[0]["Mm_id"]); int fun_id = CommFunc.ConvertDBNullToInt32(dt.Rows[0]["Fun_id"]); cnt = bll.SaveIsRelayInfo(module_id, fun_id, dataValue); } else { rst.rst = false; rst.err.code = (int)ResultCodeDefine.Error; rst.err.msg = "该功能不存在与这个类型的电表中。"; return(rst); } if (cnt == 0) { rst.rst = false; rst.err.code = (int)ResultCodeDefine.Error; rst.err.msg = "更新继电器状态错误"; return(rst); } //向网关下发指令 gw.YdToGwCmd(module_id, fun, dataValue); rst.data = ""; } catch (Exception ex) { rst.rst = false; rst.err.code = (int)ResultCodeDefine.Error; rst.err.msg = ex.Message; FileLog.WriteLog("获取下发继电器状态错误 (YdMonitorOfIsRelay)", ex.Message + ex.StackTrace); } return(rst); }
/// <summary> /// 保存映射 /// </summary> /// <param name="Module_id"></param> /// <param name="data"></param> /// <returns></returns> public APIRst YdModuleOnMapInSave(int Module_id, DataModels data) { APIRst rst = new APIRst(); StringBuilder tagName = new StringBuilder(); try { int cnt = 0; YdToGw gw = new YdToGw(user.Ledger, user.Uid); DataTable dtSource = JsonHelper.ToDataTable(data.Data); foreach (DataRow dr in dtSource.Rows) { int action = CommFunc.ConvertDBNullToInt32(dr["Action"]); cnt = bll.YdModuleOnMapInSave(Module_id, dr); if (action == 0) { if (!string.IsNullOrEmpty(tagName.ToString())) { tagName.Append(","); } tagName.Append(CommFunc.ConvertDBNullToString(dr["TagName"])); } else { if (cnt == 1) { V0Fun fun = V0Fun.E; if (Enum.TryParse <V0Fun>(CommFunc.ConvertDBNullToString(dr["FunType"]), out fun) == true) { gw.BeginYdToGwCmd(Module_id, CommFunc.ConvertDBNullToInt32(dr["Fun_id"]), fun, CommFunc.ConvertDBNullToString(dr["DataValue"])); } } } } if (!string.IsNullOrEmpty(tagName.ToString())) { gw.BeginYdToGwConfig(tagName.ToString()); } rst.data = cnt; } catch (Exception ex) { rst.rst = false; rst.err.code = (int)ResultCodeDefine.Error; rst.err.msg = ex.Message; FileLog.WriteLog("映射保存错误(YdModuleOnMapInSave):" + ex.Message + ex.StackTrace); } return(rst); }
/// <summary> /// 下发控制 /// </summary> /// <param name="pStr">module_id</param> /// <param name="fun_id"></param> /// <returns></returns> public APIRst SendCtrl(string pStr, int fun_id) { APIRst rst = new APIRst(); YdToGw gw = new YdToGw(user.Ledger, user.Uid); try { foreach (string s in pStr.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { gw.YdToGwCmd(CommFunc.ConvertDBNullToInt32(s), fun_id); } rst.data = ""; } catch (Exception ex) { rst.rst = false; rst.err.code = (int)ResultCodeDefine.Error; rst.err.msg = ex.Message; FileLog.WriteLog("批量下发命令错误(SendCtrl)", ex.Message + ex.StackTrace); } return(rst); }
// 回调 public APIRst YdPrepPayInMdRecallPay(int pId, int pMid, string pTrade_no) { long log_id = CommFunc.ConvertDBNullToLong(pId); int module_id = CommFunc.ConvertDBNullToInt32(pMid); string out_trade_no = CommFunc.ConvertDBNullToString(pTrade_no); APIRst rst = new APIRst(); string msg = ""; string status = ""; bool result = false; bool pass = true; bool upSb = true; bool upDb = false; DateTime dtNow = DateTime.Now; long cmd_log_id = 0; #region 检查支付结果并更新数据库 System.Threading.Thread.Sleep(1000);/*一秒检查一次*/ object row = ""; object osObj = new { upSb = false, upDb = false, msg = "" }; try { if (string.IsNullOrEmpty(out_trade_no)) { result = bll.YdPrePayInMdOnRecallPay(log_id, 1, "", out msg, out cmd_log_id); } else { lock (ObjLock) {/*每次只能单独运行,目的是防止重复更新数据库的充值信息(重要事情)*/ pass = new WxPayAPI.WxPay().GetResult(out_trade_no, out status); if (pass == true) { result = bll.YdPrePayInMdOnRecallPay(log_id, 1, "", out msg, out cmd_log_id); } } } // if (result == true) { string msg2 = ""; if (cmd_log_id != 0) //立刻发送命令到网关 { /*充值命令*/ upSb = false; upSb = new YdToGw(user.Ledger, user.Uid).YdToGwAgain(cmd_log_id, out upDb, out msg2); } else { upDb = true;/*是否下发命令网关*/ } //#region 发送命令到网关(这款用于河北工业大学的SB设备,特殊定制化) //DataTable cmdPay = bll.GetGwPayData(module_id); //foreach (DataRow dr in cmdPay.Rows) //{ // decimal sbRdVal = CommFunc.ConvertDBNullToDecimal(dr["RdVal"]); // decimal sbSyZsVal = CommFunc.ConvertDBNullToDecimal(dr["SyZsVal"]); // CommandVModel cmd = ModelHandler<CommandVModel>.FillModel(dr); // cmd.Fun_id = 0; // cmd.FunType = "PaySb1"; // cmd.FunName = "充电"; // cmd.DataValue = (sbRdVal - sbSyZsVal).ToString("f2"); // cmd.Descr = "充电"; // cmd.IsUI = true; // cmd.IsNDb = true; // new YdToGw(user.Ledger, user.Uid).SendCmd(cmd); // // // cmd = ModelHandler<CommandVModel>.FillModel(dr); // cmd.Fun_id = 0; // cmd.FunType = "PaySb2"; // cmd.FunName = "增电"; // cmd.DataValue = sbSyZsVal.ToString("f2"); // cmd.Descr = "增电"; // cmd.IsUI = true; // cmd.IsNDb = true; // new YdToGw(user.Ledger, user.Uid).SendCmd(cmd); //} //#endregion //#region 发送短信 //bll.SendSms(log_id); //#endregion v4_pay_logVModel vpay = bll.GetV4_pay_log(log_id); osObj = new { upSb = upSb, upDb = upDb, msg = msg2 }; decimal chrgVal = 0, useVal = 0, rdVal = 0, syZsVal = 0; DataTable dtSource = bll.GetYdPostPayInMdOnList(module_id); if (dtSource.Rows.Count > 0) { chrgVal = CommFunc.ConvertDBNullToDecimal(dtSource.Rows[0]["ChrgVal"]); useVal = CommFunc.ConvertDBNullToDecimal(dtSource.Rows[0]["UseVal"]); rdVal = CommFunc.ConvertDBNullToDecimal(dtSource.Rows[0]["RdVal"]); syZsVal = CommFunc.ConvertDBNullToDecimal(dtSource.Rows[0]["SyZsVal"]); } row = new { ChrgVal = chrgVal.ToString("f2"), UseVal = useVal.ToString("f2"), RdVal = rdVal.ToString("f2"), SyVal = (rdVal - syZsVal).ToString("f2"), SyZsVal = syZsVal.ToString("f2") }; //判断是否拉闸 YDS6000.BLL.Exp.Syscont.ParameterBLL sysBll = new YDS6000.BLL.Exp.Syscont.ParameterBLL(user.Ledger, user.Uid); var dt = sysBll.GetAlarmCfg(); if (dt != null && dt.Rows.Count > 0) { decimal odValue = CommFunc.ConvertDBNullToDecimal(dt.Rows[0]["CfValue"]); int isClosed = CommFunc.ConvertDBNullToInt32(dt.Rows[0]["Rule"]); if (isClosed == 1) { if (rdVal <= odValue) { if (!YdBatchControlOfSsr("Ssr", "1", module_id.ToString())) { FileLog.WriteLog("拉闸失败(YdPrepPayInMdRecallPay)", "拉闸失败"); } } else { if (vpay.PayType == (int)PayType.pay) {/*充值动作才能合闸*/ if (!YdBatchControlOfSsr("Ssr", "0", module_id.ToString())) { FileLog.WriteLog("合闸失败(YdPrepPayInMdRecallPay)", "合闸失败"); } } } } } } object obj = new { pass = pass, row = row, osObj = osObj }; rst.rst = result; rst.data = obj; rst.err.msg = msg; } catch (Exception ex) { rst.rst = false; rst.err.code = (int)ResultCodeDefine.Error; rst.err.msg = ex.Message; FileLog.WriteLog("预付费错误(YdPrepPayInMdRecallPay)", ex.Message + ex.StackTrace); } #endregion return(rst); }