using System;
using System.Data;
using BP.DA;
using BP.En;
using BP.Web;
namespace BP.Cloud
{
///
/// 部门属性
///
public class DeptAttr : EntityTreeAttr
{
///
/// 单位全名
///
public const string NameOfPath = "NameOfPath";
///
/// 管理员
///
public const string Adminer = "Adminer";
///
/// 组织编号
///
public const string OrgNo = "OrgNo";
///
/// 部门ID
///
public const string RefID = "RefID";
///
/// 关联的父节点ID
///
public const string RefParentID = "RefParentID";
///
/// 部门主管
///
public const string Leader = "Leader";
}
///
/// 部门
///
public class Dept : EntityTree
{
#region 属性
///
/// 组织编号
///
public string OrgNo
{
get
{
return this.GetValStrByKey(DeptAttr.OrgNo);
}
set
{
this.SetValByKey(DeptAttr.OrgNo, value);
}
}
///
/// 领导
///
public string Leader
{
get
{
return this.GetValStrByKey(DeptAttr.Leader);
}
set
{
this.SetValByKey(DeptAttr.Leader, value);
}
}
///
/// 部门ID
///
public string RefID
{
get
{
return this.GetValStrByKey(DeptAttr.RefID);
}
set
{
this.SetValByKey(DeptAttr.RefID, value);
}
}
public string RefParentID
{
get
{
return this.GetValStrByKey(DeptAttr.RefParentID);
}
set
{
this.SetValByKey(DeptAttr.RefParentID, value);
}
}
///
/// adminer
///
public string Adminer
{
get
{
return this.GetValStrByKey(DeptAttr.Adminer);
}
set
{
this.SetValByKey(DeptAttr.Adminer, value);
}
}
///
/// 全名
///
public string NameOfPath
{
get
{
return this.GetValStrByKey(DeptAttr.NameOfPath);
}
set
{
this.SetValByKey(DeptAttr.NameOfPath, value);
}
}
///
/// 父节点的ID
///
public new string ParentNo
{
get
{
return this.GetValStrByKey(DeptAttr.ParentNo);
}
set
{
this.SetValByKey(DeptAttr.ParentNo, value);
}
}
#endregion
#region 构造函数
///
/// 部门
///
public Dept() { }
///
/// 部门
///
/// 编号
public Dept(string no) : base(no) { }
#endregion
#region 重写方法
public override UAC HisUAC
{
get
{
UAC uac = new UAC();
uac.OpenForSysAdmin();
uac.IsInsert = false;
return uac;
}
}
///
/// Map
///
public override Map EnMap
{
get
{
if (this._enMap != null)
return this._enMap;
Map map = new Map("Port_Dept", "部门");
map.AddTBStringPK(DeptAttr.No, null, "编号", true, true, 1, 50, 20);
map.AddTBString(DeptAttr.Name, null, "部门名称", true, false, 0, 100, 30, false);
map.AddTBString(DeptAttr.NameOfPath, null, "部门全称", true, true, 0, 100, 30, true);
map.AddTBString(DeptAttr.ParentNo, null, "父节点编号", true, true, 0, 100, 30);
map.AddTBString(DeptAttr.OrgNo, null, "组织编码", true, true, 0, 100, 30);
map.AddTBString(DeptAttr.Leader, null, "部门负责人", true, false, 0, 100, 30);
map.AddTBString(DeptAttr.Adminer, null, "管理员帐号", false, false, 0, 100, 30);
map.AddTBInt(DeptAttr.Idx, 0, "Idx", false, false); //顺序号.
//微信,丁丁的第三方的ID.
map.AddTBString(DeptAttr.RefID, null, "RefID", false, true, 0, 100, 30);
map.AddTBString(DeptAttr.RefParentID, null, "RefParentID", false, true, 0, 100, 30);
////节点绑定人员. 使用树杆与叶子的模式绑定.
//map.AttrsOfOneVSM.AddBranchesAndLeaf(new DeptEmps(), new BP.Port.Emps(),
// DeptEmpAttr.FK_Dept,
// DeptEmpAttr.FK_Emp, "对应人员", EmpAttr.FK_Dept, EmpAttr.Name,
// EmpAttr.No, "@WebUser.FK_Dept");
RefMethod rm = new RefMethod();
rm.Title = "重置部门全称";
rm.ClassMethodName = this.ToString() + ".DoResetPathName";
rm.RefMethodType = RefMethodType.Func;
string msg = "当该部门名称变化后,该部门与该部门的子部门名称路径(Port_Dept.NameOfPath)将发生变化.";
msg += "\t\n 该部门与该部门的子部门的人员路径也要发生变化Port_Emp列DeptDesc.StaDesc.";
msg += "\t\n 您确定要执行吗?";
rm.Warning = msg;
map.AddRefMethod(rm);
//rm = new RefMethod();
//rm.Title = "增加同级部门";
//rm.ClassMethodName = this.ToString() + ".DoSameLevelDept";
//rm.HisAttrs.AddTBString("No", null, "同级部门编号", true, false, 0, 100, 100);
//rm.HisAttrs.AddTBString("Name", null, "部门名称", true, false, 0, 100, 100);
//map.AddRefMethod(rm);
//rm = new RefMethod();
//rm.Title = "增加下级部门";
//rm.ClassMethodName = this.ToString() + ".DoSubDept";
//rm.HisAttrs.AddTBString("No", null, "同级部门编号", true, false, 0, 100, 100);
//rm.HisAttrs.AddTBString("Name", null, "部门名称", true, false, 0, 100, 100);
//map.AddRefMethod(rm);
this._enMap = map;
return this._enMap;
}
}
#endregion
protected override bool beforeDelete()
{
DeptEmps ens = new DeptEmps();
ens.Retrieve(DeptEmpAttr.FK_Dept, this.No);
if (ens.Count > 0)
throw new Exception("err@删除部门错误,该部门下有人员。");
DeptEmpStations ensD = new DeptEmpStations();
ensD.Retrieve(DeptEmpAttr.FK_Dept, this.No);
if (ensD.Count > 0)
throw new Exception("err@删除部门错误,该部门角色下有人员。");
return base.beforeDelete();
}
protected override bool beforeInsert()
{
if (BP.DA.DataType.IsNullOrEmpty(this.No) == true)
this.No = BP.DA.DBAccess.GenerGUID(5, "Port_Dept", "No");
if (BP.DA.DataType.IsNullOrEmpty(this.OrgNo) == true)
this.OrgNo = BP.Web.WebUser.OrgNo;
this.Adminer = WebUser.No;
return base.beforeInsert();
}
///
/// 创建下级节点.
///
///
public string DoMyCreateSubNode()
{
Entity en = this.DoCreateSubNode();
return en.ToJson();
}
///
/// 创建同级节点.
///
///
public string DoMyCreateSameLevelNode()
{
Entity en = this.DoCreateSameLevelNode();
return en.ToJson();
}
public string DoSameLevelDept(string no, string name)
{
Dept en = new Dept();
en.No = no;
if (en.RetrieveFromDBSources() == 1)
return "err@编号已经存在";
en.Name = name;
en.ParentNo = this.ParentNo;
en.Insert();
return "增加成功..";
}
public string DoSubDept(string no, string name)
{
Dept en = new Dept();
en.No = no;
if (en.RetrieveFromDBSources() == 1)
return "err@编号已经存在";
en.Name = name;
en.ParentNo = this.No;
en.Insert();
return "增加成功..";
}
///
/// 重置部门
///
///
public string DoResetPathName()
{
this.GenerNameOfPath();
return "重置成功.";
}
///
/// 生成部门全名称.
///
public void GenerNameOfPath()
{
string name = this.Name;
//根目录不再处理.
if (this.IsRoot == true || this.No.Equals("100") == true)
{
this.NameOfPath = name;
this.DirectUpdate();
this.GenerChildNameOfPath(this.No);
return;
}
Dept dept = new Dept();
dept.No = this.ParentNo;
if (dept.RetrieveFromDBSources() == 0)
return;
while (true)
{
if (dept.IsRoot || dept.No == "100")
break;
name = dept.Name + "\\" + name;
dept = new Dept(dept.ParentNo);
}
//根目录
name = dept.Name + "\\" + name;
this.NameOfPath = name;
this.DirectUpdate();
this.GenerChildNameOfPath(this.No);
}
///
/// 处理子部门全名称
///
///
public void GenerChildNameOfPath(string deptNo)
{
Depts depts = new Depts(deptNo);
// BP.Port.Depts depts = new BP.Port.Depts(deptNo);
if (depts != null && depts.Count > 0)
{
foreach (Dept dept in depts)
{
dept.GenerNameOfPath();
GenerChildNameOfPath(dept.No);
////更新人员路径信息.
//BP.Port.Emps emps = new Emps();
//emps.Retrieve(EmpAttr.FK_Dept, this.No);
//foreach (BP.Port.Emp emp in emps)
// emp.Update();
}
}
}
}
///
///部门集合
///
public class Depts : EntitiesTree
{
///
/// 得到一个新实体
///
public override Entity GetNewEntity
{
get
{
return new Dept();
}
}
///
/// 部门集合
///
/// 父部门No
public Depts(string parentNo)
{
this.Retrieve(DeptAttr.ParentNo, parentNo);
}
///
/// 部门集合
///
public Depts()
{
}
public override int RetrieveAll()
{
return this.Retrieve(EmpAttr.OrgNo, BP.Web.WebUser.OrgNo);
}
#region 为了适应自动翻译成java的需要,把实体转换成IList, c#代码调用会出错误。
///
/// 转化成 java list,C#不能调用.
///
/// List
public System.Collections.Generic.IList ToJavaList()
{
return (System.Collections.Generic.IList)this;
}
///
/// 转化成list
///
/// List
public System.Collections.Generic.List Tolist()
{
System.Collections.Generic.List list = new System.Collections.Generic.List();
for (int i = 0; i < this.Count; i++)
{
list.Add((Dept)this[i]);
}
return list;
}
#endregion 为了适应自动翻译成java的需要,把实体转换成IList, c#代码调用会出错误。
}
}