Пример #1
0
        private string GetStructureTreeTable()
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("NO", typeof(string));
            dt.Columns.Add("PARENTNO", typeof(string));
            dt.Columns.Add("NAME", typeof(string));
            dt.Columns.Add("TTYPE", typeof(string));

            if (BP.WF.Glo.OSModel == OSModel.OneOne)
            {
                BP.WF.Port.Depts depts = new BP.WF.Port.Depts();
                depts.RetrieveAll();
                BP.WF.Port.Stations sts = new BP.WF.Port.Stations();
                sts.RetrieveAll();
                BP.WF.Port.Emps emps = new BP.WF.Port.Emps();
                emps.RetrieveAll(BP.WF.Port.EmpAttr.Name);
                BP.WF.Port.EmpStations empsts = new BP.WF.Port.EmpStations();
                empsts.RetrieveAll();
                BP.GPM.DeptEmps empdetps = new BP.GPM.DeptEmps();
                empdetps.RetrieveAll();

                //部门人员
                Dictionary <string, List <string> > des = new Dictionary <string, List <string> >();
                //岗位人员
                Dictionary <string, List <string> > ses = new Dictionary <string, List <string> >();
                //部门岗位
                Dictionary <string, List <string> > dss = new Dictionary <string, List <string> >();
                BP.WF.Port.Station stt  = null;
                BP.WF.Port.Emp     empt = null;

                foreach (BP.WF.Port.Dept dept in depts)
                {
                    //增加部门
                    dt.Rows.Add(dept.No, dept.ParentNo, dept.Name, "DEPT");
                    des.Add(dept.No, new List <string>());
                    dss.Add(dept.No, new List <string>());

                    //获取部门下的岗位
                    empdetps.Retrieve(BP.GPM.DeptEmpAttr.FK_Dept, dept.No);
                    foreach (BP.GPM.DeptEmp empdept in empdetps)
                    {
                        des[dept.No].Add(empdept.FK_Emp);
                        //判断该人员拥有的岗位
                        empsts.Retrieve(BP.WF.Port.EmpStationAttr.FK_Emp, empdept.FK_Emp);
                        foreach (BP.WF.Port.EmpStation es in empsts)
                        {
                            if (ses.ContainsKey(es.FK_Station))
                            {
                                if (ses[es.FK_Station].Contains(es.FK_Emp) == false)
                                {
                                    ses[es.FK_Station].Add(es.FK_Emp);
                                }
                            }
                            else
                            {
                                ses.Add(es.FK_Station, new List <string> {
                                    es.FK_Emp
                                });
                            }

                            //增加部门的岗位
                            if (dss[dept.No].Contains(es.FK_Station) == false)
                            {
                                stt = sts.GetEntityByKey(es.FK_Station) as BP.WF.Port.Station;

                                if (stt == null)
                                {
                                    continue;
                                }

                                dss[dept.No].Add(es.FK_Station);
                                dt.Rows.Add(dept.No + "|" + es.FK_Station, dept.No, stt.Name, "STATION");
                            }
                        }
                    }
                }

                foreach (KeyValuePair <string, List <string> > ds in dss)
                {
                    foreach (string st in ds.Value)
                    {
                        foreach (string emp in ses[st])
                        {
                            empt = emps.GetEntityByKey(emp) as BP.WF.Port.Emp;

                            if (empt == null)
                            {
                                continue;
                            }

                            dt.Rows.Add(ds.Key + "|" + st + "|" + emp, ds.Key + "|" + st, empt.Name, "EMP");
                        }
                    }
                }
            }
            else
            {
                BP.GPM.Depts depts = new BP.GPM.Depts();
                depts.RetrieveAll();
                BP.GPM.Stations sts = new BP.GPM.Stations();
                sts.RetrieveAll();
                BP.GPM.Emps emps = new BP.GPM.Emps();
                emps.RetrieveAll(BP.WF.Port.EmpAttr.Name);
                BP.GPM.DeptStations dss = new BP.GPM.DeptStations();
                dss.RetrieveAll();
                BP.GPM.DeptEmpStations dess = new BP.GPM.DeptEmpStations();
                dess.RetrieveAll();
                BP.GPM.Station stt  = null;
                BP.GPM.Emp     empt = null;

                foreach (BP.GPM.Dept dept in depts)
                {
                    //增加部门
                    dt.Rows.Add(dept.No, dept.ParentNo, dept.Name, "DEPT");

                    //增加部门岗位
                    dss.Retrieve(BP.GPM.DeptStationAttr.FK_Dept, dept.No);
                    foreach (BP.GPM.DeptStation ds in dss)
                    {
                        stt = sts.GetEntityByKey(ds.FK_Station) as BP.GPM.Station;

                        if (stt == null)
                        {
                            continue;
                        }

                        dt.Rows.Add(dept.No + "|" + ds.FK_Station, dept.No, stt.Name, "STATION");

                        //增加部门岗位人员
                        dess.Retrieve(BP.GPM.DeptEmpStationAttr.FK_Dept, dept.No, BP.GPM.DeptEmpStationAttr.FK_Station,
                                      ds.FK_Station);

                        foreach (BP.GPM.DeptEmpStation des in dess)
                        {
                            empt = emps.GetEntityByKey(des.FK_Emp) as BP.GPM.Emp;

                            if (empt == null)
                            {
                                continue;
                            }

                            dt.Rows.Add(dept.No + "|" + ds.FK_Station + "|" + des.FK_Emp, dept.No + "|" + ds.FK_Station,
                                        empt.Name, "EMP");
                        }
                    }
                }
            }

            return(Newtonsoft.Json.JsonConvert.SerializeObject(dt));
        }
