Ejemplo n.º 1
0
        private DataItem getCYReadDataAskItem(byte[] buffer)
        {
            IdentityCode identityCode = MyDataConvert.get数据表示符(buffer);
            DataItem     item         = null;

            switch (identityCode)
            {
            case IdentityCode.读时钟:
                item = new DataItem_C200(buffer);
                break;

            case IdentityCode.读切断报警参数:
                item = new DataItem_C201(buffer);
                break;

            case IdentityCode.读服务器信息:
                item = new DataItem_C202(buffer);
                break;

            case IdentityCode.读上传周期:
                item = new DataItem_C203(buffer);
                break;

            case IdentityCode.读公称流量:
                item = new DataItem_C204(buffer);
                break;
            }
            return(item);
        }
Ejemplo n.º 2
0
        private DataItem getCYWriteDataAskItem(byte[] buffer)
        {
            IdentityCode identityCode = MyDataConvert.get数据表示符(buffer);
            DataItem     item         = null;

            switch (identityCode)
            {
            case IdentityCode.设置服务器信息:
                item = new DataItem_C104(buffer);
                break;

            case IdentityCode.设置上传周期:
                item = new DataItem_C105(buffer);
                break;

            case IdentityCode.设置切断报警参数:
                item = new DataItem_C103(buffer);
                break;

            case IdentityCode.修正表数据:
                item = new DataItem_C102(buffer);
                break;

            case IdentityCode.设置公称流量:
                item = new DataItem_C101(buffer);
                break;

            case IdentityCode.换表:
                item = new DataItem_C107(buffer);
                break;
            }
            return(item);
        }
Ejemplo n.º 3
0
 public DataItem_ReadHistoryData(IdentityCode identityCode, byte ser)
 {
     this.dataUnits    = new byte[3];
     this.dataUnits[0] = (byte)((UInt16)identityCode >> 8);
     this.dataUnits[1] = (byte)(((UInt16)identityCode) & 0xff);
     this.dataUnits[2] = ser;
 }
Ejemplo n.º 4
0
 public DataItem_Answer(byte ser, IdentityCode identityCode)
 {
     Init();
     this.dataUnits[2] = ser;
     this.dataUnits[0] = (byte)(((ushort)identityCode) >> 8);
     this.dataUnits[1] = (byte)(((ushort)identityCode) & 0xff);
 }
Ejemplo n.º 5
0
        public static IdentityCode get数据表示符(byte[] buffer)
        {
            IdentityCode ident = IdentityCode.出厂启用;

            byte[] b = { buffer[1], buffer[0] };
            ident = (IdentityCode)BitConverter.ToUInt16(b, 0);
            return(ident);
        }
Ejemplo n.º 6
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);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 处理主站请求的创源参数设置操作并返回应答数据
        /// </summary>
        /// <param name="identityCode"></param>
        /// <param name="ser"></param>
        /// <param name="oldItem"></param>
        /// <returns></returns>
        private DataItem DowithCYWriteData(IdentityCode identityCode, byte ser, DataItem oldItem)
        {
            DataItem item = null;

            switch (identityCode)
            {
            case IdentityCode.设置上传周期:
                item = new DataItem_C105_Answer(ser);
                break;

            case IdentityCode.设置切断报警参数:
                item = new DataItem_C103_Answer(ser, this._st1, this._st2);
                break;

            case IdentityCode.设置服务器信息:
                item = new DataItem_C104_Answer(ser);
                break;

            case IdentityCode.修正表数据:
                item = new DataItem_C102_Answer(ser);
                DataItem_C102 item_C102 = oldItem as DataItem_C102;

                this.TotalTopUp     = item_C102.CurrentDaySYMoney + item_C102.CurrentLJMoney; //总充值金额
                this.LJMoney        = item_C102.CurrentLJMoney;                               //累计金额
                this.LastTotal      = item_C102.SettlementDayLJGas;                           //上次结算日表底
                this.CurrentBalance = item_C102.CurrentDaySYMoney;
                break;

            case IdentityCode.换表:
                item = new DataItem_C107_Answer(ser);
                DataItem_C107 item_C107 = oldItem as DataItem_C107;
                //本阶梯周期已使用累计用量
                //当前剩余金额
                this.LastTotal = this.TotalAmount - item_C107.LJGas;
                //计算气费,将价格调整的合适的阶梯
                this.ChangeCalculate(this, item_C107.SYMoney);
                this.TotalTopUp     = item_C107.SYMoney;
                this.CurrentBalance = item_C107.SYMoney;
                break;
            }
            Update();
            return(item);
        }
