TATModuleLogicDALPartial.cs 63 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225
  1. /*******************************************************************************
  2. * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
  3. * 类的信息:
  4. * 1.程序名称:TATModuleLogicDAL.cs
  5. * 2.功能描述:策略管理数据库访问类(插入、修改、删除)
  6. * 编辑履历:
  7. * 作者 日期 版本 修改内容
  8. * 庄天威 2014/11/18 1.00 新建
  9. *******************************************************************************/
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Data;
  13. using System.IO;
  14. using Dongke.IBOSS.PRD.Basics.BaseResources;
  15. using Dongke.IBOSS.PRD.Basics.DataAccess;
  16. using Dongke.IBOSS.PRD.Basics.Library;
  17. using Dongke.IBOSS.PRD.Service.DataModels;
  18. using Dongke.IBOSS.PRD.WCF.DataModels;
  19. using Dongke.IBOSS.PRD.Service.CommonModuleLogic;
  20. using Oracle.ManagedDataAccess.Client;
  21. using System.Text;
  22. namespace Dongke.IBOSS.PRD.Service.TATModuleLogic
  23. {
  24. /// <summary>
  25. /// 策略管理数据库访问类(插入、修改、删除)
  26. /// </summary>
  27. public partial class TATModuleLogicDAL
  28. {
  29. #region 管理岗位工资策略
  30. /// <summary>
  31. /// 新建管理岗位工资策略
  32. /// </summary>
  33. /// <param name="msEntity">新建实体</param>
  34. /// <param name="dsDetail">对应管理者明细</param>
  35. /// <param name="userInfo">当前用户信息</param>
  36. /// <returns>服务返回实体</returns>
  37. public static ServiceResultEntity AddManagerSalary(ManagerSalaryEntity msEntity, DataSet dsDetail, SUserInfo userInfo)
  38. {
  39. int RowsCount = 0;
  40. int CopyCount = 0;
  41. IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  42. ServiceResultEntity srEntity = new ServiceResultEntity();
  43. try
  44. {
  45. oracleTrConn.Connect();
  46. StringBuilder sbSql = new StringBuilder();
  47. //获取序列ID
  48. sbSql.Clear();
  49. sbSql.Append("select SEQ_TAT_ManagerSalary_ID.nextval from dual");
  50. int entityId = Convert.ToInt32(oracleTrConn.GetSqlResultToStr(sbSql.ToString()));
  51. sbSql.Clear();
  52. //添加管理岗位工资策略主体信息
  53. sbSql.Append(@"Insert into TP_TAT_ManagerSalary
  54. (ManagerSalaryID,ManagerSalaryName,BeginAccountMonth,Remarks,
  55. AuditStatus,AccountID,CreateUserID,UpdateUserID)
  56. Values
  57. (:ManagerSalaryID,:ManagerSalaryName,:BeginAccountMonth,:Remarks,
  58. :AuditStatus,:AccountID,:CreateUserID,:UpdateUserID)");
  59. OracleParameter[] WParas = new OracleParameter[] {
  60. new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
  61. entityId,ParameterDirection.Input),
  62. new OracleParameter(":ManagerSalaryName",OracleDbType.NVarchar2,
  63. msEntity.ManagerSalaryName,ParameterDirection.Input),
  64. new OracleParameter(":BeginAccountMonth",OracleDbType.Date,
  65. msEntity.BeginAccountMonth,ParameterDirection.Input),
  66. new OracleParameter(":Remarks",OracleDbType.NVarchar2,
  67. msEntity.Remarks,ParameterDirection.Input),
  68. new OracleParameter(":AuditStatus",OracleDbType.Int32,
  69. msEntity.AuditStatus,ParameterDirection.Input),
  70. new OracleParameter(":AccountID",OracleDbType.Int32,
  71. userInfo.AccountID,ParameterDirection.Input),
  72. new OracleParameter(":CreateUserID",OracleDbType.Int32,
  73. userInfo.UserID,ParameterDirection.Input),
  74. new OracleParameter(":UpdateUserID",OracleDbType.Int32,
  75. userInfo.UserID,ParameterDirection.Input),
  76. };
  77. //连接数据库并返回结果
  78. RowsCount = oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WParas);
  79. //正常添加的情况,要同时插入管理者信息
  80. if (msEntity.CopyId == 0)
  81. {
  82. EditManagers(entityId, dsDetail, userInfo, oracleTrConn);
  83. }
  84. //如果是复制添加,那么还要将复制主体信息的明细全部添加
  85. else
  86. {
  87. sbSql.Clear();
  88. //首先获取要Copy的全部管理者信息查出
  89. sbSql.Append("Select * from TP_TAT_Managers Where ManagerSalaryID=:MID");
  90. OracleParameter[] MemberParas = new OracleParameter[]{
  91. new OracleParameter(":MID",OracleDbType.Int32,
  92. msEntity.CopyId,ParameterDirection.Input)
  93. };
  94. DataTable drManagers = oracleTrConn.GetSqlResultToDt(sbSql.ToString(), MemberParas);
  95. foreach(DataRow drFor in drManagers.Rows)
  96. {
  97. //录入需要Copy的管理者信息并获取ID
  98. //获取序列ID
  99. sbSql.Clear();
  100. sbSql.Append("select SEQ_TAT_Managers_ManagersID.nextval from dual");
  101. int managerId = Convert.ToInt32(oracleTrConn.GetSqlResultToStr(sbSql.ToString()));
  102. //插入被复制的信息
  103. sbSql.Clear();
  104. sbSql.Append(@"Insert into TP_TAT_Managers
  105. (ManagersID,ManagerSalaryID,Manager,SalaryType,SalaryPercent,
  106. AccountID,CreateUserID,UpdateUserID)
  107. Values
  108. (:ManagersID,:ManagerSalaryID,:Manager,:SalaryType,:SalaryPercent,
  109. :AccountID,:CreateUserID,:UpdateUserID)");
  110. OracleParameter[] CMParas = new OracleParameter[] {
  111. new OracleParameter(":ManagersID",OracleDbType.Int32,
  112. managerId,ParameterDirection.Input),
  113. new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
  114. entityId,ParameterDirection.Input),
  115. new OracleParameter(":Manager",OracleDbType.Int32,
  116. drFor["Manager"],ParameterDirection.Input),
  117. new OracleParameter(":SalaryType",OracleDbType.Int32,
  118. drFor["SalaryType"],ParameterDirection.Input),
  119. new OracleParameter(":SalaryPercent",OracleDbType.Decimal,
  120. drFor["SalaryPercent"],ParameterDirection.Input),
  121. new OracleParameter(":AccountID",OracleDbType.Int32,
  122. userInfo.AccountID,ParameterDirection.Input),
  123. new OracleParameter(":CreateUserID",OracleDbType.Int32,
  124. userInfo.UserID,ParameterDirection.Input),
  125. new OracleParameter(":UpdateUserID",OracleDbType.Int32,
  126. userInfo.UserID,ParameterDirection.Input),
  127. };
  128. CopyCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), CMParas);
  129. //Copy明细 :ManagersID为新序列ID,ForManagersID为Copy信息ID
  130. sbSql.Clear();
  131. sbSql.Append(@"Insert into TP_TAT_Members
  132. (ManagersID,ManagerSalaryID,Member,AccountID,CreateUserID,UpdateUserID)
  133. Select :ManagersID,:ManagerSalaryID,Member,AccountID,:CreateUserID,:UpdateUserID
  134. From TP_TAT_Members Where ManagersID=:ForManagersID");
  135. OracleParameter[] CMemParas = new OracleParameter[] {
  136. new OracleParameter(":ManagersID",OracleDbType.Int32,
  137. managerId,ParameterDirection.Input),
  138. new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
  139. entityId,ParameterDirection.Input),
  140. new OracleParameter(":CreateUserID",OracleDbType.Int32,
  141. userInfo.UserID,ParameterDirection.Input),
  142. new OracleParameter(":UpdateUserID",OracleDbType.Int32,
  143. userInfo.UserID,ParameterDirection.Input),
  144. new OracleParameter(":ForManagersID",OracleDbType.Int32,
  145. drFor["ManagersID"],ParameterDirection.Input),
  146. };
  147. CopyCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), CMemParas);
  148. }
  149. }
  150. //如果插入失败则回滚事务并关闭
  151. if (RowsCount == 0)
  152. {
  153. oracleTrConn.Rollback();
  154. oracleTrConn.Disconnect();
  155. srEntity.Status = Constant.ServiceResultStatus.ValidationFailed;
  156. srEntity.Message = string.Format(Messages.MSG_CMN_W001, "管理岗位工资策略", "新建");
  157. }
  158. else
  159. {
  160. oracleTrConn.Commit();
  161. oracleTrConn.Disconnect();
  162. srEntity.Status = Constant.ServiceResultStatus.Success;
  163. srEntity.Message = string.Format(Messages.MSG_CMN_I001, "管理岗位工资策略", "新建");
  164. }
  165. return srEntity;
  166. }
  167. catch (Exception ex)
  168. {
  169. if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
  170. {
  171. oracleTrConn.Rollback();
  172. oracleTrConn.Disconnect();
  173. }
  174. srEntity.Exception = ex;
  175. srEntity.Status = Constant.ServiceResultStatus.SystemError;
  176. return srEntity;
  177. }
  178. }
  179. /// <summary>
  180. /// 编辑管理岗位工资策略
  181. /// </summary>
  182. /// <param name="msEntity">策略实体</param>
  183. /// <param name="dsDetail">明细数据源</param>
  184. /// <param name="userInfo">当前用户</param>
  185. /// <returns>服务对象实体</returns>
  186. public static ServiceResultEntity EditManagerSalary(ManagerSalaryEntity msEntity, DataSet dsDetail, SUserInfo userInfo)
  187. {
  188. int RowsCount = 0;
  189. IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  190. ServiceResultEntity srEntity = new ServiceResultEntity();
  191. try
  192. {
  193. oracleTrConn.Connect();
  194. StringBuilder sbSql = new StringBuilder();
  195. sbSql.Append(@"Update TP_TAT_ManagerSalary
  196. Set ManagerSalaryName=:ManagerSalaryName,
  197. BeginAccountMonth=:BeginAccountMonth,
  198. Remarks=:Remarks,
  199. UpdateUserID=:UpdateUserID
  200. Where ManagerSalaryID=:ManagerSalaryID and OPTimeStamp=:OPTimeStamp");
  201. OracleParameter[] WParas = new OracleParameter[] {
  202. new OracleParameter(":ManagerSalaryName",OracleDbType.NVarchar2,
  203. msEntity.ManagerSalaryName,ParameterDirection.Input),
  204. new OracleParameter(":BeginAccountMonth",OracleDbType.Date,
  205. msEntity.BeginAccountMonth,ParameterDirection.Input),
  206. new OracleParameter(":Remarks",OracleDbType.NVarchar2,
  207. msEntity.Remarks,ParameterDirection.Input),
  208. new OracleParameter(":UpdateUserID",OracleDbType.Int32,
  209. userInfo.UserID,ParameterDirection.Input),
  210. new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
  211. msEntity.ManagerSalaryID,ParameterDirection.Input),
  212. new OracleParameter(":OPTimeStamp",OracleDbType.TimeStamp,
  213. msEntity.OPTimeStamp,ParameterDirection.Input),
  214. };
  215. //连接数据库并返回结果
  216. RowsCount = oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WParas);
  217. //并更新对应工种明细
  218. EditManagers(Convert.ToInt32(msEntity.ManagerSalaryID), dsDetail, userInfo, oracleTrConn);
  219. //如果插入失败则回滚事务并关闭
  220. if (RowsCount == 0)
  221. {
  222. oracleTrConn.Rollback();
  223. oracleTrConn.Disconnect();
  224. srEntity.Status = Constant.ServiceResultStatus.DataChanged;
  225. srEntity.Message = string.Format(Messages.MSG_CMN_W001, "管理岗位工资策略", "修改");
  226. }
  227. else
  228. {
  229. oracleTrConn.Commit();
  230. oracleTrConn.Disconnect();
  231. srEntity.Status = Constant.ServiceResultStatus.Success;
  232. srEntity.Message = string.Format(Messages.MSG_CMN_I001, "管理岗位工资策略", "修改");
  233. }
  234. return srEntity;
  235. }
  236. catch (Exception ex)
  237. {
  238. if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
  239. {
  240. oracleTrConn.Rollback();
  241. oracleTrConn.Disconnect();
  242. }
  243. srEntity.Exception = ex;
  244. srEntity.Status = Constant.ServiceResultStatus.SystemError;
  245. return srEntity;
  246. }
  247. }
  248. /// <summary>
  249. /// 审批管理岗位工资策略
  250. /// </summary>
  251. /// <param name="msEntity">策略实体</param>
  252. /// <param name="userInfo">当前用户</param>
  253. /// <returns>
  254. /// 返回受影响行数
  255. /// -999为策略开始月小于系统结算月,
  256. /// -998为存在同类别同开始日期策略.
  257. /// </returns>
  258. public static ServiceResultEntity AuditManagerSalary(ManagerSalaryEntity msEntity, SUserInfo userInfo)
  259. {
  260. int RowCount = 0;
  261. IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  262. ServiceResultEntity srEntity = new ServiceResultEntity();
  263. try
  264. {
  265. oracleTrConn.Connect();
  266. //首先验证即将通过审批的实体的数据合法性
  267. if (msEntity.AuditStatus == Convert.ToInt32(Constant.AuditStatus.Agree))
  268. {
  269. RowCount = ValidationManagerSalary(oracleTrConn, msEntity, userInfo);
  270. if (RowCount != 0)
  271. {
  272. srEntity.Status = Constant.ServiceResultStatus.Other;
  273. srEntity.OtherStatus = RowCount;
  274. if (RowCount == -999)
  275. {
  276. srEntity.Message = "策略开始月不能小于系统结算月!";
  277. }
  278. else if (RowCount == -998)
  279. {
  280. srEntity.Message = "已存在相同开始日期的该类型策略!";
  281. }
  282. return srEntity;
  283. }
  284. }
  285. // 获得账务日期
  286. DateTime accountDate = CommonModuleLogic.CommonModuleLogic.GetAccountDate(oracleTrConn, userInfo);
  287. //审批缺陷扣罚策略主体信息
  288. StringBuilder sbSql = new StringBuilder();
  289. sbSql.Append(@"Update TP_TAT_ManagerSalary
  290. Set AuditStatus=:AuditStatus,
  291. Auditor=:Auditor,
  292. AuditlDate=:AuditlDate
  293. Where ManagerSalaryID=:ManagerSalaryID
  294. And OPTimeStamp=:OPTimeStamp");
  295. OracleParameter[] WParas = new OracleParameter[] {
  296. new OracleParameter(":AuditStatus",OracleDbType.Int32,
  297. msEntity.AuditStatus,ParameterDirection.Input),
  298. new OracleParameter(":Auditor",OracleDbType.Int32,
  299. userInfo.UserID,ParameterDirection.Input),
  300. new OracleParameter(":AuditlDate",OracleDbType.Date,
  301. accountDate,ParameterDirection.Input),
  302. new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
  303. msEntity.ManagerSalaryID,ParameterDirection.Input),
  304. new OracleParameter(":OPTimeStamp",OracleDbType.TimeStamp,
  305. msEntity.OPTimeStamp,ParameterDirection.Input),
  306. };
  307. //连接数据库并返回结果
  308. RowCount = oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WParas);
  309. //如果插入失败则回滚事务并关闭
  310. if (RowCount == 0)
  311. {
  312. oracleTrConn.Rollback();
  313. oracleTrConn.Disconnect();
  314. srEntity.Status = Constant.ServiceResultStatus.DataChanged;
  315. srEntity.Message = string.Format(Messages.MSG_CMN_W001, "管理岗位工资策略", "审批");
  316. }
  317. else
  318. {
  319. oracleTrConn.Commit();
  320. oracleTrConn.Disconnect();
  321. srEntity.Status = Constant.ServiceResultStatus.Success;
  322. srEntity.Message = string.Format(Messages.MSG_CMN_I001, "管理岗位工资策略", "审批");
  323. }
  324. return srEntity;
  325. }
  326. catch (Exception ex)
  327. {
  328. if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
  329. {
  330. oracleTrConn.Rollback();
  331. oracleTrConn.Disconnect();
  332. }
  333. srEntity.Exception = ex;
  334. srEntity.Status = Constant.ServiceResultStatus.SystemError;
  335. return srEntity;
  336. }
  337. }
  338. /// <summary>
  339. /// 停用管理岗位工资策略
  340. /// </summary>
  341. /// <param name="msEntity">停用实体</param>
  342. /// <param name="userInfo">当前用户信息</param>
  343. /// <returns>返回影响行</returns>
  344. public static ServiceResultEntity StopManagerSalary(ManagerSalaryEntity msEntity, SUserInfo userInfo)
  345. {
  346. int RowCount = 0;
  347. IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  348. ServiceResultEntity srEntity = new ServiceResultEntity();
  349. try
  350. {
  351. oracleTrConn.Connect();
  352. // 获得账务日期
  353. DateTime accountDate = CommonModuleLogic.CommonModuleLogic.GetAccountDate(oracleTrConn, userInfo);
  354. //停用管理岗位工资策略主体信息
  355. StringBuilder sbSql = new StringBuilder();
  356. sbSql.Append(@"Update TP_TAT_ManagerSalary
  357. Set ValueFlag = 0
  358. Where ManagerSalaryID=:ManagerSalaryID
  359. And OPTimeStamp=:OPTimeStamp");
  360. OracleParameter[] WParas = new OracleParameter[] {
  361. new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
  362. msEntity.ManagerSalaryID,ParameterDirection.Input),
  363. new OracleParameter(":OPTimeStamp",OracleDbType.TimeStamp,
  364. msEntity.OPTimeStamp,ParameterDirection.Input),
  365. };
  366. //连接数据库并返回结果
  367. RowCount = oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WParas);
  368. if (RowCount == 0) //时间戳不对
  369. {
  370. oracleTrConn.Rollback();
  371. oracleTrConn.Disconnect();
  372. srEntity.Status = Constant.ServiceResultStatus.DataChanged;
  373. srEntity.Message = string.Format(Messages.MSG_CMN_W001, "管理岗位工资策略", "停用");
  374. return srEntity;
  375. }
  376. //停用管理岗位工资策略组员明细
  377. sbSql.Clear();
  378. sbSql.Append(@"Delete from TP_TAT_Members
  379. Where ManagerSalaryID = :ManagerSalaryID");
  380. OracleParameter[] WDParas = new OracleParameter[] {
  381. new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
  382. msEntity.ManagerSalaryID,ParameterDirection.Input)
  383. };
  384. RowCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WDParas);
  385. //停用管理岗位工资策略管理者明细
  386. sbSql.Clear();
  387. sbSql.Append(@"Delete from TP_TAT_Managers
  388. Where ManagerSalaryID = :ManagerSalaryID");
  389. OracleParameter[] WGDParas = new OracleParameter[] {
  390. new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
  391. msEntity.ManagerSalaryID,ParameterDirection.Input)
  392. };
  393. RowCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WGDParas);
  394. oracleTrConn.Commit();
  395. oracleTrConn.Disconnect();
  396. srEntity.Status = Constant.ServiceResultStatus.Success;
  397. srEntity.Message = string.Format(Messages.MSG_CMN_I001, "管理岗位工资策略", "停用");
  398. return srEntity;
  399. }
  400. catch (Exception ex)
  401. {
  402. if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
  403. {
  404. oracleTrConn.Rollback();
  405. oracleTrConn.Disconnect();
  406. }
  407. srEntity.Exception = ex;
  408. srEntity.Status = Constant.ServiceResultStatus.SystemError;
  409. return srEntity;
  410. }
  411. }
  412. /// <summary>
  413. /// 验证数据有效性(是否可新建或编辑)
  414. /// </summary>
  415. /// <param name="trConn">数据库事务连接</param>
  416. /// <param name="msEntity">当前操作实体</param>
  417. /// <param name="userInfo">当前用户</param>
  418. /// <returns>
  419. /// 0为可进行相应操作
  420. /// -999为策略开始月小于系统结算月,
  421. /// -998为存在同类别同开始日期策略.
  422. /// </returns>
  423. public static int ValidationManagerSalary(IDBTransaction trConn,
  424. ManagerSalaryEntity msEntity, SUserInfo userInfo)
  425. {
  426. try
  427. {
  428. StringBuilder sbSql = new StringBuilder();
  429. //条件一:策略开始月不得小于已结算月份(SystemDateType=5代表结算月日期)
  430. sbSql.Append(@"Select * from TP_MST_SystemDate
  431. Where SystemDateType = 5
  432. and DateValue >= :BeginAccountMonth");
  433. OracleParameter[] CSParas = new OracleParameter[] {
  434. new OracleParameter(":BeginAccountMonth",OracleDbType.Date,
  435. msEntity.BeginAccountMonth,ParameterDirection.Input)
  436. };
  437. DataTable dtCheckSys = trConn.GetSqlResultToDt(sbSql.ToString(), CSParas);
  438. if (dtCheckSys.Rows.Count != 0) //如果当前结算月大于新建策略日期,False
  439. {
  440. return -999;
  441. }
  442. sbSql.Clear();
  443. //条件二:不可存在同开始日期的已审批策略
  444. sbSql.Append(@"Select * from TP_TAT_ManagerSalary
  445. Where BeginAccountMonth = :BeginAccountMonth
  446. and AccountID=:AccountID
  447. and AuditStatus = 1
  448. and ValueFlag = 1");
  449. OracleParameter[] CWParas = new OracleParameter[] {
  450. new OracleParameter(":BeginAccountMonth",OracleDbType.Date,
  451. msEntity.BeginAccountMonth,ParameterDirection.Input),
  452. new OracleParameter(":AccountID",OracleDbType.Int32,
  453. userInfo.AccountID,ParameterDirection.Input),
  454. };
  455. DataTable dtCheckDef = trConn.GetSqlResultToDt(sbSql.ToString(), CWParas);
  456. if (dtCheckDef.Rows.Count != 0) //如果存在同类别同开始日期策略,False
  457. {
  458. return -998;
  459. }
  460. //符合以上条件方可通过验证
  461. return 0;
  462. }
  463. catch (Exception ex)
  464. {
  465. throw ex;
  466. }
  467. }
  468. /// <summary>
  469. /// 编辑管理岗位人员明细
  470. /// </summary>
  471. /// <param name="ManagerSalaryID">策略ID</param>
  472. /// <param name="dsDetail">管理岗位人员数据源</param>
  473. /// <param name="userInfo">当前用户</param>
  474. /// <param name="oracleTrConn">事务链接</param>
  475. /// <returns>服务对象实体</returns>
  476. public static ServiceResultEntity EditManagers(int ManagerSalaryID, DataSet dsDetail, SUserInfo userInfo,
  477. IDBTransaction oracleTrConn)
  478. {
  479. int RowsCount = 0;
  480. bool ConnIsNew = false;
  481. //如果链接为空,则新建链接
  482. if (oracleTrConn == null)
  483. {
  484. oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  485. ConnIsNew = true;
  486. }
  487. ServiceResultEntity srEntity = new ServiceResultEntity();
  488. StringBuilder sbSql = new StringBuilder();
  489. try
  490. {
  491. //如果是新链接,需要打开事务
  492. if (ConnIsNew == true)
  493. {
  494. oracleTrConn.Connect();
  495. }
  496. //首先验证管理者人员唯一性
  497. String isHaveName = ValidationManagers(oracleTrConn, ManagerSalaryID, dsDetail);
  498. if(isHaveName != string.Empty)
  499. {
  500. oracleTrConn.Rollback();
  501. oracleTrConn.Disconnect();
  502. srEntity.Status = Constant.ServiceResultStatus.Other;
  503. srEntity.Message = isHaveName + "已经是其他组内成员,不可设置为管理者.";
  504. return srEntity;
  505. }
  506. DataTable dtDetail = dsDetail.Tables[0];
  507. foreach (DataRow drFor in dtDetail.Rows)
  508. {
  509. if (drFor.RowState == DataRowState.Added) //添加
  510. {
  511. if (drFor["StaffID"] == DBNull.Value)
  512. {
  513. continue;
  514. }
  515. //获取序列ID
  516. sbSql.Clear();
  517. sbSql.Append("select SEQ_TAT_Managers_ManagersID.nextval from dual");
  518. int managerId = Convert.ToInt32(oracleTrConn.GetSqlResultToStr(sbSql.ToString()));
  519. //插入被复制的信息
  520. sbSql.Clear();
  521. sbSql.Append(@"Insert into TP_TAT_Managers
  522. (ManagersID,ManagerSalaryID,Manager,SalaryType,SalaryPercent,
  523. AccountID,CreateUserID,UpdateUserID)
  524. Values
  525. (:ManagersID,:ManagerSalaryID,:Manager,:SalaryType,:SalaryPercent,
  526. :AccountID,:CreateUserID,:UpdateUserID)");
  527. OracleParameter[] CMParas = new OracleParameter[] {
  528. new OracleParameter(":ManagersID",OracleDbType.Int32,
  529. managerId,ParameterDirection.Input),
  530. new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
  531. ManagerSalaryID,ParameterDirection.Input),
  532. new OracleParameter(":Manager",OracleDbType.Int32,
  533. drFor["StaffID"],ParameterDirection.Input),
  534. new OracleParameter(":SalaryType",OracleDbType.Int32,
  535. drFor["SalaryType"],ParameterDirection.Input),
  536. new OracleParameter(":SalaryPercent",OracleDbType.Decimal,
  537. drFor["SalaryPercent"],ParameterDirection.Input),
  538. new OracleParameter(":AccountID",OracleDbType.Int32,
  539. userInfo.AccountID,ParameterDirection.Input),
  540. new OracleParameter(":CreateUserID",OracleDbType.Int32,
  541. userInfo.UserID,ParameterDirection.Input),
  542. new OracleParameter(":UpdateUserID",OracleDbType.Int32,
  543. userInfo.UserID,ParameterDirection.Input),
  544. };
  545. RowsCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), CMParas);
  546. }
  547. else if (drFor.RowState == DataRowState.Modified) //修改
  548. {
  549. sbSql.Clear();
  550. sbSql.Append(@"Update TP_TAT_Managers
  551. Set SalaryType=:SalaryType,
  552. SalaryPercent=:SalaryPercent,
  553. UpdateUserID=:UpdateUserID
  554. Where ManagersID=:ManagersID");
  555. OracleParameter[] UpdateParas = new OracleParameter[] {
  556. new OracleParameter(":SalaryType",OracleDbType.Int32,
  557. drFor["SalaryType"],ParameterDirection.Input),
  558. new OracleParameter(":SalaryPercent",OracleDbType.Int32,
  559. drFor["SalaryPercent"],ParameterDirection.Input),
  560. new OracleParameter(":UpdateUserID",OracleDbType.Int32,
  561. userInfo.UserID,ParameterDirection.Input),
  562. new OracleParameter(":ManagersID",OracleDbType.Int32,
  563. drFor["ManagersID"],ParameterDirection.Input)
  564. };
  565. RowsCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), UpdateParas);
  566. }
  567. else if (drFor.RowState == DataRowState.Deleted) //删除
  568. {
  569. sbSql.Clear();
  570. //首先删除明细(组内成员)
  571. sbSql.Append(@"Delete from TP_TAT_Members
  572. Where ManagersID=:ManagersID");
  573. OracleParameter[] DeleteParas = new OracleParameter[] {
  574. new OracleParameter(":ManagersID",OracleDbType.Int32,
  575. drFor["ManagersID",DataRowVersion.Original],ParameterDirection.Input)
  576. };
  577. RowsCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), DeleteParas);
  578. sbSql.Clear();
  579. sbSql.Append(@"Delete from TP_TAT_Managers
  580. Where ManagersID=:ManagersID");
  581. RowsCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), DeleteParas);
  582. }
  583. }
  584. //不是新链接的情况下,直接Return出去
  585. if (ConnIsNew == false)
  586. {
  587. return srEntity;
  588. }
  589. //新链接的情况下,如果插入失败则回滚事务并关闭
  590. if (ConnIsNew == true && RowsCount == 0)
  591. {
  592. oracleTrConn.Rollback();
  593. oracleTrConn.Disconnect();
  594. srEntity.Status = Constant.ServiceResultStatus.ValidationFailed;
  595. srEntity.Message = string.Format(Messages.MSG_CMN_W001, "管理岗位工资策略", "新建");
  596. }
  597. else
  598. {
  599. oracleTrConn.Commit();
  600. oracleTrConn.Disconnect();
  601. srEntity.Status = Constant.ServiceResultStatus.Success;
  602. srEntity.Message = string.Format(Messages.MSG_CMN_I001, "管理岗位工资策略", "新建");
  603. }
  604. return srEntity;
  605. }
  606. catch (Exception ex)
  607. {
  608. throw ex;
  609. }
  610. }
  611. /// <summary>
  612. /// 编辑管理组内成员明细
  613. /// </summary>
  614. /// <param name="ManagersID">管理岗位人员ID</param>
  615. /// <param name="dsDetail">数据源</param>
  616. /// <param name="userInfo">当前用户</param>
  617. /// <returns>服务返回实体</returns>
  618. public static ServiceResultEntity EditMembers(int ManagerSalaryID,int ManagersID, DataSet dsDetail, SUserInfo userInfo)
  619. {
  620. int RowCount = 0;
  621. IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  622. ServiceResultEntity srEntity = new ServiceResultEntity();
  623. StringBuilder sbSql = new StringBuilder();
  624. try
  625. {
  626. oracleTrConn.Connect();
  627. //首先验证是否有重复人员
  628. string isHaveName = ValidationMembers(oracleTrConn, ManagerSalaryID, dsDetail);
  629. if(isHaveName != string.Empty)
  630. {
  631. oracleTrConn.Rollback();
  632. oracleTrConn.Disconnect();
  633. srEntity.Status = Constant.ServiceResultStatus.Other;
  634. srEntity.Message = isHaveName + "已经是管理者,不可加入其他组内.";
  635. return srEntity;
  636. }
  637. //如果可通过验证再进行操作
  638. DataTable dtDetail = dsDetail.Tables[0];
  639. foreach (DataRow drFor in dtDetail.Rows)
  640. {
  641. if (drFor.RowState == DataRowState.Added) //添加
  642. {
  643. if (drFor["StaffID"] == DBNull.Value)
  644. {
  645. continue;
  646. }
  647. sbSql.Clear();
  648. sbSql.Append(@"Insert into TP_TAT_Members
  649. (ManagersID,ManagerSalaryID,Member,AccountID,CreateUserID,UpdateUserID)
  650. Values
  651. (:ManagersID,:ManagerSalaryID,:Member,:AccountID,:CreateUserID,:UpdateUserID)");
  652. OracleParameter[] InsertParas = new OracleParameter[] {
  653. new OracleParameter(":ManagersID",OracleDbType.Int32,
  654. ManagersID,ParameterDirection.Input),
  655. new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
  656. ManagerSalaryID,ParameterDirection.Input),
  657. new OracleParameter(":Member",OracleDbType.Int32,
  658. drFor["StaffID"],ParameterDirection.Input),
  659. new OracleParameter(":AccountID",OracleDbType.Int32,
  660. userInfo.AccountID,ParameterDirection.Input),
  661. new OracleParameter(":CreateUserID",OracleDbType.Int32,
  662. userInfo.UserID,ParameterDirection.Input),
  663. new OracleParameter(":UpdateUserID",OracleDbType.Int32,
  664. userInfo.UserID,ParameterDirection.Input)
  665. };
  666. RowCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), InsertParas);
  667. }
  668. else if (drFor.RowState == DataRowState.Deleted) //删除
  669. {
  670. sbSql.Clear();
  671. sbSql.Append(@"Delete from TP_TAT_Members
  672. Where ManagersID=:ManagersID and Member=:Member");
  673. OracleParameter[] DeleteParas = new OracleParameter[] {
  674. new OracleParameter(":ManagersID",OracleDbType.Int32,
  675. ManagersID,ParameterDirection.Input),
  676. new OracleParameter(":Member",OracleDbType.Int32,
  677. drFor["StaffId",DataRowVersion.Original],ParameterDirection.Input)
  678. };
  679. RowCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), DeleteParas);
  680. }
  681. }
  682. if (RowCount == 0)
  683. {
  684. oracleTrConn.Rollback();
  685. oracleTrConn.Disconnect();
  686. srEntity.Status = Constant.ServiceResultStatus.ValidationFailed;
  687. srEntity.Message = string.Format(Messages.MSG_CMN_W001, "管理组内成员", "编辑");
  688. }
  689. else
  690. {
  691. oracleTrConn.Commit();
  692. oracleTrConn.Disconnect();
  693. srEntity.Status = Constant.ServiceResultStatus.Success;
  694. srEntity.Message = string.Format(Messages.MSG_CMN_I001, "管理组内成员", "编辑");
  695. }
  696. return srEntity;
  697. }
  698. catch (Exception ex)
  699. {
  700. if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
  701. {
  702. oracleTrConn.Rollback();
  703. oracleTrConn.Disconnect();
  704. }
  705. srEntity.Exception = ex;
  706. srEntity.Status = Constant.ServiceResultStatus.SystemError;
  707. return srEntity;
  708. }
  709. }
  710. /// <summary>
  711. /// 验证插入人员唯一性(管理者)
  712. /// </summary>
  713. /// <param name="trConn">数据库连接</param>
  714. /// <param name="ManagerSalaryID">管理岗位工资策略ID</param>
  715. /// <param name="dsMember">即将插入的管理者</param>
  716. /// <returns>重复的管理者姓名</returns>
  717. private static string ValidationManagers(IDBTransaction trConn,int ManagerSalaryID,DataSet dsManagers)
  718. {
  719. try
  720. {
  721. string strManagersId = string.Empty;
  722. StringBuilder sbManagersId = new StringBuilder();
  723. //获取即将插入的管理者员工ID字符串组
  724. DataTable dtSourse = dsManagers.Tables[0];
  725. foreach (DataRow drFor in dtSourse.Rows)
  726. {
  727. if (drFor.RowState == DataRowState.Added)
  728. {
  729. if (drFor["StaffID"] == DBNull.Value)
  730. {
  731. continue;
  732. }
  733. sbManagersId.Append(Convert.ToInt32(drFor["StaffID"]) + ",");
  734. }
  735. }
  736. if (sbManagersId.Length != 0)
  737. {
  738. //查询组员表中是否有这些即将插入的管理者
  739. strManagersId = sbManagersId.ToString().Substring(0, sbManagersId.Length - 1);
  740. string strSql = @"Select StaffName from TP_TAT_Members
  741. Inner join TP_HR_STAFF
  742. on TP_TAT_Members.Member = TP_HR_STAFF.StaffID
  743. Where ManagerSalaryID=:ManagerSalaryID
  744. And Member in (" + strManagersId + ")";
  745. OracleParameter[] ValidationParas = new OracleParameter[] {
  746. new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
  747. ManagerSalaryID,ParameterDirection.Input)
  748. };
  749. DataTable dtIsHave = trConn.GetSqlResultToDt(strSql, ValidationParas);
  750. //遍历获取存在重复的员工姓名
  751. StringBuilder sbStaffName = new StringBuilder();
  752. foreach (DataRow drFor in dtIsHave.Rows)
  753. {
  754. sbStaffName.Append(drFor["StaffName"].ToString() + ",");
  755. }
  756. //如果存在,返回姓名字符串数组,不存在,返回空
  757. if(sbStaffName.Length >0)
  758. {
  759. return sbStaffName.ToString().Substring(0, sbStaffName.Length - 1);
  760. }
  761. else
  762. {
  763. return string.Empty;
  764. }
  765. }
  766. return string.Empty;
  767. }
  768. catch (Exception ex)
  769. {
  770. throw ex;
  771. }
  772. }
  773. /// <summary>
  774. /// 验证插入人员唯一性(组内人员)
  775. /// </summary>
  776. /// <param name="trConn">数据库连接</param>
  777. /// <param name="ManagerSalaryID">管理岗位工资策略ID</param>
  778. /// <param name="dsManagers">即将插入的组内人员</param>
  779. /// <returns>重复的组内成员姓名</returns>
  780. private static string ValidationMembers(IDBTransaction trConn, int ManagerSalaryID, DataSet dsMember)
  781. {
  782. try
  783. {
  784. string strMembersId = string.Empty;
  785. StringBuilder sbMemberId = new StringBuilder();
  786. //获取即将插入的组内成员员工ID字符串组
  787. DataTable dtSourse = dsMember.Tables[0];
  788. foreach (DataRow drFor in dtSourse.Rows)
  789. {
  790. if (drFor.RowState == DataRowState.Added)
  791. {
  792. if (drFor["StaffID"] == DBNull.Value)
  793. {
  794. continue;
  795. }
  796. sbMemberId.Append(Convert.ToInt32(drFor["StaffID"]) + ",");
  797. }
  798. }
  799. if (sbMemberId.Length != 0)
  800. {
  801. //查询管理者表中是否有这些即将插入的组内成员
  802. strMembersId = sbMemberId.ToString().Substring(0, sbMemberId.Length - 1);
  803. string strSql = @"Select StaffName from TP_TAT_Managers
  804. Inner join TP_HR_STAFF
  805. on TP_TAT_Managers.Manager = TP_HR_STAFF.StaffID
  806. Where ManagerSalaryID=:ManagerSalaryID
  807. And Manager in (" + strMembersId + ")";
  808. OracleParameter[] ValidationParas = new OracleParameter[] {
  809. new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
  810. ManagerSalaryID,ParameterDirection.Input)
  811. };
  812. DataTable dtIsHave = trConn.GetSqlResultToDt(strSql, ValidationParas);
  813. //遍历获取存在重复的员工姓名
  814. StringBuilder sbStaffName = new StringBuilder();
  815. foreach (DataRow drFor in dtIsHave.Rows)
  816. {
  817. sbStaffName.Append(drFor["StaffName"].ToString() + ",");
  818. }
  819. //如果存在,返回姓名字符串数组,不存在,返回空
  820. if (sbStaffName.Length > 0)
  821. {
  822. return sbStaffName.ToString().Substring(0, sbStaffName.Length - 1);
  823. }
  824. else
  825. {
  826. return string.Empty;
  827. }
  828. }
  829. return string.Empty;
  830. }
  831. catch (Exception ex)
  832. {
  833. throw ex;
  834. }
  835. }
  836. #endregion
  837. #region 出勤考核明细
  838. /// <summary>
  839. /// 新建出勤考核明细
  840. /// </summary>
  841. /// <param name="attendanceDetailEntity">新建实体</param>
  842. /// <param name="dsDetail">对应出勤考核扣罚明细</param>
  843. /// <param name="userInfo">当前用户信息</param>
  844. /// <returns>服务返回实体</returns>
  845. public static ServiceResultEntity AddAttendanceDetail(AttendanceDetailEntity attendanceDetailEntity, DataSet dsDetail, SUserInfo userInfo)
  846. {
  847. int RowsCount = 0;
  848. //int CopyCount = 0;
  849. IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  850. ServiceResultEntity srEntity = new ServiceResultEntity();
  851. try
  852. {
  853. oracleTrConn.Connect();
  854. StringBuilder sbSql = new StringBuilder();
  855. //获取序列ID
  856. sbSql.Clear();
  857. sbSql.Append("select SEQ_TAT_ATTENDANCE_ID.nextval from dual");
  858. int entityId = Convert.ToInt32(oracleTrConn.GetSqlResultToStr(sbSql.ToString()));
  859. sbSql.Clear();
  860. //添加出勤考核明细主体信息
  861. sbSql.Append(@"Insert into TP_TAT_AttendanceDetail
  862. (AttendanceID,JobsID,RestmMode,Monday,Tuesday,
  863. Wednesday,Thursday,Friday,Saturday,Sunday,RestDays,PunishMode,AccountID,CreateUserID,UpdateUserID)
  864. Values
  865. (:AttendanceID,:JobsID,:RestmMode,:Monday,:Tuesday,
  866. :Wednesday,:Thursday,:Friday,:Saturday,:Sunday,:RestDays,:PunishMode,:AccountID,:CreateUserID,:UpdateUserID)");
  867. OracleParameter[] WParas = new OracleParameter[] {
  868. new OracleParameter(":AttendanceID",OracleDbType.Int32,
  869. entityId,ParameterDirection.Input),
  870. new OracleParameter(":JobsID",OracleDbType.Int32,
  871. attendanceDetailEntity.JobsID,ParameterDirection.Input),
  872. new OracleParameter(":RestmMode",OracleDbType.Int32,
  873. attendanceDetailEntity.RestmMode,ParameterDirection.Input),
  874. new OracleParameter(":Monday",OracleDbType.Int32,
  875. attendanceDetailEntity.Monday,ParameterDirection.Input),
  876. new OracleParameter(":Tuesday",OracleDbType.Int32,
  877. attendanceDetailEntity.Tuesday,ParameterDirection.Input),
  878. new OracleParameter(":Wednesday",OracleDbType.Int32,
  879. attendanceDetailEntity.Wednesday,ParameterDirection.Input),
  880. new OracleParameter(":Thursday",OracleDbType.Int32,
  881. attendanceDetailEntity.Thursday,ParameterDirection.Input),
  882. new OracleParameter(":Friday",OracleDbType.Int32,
  883. attendanceDetailEntity.Friday,ParameterDirection.Input),
  884. new OracleParameter(":Saturday",OracleDbType.Int32,
  885. attendanceDetailEntity.Saturday,ParameterDirection.Input),
  886. new OracleParameter(":Sunday",OracleDbType.Int32,
  887. attendanceDetailEntity.Sunday,ParameterDirection.Input),
  888. new OracleParameter(":RestDays",OracleDbType.Decimal,
  889. attendanceDetailEntity.RestDays,ParameterDirection.Input),
  890. new OracleParameter(":PunishMode",OracleDbType.Int32,
  891. attendanceDetailEntity.PunishMode,ParameterDirection.Input),
  892. new OracleParameter(":AccountID",OracleDbType.Int32,
  893. userInfo.AccountID,ParameterDirection.Input),
  894. new OracleParameter(":CreateUserID",OracleDbType.Int32,
  895. userInfo.UserID,ParameterDirection.Input),
  896. new OracleParameter(":UpdateUserID",OracleDbType.Int32,
  897. userInfo.UserID,ParameterDirection.Input),
  898. };
  899. //连接数据库并返回结果
  900. RowsCount = oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WParas);
  901. //如果插入失败则回滚事务并关闭
  902. if (RowsCount == 0)
  903. {
  904. oracleTrConn.Rollback();
  905. oracleTrConn.Disconnect();
  906. srEntity.Status = Constant.ServiceResultStatus.ValidationFailed;
  907. srEntity.Message = string.Format(Messages.MSG_CMN_W001, "出勤考核明细", "新建");
  908. }
  909. else
  910. {
  911. oracleTrConn.Commit();
  912. oracleTrConn.Disconnect();
  913. srEntity.Status = Constant.ServiceResultStatus.Success;
  914. srEntity.Message = string.Format(Messages.MSG_CMN_I001, "出勤考核明细", "新建");
  915. }
  916. return srEntity;
  917. }
  918. catch (Exception ex)
  919. {
  920. if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
  921. {
  922. oracleTrConn.Rollback();
  923. oracleTrConn.Disconnect();
  924. }
  925. srEntity.Exception = ex;
  926. srEntity.Status = Constant.ServiceResultStatus.SystemError;
  927. return srEntity;
  928. }
  929. }
  930. /// <summary>
  931. /// 编辑出勤考核明细
  932. /// </summary>
  933. /// <param name="attendanceDetailEntity">工价实体</param>
  934. /// <param name="dsDetail">工价对应工种关系数据源</param>
  935. /// <param name="userInfo">当前用户</param>
  936. /// <returns>服务对象实体</returns>
  937. public static ServiceResultEntity EditAttendanceDetail(AttendanceDetailEntity attendanceDetailEntity, DataSet dsDetail, SUserInfo userInfo)
  938. {
  939. int RowsCount = 0;
  940. IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  941. ServiceResultEntity srEntity = new ServiceResultEntity();
  942. try
  943. {
  944. oracleTrConn.Connect();
  945. StringBuilder sbSql = new StringBuilder();
  946. sbSql.Append(@"Update TP_TAT_AttendanceDetail
  947. Set RestmMode=:RestmMode,
  948. Monday=:Monday,
  949. Tuesday=:Tuesday,
  950. Wednesday=:Wednesday,
  951. Thursday=:Thursday,
  952. Friday=:Friday,
  953. Saturday=:Saturday,
  954. Sunday=:Sunday,
  955. RestDays=:RestDays,
  956. PunishMode=:PunishMode,
  957. UpdateUserID=:UpdateUserID
  958. Where AttendanceID=:AttendanceID and JobsID=:JobsID and OPTimeStamp=:OPTimeStamp");
  959. OracleParameter[] WParas = new OracleParameter[] {
  960. new OracleParameter(":RestmMode",OracleDbType.Int32,
  961. attendanceDetailEntity.RestmMode,ParameterDirection.Input),
  962. new OracleParameter(":Monday",OracleDbType.Int32,
  963. attendanceDetailEntity.Monday,ParameterDirection.Input),
  964. new OracleParameter(":Tuesday",OracleDbType.Int32,
  965. attendanceDetailEntity.Tuesday,ParameterDirection.Input),
  966. new OracleParameter(":Wednesday",OracleDbType.Int32,
  967. attendanceDetailEntity.Wednesday,ParameterDirection.Input),
  968. new OracleParameter(":Thursday",OracleDbType.Int32,
  969. attendanceDetailEntity.Thursday,ParameterDirection.Input),
  970. new OracleParameter(":Friday",OracleDbType.Int32,
  971. attendanceDetailEntity.Friday,ParameterDirection.Input),
  972. new OracleParameter(":Saturday",OracleDbType.Int32,
  973. attendanceDetailEntity.Saturday,ParameterDirection.Input),
  974. new OracleParameter(":Sunday",OracleDbType.Int32,
  975. attendanceDetailEntity.Sunday,ParameterDirection.Input),
  976. new OracleParameter(":RestDays",OracleDbType.Decimal,
  977. attendanceDetailEntity.RestDays,ParameterDirection.Input),
  978. new OracleParameter(":PunishMode",OracleDbType.Int32,
  979. attendanceDetailEntity.PunishMode,ParameterDirection.Input),
  980. new OracleParameter(":UpdateUserID",OracleDbType.Int32,
  981. userInfo.UserID,ParameterDirection.Input),
  982. new OracleParameter(":AttendanceID",OracleDbType.Int32,
  983. attendanceDetailEntity.AttendanceID,ParameterDirection.Input),
  984. new OracleParameter(":JobsID",OracleDbType.Int32,
  985. attendanceDetailEntity.JobsID,ParameterDirection.Input),
  986. new OracleParameter(":OPTimeStamp",OracleDbType.TimeStamp,
  987. attendanceDetailEntity.OPTimeStamp,ParameterDirection.Input),
  988. };
  989. //连接数据库并返回结果
  990. RowsCount = oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WParas);
  991. //并更新对应扣罚明细
  992. if (attendanceDetailEntity.CopyId == 0)
  993. {
  994. EditAttFinesRules(Convert.ToInt32(attendanceDetailEntity.AttendanceID), Convert.ToInt32(attendanceDetailEntity.JobsID), dsDetail, userInfo, oracleTrConn);
  995. }
  996. //如果插入失败则回滚事务并关闭
  997. if (RowsCount == 0)
  998. {
  999. oracleTrConn.Rollback();
  1000. oracleTrConn.Disconnect();
  1001. srEntity.Status = Constant.ServiceResultStatus.DataChanged;
  1002. srEntity.Message = string.Format(Messages.MSG_CMN_W001, "出勤考核明细", "修改");
  1003. }
  1004. else
  1005. {
  1006. oracleTrConn.Commit();
  1007. oracleTrConn.Disconnect();
  1008. srEntity.Status = Constant.ServiceResultStatus.Success;
  1009. srEntity.Message = string.Format(Messages.MSG_CMN_I001, "出勤考核明细", "修改");
  1010. }
  1011. return srEntity;
  1012. }
  1013. catch (Exception ex)
  1014. {
  1015. if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
  1016. {
  1017. oracleTrConn.Rollback();
  1018. oracleTrConn.Disconnect();
  1019. }
  1020. srEntity.Exception = ex;
  1021. srEntity.Status = Constant.ServiceResultStatus.SystemError;
  1022. return srEntity;
  1023. }
  1024. }
  1025. /// <summary>
  1026. /// 编辑出勤考核明细对应扣罚
  1027. /// </summary>
  1028. /// <param name="AttendanceID">出勤考核ID</param>
  1029. /// <param name="dsDetail">对应工种数据源</param>
  1030. /// <param name="userInfo">当前用户</param>
  1031. /// <param name="oracleTrConn">事务链接</param>
  1032. /// <returns>服务对象实体</returns>
  1033. public static ServiceResultEntity EditAttFinesRules(int AttendanceID,int JobsID, DataSet dsDetail, SUserInfo userInfo,
  1034. IDBTransaction oracleTrConn)
  1035. {
  1036. int RowsCount = 0;
  1037. bool ConnIsNew = false;
  1038. //如果链接为空,则新建链接
  1039. if (oracleTrConn == null)
  1040. {
  1041. oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  1042. ConnIsNew = true;
  1043. }
  1044. ServiceResultEntity srEntity = new ServiceResultEntity();
  1045. StringBuilder sbSql = new StringBuilder();
  1046. try
  1047. {
  1048. //如果是新链接,需要打开事务
  1049. if (ConnIsNew == true)
  1050. {
  1051. oracleTrConn.Connect();
  1052. }
  1053. DataTable dtDetail = dsDetail.Tables[0];
  1054. foreach (DataRow drFor in dtDetail.Rows)
  1055. {
  1056. //dsDetail.Tables[0].RejectChanges();
  1057. if (drFor.RowState == DataRowState.Added) //添加
  1058. {
  1059. sbSql.Clear();
  1060. sbSql.Append(@"Insert into TP_TAT_AttFinesRules(AttendanceID,JobsID,BeginAbsentDays,
  1061. EndAbsentDays,PunishAmount,AccountID,
  1062. CreateUserID,UpdateUserID)
  1063. Values(:AttendanceID,:JobsID,:BeginAbsentDays,:EndAbsentDays,
  1064. :PunishAmount,:AccountID,
  1065. :CreateUserID,:UpdateUserID)");
  1066. OracleParameter[] InsertParas = new OracleParameter[] {
  1067. new OracleParameter(":AttendanceID",OracleDbType.Int32,
  1068. AttendanceID,ParameterDirection.Input),
  1069. new OracleParameter(":JobsID",OracleDbType.Int32,
  1070. JobsID,ParameterDirection.Input),
  1071. new OracleParameter(":BeginAbsentDays",OracleDbType.Decimal,
  1072. drFor["BeginAbsentDays"],ParameterDirection.Input),
  1073. new OracleParameter(":EndAbsentDays",OracleDbType.Decimal,
  1074. drFor["EndAbsentDays"],ParameterDirection.Input),
  1075. new OracleParameter(":PunishAmount",OracleDbType.Decimal,
  1076. drFor["PunishAmount"],ParameterDirection.Input),
  1077. new OracleParameter(":AccountID",OracleDbType.Int32,
  1078. userInfo.AccountID,ParameterDirection.Input),
  1079. new OracleParameter(":CreateUserID",OracleDbType.Int32,
  1080. userInfo.UserID,ParameterDirection.Input),
  1081. new OracleParameter(":UpdateUserID",OracleDbType.Int32,
  1082. userInfo.UserID,ParameterDirection.Input)
  1083. };
  1084. RowsCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), InsertParas);
  1085. }
  1086. else if (drFor.RowState == DataRowState.Modified) //修改
  1087. {
  1088. sbSql.Clear();
  1089. sbSql.Append(@"Update TP_TAT_AttFinesRules
  1090. Set BeginAbsentDays=:BeginAbsentDays,
  1091. EndAbsentDays=:EndAbsentDays,
  1092. PunishAmount=:PunishAmount,
  1093. UpdateUserID=:UpdateUserID
  1094. Where AttendanceID=:AttendanceID and JobsID=:JobsID and FinesRulesID=:FinesRulesID");
  1095. OracleParameter[] UpdateParas = new OracleParameter[] {
  1096. new OracleParameter(":BeginAbsentDays",OracleDbType.Decimal,
  1097. drFor["BeginAbsentDays"],ParameterDirection.Input),
  1098. new OracleParameter(":EndAbsentDays",OracleDbType.Decimal,
  1099. drFor["EndAbsentDays"],ParameterDirection.Input),
  1100. new OracleParameter(":PunishAmount",OracleDbType.Decimal,
  1101. drFor["PunishAmount"],ParameterDirection.Input),
  1102. new OracleParameter(":UpdateUserID",OracleDbType.Int32,
  1103. userInfo.UserID,ParameterDirection.Input),
  1104. new OracleParameter(":AttendanceID",OracleDbType.Int32,
  1105. AttendanceID,ParameterDirection.Input),
  1106. new OracleParameter(":JobsID",OracleDbType.Int32,
  1107. JobsID,ParameterDirection.Input),
  1108. new OracleParameter(":FinesRulesID",OracleDbType.Int32,
  1109. drFor["FinesRulesID"],ParameterDirection.Input),
  1110. };
  1111. RowsCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), UpdateParas);
  1112. }
  1113. else if (drFor.RowState == DataRowState.Deleted) //删除
  1114. {
  1115. drFor.RejectChanges();
  1116. sbSql.Clear();
  1117. sbSql.Append(@"Delete from TP_TAT_AttFinesRules
  1118. Where AttendanceID=:AttendanceID and JobsID=:JobsID and FinesRulesID=:FinesRulesID");
  1119. OracleParameter[] DeleteParas = new OracleParameter[] {
  1120. new OracleParameter(":AttendanceID",OracleDbType.Int32,
  1121. AttendanceID,ParameterDirection.Input),
  1122. new OracleParameter(":JobsID",OracleDbType.Int32,
  1123. JobsID,ParameterDirection.Input),
  1124. new OracleParameter(":FinesRulesID",OracleDbType.Int32,
  1125. drFor["FinesRulesID"],ParameterDirection.Input),
  1126. };
  1127. RowsCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), DeleteParas);
  1128. sbSql.Clear();
  1129. }
  1130. }
  1131. //不是新链接的情况下,直接Return出去
  1132. if (ConnIsNew == false)
  1133. {
  1134. return srEntity;
  1135. }
  1136. //新链接的情况下,如果插入失败则回滚事务并关闭
  1137. if (ConnIsNew == true && RowsCount == 0)
  1138. {
  1139. oracleTrConn.Rollback();
  1140. oracleTrConn.Disconnect();
  1141. srEntity.Status = Constant.ServiceResultStatus.ValidationFailed;
  1142. srEntity.Message = string.Format(Messages.MSG_CMN_W001, "出勤考核明细", "新建");
  1143. }
  1144. else
  1145. {
  1146. oracleTrConn.Commit();
  1147. oracleTrConn.Disconnect();
  1148. srEntity.Status = Constant.ServiceResultStatus.Success;
  1149. srEntity.Message = string.Format(Messages.MSG_CMN_I001, "出勤考核明细", "新建");
  1150. }
  1151. return srEntity;
  1152. }
  1153. catch (Exception ex)
  1154. {
  1155. throw ex;
  1156. }
  1157. }
  1158. #endregion
  1159. }
  1160. }