Пример #2
0
        /// <summary>
        /// 获取指定部门下一级子部门及人员列表
        /// </summary>
        /// <returns></returns>
        public string Dot2DotTreeDeptEmpModel_GetSubDepts()
        {
            string parentid = this.GetRequestVal("parentid");
            string nid      = this.GetRequestVal("nodeid");

            if (string.IsNullOrWhiteSpace(parentid))
            {
                throw new Exception("参数parentid不能为空");
            }
            if (string.IsNullOrWhiteSpace(nid))
            {
                throw new Exception("参数nodeid不能为空");
            }

            EasyuiTreeNode        node = null;
            List <EasyuiTreeNode> d    = new List <EasyuiTreeNode>();

            BP.WF.Template.NodeEmps semps = new BP.WF.Template.NodeEmps();

            semps.Retrieve(BP.WF.Template.NodeEmpAttr.FK_Node, int.Parse(nid));

            if (BP.WF.Glo.OSModel == OSModel.OneOne)
            {
                BP.Port.Dept  parentDept = new BP.Port.Dept(parentid);
                BP.Port.Depts depts      = new BP.Port.Depts();
                depts.Retrieve(BP.Port.DeptAttr.ParentNo, parentid, BP.Port.DeptAttr.Name);
                BP.Port.Emps emps = new BP.Port.Emps();
                emps.Retrieve(BP.Port.EmpAttr.FK_Dept, parentid, BP.Port.EmpAttr.Name);

                //增加部门
                foreach (BP.Port.Dept dept in depts)
                {
                    node                     = new EasyuiTreeNode();
                    node.id                  = "DEPT_" + dept.No;
                    node.text                = dept.Name;
                    node.iconCls             = "icon-department";
                    node.attributes          = new EasyuiTreeNodeAttributes();
                    node.attributes.No       = dept.No;
                    node.attributes.Name     = dept.Name;
                    node.attributes.ParentNo = dept.ParentNo;
                    node.attributes.TType    = "DEPT";
                    node.attributes.Code     = BP.Tools.chs2py.ConvertStr2Code(dept.Name);
                    node.state               = "closed";
                    node.children            = new List <EasyuiTreeNode>();
                    node.children.Add(new EasyuiTreeNode());
                    node.children[0].text = "loading...";

                    d.Add(node);
                }

                //增加人员
                foreach (BP.Port.Emp emp in emps)
                {
                    node                       = new EasyuiTreeNode();
                    node.id                    = "EMP_" + parentid + "_" + emp.No;
                    node.text                  = emp.Name;
                    node.iconCls               = "icon-user";
                    node.@checked              = semps.GetEntityByKey(BP.WF.Template.NodeEmpAttr.FK_Emp, emp.No) != null;
                    node.attributes            = new EasyuiTreeNodeAttributes();
                    node.attributes.No         = emp.No;
                    node.attributes.Name       = emp.Name;
                    node.attributes.ParentNo   = parentDept.No;
                    node.attributes.ParentName = parentDept.Name;
                    node.attributes.TType      = "EMP";
                    node.attributes.Code       = BP.Tools.chs2py.ConvertStr2Code(emp.Name);

                    d.Add(node);
                }
            }
            else
            {
                BP.GPM.Dept  parentDept = new BP.GPM.Dept(parentid);
                BP.GPM.Depts depts      = new BP.GPM.Depts();
                depts.Retrieve(BP.GPM.DeptAttr.ParentNo, parentid, BP.GPM.DeptAttr.Name);
                BP.GPM.DeptEmps des = new BP.GPM.DeptEmps();
                des.Retrieve(BP.GPM.DeptEmpAttr.FK_Dept, parentid);
                BP.GPM.Emps emps = new BP.GPM.Emps();
                emps.RetrieveAll(BP.GPM.EmpAttr.Name);
                BP.GPM.Emp emp = null;

                //增加部门
                foreach (BP.GPM.Dept dept in depts)
                {
                    node                       = new EasyuiTreeNode();
                    node.id                    = "DEPT_" + dept.No;
                    node.text                  = dept.Name;
                    node.iconCls               = "icon-department";
                    node.attributes            = new EasyuiTreeNodeAttributes();
                    node.attributes.No         = dept.No;
                    node.attributes.Name       = dept.Name;
                    node.attributes.ParentNo   = parentDept.No;
                    node.attributes.ParentName = parentDept.Name;
                    node.attributes.TType      = "DEPT";
                    node.attributes.Code       = BP.Tools.chs2py.ConvertStr2Code(dept.Name);
                    node.state                 = "closed";
                    node.children              = new List <EasyuiTreeNode>();
                    node.children.Add(new EasyuiTreeNode());
                    node.children[0].text = "loading...";

                    d.Add(node);
                }

                //增加人员
                foreach (BP.GPM.DeptEmp de in des)
                {
                    emp = emps.GetEntityByKey(BP.GPM.EmpAttr.No, de.FK_Emp) as BP.GPM.Emp;

                    if (emp == null)
                    {
                        continue;
                    }

                    node                       = new EasyuiTreeNode();
                    node.id                    = "EMP_" + parentid + "_" + emp.No;
                    node.text                  = emp.Name;
                    node.iconCls               = "icon-user";
                    node.@checked              = semps.GetEntityByKey(BP.WF.Template.NodeEmpAttr.FK_Emp, emp.No) != null;
                    node.attributes            = new EasyuiTreeNodeAttributes();
                    node.attributes.No         = emp.No;
                    node.attributes.Name       = emp.Name;
                    node.attributes.ParentNo   = parentDept.No;
                    node.attributes.ParentName = parentDept.Name;
                    node.attributes.TType      = "EMP";
                    node.attributes.Code       = BP.Tools.chs2py.ConvertStr2Code(emp.Name);

                    d.Add(node);
                }
            }

            return(Newtonsoft.Json.JsonConvert.SerializeObject(d));
        }
