Example #1
0
        /// <summary>
        /// 主站请求写数据对象
        /// </summary>
        /// <param name="buffer"></param>
        /// <returns></returns>
        private DataItem getWriteDataAskItem(byte[] buffer)
        {
            IdentityCode identityCode = MyDataConvert.get数据表示符(buffer);
            DataItem     item         = null;

            switch (identityCode)
            {
            case IdentityCode.写价格表:
                item = new DataItem_A010(buffer);
                break;

            case IdentityCode.写结算日:
                item = new DataItem_A011(buffer);
                break;

            case IdentityCode.写购入金额:
                item = new DataItem_A013(buffer);
                break;

            case IdentityCode.写新密钥:
                item = new DataItem_A014(buffer);
                break;

            case IdentityCode.写标准时间:
                item = new DataItem_A015(buffer);
                break;

            case IdentityCode.写阀门控制:
                item = new DataItem_A017(buffer);
                break;

            case IdentityCode.出厂启用:
                item = new DataItem_A019(buffer);
                break;

            case IdentityCode.写地址:
                item = new DataItem_A018(buffer);
                break;

            case IdentityCode.写表底数:
                item = new DataItem_A016(buffer);
                break;

            default:
                break;
            }

            return(item);
        }
        /// <summary>
        /// 设置结算日
        /// </summary>
        /// <param name="settlementDay"></param>
        /// <param name="meter"></param>
        /// <returns></returns>
        public string SetSettlementDay(IoT_SetSettlementDay settlementDay, IoT_SettlementDayMeter meter)
        {
            string result = "";

            try
            {
                MongoDBHelper <Task> mongo_task = new MongoDBHelper <Task>();
                Task task = new Task();
                task.MeterMac  = meter.MeterNo.Trim();
                task.TaskDate  = QuShi.getDate();
                task.TaskID    = Guid.NewGuid().ToString(); //用于和指令进行进行关联
                task.TaskState = TaskState.Waitting;
                task.TaskType  = TaskType.TaskType_设置结算日期;  //
                //写任务
                mongo_task.Insert(CollectionNameDefine.TaskCollectionName, task);
                meter.TaskID = task.TaskID;

                //2.设置上传周期
                int JSDay   = (int)settlementDay.SettlementDay;
                int JSMonth = (int)settlementDay.SettlementMonth;

                DataItem_A011 item_A011 = new DataItem_A011(Convert.ToByte(new Random().Next(0, 255)), JSDay, JSMonth);
                Command       cmd       = new Command();
                cmd.TaskID         = task.TaskID;
                cmd.Identification = ((UInt16)item_A011.IdentityCode).ToString("X2");
                cmd.ControlCode    = (byte)ControlCode.WriteData;//设置参数
                cmd.DataLength     = Convert.ToByte(item_A011.Length);
                cmd.DataCommand    = MyDataConvert.BytesToHexStr(item_A011.GetBytes());
                cmd.Order          = 1;
                CommandDA.Insert(cmd);
            }
            catch (Exception e)
            {
                result = e.Message;
            }
            return(result);
        }
