Example #1
0
        private bool ImportDataToMQ(CardServiceModel model)
        {
            try
            {
                bool           result    = false;
                MonthCardModel sendmodel = new MonthCardModel()
                {
                    CarOwnerName = model.CarOwnerName,
                    CarNo        = model.CarNo,
                    Delete       = model.Enable ? false : true,
                    CarTypeGuid  = model.CarTypeGuid,
                    Locked       = model.Locked,
                    StartDate    = model.StartDate.Date.AddHours(0).AddMinutes(0).AddSeconds(0).ToString("yyyy-MM-dd HH:mm:ss"),
                    EndDate      = model.EndDate.Date.AddDays(1).AddSeconds(-1).ToString("yyyy-MM-dd HH:mm:ss") //结束时间截止到23:59:59
                };

                CommandEntity <MonthCardModel> entity = new CommandEntity <MonthCardModel>()
                {
                    command = BussineCommand.MonthCar,
                    idMsg   = Convert.ToBase64String(Guid.NewGuid().ToByteArray()),
                    message = sendmodel
                };

                result = m_rabbitMQ.SendMessageForRabbitMQ("发送月卡命令", m_serializer.Serialize(entity), entity.idMsg, model.ParkCode);
                return(result);
            }
            catch (Exception ex)
            {
                m_ilogger.LogFatal(LoggerLogicEnum.Tools, "", model.ParkCode, model.CarNo, "CameraUpdateTool.MainForm.ImportDataToMQ", "下发月卡时发生异常", ex.ToString());
                return(false);
            }
        }
Example #2
0
        public static bool Execute(string parkingCode, string guid, string carNo, DateTime beginTime, DateTime lastTime)
        {
            if (string.IsNullOrEmpty(guid) || string.IsNullOrEmpty(carNo) || beginTime == null || lastTime == null)
            {
                return(false);
            }

            ILogger        m_ilogger    = new Logger.Logger();
            ISerializer    m_serializer = new JsonSerializer(m_ilogger);
            RabbitMQSender m_rabbitMQ   = new RabbitMQSender(m_ilogger, m_serializer);
            IDatabase      db;

            db = FollowRedisHelper.GetDatabase(0);
            RedisValue parklotredis = db.HashGet("ParkLotList", parkingCode);

            if (parklotredis != RedisValue.Null)
            {
                ParkLotModel parklotmodel = m_serializer.Deserialize <ParkLotModel>(parklotredis);
                if (parklotmodel != null)
                {
                    List <string> drivewaylist = parklotmodel.DrivewayList; //所有车道
                    if (drivewaylist != null)
                    {
                        //要广播的缴费数据
                        TempCardModel tempCarModel = new TempCardModel();
                        tempCarModel.Guid       = guid;
                        tempCarModel.CarNo      = carNo;
                        tempCarModel.BeginTime  = beginTime;
                        tempCarModel.LatestTime = lastTime;
                        tempCarModel.HavePaid   = true;

                        foreach (var drivewayguid in drivewaylist)
                        {
                            DrivewayModel drivewaymodel = m_serializer.Deserialize <DrivewayModel>(db.HashGet("DrivewayList", drivewayguid));
                            //广播到所有出口车道
                            if (drivewaymodel.Type == DrivewayType.Out)
                            {
                                CommandEntity <TempCardModel> sendCommand = new CommandEntity <TempCardModel>()
                                {
                                    command = BussineCommand.TempCar,
                                    idMsg   = Convert.ToBase64String(Guid.NewGuid().ToByteArray()),
                                    message = tempCarModel
                                };

                                if (m_rabbitMQ.SendMessageForRabbitMQ("发送缴费数据广播命令", m_serializer.Serialize(sendCommand), drivewaymodel.DeviceMacAddress, parkingCode))
                                {
                                    //广播成功
                                }
                            }
                        }
                    }
                }
            }
            return(true);
        }