Пример #3
0
        public override object Do()
        {
            string msg = "";

            #region 检查数据文件是否完整.
            string path = "C:\\CCFlowTemplete";
            if (System.IO.Directory.Exists(path) == false)
            {
                msg += "@错误:约定的目录不存在服务器" + path + ",请把从ccflow备份的文件放入" + path;
            }

            //PortTables.
            string file = path + "\\PortTables.xml";
            if (System.IO.File.Exists(file) == false)
            {
                msg += "@错误:约定的文件不存在," + file;
            }

            //SysTables.
            file = path + "\\SysTables.xml";
            if (System.IO.File.Exists(file) == false)
            {
                msg += "@错误:约定的文件不存在," + file;
            }

            //FlowTables.
            file = path + "\\FlowTables.xml";
            if (System.IO.File.Exists(file) == false)
            {
                msg += "@错误:约定的文件不存在," + file;
            }
            #endregion 检查数据文件是否完整.

            #region 1 装载流程基础表数据.
            DataSet ds = new DataSet();
            ds.ReadXml(path + "\\FlowTables.xml");

            //流程类别.
            FlowSorts sorts = new FlowSorts();
            sorts.ClearTable();
            DataTable dt = ds.Tables["WF_FlowSort"];
            // sorts = QueryObject.InitEntitiesByDataTable(sorts, dt, null) as FlowSorts;
            foreach (FlowSort item in sorts)
            {
                item.DirectInsert(); //插入数据.
            }
            #endregion 1 装载流程基础表数据.

            #region 2 组织结构.
            ds = new DataSet();
            ds.ReadXml(path + "\\PortTables.xml");

            //Port_Emp.
            Emps emps = new Emps();
            emps.ClearTable();
            dt   = ds.Tables["Port_Emp"];
            emps = QueryObject.InitEntitiesByDataTable(emps, dt, null) as Emps;
            foreach (Emp item in emps)
            {
                item.DirectInsert(); //插入数据.
            }

            //Depts.
            Depts depts = new Depts();
            depts.ClearTable();
            dt    = ds.Tables["Port_Dept"];
            depts = QueryObject.InitEntitiesByDataTable(depts, dt, null) as Depts;
            foreach (Dept item in depts)
            {
                item.DirectInsert(); //插入数据.
            }

            //Stations.
            Stations stas = new Stations();
            stas.ClearTable();
            dt   = ds.Tables["Port_Station"];
            stas = QueryObject.InitEntitiesByDataTable(stas, dt, null) as Stations;
            foreach (Station item in stas)
            {
                item.DirectInsert(); //插入数据.
            }


            if (BP.Sys.SystemConfig.OSModel == OSModel.OneMore)
            {
                //EmpDepts.
                BP.GPM.DeptEmps eds = new BP.GPM.DeptEmps();
                eds.ClearTable();
                dt  = ds.Tables["Port_DeptEmp"];
                eds = QueryObject.InitEntitiesByDataTable(eds, dt, null) as BP.GPM.DeptEmps;
                foreach (BP.GPM.DeptEmp item in eds)
                {
                    item.DirectInsert(); //插入数据.
                }
            }
            #endregion 2 组织结构.

            #region 3 恢复系统数据.
            ds = new DataSet();
            ds.ReadXml(path + "\\SysTables.xml");

            //枚举Main.
            SysEnumMains sems = new SysEnumMains();
            sems.ClearTable();
            dt   = ds.Tables["Sys_EnumMain"];
            sems = QueryObject.InitEntitiesByDataTable(sems, dt, null) as SysEnumMains;
            foreach (SysEnumMain item in sems)
            {
                item.DirectInsert(); //插入数据.
            }

            //枚举.
            SysEnums ses = new SysEnums();
            ses.ClearTable();
            dt  = ds.Tables["Sys_Enum"];
            ses = QueryObject.InitEntitiesByDataTable(ses, dt, null) as SysEnums;
            foreach (SysEnum item in ses)
            {
                item.DirectInsert(); //插入数据.
            }

            ////Sys_FormTree.
            //BP.Sys.SysFormTrees sfts = new SysFormTrees();
            //sfts.ClearTable();
            //dt = ds.Tables["Sys_FormTree"];
            //sfts = QueryObject.InitEntitiesByDataTable(sfts, dt, null) as SysFormTrees;
            //foreach (SysFormTree item in sfts)
            //{
            //    try
            //    {
            //       item.DirectInsert(); //插入数据.
            //    }
            //    catch
            //    {
            //    }
            //}
            #endregion 3 恢复系统数据.

            #region 4.备份表单相关数据.
            if (1 == 2)
            {
                string pathOfTables = path + "\\SFTables";
                System.IO.Directory.CreateDirectory(pathOfTables);
                SFTables tabs = new SFTables();
                tabs.RetrieveAll();
                foreach (SFTable item in tabs)
                {
                    if (item.No.Contains("."))
                    {
                        continue;
                    }

                    string sql = "SELECT * FROM " + item.No;
                    ds = new DataSet();
                    ds.Tables.Add(BP.DA.DBAccess.RunSQLReturnTable(sql));
                    ds.WriteXml(pathOfTables + "\\" + item.No + ".xml");
                }
            }
            #endregion 4 备份表单相关数据.

            #region 5.恢复表单数据.
            //删除所有的流程数据.
            MapDatas mds = new MapDatas();
            mds.RetrieveAll();
            foreach (MapData fl in mds)
            {
                //if (fl.FK_FormTree.Length > 1 || fl.FK_FrmSort.Length > 1)
                //    continue;
                fl.Delete(); //删除流程.
            }

            //清除数据.
            SysFormTrees fss = new SysFormTrees();
            fss.ClearTable();

            // 调度表单文件。
            string          frmPath = path + "\\Form";
            DirectoryInfo   dirInfo = new DirectoryInfo(frmPath);
            DirectoryInfo[] dirs    = dirInfo.GetDirectories();
            foreach (DirectoryInfo item in dirs)
            {
                if (item.FullName.Contains(".svn"))
                {
                    continue;
                }

                string[] fls = System.IO.Directory.GetFiles(item.FullName);
                if (fls.Length == 0)
                {
                    continue;
                }

                SysFormTree fs = new SysFormTree();
                fs.No       = item.Name.Substring(0, item.Name.IndexOf('.'));
                fs.Name     = item.Name.Substring(item.Name.IndexOf('.'));
                fs.ParentNo = "0";
                fs.Insert();

                foreach (string f in fls)
                {
                    try
                    {
                        msg += "@开始调度表单模板文件:" + f;
                        System.IO.FileInfo info = new System.IO.FileInfo(f);
                        if (info.Extension != ".xml")
                        {
                            continue;
                        }

                        ds = new DataSet();
                        ds.ReadXml(f);

                        MapData md = MapData.ImpMapData(ds);
                        md.FK_FrmSort = fs.No;
                        md.Update();
                    }
                    catch (Exception ex)
                    {
                        msg += "@调度失败,文件:" + f + ",异常信息:" + ex.Message;
                    }
                }
            }
            #endregion 5.恢复表单数据.

            #region 6.恢复流程数据.
            //删除所有的流程数据.
            Flows flsEns = new Flows();
            flsEns.RetrieveAll();
            foreach (Flow fl in flsEns)
            {
                fl.DoDelete(); //删除流程.
            }

            dirInfo = new DirectoryInfo(path + "\\Flow\\");
            dirs    = dirInfo.GetDirectories();

            //删除数据.
            FlowSorts fsRoots = new FlowSorts();
            fsRoots.ClearTable();

            //生成流程树.
            FlowSort fsRoot = new FlowSort();
            fsRoot.No       = "99";
            fsRoot.Name     = "流程树";
            fsRoot.ParentNo = "0";
            fsRoot.DirectInsert();

            foreach (DirectoryInfo dir in dirs)
            {
                if (dir.FullName.Contains(".svn"))
                {
                    continue;
                }

                string[] fls = System.IO.Directory.GetFiles(dir.FullName);
                if (fls.Length == 0)
                {
                    continue;
                }

                FlowSort fs = new FlowSort();
                fs.No       = dir.Name.Substring(0, dir.Name.IndexOf('.'));
                fs.Name     = dir.Name.Substring(3);
                fs.ParentNo = fsRoot.No;
                fs.Insert();

                foreach (string filePath in fls)
                {
                    msg += "\t\n@开始调度流程模板文件:" + filePath;
                    Flow myflow = BP.WF.Flow.DoLoadFlowTemplate(fs.No, filePath, ImpFlowTempleteModel.AsTempleteFlowNo);
                    msg += "\t\n@流程:" + myflow.Name + "装载成功。";

                    System.IO.FileInfo info = new System.IO.FileInfo(filePath);
                    myflow.Name = info.Name.Replace(".xml", "");
                    if (myflow.Name.Substring(2, 1) == ".")
                    {
                        myflow.Name = myflow.Name.Substring(3);
                    }

                    myflow.DirectUpdate();
                }
            }
            #endregion 6.恢复流程数据.

            BP.DA.Log.DefaultLogWriteLineInfo(msg);

            //删除多余的空格.
            BP.WF.DTS.DeleteBlankGroupField dts = new DeleteBlankGroupField();
            dts.Do();

            //执行生成签名.
            GenerSiganture gs = new GenerSiganture();
            gs.Do();

            return(msg);
        }