Example #3
0
        /// <summary>
        /// 处理主站请求的写操作,并返回应答数据对象
        /// </summary>
        /// <param name="identityCode"></param>
        /// <param name="ser"></param>
        /// <param name="oldItem"></param>
        /// <returns></returns>
        private DataItem DowithWriteData(IdentityCode identityCode, byte ser, DataItem oldItem)
        {
            //在该方法中将写入数据设置到响应变量中
            DataItem item = null;

            switch (identityCode)
            {
            case IdentityCode.写价格表:
                DataItem_A010 item_10 = oldItem as DataItem_A010;
                this.MeterType = ((byte)item_10.CT.CTMeterType).ToString().PadLeft(2, '0');
                if (出厂状态 && item_10.CT.CTMeterType == Common.Item.MeterType.金额表)
                {
                    this.出厂状态           = false;
                    this.IsUsedLadder   = item_10.CT.CTIsLadder;
                    this.Ladder         = item_10.CT.CTLadderNum;
                    this.Price1         = item_10.Price1;
                    this.Gas1           = item_10.UseGas1;
                    this.Price2         = item_10.Price2;
                    this.Gas2           = item_10.UseGas2;
                    this.Price3         = item_10.Price3;
                    this.Gas3           = item_10.UseGas3;
                    this.Price4         = item_10.Price4;
                    this.Gas4           = item_10.UseGas4;
                    this.Price5         = item_10.Price5;
                    this.SettlementType = ((byte)item_10.CT.CTJieSuanType).ToString().PadLeft(2, '0');    //结算类型
                    //设置初次转换为金额表的当前计价参数
                    this.CurrentLadder = 1;
                    this.CurrentPrice  = this.Price1;
                    this.LastGasPoint  = 0;   //上次结算时表底

                    if (this.IsUsedLadder && this.Ladder > this.CurrentLadder)
                    {
                        //计算下一个结算点
                        this.NextSettlementPointGas = this.Gas1;
                        this.SetNextSettlementDateTime();
                    }
                    else
                    {
                        //非阶梯价或无阶梯,-1表示正无穷大
                        this.NextSettlementPointGas = -1;
                    }
                }
                else if (!出厂状态 && item_10.CT.CTMeterType == Common.Item.MeterType.金额表)
                {
                    //调价
                    PricingPlan plan = new PricingPlan();

                    plan.IsUsedLadder   = item_10.CT.CTIsLadder;
                    plan.Ladder         = item_10.CT.CTLadderNum;
                    plan.Price1         = item_10.Price1;
                    plan.Gas1           = item_10.UseGas1;
                    plan.Price2         = item_10.Price2;
                    plan.Gas2           = item_10.UseGas2;
                    plan.Price3         = item_10.Price3;
                    plan.Gas3           = item_10.UseGas3;
                    plan.Price4         = item_10.Price4;
                    plan.Gas4           = item_10.UseGas4;
                    plan.Price5         = item_10.Price5;
                    plan.UseDate        = item_10.StartDate.ToString();
                    plan.MeterType      = ((byte)item_10.CT.CTMeterType).ToString();
                    plan.SettlementType = ((byte)item_10.CT.CTJieSuanType).ToString().PadLeft(2, '0');    //结算类型
                    plan.MeterNo        = this.Mac;
                    this.AddPlan(plan);
                }
                item = new DataItem_A010_Answer(ser, _st1);
                break;

            case IdentityCode.写结算日:
                DataItem_A011 item_11 = oldItem as DataItem_A011;

                this.SettlementDay   = item_11.JieSuanDay;
                this.SettlementMonth = item_11.JieSuanMonth;
                SetNextSettlementDateTime();
                item = new DataItem_A011_Answer(ser);
                break;

            case IdentityCode.写购入金额:
                DataItem_A013 item_13 = oldItem as DataItem_A013;
                if (this.lastBuySer != ser)
                {
                    if (this.lastBuySer != ser)
                    {
                        this.LastSettlementAmount += item_13.BuyMoney;    //写入购买金额
                        this.TotalTopUp           += item_13.BuyMoney;
                        this.CurrentBalance       += item_13.BuyMoney;
                        this.lastBuySer            = ser;
                    }
                }
                item = new DataItem_A013_ASK(ser, item_13.BuyIndex, item_13.BuyMoney);
                break;

            case IdentityCode.写新密钥:
                DataItem_A014 item_14 = oldItem as DataItem_A014;
                this.Key     = item_14.Key;
                this.MKeyVer = item_14.Version;
                item         = new DataItem_A014_ASK(ser, item_14.Version);
                break;

            case IdentityCode.写标准时间:
                item = new DataItem_A015_ASK(ser);
                break;

            case IdentityCode.写阀门控制:
                DataItem_A017 item_17 = oldItem as DataItem_A017;
                this.ValveState      = item_17.IsOpen == true ? "0" : "1";
                this._st1.ValveStatu = item_17.IsOpen;
                item = new DataItem_A017_ASK(ser, this._st1);
                break;

            case IdentityCode.出厂启用:
                item = new DataItem_A019(ser);
                break;

            case IdentityCode.写地址:
                item = new DataItem_A018_Answer(ser);
                break;

            default:
                break;
            }
            Update();
            return(item);
        }
