WebAPI/Controllers/»ù´¡×ÊÁÏ/»ù´¡×ÊÁÏ/Gy_MaterTypeBillController.cs
@@ -7,7 +7,10 @@
using System.Web;
using System.Web.Http;
using WebAPI.Models;
using System.Web;
using WebAPI.Controllers.SCGL.日计划管理;
using System.IO;
using SyntacticSugar.constant;
namespace WebAPI.Controllers.基础资料.基础资料
{
    public class Gy_MaterTypeBillController : ApiController
@@ -135,8 +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());
@@ -152,7 +168,16 @@
                    oItem.HShortNumber = sShortNumber;//短代码
                    oItem.HMakeEmp = msg2;
                    oItem.HEndFlag = true;//末级标志
                    oItem.HLevel = DBUtility.ClsPub.GetLevel(oItem.HNumber.Trim()); //等级
                    DataSet ds2 = oCN.RunProcReturn("select HLevel from  Gy_MaterType where HItemID =" + oItem.HParentID , "Gy_MaterType");//搜索父类等级
                    //oItem.HLevel = DBUtility.ClsPub.GetLevel(oItem.HNumber); //等级
                    if (ds2.Tables[0].Rows.Count > 0)
                    {
                        oItem.HLevel = (int)ds2.Tables[0].Rows[0]["HLevel"] + 1;
                    }
                    else
                    {
                        oItem.HLevel = 1;
                    }
                    oBill.oModel = oItem;
                }
                //保存