Пример #4
0
        protected void btnImport_Click(object sender, EventArgs e)
        {
            if (!file.HasFile)
            {
                AlertAndBack("请选择组织结构Excel文件(*.xls)!");
                return;
            }

            //检查是否是.xls格式,2007格式,下面的方法有问题,暂时限定为xls格式
            if (Path.GetExtension(file.PostedFile.FileName).ToLower() != ".xls")
            {
                AlertAndBack("组织结构Excel文件必须是*.xls(Microsoft Excel 97-2003格式)!");
                return;
            }

            var updir = Path.Combine(BP.Sys.SystemConfig.PathOfDataUser, "UploadFile");

            if (Directory.Exists(updir) == false)
            {
                Directory.CreateDirectory(updir);
            }

            var xls = Path.Combine(updir, "Org_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");

            file.PostedFile.SaveAs(xls);

            var excel = new NPOIExcel(xls);

            //检查是否包含3个表
            var sheets = excel.GetSheetNames();// BP.DA.DBLoad.GenerTableNames(xls);

            if (sheets.Contains("岗位") == false || sheets.Contains("部门") == false || sheets.Contains("人员") == false)
            {
                DeleteFile(xls);
                AlertAndBack("组织结构Excel文件必须由“ccflow组织结构批量导入模板”文件编辑而成,请下载模板文件重新编辑,再进行导入!");
                return;
            }

            var colStations = new[] { "岗位名称", "岗位类型" };
            var colDepts    = new[] { "部门名称", "上级部门名称", "部门负责人" };
            var colEmps     = new[] { "人员帐号", "人员姓名", "人员编号", "部门", "岗位", "职务", "电话", "邮箱", "直属领导" };

            var dtStation = excel.ExcelToDataTable("岗位", true); // BP.DA.DBLoad.GetTableByExt(xls, "SELECT * FROM [岗位$]"); //岗位名称*,岗位类型*
            var dtDept    = excel.ExcelToDataTable("部门", true); // BP.DA.DBLoad.GetTableByExt(xls, "SELECT * FROM [部门$]");    //部门名称*,上级部门名称*,部门负责人
            var dtEmp     = excel.ExcelToDataTable("人员", true); // BP.DA.DBLoad.GetTableByExt(xls, "SELECT * FROM [人员$]");     //人员帐号*,人员姓名*,人员编号,部门*,岗位*,职务,电话,邮箱,直属领导

            //初步检查列数
            if (dtStation.Columns.Count < 2 || dtDept.Columns.Count < 3 || dtEmp.Columns.Count < 9)
            {
                AlertAndBack("组织结构Excel文件结构错误,请重新下载模板文件编辑后,再进行导入!");
                return;
            }

            //检查岗位列
            if (CheckColumns(dtStation, colStations, "岗位") == false)
            {
                return;
            }

            //检查部门列
            if (CheckColumns(dtDept, colDepts, "部门") == false)
            {
                return;
            }

            //检查人员列
            if (CheckColumns(dtEmp, colEmps, "人员") == false)
            {
                return;
            }

            excel.Dispose();
            //return;
            //获取数据库中已有数据,便于下面的数据对比
            var isBPM        = BP.WF.Glo.OSModel == BP.WF.OSModel.BPM;
            var stations     = new BP.GPM.Stations();
            var stationTypes = new BP.GPM.StationTypes();
            var depts        = new BP.GPM.Depts();
            var emps         = new BP.GPM.Emps();
            var deptEmpSts   = new BP.GPM.DeptEmpStations();

            stations.RetrieveAll();
            stationTypes.RetrieveAll();
            depts.RetrieveAll();
            emps.RetrieveAll();
            deptEmpSts.RetrieveAll();

            //集成模式,涉及数据
            var empDepts = new EmpDepts();
            var empSts   = new EmpStations();

            empDepts.RetrieveAll();
            empSts.RetrieveAll();

            //BPM独立模式,涉及数据
            var duties     = new BP.GPM.Dutys();
            var deptDuties = new BP.GPM.DeptDutys();
            var deptSts    = new BP.GPM.DeptStations();
            var deptEmps   = new BP.GPM.DeptEmps();

            duties.RetrieveAll();
            deptDuties.RetrieveAll();
            deptSts.RetrieveAll();
            deptEmps.RetrieveAll();

            //定义错误记录存储表
            var     dtStationError = dtStation.Clone();
            var     dtDeptError    = dtDept.Clone();
            var     dtEmpError     = dtEmp.Clone();
            DataRow drError        = null;
            bool    haveDuty       = false;

            BP.GPM.Station        st       = null;
            BP.GPM.StationType    stType   = null;
            BP.GPM.Dept           dept     = null;
            BP.GPM.Emp            emp      = null;
            BP.GPM.DeptEmpStation des      = null;
            BP.Port.EmpDept       empDept  = null;
            BP.Port.EmpStation    empSt    = null;
            BP.GPM.Duty           duty     = null;
            BP.GPM.DeptDuty       deptDuty = null;
            BP.GPM.DeptStation    deptSt   = null;
            BP.GPM.DeptEmp        deptEmp  = null;

            //检查数据,并将符合规范的数据写入数据库

            #region //岗位信息
            foreach (DataRow dr in dtStation.Rows)
            {
                drError = dtStationError.NewRow();
                dtStationError.Rows.Add(drError);

                //检查岗位,名称、类型必须填写,且名称不能重复
                if (IsCellNull(dr, "岗位名称"))
                {
                    drError["岗位名称"] = "岗位名称必须填写!";
                    continue;
                }

                if (IsCellNull(dr, "岗位类型"))
                {
                    drError["岗位类型"] = "岗位类型必须填写!";
                    continue;
                }

                //判断数据库中是否已经存在
                if (stations.GetEntityByKey(BP.GPM.StationAttr.Name, dr["岗位名称"].ToString()) != null)
                {
                    continue;
                }

                stType = stationTypes.GetEntityByKey(BP.GPM.StationTypeAttr.Name, dr["岗位类型"].ToString()) as BP.GPM.StationType;

                if (stType == null)
                {
                    stType = new BP.GPM.StationType {
                        Name = dr["岗位类型"].ToString()
                    };
                    stType.No = stType.GenerNewNo;
                    stType.Insert();
                    stationTypes.AddEntity(stType);
                }

                st = new BP.GPM.Station
                {
                    Name           = dr["岗位名称"].ToString(),
                    FK_StationType = stType.No
                };
                //st.No = st.GenerNewNo;
                st.Insert();
                stations.AddEntity(st);
            }
            #endregion

            #region  //部门信息
            BP.GPM.Dept parentDept = null;

            foreach (DataRow dr in dtDept.Rows)
            {
                drError = dtDeptError.NewRow();
                dtDeptError.Rows.Add(drError);

                //检查部门,名称必须填写,且名称不能重复
                if (IsCellNull(dr, "部门名称"))
                {
                    drError["部门名称"] = "部门名称必须填写!";
                    continue;
                }

                if (!IsCellNull(dr, "上级部门名称"))
                {
                    parentDept = depts.GetEntityByKey(EntityTreeAttr.Name, dr["上级部门名称"].ToString()) as BP.GPM.Dept;

                    if (parentDept == null)
                    {
                        drError["上级部门名称"] = "上级部门名称 填写错误,未找到上级部门“" + dr["上级部门名称"] + "”!";
                        continue;
                    }
                }
                else
                {
                    parentDept = null;
                }

                //判断数据库中是否已经存在
                if (depts.GetEntityByKey(EntityTreeAttr.Name, dr["部门名称"].ToString(), EntityTreeAttr.ParentNo, parentDept == null ? "0" : parentDept.No) != null)
                {
                    continue;
                }

                if (parentDept == null)
                {
                    //增加根部门
                    dept = depts.GetEntityByKey(EntityTreeAttr.ParentNo, "0") as BP.GPM.Dept;
                    if (dept == null)
                    {
                        //不存在根部门
                        dept = new BP.GPM.Dept
                        {
                            No       = "100",
                            Name     = dr["部门名称"].ToString(),
                            ParentNo = "0",
                            Leader   = dr["部门负责人"].ToString(),
                            IsDir    = false
                        };

                        dept.Insert();
                    }
                    else
                    {
                        //已经存在根部门,建立一个同级别的根部门
                        dept.Name   = dr["部门名称"].ToString();
                        dept.Leader = dr["部门负责人"].ToString();

                        //var currDept = dept.DoCreateSameLevelNode();

                        //dept = new BP.GPM.Dept(currDept.No)
                        //           {
                        //               Name = dr["部门名称"].ToString(),
                        //               Leader = dr["部门负责人"].ToString()
                        //           };

                        dept.Update();
                    }

                    depts.AddEntity(dept);
                }
                else
                {
                    //增加非根部门
                    var currDept = parentDept.DoCreateSubNode();

                    dept = new BP.GPM.Dept(currDept.No)
                    {
                        Name   = dr["部门名称"].ToString(),
                        Leader = dr["部门负责人"].ToString()
                    };

                    dept.Update();
                    depts.AddEntity(dept);
                }
            }
            #endregion

            #region //人员信息
            foreach (DataRow dr in dtEmp.Rows)
            {
                drError = dtEmpError.NewRow();
                dtEmpError.Rows.Add(drError);

                #region //检查人员,帐号、姓名、部门、岗位必须填写
                if (IsCellNull(dr, "人员帐号"))
                {
                    drError["人员帐号"] = "人员帐号必须填写!";
                    continue;
                }

                if (IsCellNull(dr, "人员姓名"))
                {
                    drError["人员姓名"] = "人员姓名必须填写!";
                    continue;
                }

                if (IsCellNull(dr, "部门"))
                {
                    drError["部门"] = "部门必须填写!";
                    continue;
                }

                if (IsCellNull(dr, "岗位"))
                {
                    drError["岗位"] = "岗位必须填写!";
                    continue;
                }
                #endregion

                //判断人员在数据库中是否已经存在
                emp = emps.GetEntityByKey(EntityNoAttr.No, dr["人员帐号"].ToString(), EntityNoNameAttr.Name,
                                          dr["人员姓名"].ToString()) as BP.GPM.Emp;
                dept = depts.GetEntityByKey(BP.GPM.DeptAttr.Name, dr["部门"].ToString()) as BP.GPM.Dept;
                st   = stations.GetEntityByKey(BP.GPM.StationAttr.Name, dr["岗位"].ToString()) as BP.GPM.Station;

                if (dept == null)
                {
                    drError["部门"] = string.Format("部门填写错误,“{0}” 在部门中未查到!", dr["部门"]);
                    continue;
                }

                if (st == null)
                {
                    drError["岗位"] = string.Format("岗位填写错误,“{0}” 在岗位中未查到!", dr["岗位"]);
                    continue;
                }

                if (isBPM)
                {
                    //BPM模式,Duty,DeptDuty
                    if (!IsCellNull(dr, "职务"))
                    {
                        duty = duties.GetEntityByKey(BP.GPM.DutyAttr.Name, dr["职务"].ToString()) as BP.GPM.Duty;
                    }
                    else
                    {
                        if (duties.Count == 0)
                        {
                            duty = new BP.GPM.Duty {
                                Name = "默认职务"
                            };
                            duty.Insert();
                            duties.AddEntity(duty);
                        }
                        else
                        {
                            duty = duties[0] as BP.GPM.Duty;
                        }
                    }

                    if (duty == null)
                    {
                        duty = new BP.GPM.Duty {
                            Name = dr["职务"].ToString()
                        };
                        //duty.No = duty.GenerNewNo;
                        duty.Insert();
                        duties.AddEntity(duty);
                    }

                    deptDuty =
                        deptDuties.GetEntityByKey(BP.GPM.DeptDutyAttr.FK_Dept, dept.No, BP.GPM.DeptDutyAttr.FK_Duty,
                                                  duty.No) as BP.GPM.DeptDuty;

                    if (deptDuty == null)
                    {
                        deptDuty = new BP.GPM.DeptDuty {
                            FK_Dept = dept.No, FK_Duty = duty.No
                        };
                        deptDuty.Insert();
                        deptDuties.AddEntity(deptDuty);
                    }
                }

                if (emp != null)
                {
                    //如果人员存在,则判断此人员的部门与岗位,如果部门、岗位不存在,则增加部门岗位关联等
                    //此处不对已存在人员的其他信息进行比对修改,如人员编号,邮箱,电话等
                    des = deptEmpSts.GetEntityByKey(BP.GPM.DeptEmpStationAttr.FK_Emp, emp.No,
                                                    BP.GPM.DeptEmpStationAttr.FK_Dept, dept.No,
                                                    BP.GPM.DeptEmpStationAttr.FK_Station, st.No) as BP.GPM.DeptEmpStation;

                    if (des != null)
                    {
                        drError["人员帐号"]   = drError["人员姓名"] =
                            drError["部门"] = drError["岗位"] = "此人员已经增加过,“人员+部门+岗位”不能重复!";
                        continue;
                    }
                }
                else
                {
                    //此人员不存在
                    emp = new BP.GPM.Emp
                    {
                        No      = dr["人员帐号"].ToString(),
                        Name    = dr["人员姓名"].ToString(),
                        Pass    = "******",
                        FK_Dept = dept.No
                    };

                    if (isBPM)
                    {
                        emp.EmpNo   = dr["人员编号"] as string;
                        emp.FK_Duty = duty.No;
                        emp.Email   = dr["邮箱"] as string;
                        emp.Tel     = dr["电话"] as string;
                        emp.Leader  = dr["直属领导"] as string;
                        emp.SetValByKey(BP.GPM.EmpAttr.NumOfDept, 1);
                    }

                    emp.Insert();
                    emps.AddEntity(emp);
                }

                des = new BP.GPM.DeptEmpStation
                {
                    FK_Emp     = emp.No,
                    FK_Dept    = dept.No,
                    FK_Station = st.No
                };

                des.Insert();
                deptEmpSts.AddEntity(des);

                if (isBPM)
                {
                    //BPM模式,DeptStation,DeptEmp
                    deptSt = deptSts.GetEntityByKey(BP.GPM.DeptStationAttr.FK_Dept, dept.No,
                                                    BP.GPM.DeptStationAttr.FK_Station, st.No) as BP.GPM.DeptStation;

                    if (deptSt == null)
                    {
                        deptSt = new BP.GPM.DeptStation {
                            FK_Dept = dept.No, FK_Station = st.No
                        };
                        deptSt.Insert();
                        deptSts.AddEntity(deptSt);
                    }

                    deptEmp =
                        deptEmps.GetEntityByKey(BP.GPM.DeptEmpAttr.FK_Dept, dept.No, BP.GPM.DeptEmpAttr.FK_Emp,
                                                emp.No) as BP.GPM.DeptEmp;

                    if (deptEmp == null)
                    {
                        deptEmp = new BP.GPM.DeptEmp
                        {
                            FK_Dept = dept.No,
                            FK_Emp  = emp.No,
                            FK_Duty = duty.No
                        };
                        deptEmp.Insert();
                        deptEmps.AddEntity(deptEmp);
                    }
                }
                else
                {
                    //集成模式,EmpDept,EmpStation
                    empDept =
                        empDepts.GetEntityByKey(EmpDeptAttr.FK_Dept, dept.No, EmpDeptAttr.FK_Emp, emp.No) as EmpDept;

                    if (empDept == null)
                    {
                        empDept = new EmpDept {
                            FK_Emp = emp.No, FK_Dept = dept.No
                        };
                        empDept.Insert();
                        empDepts.AddEntity(empDept);
                    }

                    empSt =
                        empSts.GetEntityByKey(EmpStationAttr.FK_Emp, emp.No, EmpStationAttr.FK_Station, st.No) as
                        EmpStation;

                    if (empSt == null)
                    {
                        empSt = new EmpStation {
                            FK_Emp = emp.No, FK_Station = st.No
                        };
                        empSt.Insert();
                        empSts.AddEntity(empSt);
                    }
                }
            }
            #endregion

            #region //前台输出岗位信息

            pub1.AddTableNormal();
            pub1.AddTR();
            pub1.AddTDGroupTitle("style='text-align:center;width:60px;'", "序");
            pub1.AddTDGroupTitle("style='width:140px;'", "名称");
            pub1.AddTDGroupTitle("类型");
            pub1.AddTREnd();

            for (var i = 0; i < dtStation.Rows.Count; i++)
            {
                drError = dtStationError.Rows[i];

                pub1.AddTR();
                pub1.AddTDIdx(i + 1);

                if (IsCellNull(drError, "岗位名称"))
                {
                    pub1.AddTD(dtStation.Rows[i]["岗位名称"].ToString());
                }
                else
                {
                    pub1.AddTD("style='background-color:yellow;color:red;' title='" + drError["岗位名称"] + "'",
                               dtStation.Rows[i]["岗位名称"].ToString());
                }

                if (IsCellNull(drError, "岗位类型"))
                {
                    pub1.AddTD(dtStation.Rows[i]["岗位类型"].ToString());
                }
                else
                {
                    pub1.AddTD("style='background-color:yellow;color:red;' title='" + drError["岗位类型"] + "'",
                               dtStation.Rows[i]["岗位类型"].ToString());
                }

                pub1.AddTREnd();
            }

            pub1.AddTableEnd();
            #endregion

            #region //前台输出部门信息

            pub2.AddTableNormal();
            pub2.AddTR();
            pub2.AddTDGroupTitle("style='text-align:center;width:60px;'", "序");
            pub2.AddTDGroupTitle("style='width:140px;'", "名称");
            pub2.AddTDGroupTitle("style='width:140px;'", "上级名称");
            pub2.AddTDGroupTitle("部门负责人");
            pub2.AddTREnd();

            for (var i = 0; i < dtDept.Rows.Count; i++)
            {
                drError = dtDeptError.Rows[i];

                pub2.AddTR();
                pub2.AddTDIdx(i + 1);

                if (IsCellNull(drError, "部门名称"))
                {
                    pub2.AddTD(dtDept.Rows[i]["部门名称"].ToString());
                }
                else
                {
                    pub2.AddTD("style='background-color:yellow;color:red;' title='" + drError["部门名称"] + "'",
                               dtDept.Rows[i]["部门名称"].ToString());
                }

                if (IsCellNull(drError, "上级部门名称"))
                {
                    pub2.AddTD(dtDept.Rows[i]["上级部门名称"].ToString());
                }
                else
                {
                    pub2.AddTD("style='background-color:yellow;color:red;' title='" + drError["上级部门名称"] + "'",
                               dtDept.Rows[i]["上级部门名称"].ToString());
                }

                pub2.AddTD(dtDept.Rows[i]["部门负责人"].ToString());
                pub2.AddTREnd();
            }

            pub2.AddTableEnd();
            #endregion

            #region //前台输出人员信息

            pub3.AddTableNormal();
            pub3.AddTR();
            pub3.AddTDGroupTitle("style='text-align:center;width:60px;'", "序");
            pub3.AddTDGroupTitle("style='width:120px;'", "帐号");
            pub3.AddTDGroupTitle("style='width:100px;'", "姓名");

            if (isBPM)
            {
                pub3.AddTDGroupTitle("style='width:100px;'", "编号");
            }

            pub3.AddTDGroupTitle("style='width:180px;'", "部门");

            if (!isBPM)
            {
                pub3.AddTDGroupTitle("岗位");
            }
            else
            {
                pub3.AddTDGroupTitle("style='width:100px;'", "岗位");
                pub3.AddTDGroupTitle("style='width:100px;'", "职务");
                pub3.AddTDGroupTitle("style='width:120px;'", "电话");
                pub3.AddTDGroupTitle("style='width:160px;'", "邮箱");
                pub3.AddTDGroupTitle("直属领导");
            }

            pub3.AddTREnd();

            for (var i = 0; i < dtEmp.Rows.Count; i++)
            {
                drError = dtEmpError.Rows[i];

                pub3.AddTR();
                pub3.AddTDIdx(i + 1);

                if (IsCellNull(drError, "人员帐号"))
                {
                    pub3.AddTD(dtEmp.Rows[i]["人员帐号"].ToString());
                }
                else
                {
                    pub3.AddTD("style='background-color:yellow;color:red;' title='" + drError["人员帐号"] + "'",
                               dtEmp.Rows[i]["人员帐号"].ToString());
                }

                if (IsCellNull(drError, "人员姓名"))
                {
                    pub3.AddTD(dtEmp.Rows[i]["人员姓名"].ToString());
                }
                else
                {
                    pub3.AddTD("style='background-color:yellow;color:red;' title='" + drError["人员姓名"] + "'",
                               dtEmp.Rows[i]["人员姓名"].ToString());
                }

                if (isBPM)
                {
                    pub3.AddTD(dtEmp.Rows[i]["人员编号"].ToString());
                }

                if (IsCellNull(drError, "部门"))
                {
                    pub3.AddTD(dtEmp.Rows[i]["部门"].ToString());
                }
                else
                {
                    pub3.AddTD("style='background-color:yellow;color:red;' title='" + drError["部门"] + "'",
                               dtEmp.Rows[i]["部门"].ToString());
                }

                if (IsCellNull(drError, "岗位"))
                {
                    pub3.AddTD(dtEmp.Rows[i]["岗位"].ToString());
                }
                else
                {
                    pub3.AddTD("style='background-color:yellow;color:red;' title='" + drError["岗位"] + "'",
                               dtEmp.Rows[i]["岗位"].ToString());
                }

                if (isBPM)
                {
                    pub3.AddTD(dtEmp.Rows[i]["职务"].ToString());
                    pub3.AddTD(dtEmp.Rows[i]["电话"].ToString());
                    pub3.AddTD(dtEmp.Rows[i]["邮箱"].ToString());
                    pub3.AddTD(dtEmp.Rows[i]["直属领导"].ToString());
                }

                pub3.AddTREnd();
            }

            pub3.AddTableEnd();
            #endregion
        }