public ActionResult QuarterChart([NodeValueParameterBinder] NodeValueParameter parameter)
        {
            parameter.Years    = Core.FormManager.GetFormYears(parameter.FormID);
            ViewBag.Parameter  = parameter;
            parameter.RateType = null;
            parameter.Quarter  = 0;
            if (parameter.NodeID > 0)
            {
                var node       = Core.FormManager.GetNode(parameter.NodeID);
                var childNodes = Core.FormManager.GetNodeChildren(parameter.NodeID);
                var nodeIds    = childNodes.Select(e => e.ID).ToList();
                nodeIds.Insert(0, node.ID);
                parameter.NodeIds = nodeIds.ToArray();

                childNodes.Insert(0, node);

                ViewBag.NodeValues = Core.FormManager.GetNodeValues(parameter);
                ViewBag.Nodes      = childNodes;
            }
            else
            {
                var childNodes = Core.FormManager.GetRootNodes(parameter.FormID);
                parameter.NodeIds  = childNodes.Select(e => e.ID).ToArray();
                ViewBag.NodeValues = Core.FormManager.GetNodeValues(parameter);
                ViewBag.Nodes      = childNodes;
            }
            ViewBag.ValueTypes = Core.FormManager.GetNodeValueTypes();
            return(View());
        }
        private NodeValue GetOrSetParentAreaValueEntity(NodeValueParameter parameter)
        {
            using (var db = GetDbContext())
            {
                var entity = db.NodeValues.FirstOrDefault(e => e.AreaID == parameter.AreaID.Value &&
                                                          e.Year == parameter.Year &&
                                                          e.Quarter == parameter.Quarter &&
                                                          e.TypeID == parameter.TypeID &&
                                                          e.NodeID == parameter.NodeID &&
                                                          e.Period == parameter.Period
                                                          );
                if (entity == null)
                {
                    entity = new NodeValue(parameter);
                    db.NodeValues.Add(entity);
                }
                entity.Value = db.NodeValues.Where(e => parameter.AreaIds.Contains(e.AreaID) &&
                                                   e.Year == parameter.Year &&
                                                   e.Quarter == parameter.Quarter &&
                                                   e.TypeID == parameter.TypeID &&
                                                   e.NodeID == parameter.NodeID &&
                                                   e.Period == parameter.Period
                                                   ).Select(e => e.Value).DefaultIfEmpty(0).Sum();
                entity.Value      = entity.Value;
                entity.UpdateTime = DateTime.Now;
                db.SaveChanges();

                return(entity);
            }
        }
        public ActionResult NodeChart([NodeValueParameterBinder] NodeValueParameter parameter)
        {
            ViewBag.Form       = Core.FormManager.GetForm(parameter.FormID);
            ViewBag.ValueTypes = Core.FormManager.GetNodeValueTypes();

            //如果是查看某个分类的子类
            if (parameter.NodeID > 0)
            {
                ViewBag.CurrentNode       = Core.FormManager.GetNode(parameter.NodeID);
                ViewBag.CurrentNodeValues = Core.FormManager.GetNodeValues(parameter);
            }

            var childNodes = Core.FormManager.GetAllChildrenNodes(parameter.FormID, parameter.NodeID);

            ViewBag.ChildNodes = childNodes.Where(e => e.ParentID == parameter.NodeID).ToList();
            parameter.NodeIds  = childNodes.Select(e => e.ID).ToArray();
            parameter.GetNode  = false;
            parameter.GetArea  = false;

            var list = Core.FormManager.GetNodeValues(parameter);

            foreach (var item in list)
            {
                item.Node = childNodes.FirstOrDefault(e => e.ID == item.NodeID);
            }
            ViewBag.ChildValues = list;
            ViewBag.Parameter   = parameter;
            return(View());
        }
 public ActionResult NodeChart(NodeValueParameter parameter)
 {
     parameter.GetArea  = true;
     parameter.GetNode  = true;
     parameter.AreaID   = null;
     ViewBag.NodeValues = Core.FormManager.GetNodeValues(parameter).Where(e => e.AreaID != 0 && e.Area != null).ToList();
     return(View());
 }
 public ActionResult Index(NodeValueParameter parameter)
 {
     if (parameter.FormID > 0)
     {
         ViewBag.Form = Core.FormManager.GetForm(parameter.FormID);
     }
     ViewBag.Forms     = Core.FormManager.GetForms(CurrentIdentity.FormIds);
     ViewBag.Parameter = parameter;
     return(View());
 }
