Пример #1
0
        public AbnormalStayWarning GetSettingTime(Action <string, eOutputType> output)
        {
            AbnormalStayWarning warning = SelfDber.Entity <AbnormalStayWarning>("where IsDeleted=0");

            if (warning == null)
            {
                output("未设置异常停留位置预警信息!", eOutputType.Error);
                return(null);
            }
            if (warning.StopTime <= 0)
            {
                output("设置停车时间限制小于等于0,请正确设置!", eOutputType.Error);
                return(null);
            }
            if (warning.StopNumber <= 0)
            {
                output("设置停车数量限制小于等于0,请正确设置!", eOutputType.Error);
                return(null);
            }
            return(warning);
        }
Пример #2
0
        /// <summary>
        /// 监测车辆报修数据
        /// </summary>
        /// <param name="output"></param>
        /// <returns></returns>
        public void SaveToCarRepair(Action <string, eOutputType> output)
        {
            //查询全部在途车辆
            List <CMCSTBBUYFUELTRANSPORT> list = this.SelfDber.Entities <CMCSTBBUYFUELTRANSPORT>("where ISFINISH = 0 and STEPNAME = '在途' order by STARTTIME desc", null);

            foreach (var item in list)
            {
                CarRepair entity = SelfDber.Entity <CarRepair>(string.Format(" where CARID='{0}' and REPAIRSTATUS=0", item.AUTOTRUCKID));
                if (entity != null)
                {
                    item.ISREPAIRERR = 1;
                    this.SelfDber.Update(item);
                }
            }
        }