@@ -192,6 +217,327 @@
                return objJsonResult;
            }
        }
        #endregion
        #region ç‰©æ–™åˆ†ç±» æ–‡ä»¶å¯¼å…¥ä¿å­˜
        #region ç‰©æ–™åˆ†ç±» æ–‡ä»¶ä¸Šä¼ 
        [Route("Gy_MaterType/Gy_MaterType_Excel")]
        [HttpPost]
        public object Gy_MaterType_Excel()
        {
            try
            {
                //获取文件名称
                var file = HttpContext.Current.Request.Files[0];
                //获取文件物理路径
                string ExcelPath = HttpContext.Current.Server.MapPath("~/" + file.FileName);
                //保存文件
                file.SaveAs(ExcelPath);
                NpoiHelper np = new NpoiHelper();
                DataSet ExcelDs = np.ReadExcel(ExcelPath, 1, 1, "0");
                //删除文件
                File.Delete(ExcelPath);
                //创建临时表
                DataTable tb2 = new DataTable("dt2");
                //添加列名
                for (int i = 0; i < ExcelDs.Tables[0].Columns.Count; i++)
                {
                    tb2.Columns.Add(ExcelDs.Tables[0].Rows[0][i].ToString());
                }
                //模板缺少列 ä½†éœ€è¦ä»Žæ•°æ®åº“中查询出来显示在页面的字段
                tb2.Columns.Add("HOrgID", typeof(Int32));//组织ID
                tb2.Columns.Add("HParentID", typeof(Int32));//父类ID
                //添加数据
                for (int i = 1; i < ExcelDs.Tables[0].Rows.Count; i++)
                {
                    DataRow row = tb2.NewRow();
                    for (int j = 0; j < ExcelDs.Tables[0].Columns.Count; j++)
                    {
                        row[j] = ExcelDs.Tables[0].Rows[i][j].ToString();
                    }
                    tb2.Rows.Add(row);
                }
                var error = "";
                //查询没有的列
                if (!tb2.Columns.Contains("组织代码"))
                    error += "没有找到【组织代码】的标题,";
                if (!tb2.Columns.Contains("组织名称"))
                    error += "没有找到【组织名称】的标题,";
                if (!tb2.Columns.Contains("物料分类"))
                    error += "没有找到【物料分类名称】的标题,";
                if (!tb2.Columns.Contains("物料分类代码"))
                    error += "没有找到【物料分类代码】的标题,";
                if (!tb2.Columns.Contains("父类名称"))
                    error += "没有找到【父类名称】的标题,";
                if (!tb2.Columns.Contains("父类代码"))
                    error += "没有找到【父类代码】的标题,";
                if (!tb2.Columns.Contains("备注"))
                    error += "没有找到【备注】的标题,";
                if (!tb2.Columns.Contains("助记码"))
                    error += "没有找到【助记码】的标题,";
                if (error.Length > 0)
                {
                    objJsonResult.code = CodeConstant.FAIL;
                    objJsonResult.count = CountConstant.FAIL;
                    objJsonResult.Message = $"Excel模板存在错误,{error}\r\n";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                for (int i = 0; i <= tb2.Rows.Count - 1; i++)
                {
                    string HMaterTypeName = "";
                    string HMaterTypeNum = "";
                    string HORGNumber = "";
                    string HORGName = "";
                    string HParentNumber = "";
                    string HParentName = "";
                    HMaterTypeName = DBUtility.ClsPub.isStrNull(tb2.Rows[i]["物料分类"].ToString());
                    HMaterTypeNum = DBUtility.ClsPub.isStrNull(tb2.Rows[i]["物料分类代码"].ToString());
                    HParentName = DBUtility.ClsPub.isStrNull(tb2.Rows[i]["父类名称"].ToString());
                    HParentNumber = DBUtility.ClsPub.isStrNull(tb2.Rows[i]["父类代码"].ToString());
                    HORGNumber = DBUtility.ClsPub.isStrNull(tb2.Rows[i]["组织代码"].ToString());
                    HORGName = DBUtility.ClsPub.isStrNull(tb2.Rows[i]["组织名称"].ToString());
                    //检查物料
                    int index = i + 1;
                    if (HORGNumber != "")
                    {
                        //查询组织
                        ds = oCN.RunProcReturn("select * from Xt_ORGANIZATIONS where  HNumber='" + HORGNumber + "' and Hname='" + HORGName + "'", "Xt_ORGANIZATIONS");
                        if (ds.Tables[0].Rows.Count == 0)
                        {
                            objJsonResult.code = CodeConstant.FAIL;
                            objJsonResult.count = CountConstant.FAIL;
                            objJsonResult.Message = "第" + index + "行,组织不存在!";
                            objJsonResult.data = null;
                            return objJsonResult;
                        }
                        else
                        {
                            tb2.Rows[i]["HOrgID"] = ds.Tables[0].Rows[0]["HItemID"].ToString();
                        }
                        string HORGid = ds.Tables[0].Rows[0]["HItemID"].ToString();
                        if(HParentNumber!="" && HParentName != "")
                        {
                            //查询父类id
                            ds = oCN.RunProcReturn("select * from Gy_MaterType where  HNumber='" + HParentNumber + "' and Hname='" + HParentName + "'", "Gy_MaterType");
                            if (ds.Tables[0].Rows.Count == 0)
                            {
                                objJsonResult.code = CodeConstant.FAIL;
                                objJsonResult.count = CountConstant.FAIL;
                                objJsonResult.Message = "第" + index + "行,父类不存在!";
                                objJsonResult.data = null;
                                return objJsonResult;
                            }
                            else
                            {
                                tb2.Rows[i]["HParentID"] = ds.Tables[0].Rows[0]["HItemID"].ToString();
                            }
                            string HParentID = ds.Tables[0].Rows[0]["HItemID"].ToString();
                        }
                        else {
                            tb2.Rows[i]["HParentID"] = "0";
                        }
                        //物料分类名称
                        if (HMaterTypeName == "")
                        {
                            objJsonResult.code = CodeConstant.FAIL;
                            objJsonResult.count = CountConstant.FAIL;
                            objJsonResult.Message = "第" + index + "行,物料分类名称不能为空!";
                            objJsonResult.data = null;
                            return objJsonResult;
                        }
                        //物料分类名称
                        if (HMaterTypeNum == HParentNumber)
                        {
                            objJsonResult.code = CodeConstant.FAIL;
                            objJsonResult.count = CountConstant.FAIL;
                            objJsonResult.Message = "第" + index + "行,物料类型父类不能是自己!";
                            objJsonResult.data = null;
                            return objJsonResult;
                        }
                        //物料分类代码
                        if (HMaterTypeNum == "")
                        {
                            objJsonResult.code = CodeConstant.FAIL;
                            objJsonResult.count = CountConstant.FAIL;
                            objJsonResult.Message = "第" + index + "行,物料分类代码不能为空!";
                            objJsonResult.data = null;
                            return objJsonResult;
                        }
                    }
                    else
                    {
                        objJsonResult.code = CodeConstant.FAIL;
                        objJsonResult.count = CountConstant.FAIL;
                        objJsonResult.Message = "第" + index + "行,组织代码为空";
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                }
                objJsonResult.code = CodeConstant.SUCCEED;
                objJsonResult.count = CountConstant.SUCCEED;
                objJsonResult.Message = error;
                objJsonResult.data = tb2;
                return objJsonResult;
            }
            catch (Exception e)
            {
                objJsonResult.code = CodeConstant.FAIL;
                objJsonResult.count = CountConstant.FAIL;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #region ç‰©æ–™åˆ†ç±»é¡¹ç›® å¯¼å…¥(保存)
        [Route("Gy_MaterType/Gy_MaterType_btnSave")]
        [HttpPost]
        public object Gy_MaterType_btnSave([FromBody] JObject sMainSub)
        {
            var _value = sMainSub["sMainSub"].ToString();
            string msg1 = _value.ToString();
            string[] sArray = msg1.Split(new string[] { "&和" }, StringSplitOptions.RemoveEmptyEntries);
            string msg2 = sArray[0].ToString();
            string user = sArray[1].ToString();
            try
            {
                if (!DBUtility.ClsPub.Security_Log("Gy_ErrType_Edit", 1, false, user))
                {
                    objJsonResult.code = CodeConstant.FAIL;
                    objJsonResult.count = CountConstant.FAIL;
                    objJsonResult.Message = "无保存权限!";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                List<object> Excel = Newtonsoft.Json.JsonConvert.DeserializeObject<List<object>>(msg2);
                List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
                foreach (JObject item in Excel)
                {
                    Dictionary<string, string> dic = new Dictionary<string, string>();
                    foreach (var itm in item.Properties())
                    {
                        dic.Add(itm.Name, itm.Value.ToString());
                    }
                    list.Add(dic);
                }
                oCN.BeginTran();
                int i = 1;
                foreach (Dictionary<string, string> item in list)
                {
                    string HOrgID = item["HOrgID"].ToString();//组织ID
                    string HName = item["物料分类"].ToString();
                    string HNumber = item["物料分类代码"].ToString();
                    string HRemark = item["备注"].ToString();
                    string HHelpCode = item["助记码"].ToString();
                    string HParentID = item["HParentID"].ToString();
                    string sShortNumber;
                    sShortNumber = DBUtility.ClsPub.GetShortNumber(HNumber);//短代码
                    if (sShortNumber.Trim() == "")
                    {
                        objJsonResult.code = CodeConstant.FAIL;
                        objJsonResult.count = CountConstant.FAIL;
                        objJsonResult.Message = "保存失败!短代码为空!";
                        objJsonResult.data = 1;
                        return objJsonResult;
                    }
                    int HEndFlag = 1;//末级标志
                    int HLevel = 1; //等级
                    DataSet ds2 = oCN.RunProcReturn("select HLevel from  Gy_MaterType where HItemID =" + HParentID, "Gy_MaterType");//搜索父类等级
                    //oItem.HLevel = DBUtility.ClsPub.GetLevel(oItem.HNumber); //等级
                    if (ds2.Tables[0].Rows.Count > 0)
                    {
                        HLevel = (int)ds2.Tables[0].Rows[0]["HLevel"] + 1;
                    }
                    else
                    {
                        HLevel = 1;
                    }
                    if (!DBUtility.ClsPub.AllowNumber(HNumber.Trim()))
                    {
                        objJsonResult.code = CodeConstant.FAIL;
                        objJsonResult.count = CountConstant.FAIL;
                        objJsonResult.Message = "保存失败!代码中不能出现连续‘.’并且首位末位不能为‘.’!";
                        objJsonResult.data = 1;
                        return objJsonResult;
                    }
                    ds = oCN.RunProcReturn("select * from Gy_MaterType where HNumber='" + HNumber + "'", "Gy_MaterType");
                    if (ds.Tables[0].Rows.Count == 0)
                    {
                            oCN.RunProc("Insert into "  + "Gy_MaterType" +
                        " (HNumber,HName,HHelpCode,HShortNumber,HParentID" +
                        ",HLevel,HEndFlag,HStopflag,HRemark,HMakeEmp,HMakeTime,HStopEmp,HStopTime,HUSEORGID,HCREATEORGID,HUseFlag) " +
                        " Values('" + HNumber + "','" + HName + "','" + HHelpCode + "','" + sShortNumber + "'," + HParentID.ToString() +
                        "," + HLevel + "," + HEndFlag + "," +  0 + ",'" + HRemark + "','" + user + "',getdate(),'" + "" + "','" +  "" + "'," + HOrgID + "," + HOrgID + ",'" + "未检测" + "')");
                        //修改上级为非末级代码
                        oCN.RunProc("Update Gy_MaterType" + " set HEndflag=0 where HItemID=" + HParentID);
                    }
                    else
                    {
                        oCN.RunProc("update  Gy_MaterType set HUSEORGID=" + HOrgID + ",HParentID = " + HParentID + ",HHelpCode = '" + HHelpCode + "',HRemark='" + HRemark + "'  where HNumber='" + HNumber + "'");
                        //修改上级为非末级代码
                        oCN.RunProc("Update Gy_MaterType" + " set HEndflag=0 where HItemID=" + HParentID);
                    }
                    i++;
                }
                oCN.Commit();
                objJsonResult.code = CodeConstant.SUCCEED;
                objJsonResult.count = CountConstant.SUCCEED;
                objJsonResult.Message = "导入成功!";
                objJsonResult.data = null;
                return objJsonResult;
            }
            catch (Exception e)
            {
                LogService.Write(e);
                objJsonResult.code = CodeConstant.FAIL;
                objJsonResult.count = CountConstant.FAIL;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #endregion
@@ -362,21 +708,21 @@
        /// 
        /// </summary>
        /// <param name="HInterID">单据ID</param>
        /// <param name="IsAudit">禁用(0),反禁用(1)</param>
        /// <param name="IsStop">禁用(0),反禁用(1)</param>
        /// <param name="CurUserName">审核人</param>
        /// <returns></returns>
        [Route("Gy_MaterType/StopGy_MaterType")]
        [HttpGet]
        public object StopGy_MaterType(int HInterID, int IsAudit, string CurUserName)
        public object StopGy_MaterType(int HInterID, int IsStop, string CurUserName)
        {
            try
            {
                //审核权限
                if (!DBUtility.ClsPub.Security_Log_second("Gy_MaterType_Check", 1, false, CurUserName))
                if (!DBUtility.ClsPub.Security_Log_second("Gy_MaterType_Stop", 1, false, CurUserName))
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "审核失败!无权限!";
                    objJsonResult.Message = "禁用失败!无权限!";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
@@ -384,7 +730,7 @@
                var ds = oCN.RunProcReturn("select * from Gy_MaterType where HItemID=" + HInterID, "Gy_MaterType");
                if (ds.Tables[0].Rows.Count > 0)
                {
                    if (IsAudit == 0)  //禁用判断
                    if (IsStop == 0)  //禁用判断
                    {
                        if (ds.Tables[0].Rows[0]["HStopEmp"].ToString() != "")
                        {
@@ -395,7 +741,7 @@
                            return objJsonResult;
                        }
                    }
                    if (IsAudit == 1) //反禁用判断
                    if (IsStop == 1) //反禁用判断
                    {
                        if (ds.Tables[0].Rows[0]["HStopEmp"].ToString() == "")
                        {
@@ -418,7 +764,7 @@
                oCN.BeginTran();
                if (IsAudit == 0)  //禁用判断
                if (IsStop == 0)  //禁用判断
                {
                    oCN.RunProc("update Gy_MaterType set HStopEmp='" + CurUserName + "',HStopTime=getdate(),HStopflag=1 where HItemID=" + HInterID);
@@ -427,7 +773,7 @@
                    objJsonResult.Message = "禁用成功";
                    objJsonResult.data = null;
                }
                if (IsAudit == 1) //反禁用判断
                if (IsStop == 1) //反禁用判断
                {
                    oCN.RunProc("update Gy_MaterType set HStopEmp='',HStopTime=null,HStopflag=0 where HItemID=" + HInterID);
@@ -452,7 +798,7 @@
        }
        #endregion
        #region ç‰©æ–™åˆ†ç±» æ ‘形图
        #region ç‰©æ–™åˆ†ç±» æ ‘形图(根据代码展开树状图)
        public class TreeModel
        {
            public string id { get; set; }
@@ -477,7 +823,7 @@
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    var strLen = row["hitemid"].ToString().Split('.');
                    var strLen = row["hnumber"].ToString().Split('.');
                    if (strLen.Length == 1)
                    {
                        TreeModel tree = new TreeModel();
@@ -532,5 +878,77 @@
        }
        #endregion
        #region æ ¹æ®çˆ¶id和等级获得树状图递归
        [Route("Gy_MaterType/Gy_MaterTypeTreeListByLevel")]
        [HttpGet]
        public object Gy_MaterTypeTreeListByLevel(string HOrgID)
        {
            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");
                // 1. å»ºç«‹çˆ¶ID到子节点列表的映射(一次性遍历)
                var parentDict = new Dictionary<string, List<DataRow>>();
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    string parentId = row["hparentid"].ToString();
                    if (!parentDict.ContainsKey(parentId))
                        parentDict[parentId] = new List<DataRow>();
                    parentDict[parentId].Add(row);
                }
                // 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(new List<TreeModel> { root });
                return objJsonResult;
            }
            catch (Exception e)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        // é€’归构建树的辅助方法
        private void BuildTree(TreeModel parentNode, Dictionary<string, List<DataRow>> parentDict)
        {
            if (parentDict.TryGetValue(parentNode.id, out var childRows))
            {
                foreach (DataRow row in childRows)
                {
                    var childNode = new TreeModel
                    {
                        id = row["hitemid"].ToString(),
                        title = row["hname"].ToString(),
                        children = new List<TreeModel>()
                    };
                    parentNode.children.Add(childNode);
                    // é€’归构建子节点的子树
                    BuildTree(childNode, parentDict);
                }
            }
        }
        #endregion
    }
}