Beispiel #6
0
        public ActionResult GetNodeValues(NodeValueParameter parameter)
        {
            if (CurrentIdentity.Role < UserRole.Advanced && parameter.AreaID == 0)
            {
                parameter.AreaID = CurrentIdentity.AreaIds.FirstOrDefault();
            }

            var list = Core.FormManager.GetNodeValues(parameter);

            return(JsonSuccessResult(list));
        }
Beispiel #7
0
        public ActionResult Values(NodeValueParameter parameter)
        {
            var node = Core.FormManager.GetNode(parameter.NodeID);

            if (node == null)
            {
                throw new ArgumentException("参数错误,没有找到该分类");
            }
            node.Values       = Core.FormManager.GetNodeValues(parameter);
            ViewBag.Model     = node;
            ViewBag.Parameter = parameter;
            return(View());
        }
Beispiel #8
0
            public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
            {
                var request = controllerContext.HttpContext.Request;
                var result  = new NodeValueParameter();

                if (!string.IsNullOrWhiteSpace(request["formId"]))
                {
                    result.FormID = int.Parse(request["formId"]);
                }

                if (!string.IsNullOrWhiteSpace(request["nodeId"]))
                {
                    result.NodeID = int.Parse(request["nodeId"]);
                }

                if (!string.IsNullOrWhiteSpace(request["year"]))
                {
                    result.Year = int.Parse(request["year"]);
                }

                if (!string.IsNullOrWhiteSpace(request["quarter"]))
                {
                    result.Quarter = (Quarter)Enum.Parse(typeof(Quarter), request["quarter"]);
                }

                if (!string.IsNullOrWhiteSpace(request["rateType"]))
                {
                    result.RateType = (RateType)Enum.Parse(typeof(RateType), request["rateType"]);
                }

                if (!string.IsNullOrWhiteSpace(request["areaId"]))
                {
                    result.AreaID = int.Parse(request["areaId"]);
                }
                if (!string.IsNullOrWhiteSpace(request["period"]))
                {
                    result.Period = (Period)Enum.Parse(typeof(Period), request["period"]);
                }

                //如果是区县用户,则AreaID必须在自己的控制范围内,且自动赋一个默认值
                var identity = (UserIdentity)Thread.CurrentPrincipal.Identity;

                if (identity.Role == UserRole.Branch && result.AreaID == 0)
                {
                    result.AreaID = identity.AreaIds.FirstOrDefault();
                }
                return(result);
            }
        public ActionResult Table(NodeValueParameter parameter)
        {
            parameter.GetArea = true;
            parameter.GetNode = true;
            parameter.AreaID  = null;
            parameter.Quarter = 0;
            var nodeValues = Core.FormManager.GetNodeValues(parameter).Where(e => e.AreaID != 0 && e.Area != null).ToList();
            var dict       = nodeValues.GroupBy(e => e.Area).ToDictionary(e => e.Key, e => e.GroupBy(k => k.Quarter).ToDictionary(k => k.Key, k => k.GroupBy(m => m.Node.FormID).ToDictionary(m => m.Key, m => m.ToList())));

            ViewBag.Dict = dict;
            var forms = Core.FormManager.GetForms();
            var areas = Core.AreaManager.GetAreas();

            ViewBag.Areas = areas;
            ViewBag.Forms = forms;
            return(View());
        }
        public ActionResult AreaChart([NodeValueParameterBinder] NodeValueParameter parameter)
        {
            if (parameter.NodeID == 0)
            {
                return(View());
            }

            var areas   = Core.AreaManager.GetAreas();
            var areaIds = areas.Select(e => e.ID).ToArray();

            parameter.AreaIds = areaIds;
            parameter.AreaID  = null;
            ViewBag.Parameter = parameter;

            ViewBag.Areas      = areas.Where(e => e.ParentID == (parameter.AreaID ?? 0)).ToList();
            ViewBag.ValueTypes = Core.FormManager.GetNodeValueTypes();
            ViewBag.AreaValues = Core.FormManager.GetNodeValues(parameter);
            ViewBag.Node       = Core.FormManager.GetNode(parameter.NodeID);
            return(View());
        }
        private void UpdateParentAreaValue(NodeValue val, Form form)
        {
            if (val.AreaID == 0)
            {
                return;
            }

            var area = Core.AreaManager.GetArea(val.AreaID);

            if (area == null)
            {
                return;
            }

            //如果form设置了不自动计算子区域,那么非舟山市本身的总计外,其他父区域不自动计算
            if (form.ExcludeSubArea && area.ParentID != 0)
            {
                return;
            }

            var parameter = new NodeValueParameter(val)
            {
                AreaID = area.ParentID
            };

            //判断是否已经更新了同条件的parentarea的value
            if (_updateList.Any(e => e.EqualSingleValueParameter(parameter)))
            {
                return;
            }
            //查询子分类的ID
            parameter.AreaIds = Core.AreaManager.GetChildAreaIds(area.ParentID);

            //这里只应该有一条记录
            var parentValue = GetOrSetParentAreaValueEntity(parameter);

            _updateList.Add(parameter);
            //更新新值的父区域数据
            UpdateParentAreaValue(parentValue, form);
        }