Example #3
0
        /// <summary>
        /// 发送剩余车位数量给相机
        /// </summary>
        /// <param name="remainingNumber">剩余车位数</param>
        /// <param name="parkingCode">停车场编号</param>
        /// <param name="m_ilogger"></param>
        /// <param name="m_serializer"></param>
        /// <returns></returns>
        private static bool SpaceNumberToCamera(int remainingNumber, string parkingCode, ILogger m_ilogger, ISerializer m_serializer)
        {
            CommandEntity <int> entity = new CommandEntity <int>()
            {
                command = BussineCommand.RemainingSpace,
                idMsg   = Convert.ToBase64String(Guid.NewGuid().ToByteArray()),
                message = remainingNumber
            };
            RabbitMQSender rabbitMq = new RabbitMQSender(m_ilogger, m_serializer);

            return(rabbitMq.SendMessageForRabbitMQ("发送剩余车位数", m_serializer.Serialize(entity), entity.idMsg, parkingCode));
        }
Example #4
0
        public void Execute(IJobExecutionContext context)
        {
            Task.Factory.StartNew(() => {
                //从redis获取进场待广播数据进行广播

                ILogger m_ilogger         = new Logger.Logger();
                ISerializer m_serializer  = new JsonSerializer(m_ilogger);
                RabbitMQSender m_rabbitMQ = new RabbitMQSender(m_ilogger, m_serializer);

                IDatabase db = FollowRedisHelper.GetDatabase(2);
                IServer srv  = FollowRedisHelper.GetCurrentServer();

                IEnumerable <RedisKey> allParkingCode = srv.Keys(2);
                foreach (var parkingcode in allParkingCode)
                {
                    HashEntry[] hashentryarray = db.HashGetAll(parkingcode);               //所有实体
                    string[] allCarNo          = db.HashKeys(parkingcode).ToStringArray(); //所有车牌

                    db = FollowRedisHelper.GetDatabase(0);
                    RedisValue parklotredis = db.HashGet("ParkLotList", parkingcode.ToString());
                    if (parklotredis != RedisValue.Null)
                    {
                        ParkLotModel parklotmodel  = m_serializer.Deserialize <ParkLotModel>(parklotredis);
                        List <string> drivewaylist = parklotmodel.DrivewayList; //所有车道
                        if (drivewaylist != null)
                        {
                            foreach (var carno in allCarNo)
                            {
                                HashEntry hashenrty = hashentryarray.SingleOrDefault(o => o.Name == carno);
                                string enterdata    = hashenrty.Value; //要广播的入场数据
                                foreach (var drivewayguid in drivewaylist)
                                {
                                    DrivewayModel drivewaymodel = m_serializer.Deserialize <DrivewayModel>(db.HashGet("DrivewayList", drivewayguid));
                                    if (drivewaymodel.Type == DrivewayType.Out)
                                    {
                                        //广播到出口车道
                                        string sendmsg = string.Format("{{\"command\":{0},\"idMsg\":\"{1}\",\"message\":{2}}}",
                                                                       13, Convert.ToBase64String(Guid.NewGuid().ToByteArray()), enterdata);
                                        if (m_rabbitMQ.SendMessageForRabbitMQ("发送入场数据广播命令", sendmsg, drivewaymodel.DeviceMacAddress, parkingcode))
                                        {
                                            //广播成功,移除缓存的数据
                                            db = FollowRedisHelper.GetDatabase(2);
                                            db.HashDelete(parkingcode, carno);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            });
        }
Example #5
0
        public bool CarNumberRepushToCamera(CameraUpdateModel model, string parkingCode)
        {
            CommandEntity <CameraUpdateModel> entity = new CommandEntity <CameraUpdateModel>()
            {
                command = BussineCommand.CameraUpdate,
                idMsg   = Convert.ToBase64String(Guid.NewGuid().ToByteArray()),
                message = model
            };
            ILogger        logger     = new Logger();
            ISerializer    serializer = new JsonSerializer(logger);
            RabbitMQSender m_rabbitMQ = new RabbitMQSender(logger, serializer);

            return(m_rabbitMQ.SendMessageForRabbitMQ("发送相机升级命令", serializer.Serialize(entity), entity.idMsg, parkingCode));
        }
Example #6
0
        /// <summary>
        /// 发送开闸命令
        /// </summary>
        /// <param name="model">开闸模型实体参数</param>
        /// <returns></returns>
        public bool OpenGateToCamera(OpenGateModel model, string parkingCode)
        {
            CommandEntity <OpenGateModel> entity = new CommandEntity <OpenGateModel>()
            {
                command = BussineCommand.OpenGate,
                idMsg   = Convert.ToBase64String(Guid.NewGuid().ToByteArray()),
                message = new OpenGateModel()
                {
                    DeviceIdentify = model.DeviceIdentify,
                    OpenType       = model.OpenType,
                    Operator       = model.Operator,
                    Remark         = model.Remark
                }
            };

            return(m_rabbitMQ.SendMessageForRabbitMQ(string.Format("发送{0}开闸命令", model.OpenType.GetDesc()), m_serializer.Serialize(entity), entity.idMsg, parkingCode));
        }
Example #7
0
        /// <summary>
        /// 发送创建新车场的命令
        /// </summary>
        /// <param name="parkingCode">停车场编码</param>
        /// <returns></returns>
        private bool SendNewParkLotToCameras(string parkingCode)
        {
            try
            {
                CommandEntity <bool> entity = new CommandEntity <bool>()
                {
                    command = BussineCommand.NewParkLot,
                    idMsg   = Convert.ToBase64String(Guid.NewGuid().ToByteArray()),
                    message = true
                };

                return(m_rabbitMQ.SendMessageForRabbitMQ("发送新建车场命令", m_serializer.Serialize(entity), entity.idMsg, parkingCode));
            }
            catch (Exception ex)
            {
                m_logger.LogFatal(LoggerLogicEnum.Bussiness, "", parkingCode, "", "Fujica.com.cn.Business.ParkLot.ParkLotManager.SendNewParkLotToCameras", "下发创建新车场发生异常", ex.ToString());
                return(false);
            }
        }
Example #8
0
        /// <summary>
        /// 下发通行限制
        /// </summary>
        /// <param name="model">通行限制模型</param>
        /// <param name="drivewayList">停车场车道集合</param>
        /// <returns></returns>
        public bool SendTrafficRestriction(TrafficRestrictionModel model, List <DrivewayModel> drivewayList)
        {
            bool result = false;

            LastErrorDescribe = BussinessErrorCodeEnum.BUSINESS_MQ_SEND_ERROR.GetDesc();
            try
            {
                //根据车道集合一条一条发送给相机,减少相机计算
                foreach (var drivewayModel in drivewayList)
                {
                    TrafficRestrictionDetialModel sendmodel = new TrafficRestrictionDetialModel()
                    {
                        Guid           = model.Guid,
                        CarTypeGuid    = model.CarTypeGuid,
                        DeviceIdentify = drivewayModel.DeviceMacAddress,
                        AssignDays     = model.AssignDays,
                        StartTime      = model.StartTime,
                        EndTime        = model.EndTime,
                        IsDelete       = model.DrivewayGuid.Count(m => m == drivewayModel.Guid) > 0 ? false : true
                    };

                    CommandEntity <TrafficRestrictionDetialModel> entity = new CommandEntity <TrafficRestrictionDetialModel>()
                    {
                        command = BussineCommand.Restrict,
                        idMsg   = Convert.ToBase64String(Guid.NewGuid().ToByteArray()),
                        message = sendmodel
                    };
                    result = m_rabbitMQ.SendMessageForRabbitMQ("发送通行限制指令", m_serializer.Serialize(entity), entity.idMsg, model.ParkCode);
                    if (!result)
                    {
                        break;
                    }
                }
                return(result);
            }
            catch (Exception ex)
            {
                m_logger.LogFatal(LoggerLogicEnum.Bussiness, model.Guid, model.ParkCode, "", "Fujica.com.cn.Business.ParkLot.TrafficRestrictionManager.SendTrafficRestriction", "下发通行限制时发生异常", ex.ToString());
                LastErrorDescribe = BussinessErrorCodeEnum.BUSINESS_MQ_SEND_ERROR.GetDesc();
                return(false);
            }
        }
Example #9
0
        /// <summary>
        /// 发送语音指令给相机
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        private bool SendVoiceToMq(VoiceCommandModel model)
        {
            try
            {
                //需要下发的数据
                List <VoiceCommandDetialModel> sendList = new List <VoiceCommandDetialModel>();
                foreach (var item in model.CommandList)
                {
                    sendList.Add(new VoiceCommandDetialModel()
                    {
                        CommandType    = item.CommandType.ToString(),
                        ShowText       = item.ShowText,
                        ShowVoice      = item.ShowVoice,
                        DeviceIdentify = model.DeviceMacAddress
                    });
                }

                //每次只发送10条,分批发完(缓解相机的压力,担心相机缓冲区不够大)
                int itemCount = 10;

                for (int i = 0; i < Math.Ceiling((double)sendList.Count() / itemCount); i++)
                {
                    CommandEntity <List <VoiceCommandDetialModel> > entity = new CommandEntity <List <VoiceCommandDetialModel> >()
                    {
                        command = BussineCommand.Remind,
                        idMsg   = Convert.ToBase64String(Guid.NewGuid().ToByteArray()),
                        message = sendList.Skip(i * itemCount).Take(itemCount).ToList()
                    };

                    m_rabbitMQ.SendMessageForRabbitMQ("发送语音指令命令", m_serializer.Serialize(entity), entity.idMsg, model.ParkCode);
                }
                return(true);
            }
            catch (Exception ex)
            {
                m_logger.LogFatal(LoggerLogicEnum.Bussiness, "", model.ParkCode, "", "Fujica.com.cn.Business.SystemSet.VoiceCommandManager.SendVoiceToMq", "下发语音指令数据时发生异常", ex.ToString());
                return(false);
            }
        }
Example #10
0
        /// <summary>
        /// 发送储值卡数据到相机
        /// </summary>
        /// <returns></returns>
        private static bool SendValueCarToCameras(CardServiceModel model, ILogger m_ilogger, ISerializer m_serializer)
        {
            ValueCardModel sendmodel = new ValueCardModel()
            {
                CarOwnerName = model.CarOwnerName,
                CarNo        = model.CarNo,
                Delete       = model.Enable ? false : true,
                CarTypeGuid  = model.CarTypeGuid,
                Locked       = false,
                Balance      = model.Balance
            };

            CommandEntity <ValueCardModel> entity = new CommandEntity <ValueCardModel>()
            {
                command = BussineCommand.ValueCar,
                idMsg   = Convert.ToBase64String(Guid.NewGuid().ToByteArray()),
                message = sendmodel
            };

            RabbitMQSender rabbitMq = new RabbitMQSender(m_ilogger, m_serializer);

            return(rabbitMq.SendMessageForRabbitMQ("发送储值卡命令", m_serializer.Serialize(entity), entity.idMsg, model.ParkCode));
        }
Example #11
0
        /// <summary>
        /// 发送月卡数据到相机
        /// </summary>
        /// <returns></returns>
        private static bool SendMonthCarToCameras(CardServiceModel model, ILogger m_ilogger, ISerializer m_serializer)
        {
            MonthCardModel sendmodel = new MonthCardModel()
            {
                CarOwnerName = model.CarOwnerName,
                CarNo        = model.CarNo,
                Delete       = model.Enable ? false : true,
                CarTypeGuid  = model.CarTypeGuid,
                Locked       = model.Locked,
                StartDate    = model.StartDate.Date.AddHours(0).AddMinutes(0).AddSeconds(0).ToString("yyyy-MM-dd HH:mm:ss"),
                EndDate      = model.EndDate.Date.AddDays(1).AddSeconds(-1).ToString("yyyy-MM-dd HH:mm:ss") //结束时间截止到23:59:59
            };

            CommandEntity <MonthCardModel> entity = new CommandEntity <MonthCardModel>()
            {
                command = BussineCommand.MonthCar,
                idMsg   = Convert.ToBase64String(Guid.NewGuid().ToByteArray()),
                message = sendmodel
            };

            RabbitMQSender rabbitMq = new RabbitMQSender(m_ilogger, m_serializer);

            return(rabbitMq.SendMessageForRabbitMQ("发送月卡命令", m_serializer.Serialize(entity), entity.idMsg, model.ParkCode));
        }