Пример #3
0
        /// <summary>
        /// 保存矿发数据
        /// </summary>
        /// <param name="sendEntities"></param>
        /// <param name="output"></param>
        public void SaveCarSendData(List <WL_CarSendInfo> sendEntities, Action <string, eOutputType> output)
        {
            foreach (var item in sendEntities)
            {
                if (string.IsNullOrWhiteSpace(item.物流矿发编号))
                {
                    continue;
                }

                var entity = SelfDber.Entity <CmcsInNetTransport>(" where SerialNumber=:SerialNumber", new { SerialNumber = item.物流矿发编号 });
                if (entity == null)
                {
                    #region 新增
                    entity = new CmcsInNetTransport();
                    entity.SerialNumber = item.物流矿发编号;
                    entity.FactoryName  = item.所属单位名称;

                    var supplier = SelfDber.Entity <CmcsSupplier>(" where Name=:Name", new { Name = item.供应商名称 });
                    if (supplier != null)
                    {
                        entity.SupplierId = supplier.Id;
                    }
                    entity.SupplierName = item.供应商名称;

                    var mine = SelfDber.Entity <CmcsMine>(" where Name=:Name", new { Name = item.矿点名称 });
                    if (mine != null)
                    {
                        entity.MineId = mine.Id;
                    }
                    entity.MineName = item.矿点名称;

                    var fuelkind = SelfDber.Entity <CmcsFuelKind>(" where Name=:Name", new { Name = item.品种名称 });
                    if (fuelkind != null)
                    {
                        entity.FuelKindId = fuelkind.Id;
                    }
                    entity.FuelKindName = item.品种名称;

                    var transCompany = SelfDber.Entity <CmcsTransportCompany>(" where Name=:Name", new { Name = item.承运商名称 });
                    if (transCompany != null)
                    {
                        entity.TransportCompanyId = transCompany.Id;
                    }
                    entity.TransportCompanyName = item.承运商名称;

                    var autoTruck = SelfDber.Entity <CmcsAutotruck>(" where CarNumber=:CarNumber", new { CarNumber = item.车牌号 });
                    if (autoTruck != null)
                    {
                        entity.AutoTruckId = autoTruck.Id;
                    }
                    entity.CarNumber = item.车牌号;

                    entity.IDCard       = item.驾驶员身份证;
                    entity.TicketWeight = item.矿发净重;
                    entity.SealNumber   = item.封签号;
                    entity.CreationTime = item.创建时间;
                    entity.StartTime    = item.创建时间;
                    entity.StepName     = "在途";
                    entity.IsFinish     = 0;
                    entity.SyncFlag     = 0;
                    entity.Remark       = "智能物流同步";

                    if (SelfDber.Insert <CmcsInNetTransport>(entity) > 0)
                    {
                        output("始发表数据获取成功,操作:新增,数据:" + Newtonsoft.Json.JsonConvert.SerializeObject(item), eOutputType.Normal);
                        item.步完成   = 1;
                        item.步完成时间 = DateTime.Now;
                        //if (mysqlDber.Update<WL_CarSendInfo>(item) > 0)
                        if (mysqlDber.Execute(string.Format("update 始发表 set 同步完成=1,同步完成时间='{0}' where 编号={1}", DateTime.Now, item.编号)) > 0)
                        {
                            output("始发表数据获取后回写成功,数据:" + Newtonsoft.Json.JsonConvert.SerializeObject(item), eOutputType.Normal);
                        }
                    }

                    #endregion
                }
                else
                {
                    #region 修改
                    entity.FactoryName = item.所属单位名称;

                    var supplier = SelfDber.Entity <CmcsSupplier>(" where Name=:Name", new { Name = item.供应商名称 });
                    if (supplier != null)
                    {
                        entity.SupplierId = supplier.Id;
                    }
                    entity.SupplierName = item.供应商名称;

                    var mine = SelfDber.Entity <CmcsMine>(" where Name=:Name", new { Name = item.矿点名称 });
                    if (mine != null)
                    {
                        entity.MineId = mine.Id;
                    }
                    entity.MineName = item.矿点名称;

                    var fuelkind = SelfDber.Entity <CmcsFuelKind>(" where Name=:Name", new { Name = item.品种名称 });
                    if (fuelkind != null)
                    {
                        entity.FuelKindId = fuelkind.Id;
                    }
                    entity.FuelKindName = item.品种名称;

                    var transCompany = SelfDber.Entity <CmcsTransportCompany>(" where Name=:Name", new { Name = item.承运商名称 });
                    if (transCompany != null)
                    {
                        entity.TransportCompanyId = transCompany.Id;
                    }
                    entity.TransportCompanyName = item.承运商名称;

                    var autoTruck = SelfDber.Entity <CmcsAutotruck>(" where CarNumber=:CarNumber", new { CarNumber = item.车牌号 });
                    if (autoTruck != null)
                    {
                        entity.AutoTruckId = autoTruck.Id;
                    }
                    entity.CarNumber = item.车牌号;

                    entity.IDCard       = item.驾驶员身份证;
                    entity.TicketWeight = item.矿发净重;
                    entity.SealNumber   = item.封签号;
                    entity.SyncFlag     = 0;

                    if (SelfDber.Update <CmcsInNetTransport>(entity) > 0)
                    {
                        output("始发表数据获取成功,操作:更新,数据:" + Newtonsoft.Json.JsonConvert.SerializeObject(item), eOutputType.Normal);
                        item.步完成   = 1;
                        item.步完成时间 = DateTime.Now;
                        //if (mysqlDber.Update<WL_CarSendInfo>(item) > 0)
                        if (mysqlDber.Execute(string.Format("update 始发表 set 同步完成=1,同步完成时间='{0}' where 编号={1}", DateTime.Now, item.编号)) > 0)
                        {
                            output("始发表数据获取后回写成功,数据:" + Newtonsoft.Json.JsonConvert.SerializeObject(item), eOutputType.Normal);
                        }
                    }
                    #endregion
                }
            }
        }
