F_MST_0101.cs 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797
  1. /*******************************************************************************
  2. * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
  3. * 类的信息:
  4. * 1.程序名称:F_MST_0101.cs
  5. * 2.功能描述:组织机构一览
  6. * 编辑履历:
  7. * 作者 日期 版本 修改内容
  8. * 王鑫 2014/09/12 1.00 新建
  9. *******************************************************************************/
  10. using System;
  11. using System.Collections;
  12. using System.Collections.Generic;
  13. using System.Data;
  14. using System.Text.RegularExpressions;
  15. using System.Windows.Forms;
  16. using Dongke.IBOSS.PRD.Basics.BaseResources;
  17. using Dongke.IBOSS.PRD.Basics.DockPanel;
  18. using Dongke.IBOSS.PRD.Client.CommonModule;
  19. using Dongke.IBOSS.PRD.Client.DataModels;
  20. using Dongke.IBOSS.PRD.WCF.DataModels;
  21. using Dongke.IBOSS.PRD.WCF.Proxys;
  22. using Dongke.IBOSS.PRD.WCF.Proxys.SystemModuleService;
  23. namespace Dongke.IBOSS.PRD.Client.SystemModule
  24. {
  25. /// <summary>
  26. /// 组织机构一览
  27. /// </summary>
  28. public partial class F_MST_0101 : DockPanelBase
  29. {
  30. #region 成员变量
  31. // 单例模式
  32. private static F_MST_0101 _instance;
  33. //存储新建id
  34. private int _newId;
  35. // 存储查询条件
  36. private OrganizationEntity _organization = new OrganizationEntity();
  37. // 保存treeview改变前的状态
  38. private Hashtable _nodesStatus = new Hashtable();
  39. //存储新建id
  40. private string _CodeTimp;
  41. #endregion
  42. #region 单例模式
  43. /// <summary>
  44. /// 单例模式,防止重复创建窗体
  45. /// </summary>
  46. public static F_MST_0101 Instance
  47. {
  48. get
  49. {
  50. if (_instance == null)
  51. {
  52. _instance = new F_MST_0101();
  53. }
  54. return _instance;
  55. }
  56. }
  57. #endregion
  58. #region 构造函数
  59. public F_MST_0101()
  60. {
  61. InitializeComponent();
  62. //正常标识数据源
  63. this.chkValueFlag.Items.Add("正常", true);
  64. this.chkValueFlag.Items.Add("停用");
  65. //窗体标题
  66. this.Text = FormTitles.F_MST_0101;
  67. //新建
  68. this.tsbtnAdd.Text = ButtonText.TSBTN_ADD;
  69. //编辑
  70. this.tsbtnEdit.Text = ButtonText.TSBTN_EDIT;
  71. //停用
  72. this.tsbtnAdaptive.Text = ButtonText.TSBTN_ADAPTIVE;
  73. //关闭
  74. this.tsbtnClose.Text = ButtonText.TSBTN_CLOSE;
  75. //查询
  76. this.btnSearch.Text = ButtonText.BTN_SEARCH;
  77. //清空条件
  78. this.btnClearCondition.Text = ButtonText.BTN_CLEARCONDITION;
  79. //查询条件
  80. this.gbxCondition.Text = Constant.LABEL_QUERY_CONDITIONS;
  81. }
  82. #endregion
  83. #region 事件
  84. /// <summary>
  85. /// 节点收缩之后,显示关闭图标
  86. /// </summary>
  87. /// <param name="sender"></param>
  88. /// <param name="e"></param>
  89. private void tvwOrganization_AfterCollapse(object sender, TreeViewEventArgs e)
  90. {
  91. e.Node.SelectedImageIndex = Constant.INT_IS_ZERO;
  92. e.Node.ImageIndex = Constant.INT_IS_ZERO;
  93. }
  94. /// <summary>
  95. /// 树节点变化的事件
  96. /// </summary>
  97. /// <param name="sender"></param>
  98. /// <param name="e"></param>
  99. private void tvwOrganization_AfterSelect(object sender, TreeViewEventArgs e)
  100. {
  101. try
  102. {
  103. // 获取相应节点数据
  104. if (tvwOrganization.SelectedNode != null)
  105. {
  106. string selectCode = tvwOrganization.SelectedNode.Name.Trim();
  107. // 封装查询条件
  108. OrganizationEntity organization = new OrganizationEntity();
  109. organization.OrganizationCode = selectCode;
  110. //票头字母
  111. organization.LetterMarket = this.txtLetterMarket.Text.Trim();
  112. // 联系电话
  113. organization.Telephone = this.txtTelephone.Text.Trim();
  114. // 地址
  115. organization.Address = this.txtAddress.Text.Trim();
  116. // 备注
  117. organization.Remarks = this.txtRemarks.Text.Trim();
  118. // 正常标识
  119. organization.ValueFlags = this.chkValueFlag.SelectedValues;
  120. organization.OrganizationName = this.txtOrganizationName.Text.Trim();
  121. organization.in_UserID = LogInUserInfo.CurrentUser.CurrentUserEntity.UserID;
  122. organization.in_AccountID = LogInUserInfo.CurrentUser.CurrentUserEntity.AccountID;
  123. this._organization = organization;
  124. DataSet result = (DataSet)DoAsync(new AsyncMethod(this.SelectOrganixationData));
  125. this.dgvOrganization.ReadOnly = true;
  126. if (result != null && result.Tables.Count > Constant.INT_IS_ZERO)
  127. {
  128. this.dgvOrganization.DataSource = result.Tables[0];
  129. }
  130. }
  131. }
  132. catch (Exception ex)
  133. {
  134. // 对异常进行共通处理
  135. ExceptionManager.HandleEventException(this.ToString(),
  136. System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex);
  137. }
  138. }
  139. /// <summary>
  140. /// 获取选定树节点结果集
  141. /// </summary>
  142. /// <param name="organization">组织机构实体</param>
  143. /// <returns>数据集</returns>
  144. private DataSet SelectOrganixationData()
  145. {
  146. DataSet dsOrganizationData = null;
  147. try
  148. {
  149. dsOrganizationData = SystemModuleProxy.Service.SelectOrganizationData(this._organization);
  150. }
  151. catch (Exception ex)
  152. {
  153. // 对异常进行共通处理
  154. ExceptionManager.HandleEventException(this.ToString(),
  155. System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex);
  156. }
  157. return dsOrganizationData;
  158. }
  159. /// <summary>
  160. /// 节点展开之后,显示打开图标
  161. /// </summary>
  162. /// <param name="sender"></param>
  163. /// <param name="e"></param>
  164. private void tvwOrganization_AfterExpand(object sender, TreeViewEventArgs e)
  165. {
  166. e.Node.SelectedImageIndex = Constant.INT_IS_TWO;
  167. e.Node.ImageIndex = Constant.INT_IS_TWO;
  168. }
  169. /// <summary>
  170. /// 清空条件按钮事件
  171. /// </summary>
  172. /// <param name="sender"></param>
  173. /// <param name="e"></param>
  174. private void btnClearCondition_Click(object sender, EventArgs e)
  175. {
  176. // 组织机构名称
  177. this.txtOrganizationCode.Clear();
  178. this.txtOrganizationName.Clear();
  179. // 票号开头字母
  180. this.txtLetterMarket.Clear();
  181. // 联系电话
  182. this.txtTelephone.Clear();
  183. // 地址
  184. this.txtAddress.Clear();
  185. // 备注
  186. this.txtRemarks.Clear();
  187. this.chkValueFlag.SelectedValues = new object[] { Constant.INT_IS_ONE };
  188. }
  189. /// <summary>
  190. /// 查询按钮点击事件
  191. /// </summary>
  192. /// <param name="sender"></param>
  193. /// <param name="e"></param>
  194. private void btnSearch_Click(object sender, EventArgs e)
  195. {
  196. try
  197. {
  198. // 没有选择正常标识的时候返回
  199. if (Constant.INT_IS_ZERO >= this.chkValueFlag.SelectedValues.Length
  200. || Constant.INT_IS_ZERO >= this.chkValueFlag.SelectedValues.Length)
  201. {
  202. // 清空DataGridView
  203. DataTable dataTable = (DataTable)this.dgvOrganization.DataSource;
  204. if (dataTable != null && dataTable.Rows.Count > Constant.INT_IS_ZERO)
  205. {
  206. dataTable.Rows.Clear();
  207. dgvOrganization.DataSource = dataTable;
  208. }
  209. // 提示未查找到数据
  210. MessageBox.Show(Messages.MSG_CMN_I002, this.Text,
  211. MessageBoxButtons.OK, MessageBoxIcon.Information);
  212. // 编辑,移动按钮不可用
  213. this.tsbtnEdit.Enabled = false;
  214. return;
  215. }
  216. // 查询数据,并将结果显示到列表中
  217. this.btnSearch.Enabled = false;
  218. this.btnClearCondition.Enabled = false;
  219. object result = DoAsync(new AsyncMethod(this.GetOrganization));
  220. this.btnSearch.Enabled = true;
  221. this.btnClearCondition.Enabled = true;
  222. this.dgvOrganization.ReadOnly = true;
  223. if (result != null)
  224. {
  225. base.DataSource = (DataSet)result;
  226. if (this.DataSource != null && this.DataSource.Tables.Count > Constant.INT_IS_ZERO)
  227. {
  228. this.dgvOrganization.DataSource = this.DataSource.Tables[0];
  229. if (this.DataSource.Tables[0].Rows.Count <= Constant.INT_IS_ZERO)
  230. {
  231. // 提示未查找到数据
  232. MessageBox.Show(Messages.MSG_CMN_I002, this.Text,
  233. MessageBoxButtons.OK, MessageBoxIcon.Information);
  234. }
  235. }
  236. }
  237. }
  238. catch (Exception ex)
  239. {
  240. this.btnSearch.Enabled = true;
  241. this.btnClearCondition.Enabled = true;
  242. // 对异常进行共通处理
  243. ExceptionManager.HandleEventException(this.ToString(),
  244. System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex);
  245. }
  246. }
  247. /// <summary>
  248. /// 画面加载
  249. /// </summary>
  250. /// <param name="sender"></param>
  251. /// <param name="e"></param>
  252. private void FrmOrganization_Load(object sender, EventArgs e)
  253. {
  254. try
  255. {
  256. // 加载权限
  257. FormPermissionManager.FormPermissionControl(this.Name, this,
  258. LogInUserInfo.CurrentUser.CurrentUserEntity.UserRightData, LogInUserInfo.CurrentUser.CurrentUserEntity.FunctionData);
  259. this.dgvOrganization.AutoGenerateColumns = false;
  260. DataTable dt = new DataTable();
  261. dt.Columns.Add("ValidFlagID");
  262. dt.Columns.Add("ValidFlagName");
  263. DataRow dr = dt.NewRow();
  264. dr[0] = "1";
  265. dr[1] = "正常";
  266. dt.Rows.Add(dr);
  267. dr = dt.NewRow();
  268. dr[0] = "0";
  269. dr[1] = "停用";
  270. dt.Rows.Add(dr);
  271. this.chkValueFlag.DataSource = dt;
  272. object[] checkValueFlags = new object[1];
  273. checkValueFlags[0] = 1;
  274. this.chkValueFlag.SelectedValues = checkValueFlags;
  275. // 生成组织机构树形
  276. this.CreateOrganizationTree();
  277. }
  278. catch (Exception ex)
  279. {
  280. // 对异常进行共通处理
  281. ExceptionManager.HandleEventException(this.ToString(),
  282. System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex);
  283. }
  284. }
  285. /// <summary>
  286. /// 释放成员变量
  287. /// </summary>
  288. /// <param name="sender"></param>
  289. /// <param name="e"></param>
  290. private void FrmOrganization_FormClosed(object sender, FormClosedEventArgs e)
  291. {
  292. _instance = null;
  293. }
  294. /// <summary>
  295. /// 关闭按钮
  296. /// </summary>
  297. /// <param name="sender"></param>
  298. /// <param name="e"></param>
  299. private void tsbtnClose_Click(object sender, EventArgs e)
  300. {
  301. this.Close();
  302. }
  303. /// <summary>
  304. /// 自适应列宽按钮事件
  305. /// </summary>
  306. /// <param name="sender"></param>
  307. /// <param name="e"></param>
  308. private void tsbtnAdaptive_Click(object sender, EventArgs e)
  309. {
  310. this.dgvOrganization.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
  311. }
  312. /// <summary>
  313. /// 编辑按钮事件
  314. /// </summary>
  315. /// <param name="sender"></param>
  316. /// <param name="e"></param>
  317. private void tsbtnEdit_Click(object sender, EventArgs e)
  318. {
  319. try
  320. {
  321. DataGridViewRow currentRow = this.dgvOrganization.CurrentRow;
  322. if (currentRow != null)
  323. // 获取相应节点数据
  324. {
  325. F_MST_0102 frmMST0102 = new F_MST_0102(Constant.FormMode.Edit,
  326. Convert.ToInt32(currentRow.Cells["OrganizationID"].Value));
  327. DialogResult dialogresult = frmMST0102.ShowDialog();
  328. if (dialogresult.Equals(DialogResult.OK))
  329. {
  330. // 刷新窗口数据
  331. btnSearch_Click(sender, e);
  332. // 重新生成组织机构树形
  333. this.CreateOrganizationTree();
  334. // 还原保存前选择的根节点
  335. SetTreeNodesStatus(tvwOrganization.Nodes);
  336. }
  337. }
  338. }
  339. catch (Exception ex)
  340. {
  341. // 对异常进行共通处理
  342. ExceptionManager.HandleEventException(this.ToString(),
  343. System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex);
  344. }
  345. }
  346. /// <summary>
  347. /// 新建按钮事件
  348. /// </summary>
  349. /// <param name="sender"></param>
  350. /// <param name="e"></param>
  351. private void tsbtnAdd_Click(object sender, EventArgs e)
  352. {
  353. try
  354. {
  355. F_MST_0102 frmMST0102 = new F_MST_0102(Constant.FormMode.Add);
  356. // 获取相应节点数据
  357. if (tvwOrganization.SelectedNode != null)
  358. {
  359. string selectOrganizationCode = tvwOrganization.SelectedNode.Name.Trim();
  360. frmMST0102.ParentOrganizationID = Convert.ToInt32(tvwOrganization.SelectedNode.Tag);
  361. this._newId = Convert.ToInt32(tvwOrganization.SelectedNode.Tag);
  362. frmMST0102.ParentOrganizationCode = tvwOrganization.SelectedNode.Name.Trim();
  363. frmMST0102.ParentOrganizationName = tvwOrganization.SelectedNode.Text.Trim();
  364. // 判断所选节点是已到最底层,不能新建
  365. if (Constant.S_CODE_MAXLEVEL <= selectOrganizationCode.Length / Constant.INT_IS_THREE)
  366. {
  367. MessageBox.Show(string.Format(Messages.MSG_CMN_W013, "组织机构",
  368. "级数", Constant.S_CODE_MAXLEVEL), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
  369. return;
  370. }
  371. // 判断选择的组织机构的下级组织是否超过系统设定的最大值999
  372. if (Constant.S_CODE_LEVEL_MAXCODE <= this.GetOrgLevelMax(selectOrganizationCode))
  373. {
  374. MessageBox.Show("组织机构已达到极限(999),无法再增加!", this.Text,
  375. MessageBoxButtons.OK, MessageBoxIcon.Warning);
  376. return;
  377. }
  378. // 判断选择的组织机构下是否有员工
  379. if (this.IsExistStaff(frmMST0102.ParentOrganizationID))
  380. {
  381. MessageBox.Show(string.Format(Messages.MSG_CMN_W007, "选择的组织机构存在员工"),
  382. this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
  383. return;
  384. }
  385. // 显示新建窗口
  386. DialogResult dialogresult = frmMST0102.ShowDialog();
  387. if (dialogresult.Equals(DialogResult.OK))
  388. {
  389. _CodeTimp = frmMST0102.ParentOrganizationCodeTemp;
  390. //查询条件赋值为空
  391. this.txtLetterMarket.Text = string.Empty;
  392. this.txtOrganizationCode.Text = string.Empty;
  393. this.txtOrganizationName.Text = string.Empty;
  394. this.txtTelephone.Text = string.Empty;
  395. this.txtAddress.Text = string.Empty;
  396. this.txtRemarks.Text = string.Empty;
  397. // 新建的组织机构ID列表
  398. List<int> organizationIDList = frmMST0102.OrganizationIDList;
  399. int[] IDList = new int[organizationIDList.Count];
  400. for (int i = 0; i < organizationIDList.Count; i++)
  401. {
  402. IDList[i] = organizationIDList[i];
  403. }
  404. this._organization = new OrganizationEntity();
  405. this._organization.IDList = IDList;
  406. // 查询时先清空数据源
  407. this.dgvOrganization.DataSource = null;
  408. DataSet result = (DataSet)DoAsync(new AsyncMethod(GetOrganization));
  409. this.dgvOrganization.ReadOnly = true;
  410. if (result != null && result.Tables.Count > Constant.INT_IS_ZERO)
  411. {
  412. this.dgvOrganization.DataSource = result.Tables[0];
  413. }
  414. // 重新生成组织机构树形
  415. this.CreateOrganizationTree();
  416. this.tvwOrganization.ExpandAll();
  417. // 还原保存前选择的根节点
  418. SetTreeNodesStatus(tvwOrganization.Nodes);
  419. }
  420. }
  421. else
  422. {
  423. MessageBox.Show("请先在左侧树型列表中,选择一个根节点作为上级部门!", this.Text,
  424. MessageBoxButtons.OK, MessageBoxIcon.Warning);
  425. return;
  426. }
  427. }
  428. catch (Exception ex)
  429. {
  430. // 对异常进行共通处理
  431. ExceptionManager.HandleEventException(this.ToString(),
  432. System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex);
  433. }
  434. }
  435. /// <summary>
  436. /// 单元格获取焦点事件:控制按钮状态
  437. /// </summary>
  438. /// <param name="sender"></param>
  439. /// <param name="e"></param>
  440. private void dgvOrganization_CellEnter(object sender, DataGridViewCellEventArgs e)
  441. {
  442. try
  443. {
  444. DataGridViewRow currentRow = this.dgvOrganization.CurrentRow;
  445. if (currentRow != null)
  446. {
  447. this.tsbtnEdit.Enabled = true;
  448. }
  449. else
  450. {
  451. this.tsbtnEdit.Enabled = false;
  452. }
  453. }
  454. catch (Exception ex)
  455. {
  456. // 对异常进行共通处理
  457. ExceptionManager.HandleEventException(this.ToString(),
  458. System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex);
  459. }
  460. }
  461. /// <summary>
  462. /// 双击进入编辑页面
  463. /// </summary>
  464. /// <param name="sender"></param>
  465. /// <param name="e"></param>
  466. private void dgvOrganization_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
  467. {
  468. try
  469. {
  470. // 判断是否是双击列头,如果是双击列头的话,不弹出编辑画面
  471. if (-Constant.INT_IS_ONE < e.RowIndex && -Constant.INT_IS_ONE < e.ColumnIndex && tsbtnEdit.Enabled && this.tsbtnEdit.Visible)
  472. {
  473. tsbtnEdit_Click(sender, e);
  474. }
  475. }
  476. catch (Exception ex)
  477. {
  478. // 对异常进行共通处理
  479. ExceptionManager.HandleEventException(this.ToString(),
  480. System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex);
  481. }
  482. }
  483. /// <summary>
  484. /// KeyDown事件
  485. /// </summary>
  486. /// <param name="sender"></param>
  487. /// <param name="e"></param>
  488. private void dgvOrganization_KeyDown(object sender, KeyEventArgs e)
  489. {
  490. try
  491. {
  492. // 拷贝
  493. if (e.KeyData == (Keys.Control | Keys.C))
  494. {
  495. if (dgvOrganization.CurrentRow != null
  496. && !string.IsNullOrEmpty(dgvOrganization.CurrentRow.Cells[dgvOrganization.CurrentCell.ColumnIndex].EditedFormattedValue + string.Empty))
  497. {
  498. try
  499. {
  500. Clipboard.SetText(dgvOrganization.CurrentRow.Cells[dgvOrganization.CurrentCell.ColumnIndex].EditedFormattedValue + string.Empty);
  501. }
  502. catch { }
  503. }
  504. }
  505. }
  506. catch (Exception ex)
  507. {
  508. // 对异常进行共通处理
  509. ExceptionManager.HandleEventException(this.ToString(),
  510. System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex);
  511. }
  512. }
  513. #endregion
  514. #region 私有方法
  515. /// <summary>
  516. /// 获取组织机构结果集
  517. /// </summary>
  518. /// <returns></returns>
  519. private DataSet GetOrganization()
  520. {
  521. try
  522. {
  523. OrganizationEntity organization = new OrganizationEntity();
  524. //组织机构
  525. organization.OrganizationCode = this.txtOrganizationCode.Text.Trim();
  526. organization.OrganizationName = this.txtOrganizationName.Text.Trim();
  527. // 票号开头字母
  528. organization.LetterMarket = this.txtLetterMarket.Text.Trim();
  529. // 联系电话
  530. organization.Telephone = this.txtTelephone.Text.Trim();
  531. // 地址
  532. organization.Address = this.txtAddress.Text;
  533. // 备注
  534. organization.Remarks = this.txtRemarks.Text;
  535. // 正常标识
  536. organization.ValueFlags = this.chkValueFlag.SelectedValues;
  537. organization.in_UserID = LogInUserInfo.CurrentUser.CurrentUserEntity.UserID;
  538. organization.in_AccountID = LogInUserInfo.CurrentUser.CurrentUserEntity.AccountID;
  539. this._organization = organization;
  540. return SystemModuleProxy.Service.SelectOrganizationData(organization);
  541. }
  542. catch (Exception ex)
  543. {
  544. throw ex;
  545. }
  546. }
  547. /// <summary>
  548. /// 根据上级组织机构的编码获取其下级的最大级数
  549. /// </summary>
  550. /// <param name="parentCode">上级组织机构的Code</param>
  551. /// <returns>下级的最大级数</returns>
  552. private int GetLevel(string parentCode)
  553. {
  554. try
  555. {
  556. // 下级的最大级数
  557. int level = Constant.INT_IS_ZERO;
  558. // 查询数据库获取下级最大编码
  559. this._organization = new OrganizationEntity();
  560. this._organization.OrganizationCode = parentCode;
  561. DataSet result = (DataSet)DoAsync(new AsyncMethod(GetOrganization));
  562. this.dgvOrganization.ReadOnly = true;
  563. if (result != null
  564. && result.Tables.Count > Constant.INT_IS_ZERO
  565. && result.Tables[0].Rows.Count > Constant.INT_IS_ZERO)
  566. {
  567. string tmpCode = Convert.ToString(result.Tables[0].Compute("MAX(OrganizationCode)", string.Empty));
  568. level += (tmpCode.Length - parentCode.Length) / Constant.INT_IS_THREE;
  569. }
  570. return level;
  571. }
  572. catch (Exception ex)
  573. {
  574. throw ex;
  575. }
  576. }
  577. /// <summary>
  578. /// 还原保存treeview的节点
  579. /// </summary>
  580. /// <param name="nodes">节点</param>
  581. private void SetTreeNodesStatus(TreeNodeCollection nodes)
  582. {
  583. foreach (TreeNode node in nodes)
  584. {
  585. SetTreeNodesStatus(node.Nodes);
  586. }
  587. }
  588. /// <summary>
  589. /// 根据所取得的组织数据,生成树形
  590. /// </summary>
  591. private void CreateOrganizationTree()
  592. {
  593. try
  594. {
  595. // 取得组织机构数据
  596. OrganizationEntity organization = new OrganizationEntity();
  597. object[] valueFlags = new object[1];
  598. valueFlags[0] = 1;
  599. organization.ValueFlags = valueFlags;
  600. this._organization = organization;
  601. // 获取有效的组织机构
  602. DataSet result = (DataSet)DoAsync(new AsyncMethod(GetOrganization));
  603. this.dgvOrganization.ReadOnly = true;
  604. if (result != null && result.Tables.Count > Constant.INT_IS_ZERO)
  605. {
  606. // 组织为空时,直接返回
  607. if (result.Tables[0].Rows.Count < Constant.INT_IS_ONE)
  608. {
  609. return;
  610. }
  611. if (tvwOrganization.Nodes.Count > Constant.INT_IS_ZERO)
  612. {
  613. // 添加节点前,保存状态
  614. SaveTreeNodesStatus(tvwOrganization.Nodes);
  615. }
  616. // 将所有节点清除
  617. this.tvwOrganization.Nodes.Clear();
  618. TreeNode organizationNode = null;
  619. DataRow[] organizationRows
  620. = result.Tables[0].Select("OrganizationCode LIKE '00%' AND LEN(OrganizationCode) = 3");
  621. // 显示节点
  622. InitTreeView(result.Tables[0], organizationRows, organizationNode);
  623. }
  624. }
  625. catch (Exception ex)
  626. {
  627. throw ex;
  628. }
  629. }
  630. /// <summary>
  631. /// 递归显示组织树形目录
  632. /// </summary>
  633. /// <param name="orgData">组织机构数据源</param>
  634. /// <param name="rows">根节点</param>
  635. /// <param name="node">树节点</param>
  636. private void InitTreeView(DataTable orgData, DataRow[] rows, TreeNode node)
  637. {
  638. try
  639. {
  640. foreach (DataRow row in rows)
  641. {
  642. TreeNode sNode = null;
  643. if (node == null)
  644. {
  645. // 新建树节点并添加
  646. sNode = new TreeNode();
  647. sNode.Text = row["OrganizationName"].ToString();
  648. sNode.Name = row["OrganizationCode"].ToString();
  649. sNode.Tag = row["OrganizationID"].ToString();
  650. this.tvwOrganization.Nodes.Add(sNode);
  651. }
  652. else
  653. {
  654. // 在原有树中加入节点
  655. sNode = node.Nodes.Add(row["OrganizationName"].ToString());
  656. sNode.Name = row["OrganizationCode"].ToString();
  657. sNode.Tag = row["OrganizationID"].ToString();
  658. }
  659. if (this._CodeTimp == row["OrganizationCode"].ToString())
  660. {
  661. tvwOrganization.SelectedNode = sNode;
  662. }
  663. // 查找子节点
  664. string filterExpression = "OrganizationCode LIKE '" + row["OrganizationCode"].ToString()
  665. + "%' AND LEN(OrganizationCode) = " + (row["OrganizationCode"].ToString().Length + 3);
  666. DataRow[] subRows = orgData.Select(filterExpression);
  667. // 递归绑定子节点
  668. InitTreeView(orgData, subRows, sNode);
  669. }
  670. }
  671. catch (Exception ex)
  672. {
  673. throw ex;
  674. }
  675. }
  676. /// <summary>
  677. /// 保存treeview状态
  678. /// </summary>
  679. /// <param name="nodes"></param>
  680. private void SaveTreeNodesStatus(TreeNodeCollection nodes)
  681. {
  682. foreach (TreeNode node in nodes)
  683. {
  684. SaveTreeNodesStatus(node.Nodes);
  685. }
  686. }
  687. /// <summary>
  688. /// 判断该组织机构下是否存在员工
  689. /// </summary>
  690. /// <param name="organizationCode">组织机构编码</param>
  691. /// <returns></returns>
  692. private bool IsExistStaff(int organizationID)
  693. {
  694. try
  695. {
  696. if (organizationID <= Constant.INT_IS_ZERO)
  697. {
  698. return false;
  699. }
  700. // 获取员工数据
  701. this._organization = new OrganizationEntity();
  702. this._organization.OrganizationID = organizationID;
  703. return false;
  704. }
  705. catch (Exception ex)
  706. {
  707. throw ex;
  708. }
  709. }
  710. /// <summary>
  711. /// 获取上级组织机构中已经存在的组织机构数量
  712. /// </summary>
  713. /// <param name="parentCode">上级组织机构的Code</param>
  714. /// <returns>组织机构数量</returns>
  715. private int GetOrgLevelMax(string parentCode)
  716. {
  717. try
  718. {
  719. // 获取数据源中的结构信息
  720. this._organization = new OrganizationEntity();
  721. this._organization.OrganizationCode = parentCode;
  722. DataSet result = (DataSet)DoAsync(new Dongke.IBOSS.PRD.Basics.DockPanel.AsyncMethod(GetOrganization));
  723. this.dgvOrganization.ReadOnly = true;
  724. if (result != null && result.Tables.Count > Constant.INT_IS_ZERO)
  725. {
  726. if (result.Tables[0].Rows.Count > Constant.INT_IS_ONE)
  727. {
  728. // 从数据源中查找组织结构最大值
  729. DataTable filterDataTable = result.Tables[0].Clone();
  730. // 过滤本级组织机构
  731. string filterExpression = "OrganizationCode LIKE '" + parentCode + "%'"
  732. + " AND LEN(OrganizationCode) = " + (parentCode.Length + Constant.INT_IS_THREE);
  733. DataRow[] dataRows = result.Tables[0].Select(filterExpression, "OrganizationCode DESC");
  734. foreach (DataRow row in dataRows)
  735. {
  736. filterDataTable.Rows.Add(row.ItemArray);
  737. }
  738. if (Constant.INT_IS_ZERO < filterDataTable.Rows.Count)
  739. {
  740. // 取得本级以下所有子级的组织机构集合
  741. string organizationCode = filterDataTable.Rows[0]["OrganizationCode"].ToString();
  742. // 当前最大的组织机构代码
  743. organizationCode = organizationCode.Substring(organizationCode.Length - Constant.INT_IS_THREE);
  744. return Convert.ToInt32(organizationCode);
  745. }
  746. return Constant.INT_IS_ZERO;
  747. }
  748. }
  749. return Constant.INT_IS_ZERO;
  750. }
  751. catch (Exception ex)
  752. {
  753. throw ex;
  754. }
  755. }
  756. #endregion
  757. }
  758. }