json格式

/// <summary>
        /// 作者:马鹏
        /// 创建时间:2021-12-20
        /// 名称:查询机械保洁分类详情完成情况
        /// </summary>
        [HttpPost]
        [ModuleInfo]
        [Description("读取数据")]
        public IActionResult GetMechanicalCompleteTypeDetail(string vehicleTypeName, string roadName)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(vehicleTypeName))
                {
                    return ReturnJson(null, EERRORINFO., "类型不能为空");
                }

                //项目ID
                int ProjectID = (_userProfile.FlagID == 1 && _userProfile.DescProjectID > 0) ? _userProfile.DescProjectID : int.Parse(_userProfile.ProjectID);
                DateTime beginDate = DateTime.Now.Date;//开始日期
                DateTime endDate = _reportLogics.stringFormatDate(beginDate.ToString("yyyy-MM-dd"), true);//结束日日期

                //2.配置总数、在线总数               
                var vList = _alarmLogic.VehicleScheduling?.Where(w =>
                    w.State != (int)VehicleSchedulingState.删除 &&
                    w.ProjectID == ProjectID &&
                    w.SchedulingDate >= beginDate &&
                    w.SchedulingDate <= endDate);

                //查询作业路线
                List<AlarmSection> sectionList = _alarmLogic.AlarmSections.Where(w => w.ProjectID == ProjectID && w.State != (int)SectionState.删除)?.ToList();
                List<string> secCode = sectionList?.Select(s => s.Code).ToList();
                List<AlarmRoad> adList = _alarmLogic.AlarmRoads.Where(w => w.Isvalid != (int)SectionState.删除 && secCode.Contains(w.SecID))?.ToList();

                //查询时间段配置列表
                List<TimeIntervalModel> timeInterval = CustomListingLogic.TimeIntervalDropDown((int)TimeIntervalType.车辆, ProjectID);

                var vlist = _alarmLogic.DicInfo.Where(w => w.TypeId == (int)DicTypeNameEnum.清扫车类型);//清扫车类型列表
                IQueryable<VehicleScheduling> lst = vList.Where(f => f.VehicleJobTypeName == vehicleTypeName);  //查询该类型下的车辆和路线集合             
                var alarmRoad = lst.Where(w => !string.IsNullOrWhiteSpace(w.RoadCode));

                //根据路线名称赛选数据
                //var roadCodeList = lst.Where(w => !string.IsNullOrWhiteSpace(w.RoadCode)).Select(s => s.RoadCode).Distinct(); //道路code集合
                if (!string.IsNullOrWhiteSpace(roadName))
                {
                    var model = adList.FirstOrDefault(a => a.Name == roadName);
                    if (model != null)
                    {
                        string code = model.Code;
                        alarmRoad = alarmRoad.Where(w => w.RoadCode == code);
                    }
                }

                //查询道路code集合
                var roadCodeList = alarmRoad.Select(s => s.RoadCode).Distinct();

                //查询该路线下的排班情况
                List<object> list = new List<object>();               
                foreach (var rc in roadCodeList)
                {                   
                    Dictionary<string, object> dic = new Dictionary<string, object>();
                    AlarmRoad mm = adList.FirstOrDefault(f => f.Code == rc);
                    dic.Add("roadName", mm == null ? "" : mm.Name ?? "");//道路名称
                    List<VehicleScheduling> roadVlist = lst.Where(w => w.RoadCode == rc).ToList();
                    List<Dictionary<string, object>> dicPaiBanList = new List<Dictionary<string, object>>();//道路排班详情集合
                    if (roadVlist.Any())
                    {
                        foreach (var rv in roadVlist)
                        {
                            Dictionary<string, object> dicPaiBan = new Dictionary<string, object>();
                            TimeIntervalModel nn = timeInterval.FirstOrDefault(f => f.Id == rv.TimeIntervalID);
                            decimal shouldOdometer = mm == null ? 0M : mm.Long.Value;
                            decimal alreadOdometer = 0M;

                            //--------------------------------详情--------------------------------//
                            dicPaiBan.Add("timeInterval", nn == null ? "" : nn.TimeInterval ?? "");//排班时段
                            dicPaiBan.Add("planCount", rv.PlanCount.HasValue ? rv.PlanCount : 0);//机扫要求趟数                                
                            dicPaiBan.Add("shouldOdometer", mm == null ? "0米" : $"{shouldOdometer.ToString("0.00")}米");//应该作业里程

                            //计算排班结果和完成率
                            //请求参数
                            if (mm == null)
                            {
                                dicPaiBan.Add("completionRate", "0%");
                            }
                            else
                            {
                                VehicleSchedulingCheckRequestlModel vscm = new VehicleSchedulingCheckRequestlModel();
                                vscm.Id = rv.Id;
                                vscm.RoadCode = rv.RoadCode;
                                vscm.SchedulingDateStr = rv.SchedulingDate.ToString("yyyy-MM-dd");
                                vscm.VehicleID = rv.VehicleID;
                                vscm.TimeInterval = (nn == null ? "" : nn.TimeInterval ?? "");
                                var result = GetVehicleSchedulingResult2(ProjectID, mm, vscm);
                                if (result.Item1.Length <= 0)
                                {
                                    UpdateVehicleSchedulingStateRequestlModel model = result.Item3;
                                    dicPaiBan.Add("completionRate", result.Item3.OperationResult);
                                    alreadOdometer = GetAlreadOdometer(result.Item3.OperationResult, shouldOdometer);                                    
                                }
                                else
                                {
                                    dicPaiBan.Add("completionRate", "0%");
                                }                                
                            }
                            dicPaiBan.Add("alreadOdometer", $"{alreadOdometer}米");
                            dicPaiBanList.Add(dicPaiBan);
                        }
                        dic.Add("list", dicPaiBanList);
                    }
                    else
                    {
                        dic.Add("list", dicPaiBanList);
                    }
                    list.Add(dic);
                }
                return ReturnJson(new { data = list });
            }
            catch (Exception ex)
            {
                return ReturnJson(null, EERRORINFO., $"查询机械保洁分类详情完成情况异常,请求接口[GetMechanicalCompleteTypeDetail],请求参数:{roadName},错误消息:{ex.Message}-----------错误位置:{ex.StackTrace}");
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值