WebAPI/Controllers/»ù´¡×ÊÁÏ/»ù´¡×ÊÁÏ/Gy_MaterTypeBillController.cs
@@ -138,6 +138,21 @@
                            return objJsonResult;
                        }
                    }
                    if (oItem.HItemID != 0)
                    {
                        //已审核不允许修改
                        DataSet dss;
                        dss = oCN.RunProcReturn("select * from Gy_MaterType where HItemID=" + oItem.HItemID, "Gy_MaterType");
                        //判断是否可编辑
                        if (dss.Tables[0].Rows[0]["HCheckEmp"].ToString() != "")
                        {
                            objJsonResult.code = "0";
                            objJsonResult.count = 0;
                            objJsonResult.Message = "此单据状态已经审核,不允许修改!";
                            objJsonResult.data = null;
                            return objJsonResult;
                        }
                    }
                    //得到短代码
                    string sShortNumber;
                    sShortNumber = DBUtility.ClsPub.GetShortNumber(oItem.HNumber.Trim());
@@ -872,33 +887,37 @@
        {
            try
            {
                // å‚数化查询,避免SQL注入
                string sql1 = string.Format("select hitemid,hnumber,hname,hparentid,hlevel,hhelpcode from Gy_MaterType where HUSEORGID = '" + HOrgID + "' order by hhelpcode");
                ds = oCN.RunProcReturn(sql1, "Gy_MaterType");
                List<TreeModel> treeModels = new List<TreeModel>();
                TreeModel first = new TreeModel();
                first.id = "0";
                first.title = "物料分类设置";
                treeModels.Add(first);
                // 1. å»ºç«‹çˆ¶ID到子节点列表的映射(一次性遍历)
                var parentDict = new Dictionary<string, List<DataRow>>();
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    var HLevel = (int)row["hlevel"];
                    if (HLevel == 1)
                    {
                        TreeModel tree = new TreeModel();
                        tree.id = row["hitemid"].ToString();
                        tree.title = row["hname"].ToString();
                        treeModels[0].children.Add(tree);
                    }
                    string parentId = row["hparentid"].ToString();
                    if (!parentDict.ContainsKey(parentId))
                        parentDict[parentId] = new List<DataRow>();
                    parentDict[parentId].Add(row);
                }
                getTreeByLevel(ds.Tables[0], treeModels[0].children, 2);
                // 2. æž„建根节点
                var root = new TreeModel
                {
                    id = "0",
                    title = "物料分类设置",
                    children = new List<TreeModel>()
                };
                // 3. é€’归构建树,从父ID为 "0" çš„节点开始(假设根节点的hparentid为0)
                BuildTree(root, parentDict);
                // åºåˆ—化返回
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "Sucess!";
                objJsonResult.data = Newtonsoft.Json.JsonConvert.SerializeObject(treeModels);
                objJsonResult.data = Newtonsoft.Json.JsonConvert.SerializeObject(new List<TreeModel> { root });
                return objJsonResult;
            }
            catch (Exception e)
@@ -911,29 +930,24 @@
            }
        }
        public void getTreeByLevel(DataTable dt, List<TreeModel> tree, int num)
        // é€’归构建树的辅助方法
        private void BuildTree(TreeModel parentNode, Dictionary<string, List<DataRow>> parentDict)
        {
            for (int m = 0; m < tree.Count; m++)
            if (parentDict.TryGetValue(parentNode.id, out var childRows))
            {
                tree[m].children = new List<TreeModel>();
                for (int i = 0; i < dt.Rows.Count; i++)//第一次循环,得到所有根节点的子集
                foreach (DataRow row in childRows)
                {
                    var HLevel = (int)dt.Rows[i]["hlevel"];
                    var HParentID = dt.Rows[i]["hparentid"].ToString();
                    if (HLevel == num && HParentID==tree[m].id)
                    var childNode = new TreeModel
                    {
                        TreeModel tbjson = new TreeModel();
                        tbjson.id = dt.Rows[i]["hitemid"].ToString();
                        tbjson.title = dt.Rows[i]["hname"].ToString();
                        tree[m].children.Add(tbjson);
                    }
                }
                for (int i = 0; i < tree[m].children.Count; i++)
                {
                    getTreeByLevel(dt, tree[m].children, num+1);//再次用子集去循环,拿出子集的子集
                        id = row["hitemid"].ToString(),
                        title = row["hname"].ToString(),
                        children = new List<TreeModel>()
                    };
                    parentNode.children.Add(childNode);
                    // é€’归构建子节点的子树
                    BuildTree(childNode, parentDict);
                }
            }
        }
        #endregion
    }