Пример #4
0
        /// <summary>
        /// 生成路线偏离数据
        /// </summary>
        /// <param name="output"></param>
        /// <returns></returns>
        public void SaveToCarDeciationRoute(Action <string, eOutputType> output)
        {
            DeviateWarning warning = SelfDber.Entity <DeviateWarning>("where IsDeleted=0");

            if (warning == null)
            {
                output("未设置路线偏离预警距离!", eOutputType.Error);
                return;
            }
            if (warning.Distance <= 0)
            {
                output("设置路线偏离预警距离小于等于0,请正确设置!", eOutputType.Error);
                return;
            }

            //查询所有在途的车辆,然后根据运输记录中的实时位置去判断路线的偏离
            List <ShowEntity> list = GetInRouteCars();

            if (list == null || list.Count <= 0)
            {
                output("暂无在途车辆!", eOutputType.Warn);
                return;
            }
            foreach (var item in list)
            {
                if (string.IsNullOrWhiteSpace(item.ROUTEPOINTS))
                {
                    output(string.Format("车号:{0},运输记录ID:{1}对应的发车未设置线路!", item.CARNUMBER, item.ID), eOutputType.Error);
                    continue;
                }

                //如果车辆已报修并且未处理就不管了偏不偏移了
                DataTable dtIsRepair = SelfDber.ExecuteDataTable(String.Format("select count(1) from CMCSTBCARREPAIRINFO t where t.isdeleted=0 and t.repairstatus=0 and t.carid='{0}'", item.CarId));
                if (dtIsRepair != null && dtIsRepair.Rows.Count > 0 && dtIsRepair.Rows[0][0].ToString() != "0")//车辆去修理了就不算路线偏移
                {
                    continue;
                }

                double sslng = 0;
                double sslat = 0;
                double.TryParse(item.LONGITUDE, out sslng);
                double.TryParse(item.LATITUDE, out sslat);
                if (sslng <= 0 || sslat <= 0)
                {
                    output(string.Format("车号:{0},运输记录ID:{1}暂无实时位置!", item.CARNUMBER, item.ID), eOutputType.Error);
                    continue;
                }
                string[] lnglats = item.ROUTEPOINTS.Trim('|').Split('|');
                //循环点一个一个的计算
                List <double> minDistance = new List <double>();
                foreach (var lnglat in lnglats)
                {
                    minDistance.Add(GaodeHelper.GetTwoPointDistance(sslat, sslng, double.Parse(lnglat.Split(',')[1]), double.Parse(lnglat.Split(',')[0])));
                }
                //最近的距离偏离了就算偏离
                decimal          minDis = (decimal)Math.Round(minDistance.Min(), 2, MidpointRounding.AwayFromZero);
                DeviateErrorInfo entity = SelfDber.Entity <DeviateErrorInfo>(string.Format(" where TransportRecordId='{0}' and StartTime is not null and EndTime is null order by StartTime desc", item.ID));
                if (minDis >= warning.Distance)
                {
                    //偏离了
                    //首先判断存不存在有开始时间但是没有结束时间的数据,有就不管,没有则新增一条结束时间为空,开始时间为当前时间的数据,偏离距离取最小值
                    if (entity == null)
                    {
                        entity = new DeviateErrorInfo();
                        entity.TransportRecordId = item.ID;
                        entity.Distance          = minDis;
                        entity.StartTime         = DateTime.Now;
                        entity.Remark            = string.Format("货车:{0},在{1}偏离计划路线,偏离距离{2}米", item.CARNUMBER, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), entity.Distance);
                        if (SelfDber.Insert(entity) > 0)
                        {
                            output(string.Format("车号:{0},运输记录ID:{1}发现路线偏离并记录,偏离距离:{2}!", item.CARNUMBER, item.ID, entity.Distance), eOutputType.Normal);
                            string updateSql = string.Format("update cmcstbbuyfueltransport t set t.ISDEVIATEEERR=1 where t.id='{0}'", item.ID);
                            SelfDber.Execute(updateSql);
                        }
                    }
                }
                else
                {
                    //没有偏离
                    //首先判断存不存在有开始时间但是没有结束时间的数据,有就将结束时间改为当前时间,没有就不管
                    if (entity != null)
                    {
                        entity.Distance = entity.Distance > minDis ? entity.Distance : minDis;
                        entity.EndTime  = DateTime.Now;
                        entity.Remark   = string.Format("货车:{0},在{1}偏离计划路线,于{2}回归计划路线,最大偏离距离{3}米", item.CARNUMBER, entity.StartTime.ToString("yyyy-MM-dd HH:mm:ss"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), entity.Distance);
                        if (SelfDber.Update(entity) > 0)
                        {
                            output(string.Format("车号:{0},运输记录ID:{1}回归计划路线!", item.CARNUMBER, item.ID), eOutputType.Normal);
                            string updateSql = string.Format("update cmcstbbuyfueltransport t set t.ISDEVIATEEERR=1 where t.id='{0}'", item.ID);
                            SelfDber.Execute(updateSql);
                        }
                    }
                }
            }
        }
