You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
490 lines
16 KiB
C#
490 lines
16 KiB
C#
using System;
|
|
using System.Data;
|
|
using BP.DA;
|
|
using BP.En;
|
|
using BP.Web;
|
|
using BP.Sys;
|
|
|
|
namespace BP.Port
|
|
{
|
|
/// <summary>
|
|
/// 部门属性
|
|
/// </summary>
|
|
public class DeptAttr : EntityNoNameAttr
|
|
{
|
|
/// <summary>
|
|
/// 父节点的编号
|
|
/// </summary>
|
|
public const string ParentNo = "ParentNo";
|
|
/// <summary>
|
|
/// 组织编号
|
|
/// </summary>
|
|
public const string OrgNo = "OrgNo";
|
|
/// <summary>
|
|
/// 部门编号
|
|
/// </summary>
|
|
public const string Leader = "Leader";
|
|
/// <summary>
|
|
/// 顺序号
|
|
/// </summary>
|
|
public const string Idx = "Idx";
|
|
|
|
public const string NameOfPath = "NameOfPath";
|
|
|
|
}
|
|
/// <summary>
|
|
/// 部门
|
|
/// </summary>
|
|
public class Dept : EntityTree
|
|
{
|
|
#region 属性
|
|
public string OrgNo
|
|
{
|
|
get
|
|
{
|
|
return this.GetValStrByKey(DeptAttr.OrgNo);
|
|
}
|
|
set
|
|
{
|
|
this.SetValByKey(DeptAttr.OrgNo, value);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 父节点的ID
|
|
/// </summary>
|
|
public string ParentNo
|
|
{
|
|
get
|
|
{
|
|
return this.GetValStrByKey(DeptAttr.ParentNo);
|
|
}
|
|
set
|
|
{
|
|
this.SetValByKey(DeptAttr.ParentNo, value);
|
|
}
|
|
}
|
|
public string NameOfPath
|
|
{
|
|
get
|
|
{
|
|
return this.GetValStrByKey(DeptAttr.NameOfPath);
|
|
}
|
|
set
|
|
{
|
|
this.SetValByKey(DeptAttr.NameOfPath, value);
|
|
}
|
|
}
|
|
public string Leader
|
|
{
|
|
get
|
|
{
|
|
return this.GetValStrByKey(DeptAttr.Leader);
|
|
}
|
|
set
|
|
{
|
|
this.SetValByKey(DeptAttr.Leader, value);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 构造函数
|
|
/// <summary>
|
|
/// 部门
|
|
/// </summary>
|
|
public Dept() { }
|
|
/// <summary>
|
|
/// 部门
|
|
/// </summary>
|
|
/// <param name="no">编号</param>
|
|
public Dept(string no) : base(no) { }
|
|
#endregion
|
|
|
|
#region 重写方法
|
|
public override UAC HisUAC
|
|
{
|
|
get
|
|
{
|
|
UAC uac = new UAC();
|
|
uac.OpenForSysAdmin();
|
|
return uac;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Map
|
|
/// </summary>
|
|
public override Map EnMap
|
|
{
|
|
get
|
|
{
|
|
if (this._enMap != null)
|
|
return this._enMap;
|
|
|
|
Map map = new Map("Port_Dept", "部门");
|
|
map.ItIsEnableVer = true;
|
|
|
|
map.AddTBStringPK(DeptAttr.No, null, "编号", true, false, 1, 50, 20);
|
|
map.AddTBString(DeptAttr.Name, null, "名称", true, false, 0, 100, 30);
|
|
map.AddTBString(DeptAttr.NameOfPath, null, "部门路径", true, false, 0, 100, 30);
|
|
|
|
map.AddTBString(DeptAttr.ParentNo, null, "父节点编号", true, true, 0, 100, 30);
|
|
map.AddTBString(DeptAttr.OrgNo, null, "OrgNo", true, true, 0, 50, 30);
|
|
map.AddDDLEntities(DeptAttr.Leader, null, "部门领导", new BP.Port.Emps(), true);
|
|
map.AddTBInt(DeptAttr.Idx, 0, "序号", false, true);
|
|
|
|
|
|
if (BP.Difference.SystemConfig.CCBPMRunModel != CCBPMRunModel.Single)
|
|
map.AddHidden("OrgNo", "=", "@WebUser.OrgNo");
|
|
|
|
RefMethod rm = new RefMethod();
|
|
//rm.Title = "历史变更";
|
|
//rm.ClassMethodName = this.ToString() + ".History";
|
|
//rm.RefMethodType = RefMethodType.RightFrameOpen;
|
|
//map.AddRefMethod(rm);
|
|
|
|
#region 增加点对多属性
|
|
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.Title = "批量处理人员拼音";
|
|
rm.ClassMethodName = this.ToString() + ".DoPinYin";
|
|
string msg2 = "执行生成当前部门下所有人员的拼音,方便快速查询. ";
|
|
msg2 += "\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);
|
|
|
|
|
|
//节点绑定人员. 使用树杆与叶子的模式绑定.
|
|
string rootNo = "0";
|
|
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.Single && (DataType.IsNullOrEmpty(WebUser.No) == true || WebUser.IsAdmin == false))
|
|
rootNo = "@WebUser.FK_Dept";
|
|
else
|
|
rootNo = "@WebUser.OrgNo";
|
|
map.AttrsOfOneVSM.AddBranchesAndLeaf(new DeptEmps(), new BP.Port.Emps(),
|
|
DeptEmpAttr.FK_Dept,
|
|
DeptEmpAttr.FK_Emp, "对应人员", BP.Port.EmpAttr.FK_Dept, BP.Port.EmpAttr.Name, BP.Port.EmpAttr.No, rootNo);
|
|
|
|
|
|
#endregion
|
|
|
|
this._enMap = map;
|
|
return this._enMap;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
protected override bool beforeUpdateInsertAction()
|
|
{
|
|
BP.Sys.Base.Glo.WriteUserLog("新建/修改部门:" + this.ToJson(), "组织数据操作");
|
|
return base.beforeUpdateInsertAction();
|
|
}
|
|
|
|
protected override bool beforeDelete()
|
|
{
|
|
this.CheckIsCanDelete();
|
|
|
|
BP.Sys.Base.Glo.WriteUserLog("删除部门:" + this.ToJson(), "组织数据操作");
|
|
return base.beforeDelete();
|
|
}
|
|
|
|
public bool CheckIsCanDelete()
|
|
{
|
|
string err = "";
|
|
string sql = "select count(*) FROM Port_Emp WHERE FK_Dept='" + this.No + "'";
|
|
int num = DBAccess.RunSQLReturnValInt(sql);
|
|
if (num != 0)
|
|
err += "err@该部门下有" + num + "个人员数据,您不能删除.";
|
|
|
|
sql = "select count(*) FROM Port_DeptEmp WHERE FK_Dept='" + this.No + "'";
|
|
num = DBAccess.RunSQLReturnValInt(sql);
|
|
if (num != 0)
|
|
err += "err@该部门在人员部门信息表里有" + num + "笔数据,您不能删除.";
|
|
|
|
sql = "select count(*) FROM Port_DeptEmpStation WHERE FK_Dept='" + this.No + "'";
|
|
num = DBAccess.RunSQLReturnValInt(sql);
|
|
if (num != 0)
|
|
err += "err@该部门在人员部门角色表里有" + num + "笔数据,您不能删除.";
|
|
|
|
//检查是否有子级部门.
|
|
sql = "select count(*) FROM Port_Dept WHERE ParentNo='" + this.No + "'";
|
|
if (num != 0)
|
|
err += "err@该部门有" + num + "个子部门,您不能删除.";
|
|
|
|
//是不是组织?.
|
|
sql = "select count(*) FROM Port_Org WHERE OrgNo='" + this.No + "'";
|
|
if (num != 0)
|
|
err += "err@该部门是一个组织,您不能删除.";
|
|
|
|
if (DataType.IsNullOrEmpty(err) == false)
|
|
throw new Exception(err);
|
|
return true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 重置部门
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string DoResetPathName()
|
|
{
|
|
this.GenerNameOfPath();
|
|
return "重置成功.";
|
|
}
|
|
/// <summary>
|
|
/// 重置拼音
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string DoPinYin()
|
|
{
|
|
this.PinYin();
|
|
return "执行成功.";
|
|
}
|
|
|
|
public void PinYin()
|
|
{
|
|
string no = this.No;
|
|
BP.Port.Emps emps = new BP.Port.Emps();
|
|
emps.Retrieve(BP.Port.EmpAttr.FK_Dept, no);
|
|
foreach (BP.Port.Emp emp in emps)
|
|
{
|
|
string pinyinQP = DataType.ParseStringToPinyin(emp.Name).ToLower();
|
|
string pinyinJX = DataType.ParseStringToPinyinJianXie(emp.Name).ToLower();
|
|
emp.PinYin = "," + pinyinQP + "," + pinyinJX + ",";
|
|
|
|
emp.PinYin = emp.PinYin = emp.PinYin + pinyinJX + "/" + DataType.ParseStringToPinyinJianXie(this.Name).ToLower() + ",";
|
|
|
|
emp.Update();
|
|
|
|
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 生成部门全名称.
|
|
/// </summary>
|
|
public void GenerNameOfPath()
|
|
{
|
|
string name = this.Name;
|
|
|
|
//根目录不再处理
|
|
if (this.ItIsRoot == 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.ItIsRoot)
|
|
break;
|
|
|
|
name = dept.Name + "\\" + name;
|
|
dept = new Dept(dept.ParentNo);
|
|
}
|
|
//根目录
|
|
name = dept.Name + "\\" + name;
|
|
this.NameOfPath = name;
|
|
this.DirectUpdate();
|
|
|
|
this.GenerChildNameOfPath(this.No);
|
|
|
|
//更新人员路径信息.
|
|
BP.Port.Emps emps = new BP.Port.Emps();
|
|
emps.Retrieve(BP.Port.EmpAttr.FK_Dept, this.No);
|
|
foreach (BP.Port.Emp emp in emps)
|
|
emp.DirectUpdate();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 处理子部门全名称
|
|
/// </summary>
|
|
/// <param name="FK_Dept"></param>
|
|
public void GenerChildNameOfPath(string deptNo)
|
|
{
|
|
Depts depts = new Depts(deptNo);
|
|
if (depts != null && depts.Count > 0)
|
|
{
|
|
foreach (Dept dept in depts)
|
|
{
|
|
dept.GenerNameOfPath();
|
|
GenerChildNameOfPath(dept.No);
|
|
|
|
//更新人员路径信息.
|
|
BP.Port.Emps emps = new BP.Port.Emps();
|
|
emps.Retrieve(BP.Port.EmpAttr.FK_Dept, this.No);
|
|
foreach (BP.Port.Emp emp in emps)
|
|
emp.Update();
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 执行排序
|
|
/// </summary>
|
|
/// <param name="deptIDs"></param>
|
|
/// <returns></returns>
|
|
public string DoOrder(string deptIDs)
|
|
{
|
|
string[] ids = deptIDs.Split(',');
|
|
|
|
for (int i = 0; i < ids.Length; i++)
|
|
{
|
|
string id = ids[i];
|
|
if (DataType.IsNullOrEmpty(id) == true)
|
|
continue;
|
|
DBAccess.RunSQL("UPDATE Port_Dept SET Idx=" + i + " WHERE No='" + id + "'");
|
|
}
|
|
return "排序成功.";
|
|
}
|
|
|
|
public string History()
|
|
{
|
|
return "EnVerDtl.htm?EnName=" + this.ToString() + "&PK=" + this.No;
|
|
}
|
|
|
|
#region 重写查询. 2015.09.31 为适应ws的查询.
|
|
/// <summary>
|
|
/// 查询
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public override int Retrieve()
|
|
{
|
|
return base.Retrieve();
|
|
}
|
|
/// <summary>
|
|
/// 查询.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public override int RetrieveFromDBSources()
|
|
{
|
|
return base.RetrieveFromDBSources();
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
/// <summary>
|
|
///部门s
|
|
/// </summary>
|
|
public class Depts : EntitiesTree
|
|
{
|
|
#region 初始化实体.
|
|
/// <summary>
|
|
/// 得到一个新实体
|
|
/// </summary>
|
|
public override Entity GetNewEntity
|
|
{
|
|
get
|
|
{
|
|
return new Dept();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 部门集合
|
|
/// </summary>
|
|
public Depts()
|
|
{
|
|
}
|
|
/// <summary>
|
|
/// 部门集合
|
|
/// </summary>
|
|
/// <param name="parentNo">父部门No</param>
|
|
public Depts(string parentNo)
|
|
{
|
|
this.Retrieve(DeptAttr.ParentNo, parentNo);
|
|
}
|
|
|
|
#endregion 初始化实体.
|
|
|
|
#region 重写查询,add by zhoupeng 2015.09.30 为了适应能够从webservice数据源查询数据.
|
|
public override int RetrieveAll()
|
|
{
|
|
|
|
if (BP.Web.WebUser.No.Equals("admin") == true)
|
|
{
|
|
QueryObject qo = new QueryObject(this);
|
|
qo.addOrderBy(DeptAttr.Idx);
|
|
return qo.DoQuery();
|
|
}
|
|
|
|
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.Single)
|
|
{
|
|
QueryObject qo = new QueryObject(this);
|
|
qo.AddWhere(DeptAttr.No, " = ", BP.Web.WebUser.DeptNo);
|
|
qo.addOr();
|
|
qo.AddWhere(DeptAttr.ParentNo, " = ", BP.Web.WebUser.DeptNo);
|
|
qo.addOrderBy(DeptAttr.Idx);
|
|
return qo.DoQuery();
|
|
}
|
|
|
|
return this.Retrieve("OrgNo", BP.Web.WebUser.OrgNo, DeptAttr.Idx);
|
|
}
|
|
/// <summary>
|
|
/// 重写重数据源查询全部适应从WS取数据需要
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public override int RetrieveAllFromDBSource()
|
|
{
|
|
|
|
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.Single)
|
|
return base.RetrieveAllFromDBSource();
|
|
|
|
//按照orgNo查询.
|
|
return this.Retrieve("OrgNo", WebUser.OrgNo);
|
|
}
|
|
#endregion 重写查询.
|
|
|
|
#region 为了适应自动翻译成java的需要,把实体转换成List.
|
|
/// <summary>
|
|
/// 转化成 java list,C#不能调用.
|
|
/// </summary>
|
|
/// <returns>List</returns>
|
|
public System.Collections.Generic.IList<Dept> ToJavaList()
|
|
{
|
|
return (System.Collections.Generic.IList<Dept>)this;
|
|
}
|
|
/// <summary>
|
|
/// 转化成list
|
|
/// </summary>
|
|
/// <returns>List</returns>
|
|
public System.Collections.Generic.List<Dept> Tolist()
|
|
{
|
|
System.Collections.Generic.List<Dept> list = new System.Collections.Generic.List<Dept>();
|
|
for (int i = 0; i < this.Count; i++)
|
|
{
|
|
list.Add((Dept)this[i]);
|
|
}
|
|
return list;
|
|
}
|
|
#endregion 为了适应自动翻译成java的需要,把实体转换成List.
|
|
}
|
|
}
|