Example #4
0
        /// <summary>
        /// 换表申请指令
        /// </summary>
        /// <returns></returns>
        public string SubmitASK(string taskID, IoT_Meter meter, decimal LJGas)
        {
            /*数据标识DI,序号SER,当前累计用量(金额),当前剩余用量(气量/金额),本阶梯周期已使用累计用量(气量)*/

            //创建一个任务
            MongoDBHelper <Task> mongo_task = new MongoDBHelper <Task>();
            Task task = new Task();

            task.MeterMac  = meter.MeterNo.Trim();
            task.TaskDate  = QuShi.getDate();
            task.TaskID    = taskID;                 //用于和指令进行进行关联
            task.TaskState = TaskState.Waitting;
            task.TaskType  = TaskType.TaskType_换表登记; //点火任务(DH),换表登记(HB)、开阀(KF)、关阀(GF)、充值(CZ)、调整价格(TJ)
            //写任务
            mongo_task.Insert(CollectionNameDefine.TaskCollectionName, task);

            Command cmd = new Command();
            byte    ser = Convert.ToByte(new Random().Next(0, 255));

            cmd = new Command();
            //1.写密钥
            //DataItem_A014 item_A014 = new DataItem_A014(ser, (byte)meter.MKeyVer, meter.MKey);//
            //cmd.TaskID = task.TaskID;
            //cmd.Identification = ((UInt16)item_A014.IdentityCode).ToString("X2");
            //cmd.ControlCode = (byte)ControlCode.WriteData;//写操作
            //cmd.DataLength = Convert.ToByte(item_A014.Length);
            //cmd.DataCommand = MyDataConvert.BytesToHexStr(item_A014.GetBytes());
            //cmd.Order = 1;
            //CommandDA.Insert(cmd);

            ////2.设置上传周期
            //DataItem_C105 item_C105 = new DataItem_C105(Convert.ToByte(new Random().Next(0, 255)), ReportCycleType.天周期, 1, 23, 59);
            //cmd = new Command();
            //cmd.TaskID = task.TaskID;
            //cmd.Identification = ((UInt16)item_C105.IdentityCode).ToString("X2");
            //cmd.ControlCode = (byte)ControlCode.CYWriteData;//设置参数
            //cmd.DataLength = Convert.ToByte(item_C105.Length);
            //cmd.DataCommand = MyDataConvert.BytesToHexStr(item_C105.GetBytes());
            //cmd.Order = 2;
            //CommandDA.Insert(cmd);

            ////3.设置报警参数
            //DataItem_C103 item_C103 = new DataItem_C103(Convert.ToByte(new Random().Next(0, 255)), new WaringSwitchSign() { 长期未使用切断报警 = true, 长期未与服务器通讯报警 = true });
            //cmd = new Command();
            //cmd.TaskID = task.TaskID;
            //cmd.Identification = ((UInt16)item_C103.IdentityCode).ToString("X2");
            //cmd.ControlCode = (byte)ControlCode.CYWriteData;//设置参数
            //cmd.DataLength = Convert.ToByte(item_C103.Length);
            //cmd.DataCommand = MyDataConvert.BytesToHexStr(item_C103.GetBytes());
            //cmd.Order = 3;
            //CommandDA.Insert(cmd);

            //4.写价格表
            DataItem_A010 item_A010 = null;
            CT            ct        = new CT(meter.MeterType == "00" ? MeterType.气量表 : MeterType.金额表,
                                             (bool)meter.IsUsed, (JieSuanType)Convert.ToInt16(meter.SettlementType.ToString()), meter.Ladder == null ? 1 : (int)meter.Ladder);

            item_A010           = new DataItem_A010(Convert.ToByte(new Random().Next(0, 255)), ct, DateTime.Now);
            item_A010.Price1    = (decimal)meter.Price1;
            item_A010.Price2    = (decimal)meter.Price2;
            item_A010.Price3    = (decimal)meter.Price3;
            item_A010.Price4    = (decimal)meter.Price4;
            item_A010.Price5    = (decimal)meter.Price5;
            item_A010.UseGas1   = (decimal)meter.Gas1;
            item_A010.UseGas2   = (decimal)meter.Gas2;
            item_A010.UseGas3   = (decimal)meter.Gas3;
            item_A010.UseGas4   = (decimal)meter.Gas4;
            item_A010.StartDate = DateTime.Now;

            cmd                = new Command();
            cmd.TaskID         = task.TaskID;
            cmd.Identification = ((UInt16)item_A010.IdentityCode).ToString("X2");
            cmd.ControlCode    = (byte)ControlCode.WriteData;//设置参数
            cmd.DataLength     = Convert.ToByte(item_A010.Length);
            cmd.DataCommand    = MyDataConvert.BytesToHexStr(item_A010.GetBytes());
            cmd.Order          = 4;
            CommandDA.Insert(cmd);

            //5.写结算日
            DataItem_A011 item_a011 = new DataItem_A011(Convert.ToByte(new Random().Next(0, 255)), Convert.ToByte(meter.SettlementDay));

            item_a011.JieSuanMonth = 1;//根据系统定义取值
            cmd                = new Command();
            cmd.TaskID         = task.TaskID;
            cmd.Identification = ((UInt16)item_a011.IdentityCode).ToString("X2");
            cmd.ControlCode    = (byte)ControlCode.WriteData;//设置参数
            cmd.DataLength     = Convert.ToByte(item_a011.Length);
            cmd.DataCommand    = MyDataConvert.BytesToHexStr(item_a011.GetBytes());

            cmd.Order = 5;
            CommandDA.Insert(cmd);
            //6.写换表指令
            DataItem_C107 item_C107 = new DataItem_C107(Convert.ToByte(new Random().Next(0, 255)), 0.0m, (decimal)meter.TotalTopUp, LJGas);

            cmd                = new Command();
            cmd.TaskID         = task.TaskID;
            cmd.Identification = ((UInt16)item_C107.IdentityCode).ToString("X2");
            cmd.ControlCode    = (byte)ControlCode.CYWriteData;//设置参数
            cmd.DataLength     = Convert.ToByte(item_C107.Length);
            cmd.DataCommand    = MyDataConvert.BytesToHexStr(item_C107.GetBytes());
            cmd.Order          = 6;
            CommandDA.Insert(cmd);
            return("");
        }