/// <summary> /// 更新设置结算日任务状态 /// </summary> /// <param name="taskID"></param> /// <param name="state">状态:0 申请 1 完成 2 撤销 3 失败</param> /// <returns></returns> public string SettlementDaySetFinished(string taskID, TaskState state) { string result = ""; string configName = System.Configuration.ConfigurationManager.AppSettings["defaultDatabase"]; //Linq to SQL 上下文对象 DataContext dd = new DataContext(System.Configuration.ConfigurationManager.ConnectionStrings[configName].ConnectionString); try { TaskManageService tms = new TaskManageService(); IoT_SettlementDayMeter dbinfo = dd.GetTable <IoT_SettlementDayMeter>().Where(p => p.TaskID == taskID).SingleOrDefault(); dbinfo.State = Convert.ToChar(((byte)state).ToString()); dbinfo.FinishedDate = DateTime.Now; IoT_SetSettlementDay uploadCycle = dd.GetTable <IoT_SetSettlementDay>().Where(p => p.ID == dbinfo.ID).SingleOrDefault(); Meter meter = tms.GetMeter(dbinfo.MeterNo.Trim()); if (meter != null) { meter.SettlementDay = (int)uploadCycle.SettlementDay; meter.SettlementMonth = (int)uploadCycle.SettlementMonth; meter.SetNextSettlementDateTime(); result = new TaskManageDA().UpdateMeter(meter); } int iCount = dd.GetTable <IoT_SettlementDayMeter>().Where(p => p.TaskID == taskID && p.State.ToString() == "0").Count(); if (iCount == 1) { uploadCycle.State = Convert.ToChar(((byte)state).ToString()); } if (result != "") { throw new Exception(result); } // 更新操作 dd.SubmitChanges(); if (state == TaskState.Undo) { //撤销操作需要更新任务队列数据 new M_SetParameterService().UnSetParameter(taskID); } if (state == TaskState.Finished) { IoT_Meter meterInfo = dd.GetTable <IoT_Meter>().Where(p => p.MeterNo == dbinfo.MeterNo).SingleOrDefault(); meterInfo.SettlementDay = (int)uploadCycle.SettlementDay; meterInfo.SettlementMonth = (int)uploadCycle.SettlementMonth; // 更新操作 dd.SubmitChanges(); } } catch (Exception e) { result = e.Message; } return(result); }
/// <summary> /// 获取结算时间 /// </summary> /// <param name="meterNo"></param> /// <returns></returns> public DateTime GetMeterSettleDate(string meterNo) { DateTime settleDate = new DateTime(); TaskManageDA MeterDA = new TaskManageDA(); Meter meter = MeterDA.QueryMeter(meterNo); settleDate = Convert.ToDateTime(meter.SettlementDateTime); return(settleDate); }
/// <summary> /// 执行点火操作,更新表点火状态,并更新表信息为点火指定参数同时提交点火任务给通信层 /// </summary> /// <param name="meters"></param> /// <returns></returns> public string Do(List <IoT_Meter> meters) { MeterManageService _mms = new MeterManageService(); DianhuoDA dhDA = new DianhuoDA(); TaskManageDA tmd = new TaskManageDA(); foreach (IoT_Meter m in meters) { if (m.MeterState.ToString() == "5") { IoT_Meter _oldMeter = MeterManageService.QueryMeter(m.MeterNo); if (_oldMeter == null) { return(string.Format("点火失败,表{0}信息不存在!", m.MeterNo)); } if (_oldMeter.MeterState == '0') { return(string.Format("表{0}已点火完成,不能重复操作。", m.MeterNo)); } Meter _meter = tmd.QueryMeter(m.MeterNo.Trim()); tmd.UpdateMeter(m); IoT_SetAlarm alarmPar = new IoT_SetAlarm(); alarmPar.SwitchTag = "000000000 "; alarmPar.Par1 = 30; alarmPar.Par2 = 10; alarmPar.Par3 = 30; alarmPar.Par4 = ""; alarmPar.Par5 = 10; alarmPar.Par6 = 30; alarmPar.Par7 = 30; alarmPar.Par8 = 30; alarmPar.Par9 = "00"; new SetAlarmService().UpdateMeterAlarmPar(m.MeterNo.Trim(), alarmPar); //点火状态,需要修改表的通讯密钥 Message msg = _mms.Edit(m); if (msg.Result == false) { return(string.Format("点火失败,原因:登记表{0}点火信息失败,原因:{1}", m.MeterNo, msg.TxtMessage)); } string result = dhDA.SubmitDianHuoASK(_oldMeter); new UserManageService().UpadteUserStatus("2", m.UserID);//用户表状态置为 撤销点火 if (result != "") { _mms.Edit(_oldMeter); } } } return(""); }
/// <summary> /// 计费计算和调价处理 /// </summary> /// <param name="meter"></param> /// <param name="dataItem"></param> /// <returns></returns> private decimal CalculateGasFee(Meter meter, SubmitData dataItem) { if (meter.Ladder <= 0) { meter.Ladder = 1; } //仅计算气费 CalculateGasFee(meter, dataItem.LJGas, dataItem.ReadDate.ToString("yyyy-MM-dd HH:mm:ss")); string result = new TaskManageDA().UpdateMeter(meter); if (result != "") { Console.WriteLine("更新Meter对象数据到Mongodb失败,原因:" + result); } return(meter.CurrentBalance); }
/// <summary> /// 换标登记动作 /// </summary> /// <param name="taskID"></param> /// <param name="state"></param> /// <returns></returns> public Message Dengji(IoT_ChangeMeter info) { Message m; string configName = System.Configuration.ConfigurationManager.AppSettings["defaultDatabase"]; DataContext dd = new DataContext(System.Configuration.ConfigurationManager.ConnectionStrings[configName].ConnectionString); try { //查看该申请单的状态是否是"换表登记"或者"换表完成"状态,如果是该状态则填写换表登记失败 IoT_ChangeMeter dbinfo = dd.GetTable <IoT_ChangeMeter>().Where(p => p.CompanyID == info.CompanyID && p.ID == info.ID).SingleOrDefault(); //判断当前的申请单的状态 if (dbinfo.State == '2')//换表登记状态下提示 { return(new Message() { Result = false, TxtMessage = "不能重复提交换表登记!" }); } else if (dbinfo.State == '3')//换表完成状态下提示 { return(new Message() { Result = false, TxtMessage = "该用户已换表成功,若需要换表请重新填写申请单!" }); } Table <IoT_MeterHistory> tbHistory = dd.GetTable <IoT_MeterHistory>(); Table <IoT_Meter> tbMeter = dd.GetTable <IoT_Meter>(); IoT_Meter Meter_Model = tbMeter.Where(u => u.MeterNo == info.OldMeterNo && u.UserID == info.UserID).FirstOrDefault(); List <IoT_Meter> lstMeter_ModelExect = tbMeter.Where(u => u.MeterNo == info.NewMeterNo).ToList(); //判断是否存在表具讯息 if (Meter_Model == null) { return(new Message() { Result = false, TxtMessage = "换表登记失败,该用户暂无表具信息!" }); } //判断新表号是否已经存在 if (lstMeter_ModelExect.Count > 0) { return(new Message() { Result = false, TxtMessage = "表号:" + info.NewMeterNo + "已存在,请更换表号" }); } IoT_MeterHistory History_Model = new IoT_MeterHistory() {//历史数据实体对象 ID = Meter_Model.ID, MeterNo = Meter_Model.MeterNo, MeterType = Meter_Model.MeterType, CompanyID = Meter_Model.CompanyID, UserID = Meter_Model.UserID, TotalAmount = Meter_Model.TotalAmount, TotalTopUp = Meter_Model.TotalTopUp, Direction = Meter_Model.Direction, InstallDate = Meter_Model.InstallDate, Price1 = Meter_Model.Price1, Gas1 = Meter_Model.Gas1, Price2 = Meter_Model.Price2, Gas2 = Meter_Model.Gas2, Price3 = Meter_Model.Price3, Gas3 = Meter_Model.Gas3, Price4 = Meter_Model.Price4, Gas4 = Meter_Model.Gas4, Price5 = Meter_Model.Price5, IsUsed = Meter_Model.IsUsed, Ladder = Meter_Model.Ladder, SettlementType = Meter_Model.SettlementType, SettlementDay = Meter_Model.SettlementDay, ValveState = Meter_Model.ValveState, MeterState = Meter_Model.MeterState, ReadDate = Meter_Model.ReadDate, RemainingAmount = Meter_Model.RemainingAmount, LastTotal = Meter_Model.LastTotal, PriceCheck = Meter_Model.PriceCheck, MKeyVer = Meter_Model.MKeyVer, MKey = Meter_Model.MKey, EnableMeterDate = Meter_Model.EnableMeterDate, EnableMeterOper = Meter_Model.EnableMeterOper, UploadCycle = Meter_Model.UploadCycle, SettlementMonth = Meter_Model.SettlementMonth }; IoT_Meter Meter_Add = new IoT_Meter() {//表实体对象 MeterNo = info.NewMeterNo, MeterType = Meter_Model.MeterType, CompanyID = info.CompanyID, UserID = info.UserID, TotalAmount = info.ChangeUseSum, //新表表底 TotalTopUp = Meter_Model.TotalTopUp, //需要更新 Direction = Meter_Model.Direction, InstallDate = Meter_Model.InstallDate, //需要更新 Price1 = Meter_Model.Price1, Gas1 = Meter_Model.Gas1, Price2 = Meter_Model.Price2, Gas2 = Meter_Model.Gas2, Price3 = Meter_Model.Price3, Gas3 = Meter_Model.Gas3, Price4 = Meter_Model.Price4, Gas4 = Meter_Model.Gas4, Price5 = Meter_Model.Price5, IsUsed = Meter_Model.IsUsed, Ladder = Meter_Model.Ladder, SettlementType = Meter_Model.SettlementType, SettlementDay = Meter_Model.SettlementDay, ValveState = Meter_Model.ValveState, MeterState = Meter_Model.MeterState, ReadDate = Meter_Model.ReadDate, RemainingAmount = Meter_Model.RemainingAmount, //需要更新 LastTotal = Meter_Model.LastTotal, //需要更新 PriceCheck = Meter_Model.PriceCheck, //需要更新 MKeyVer = Meter_Model.MKeyVer, MKey = Meter_Model.MKey, EnableMeterDate = Meter_Model.EnableMeterDate, //需要更新 EnableMeterOper = Meter_Model.EnableMeterOper, //需要更新 UploadCycle = Meter_Model.UploadCycle, SettlementMonth = Meter_Model.SettlementMonth }; //实现数据操作 dbinfo.State = info.State; dbinfo.ChangeUseSum = info.ChangeUseSum; dbinfo.OldGasSum = info.OldGasSum; dbinfo.ChangeGasSum = info.ChangeGasSum; dbinfo.RemainingAmount = info.RemainingAmount; dbinfo.NewMeterNo = info.NewMeterNo; dbinfo.TaskID = Guid.NewGuid().ToString(); tbMeter.DeleteOnSubmit(Meter_Model); //删除表 tbMeter.InsertOnSubmit(Meter_Add); //新增表 tbHistory.InsertOnSubmit(History_Model); //新增历史表 dd.SubmitChanges(); //获取meterId Meter_Add = tbMeter.Where(u => u.MeterNo == info.NewMeterNo && u.UserID == info.UserID).FirstOrDefault(); //此处调用接口 if (Meter_Add.MeterType == "01") { TaskManageService tms = new TaskManageService(); //查原表数据 Meter _m = tms.GetMeter(info.OldMeterNo.Trim()); //_m.TotalAmount = (decimal)info.OldGasSum; //金额表 //1、换表结算 decimal LastSettlementGas = _m.LastTotal;//原表上次结算时的表底数 //换表用气量 = 换表时表底 - 上次结算表底 dbinfo.ChangeUseSum = info.ChangeGasSum - LastSettlementGas; _m = new Settlement().CalculateGasFee(_m, (decimal)info.ChangeGasSum, "", true); Meter_Add.TotalTopUp = _m.CurrentBalance; //新表上总金额(就是换表的余额) Meter_Add.RemainingAmount = _m.CurrentBalance; //新表上剩余金额(就是换表的余额) Meter_Add.LastTotal = Meter_Add.TotalAmount; //添加mongo队列表对象 string str = new TaskManageDA().ChangeMeterInsert(Meter_Add, _m.CurrentLadder, _m.CurrentPrice, (decimal)dbinfo.ChangeUseSum); if (str != "") { throw new Exception(str); } //2、登记换表操作任务(登记操作指令) str = new M_HuanBiaoService().SubmitASK(dbinfo.TaskID, Meter_Add, (decimal)dbinfo.ChangeUseSum); if (str != "") { throw new Exception(str); } } else { //气量表 } // 更新操作 dd.SubmitChanges(); m = new Message() { Result = true, TxtMessage = JSon.TToJson <IoT_ChangeMeter>(info) }; } catch (Exception e) { m = new Message() { Result = false, TxtMessage = "换表登记失败!" + e.Message }; } return(m); }