Ejemplo n.º 8
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);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 处理主站的读数据请求,并返回应答数据
        /// </summary>
        /// <param name="identityCode"></param>
        /// <param name="ser"></param>
        /// <returns></returns>
        private DataItem DowithReadData(IdentityCode identityCode, byte ser)
        {
            DataItem item = null;

            switch (identityCode)
            {
            case IdentityCode.读计量数据:
                item = new DataItem_901F_ANSWER(ser, DateTime.Now, this.TotalAmount, this.LJMoney, this.CurrentBalance, this.LastTotal, _st1, _st2);
                break;

            case IdentityCode.历史计量数据1:
                item     = this._item_01;
                item.SER = ser;
                break;

            case IdentityCode.历史计量数据2:
                item     = this._item_02;
                item.SER = ser;
                break;

            case IdentityCode.历史计量数据3:
                item     = this._item_03;
                item.SER = ser;
                break;

            case IdentityCode.历史计量数据4:
                item     = this._item_04;
                item.SER = ser;
                break;

            case IdentityCode.历史计量数据5:
                item     = this._item_05;
                item.SER = ser;
                break;

            case IdentityCode.历史计量数据6:
                item     = this._item_06;
                item.SER = ser;
                break;

            case IdentityCode.历史计量数据7:
                item     = this._item_07;
                item.SER = ser;
                break;

            case IdentityCode.历史计量数据8:
                item     = this._item_08;
                item.SER = ser;
                break;

            case IdentityCode.历史计量数据9:
                item     = this._item_09;
                item.SER = ser;
                break;

            case IdentityCode.历史计量数据10:
                item     = this._item_10;
                item.SER = ser;
                break;

            case IdentityCode.历史计量数据11:
                item     = this._item_11;
                item.SER = ser;
                break;

            case IdentityCode.历史计量数据12:
                item     = this._item_12;
                item.SER = ser;
                break;

            default:
                break;
            }
            return(item);
        }
        public override async Task <GenerateTaskDto> Create(CreateGenerateTaskDto input)
        {
            int currentUserId = (int)(base.AbpSession.UserId ?? 0);

            var isExist = _generateTaskRepository.GetAll().AsNoTracking().Any(x => x.Remark.Equals(input.Remark, StringComparison.OrdinalIgnoreCase));

            if (isExist)
            {
                throw new UserFriendlyException("任务名重复!");
            }

            var currentUser = await _userRepository.GetAsync(currentUserId);

            var generateCount = input.GenerateCount;

            if (currentUser.TotalCountCount + generateCount > currentUser.AllowCodeCount)
            {
                throw new UserFriendlyException($"当前用户只允许生成{currentUser.AllowCodeCount}个码,请联系管理员!");
            }

            //generate the task
            input.Created   = DateTime.Now;
            input.TaskStatu = (int)TaskStatu.Init;
            input.UserId    = (int)(base.AbpSession.UserId ?? 0);
            //input.IsAntiFake = input.AFCodeLength.HasValue && input.AFCodeLength.Value > 0;
            input.IsAntiFake       = true;
            input.IsSuccess        = false;
            input.AntiFackCodeType = (int)AntiFackCodeType.Letter;
            var generateTask = ObjectMapper.Map <GenerateTask>(input);
            var taskId       = await _generateTaskRepository.InsertAndGetIdAsync(generateTask);

            var currentTask = await _generateTaskRepository.GetAsync(taskId);

            try
            {
                var maxOne = await _identityCodeRepository.GetAll().AsNoTracking().OrderByDescending(x => x.Id).FirstOrDefaultAsync();

                long maxIndex = maxOne == null ? 0 : maxOne.Id;

                long startIndex = maxIndex;

                List <IdentityCode> codes = new List <IdentityCode>();

                //run the task
                for (int i = 0; i < input.GenerateCount; i++)
                {
                    var random = RandomHelper.GenerateRandomCode(12);
                    maxIndex++;
                    IdentityCode code = new IdentityCode()
                    {
                        Id           = maxIndex,
                        ComfuseCode  = random,
                        AntiFakeCode = input.IsAntiFake ? RandomHelper.GenerateAntiCode() : string.Empty,
                        Created      = input.Created,
                        IsActived    = true,
                        ProductId    = input.ProductId,
                        ScanTimes    = 0,
                        TaskId       = taskId,
                        Code         = $"{random.Substring(0, 6)}{maxIndex.ToString().PadLeft(8, '0')}{random.Substring(6)}",
                    };
                    codes.Add(code);
                }

                var codeNums = codes.Select(x => $"{_defaultUrl}{x.Code}");

                var fileUrl = await this.GenerateFile(input.Remark, codeNums);

                int count = await _identityCodeRepository.BatchInsert(codes);

                currentTask.StartOne     = startIndex + 1;
                currentTask.EndOne       = maxIndex;
                currentTask.TaskStatu    = TaskStatu.Completed;
                currentTask.IsSuccess    = true;
                currentTask.DataFilePath = fileUrl;

                currentUser.TotalCountCount += count;

                await _userRepository.UpdateAsync(currentUser);
            }
            catch (Exception ex)
            {
                currentTask.IsSuccess  = false;
                currentTask.TaskStatu  = TaskStatu.Completed;
                currentTask.FailReason = ex.Message;
            }

            var result = await _generateTaskRepository.UpdateAsync(currentTask);

            return(ObjectMapper.Map <GenerateTaskDto>(result));
        }
Ejemplo n.º 11
0
 public ExcuteState()
 {
     m_State       = IdentityCode.Fail;
     m_description = "初始化";
 }