Beispiel #12
0
        public Stream ExportTrend(int year, Quarter quarter, int[] formIds)
        {
            var doc = WordHelper.CreateDoc("templates/资源形势模板.docx");

            doc.WriteTitle(year + "年" + quarter.GetDescription() + "国土资源主要指标走势", "2");
            foreach (var form in Core.FormManager.GetForms(formIds))
            {
                var parameter = new NodeValueParameter
                {
                    FormID       = form.ID,
                    Year         = year,
                    Quarter      = quarter,
                    GetNode      = false,
                    GetArea      = false,
                    GetValueType = true,
                    RateType     = RateType.YearOnYear,
                };
                var values = Core.FormManager.GetNodeValues(parameter);
                var nodes  = Core.FormManager.GetRootNodes(form.ID);
                doc.WriteTitle(form.Name, "3", NPOI.XWPF.UserModel.ParagraphAlignment.LEFT);
                var sb = new StringBuilder();
                foreach (var node in nodes)
                {
                    var nodeContent = GenerateContent(node, values);
                    if (nodeContent.Length > 0)
                    {
                        sb.Append(nodeContent.Trim(';').Replace(",,", ",") + "。");
                    }
                }


                doc.WriteContent(sb.ToString());
            }

            return(doc.GetStream());
        }
        public List <NodeValue> GetNodeValues(NodeValueParameter parameter)
        {
            using (var db = GetDbContext())
            {
                if (parameter.FormID > 0 && parameter.NodeID == 0 && (parameter.NodeIds == null || parameter.NodeIds.Length == 0))
                {
                    parameter.NodeIds = GetNodeIds(parameter.FormID);
                }

                var query = db.NodeValues.AsQueryable();

                if (parameter.NodeIds != null && parameter.NodeIds.Length > 0)
                {
                    query = query.Where(e => parameter.NodeIds.Contains(e.NodeID));
                }
                else if (parameter.NodeID > 0)
                {
                    query = query.Where(e => e.NodeID == parameter.NodeID);
                }

                if (parameter.Years != null && parameter.Years.Length > 0)
                {
                    query = query.Where(e => parameter.Years.Contains(e.Year));
                }
                else if (parameter.Year > 0)
                {
                    query = query.Where(e => e.Year == parameter.Year);
                }

                if (parameter.TypeIds != null && parameter.TypeIds.Length > 0)
                {
                    query = query.Where(e => parameter.TypeIds.Contains(e.TypeID));
                }
                else if (parameter.TypeID > 0)
                {
                    query = query.Where(e => e.TypeID == parameter.TypeID);
                }

                if (parameter.Quarter.HasValue)
                {
                    query = query.Where(e => e.Quarter == parameter.Quarter);
                }

                if (parameter.AreaIds != null && parameter.AreaIds.Length > 0)
                {
                    query = query.Where(e => parameter.AreaIds.Contains(e.AreaID));
                }
                else if (parameter.AreaID.HasValue)
                {
                    query = query.Where(e => e.AreaID == parameter.AreaID.Value);
                }

                if (parameter.Period.HasValue)
                {
                    query = query.Where(e => e.Period == parameter.Period.Value);
                }

                var                  list  = query.ToList();
                List <Area>          areas = parameter.GetArea ? Core.AreaManager.GetAreas() : null;
                List <NodeValueType> types = parameter.GetValueType ? Core.FormManager.GetNodeValueTypes() : null;
                foreach (var item in list)
                {
                    if (parameter.GetNode)
                    {
                        item.Node = Core.FormManager.GetNode(item.NodeID);
                    }
                    if (parameter.GetArea)
                    {
                        item.Area = areas.FirstOrDefault(e => e.ID == item.AreaID);
                    }
                    if (parameter.GetValueType)
                    {
                        item.Type = types.FirstOrDefault(e => e.ID == item.TypeID);
                    }
                }

                if (parameter.RateType.HasValue)
                {
                    var compareParameter = (NodeValueParameter)parameter.Clone();
                    compareParameter.UpdateTimeByRateType();
                    var compareList = GetNodeValues(compareParameter);
                    foreach (var item in list)
                    {
                        var compareItem = compareList.FirstOrDefault(e =>
                                                                     e.NodeID == item.NodeID &&
                                                                     e.TypeID == item.TypeID &&
                                                                     e.AreaID == item.AreaID
                                                                     );
                        if (compareItem != null)
                        {
                            item.CompareValue = compareItem.Value;
                        }
                    }
                }
                return(list);
            }
        }
        public static NodeValueParameter GetNodeValueParameter(this Field field, int year, Quarter quarter, int[] areaIds)
        {
            var result = new NodeValueParameter {
                GetArea = false, GetNode = true, GetValueType = false
            };

            foreach (var parameter in field.Parameters)
            {
                switch (parameter.Type)
                {
                case FieldType.Area:
                    //如果当先用户限制了areaIds,但是并不包含模板中的该区域,则跳过此数据
                    if (areaIds != null && !areaIds.Contains(parameter.Value))
                    {
                        result = null;
                        return(result);
                    }
                    else
                    {
                        result.AreaID = parameter.Value;
                    }
                    break;

                case FieldType.Node:
                    result.NodeID = parameter.Value;
                    break;

                case FieldType.Quarter:
                    if (parameter.Value > 0)
                    {
                        result.Quarter = (Quarter)parameter.Value;
                    }
                    else
                    {
                        result.Quarter = quarter;
                    }
                    break;

                case FieldType.Quarters:
                    result.Quarter = quarter;
                    break;

                case FieldType.Type:
                case FieldType.Value:
                    result.TypeID = parameter.Value;
                    break;

                case FieldType.Year:
                    if (parameter.Value > 0)
                    {
                        result.Year = parameter.Value;
                    }
                    else
                    {
                        result.Year = year;
                    }
                    break;

                case FieldType.LastYear:
                    result.Year = year - 1;
                    break;

                case FieldType.Rate:
                    result.RateType = (RateType)parameter.Value;
                    break;

                case FieldType.Period:
                    result.Period = (Period)parameter.Value;
                    break;
                }
            }
            if (result.Year == 0 && (result.Years == null || result.Years.Length == 0))
            {
                result.Year = year;
            }
            if (result.AreaID == 0 && areaIds != null)
            {
                result.AreaIds = areaIds;
            }
            if (result.Quarter == 0)
            {
                result.Quarter = quarter;
            }
            return(result);
        }