Пример #5
0
        /// <summary>
        /// 生成路线偏离数据
        /// </summary>
        /// <param name="output"></param>
        /// <returns></returns>
        public void SaveToCarSpeedRoute(Action <string, eOutputType> output)
        {
            int num = 0;

            //查询全部在途车辆
            List <CMCSTBBUYFUELTRANSPORT> list = this.SelfDber.Entities <CMCSTBBUYFUELTRANSPORT>("where ISFINISH = 0 and STEPNAME = '在途' and CURRENTLOCATION is not null order by STARTTIME desc", null);
            List <string> CURRENTLOCATIONS     = list.Select(T => T.CURRENTLOCATION).Distinct().ToList();

            foreach (string item in CURRENTLOCATIONS)
            {
                //查询同一个路段的全部车辆
                List <CMCSTBBUYFUELTRANSPORT> cs = list.Where(t => t.CURRENTLOCATION == item).OrderBy(t => t.SPEED).ToList();
                //cs = cs.Take(0).Take(cs.Count).ToList();
                decimal AvgSpeed = cs.Average(t => t.SPEED);

                foreach (CMCSTBBUYFUELTRANSPORT car in cs)
                {
                    CMCSTBSPEEDERRORINFO entity = SelfDber.Entity <CMCSTBSPEEDERRORINFO>(string.Format(" where TRANSPORTRECORDID='{0}' and StartTime is not null and EndTime is null order by StartTime desc", car.Id));

                    bool flag = false;
                    //循环全部车辆
                    List <CMCSTBSPEEDWARNING> SpeedWarnings = this.SelfDber.Entities <CMCSTBSPEEDWARNING>("where 1=1", null);
                    foreach (CMCSTBSPEEDWARNING cmcstbspeedwarning in SpeedWarnings)
                    {
                        //循环全部车速预警设置,匹配是否有满足的路线
                        var SpeedWarningPoint = cmcstbspeedwarning.POINTS.TrimEnd('|').Split('|');
                        foreach (var Point in SpeedWarningPoint)
                        {
                            //根据车速异常设置,返回全部途径点
                            var PointArray = Point.Split(',');
                            if (PointArray.Length == 2)
                            {
                                string origin1      = PointArray[0];
                                string destination1 = PointArray[1];

                                //两个点之间少于100米,则表示是当前路线,则取出当前的车速异常预警设置zh
                                //然后检测全部同一个路段的车辆的车速

                                Double Distance = GetDistance(ToDouble(car.LONGITUDE.ToString()),
                                                              ToDouble(car.LATITUDE.ToString()),
                                                              ToDouble(origin1),
                                                              ToDouble(destination1));

                                //如果途径点匹配到,则检测速度是否异常,
                                if (Distance < 1000)
                                {
                                    if (!flag)
                                    {
                                        //如果小于设置的最小车速的异常
                                        if (car.SPEED < cmcstbspeedwarning.MINSPEED || ((100 - (car.SPEED / AvgSpeed) * 100.00m) > cmcstbspeedwarning.SPEEDRANGE))
                                        {
                                            //不存在,则新增
                                            if (entity == null)
                                            {
                                                CMCSTBSPEEDERRORINFO cMCSTBSPEEDERRORINFO = new CMCSTBSPEEDERRORINFO();
                                                cMCSTBSPEEDERRORINFO.TRANSPORTRECORDID = car.Id;
                                                cMCSTBSPEEDERRORINFO.SPEED             = car.SPEED;
                                                cMCSTBSPEEDERRORINFO.STARTTIME         = DateTime.Now;
                                                cMCSTBSPEEDERRORINFO.HIGHWAYNAME       = car.CURRENTLOCATION;
                                                this.SelfDber.Insert(cMCSTBSPEEDERRORINFO);
                                            }

                                            num++;
                                            flag = true;

                                            car.ISSPEEDERR = 1;
                                            this.SelfDber.Update(car);
                                        }
                                    }
                                }
                            }
                        }

                        if (!flag)
                        {
                            //没有异常,并且存在未结束的数据,则更新结束时间, 否则不做任何处理
                            if (entity != null)
                            {
                                entity.ENDTIME = DateTime.Now;
                                this.SelfDber.Update(entity);
                            }
                        }
                    }
                }
            }
        }