/*******************************************************************************
* Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
* 类的信息:
* 1.程序名称:TATModuleLogicDAL.cs
* 2.功能描述:策略管理数据库访问类(插入、修改、删除)
* 编辑履历:
* 作者 日期 版本 修改内容
* 庄天威 2014/11/18 1.00 新建
*******************************************************************************/
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using Dongke.IBOSS.PRD.Basics.BaseResources;
using Dongke.IBOSS.PRD.Basics.DataAccess;
using Dongke.IBOSS.PRD.Basics.Library;
using Dongke.IBOSS.PRD.Service.DataModels;
using Dongke.IBOSS.PRD.WCF.DataModels;
using Dongke.IBOSS.PRD.Service.CommonModuleLogic;
using Oracle.DataAccess.Client;
using System.Text;
namespace Dongke.IBOSS.PRD.Service.TATModuleLogic
{
///
/// 策略管理数据库访问类(插入、修改、删除)
///
public partial class TATModuleLogicDAL
{
#region 管理岗位工资策略
///
/// 新建管理岗位工资策略
///
/// 新建实体
/// 对应管理者明细
/// 当前用户信息
/// 服务返回实体
public static ServiceResultEntity AddManagerSalary(ManagerSalaryEntity msEntity, DataSet dsDetail, SUserInfo userInfo)
{
int RowsCount = 0;
int CopyCount = 0;
IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
ServiceResultEntity srEntity = new ServiceResultEntity();
try
{
oracleTrConn.Connect();
StringBuilder sbSql = new StringBuilder();
//获取序列ID
sbSql.Clear();
sbSql.Append("select SEQ_TAT_ManagerSalary_ID.nextval from dual");
int entityId = Convert.ToInt32(oracleTrConn.GetSqlResultToStr(sbSql.ToString()));
sbSql.Clear();
//添加管理岗位工资策略主体信息
sbSql.Append(@"Insert into TP_TAT_ManagerSalary
(ManagerSalaryID,ManagerSalaryName,BeginAccountMonth,Remarks,
AuditStatus,AccountID,CreateUserID,UpdateUserID)
Values
(:ManagerSalaryID,:ManagerSalaryName,:BeginAccountMonth,:Remarks,
:AuditStatus,:AccountID,:CreateUserID,:UpdateUserID)");
OracleParameter[] WParas = new OracleParameter[] {
new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
entityId,ParameterDirection.Input),
new OracleParameter(":ManagerSalaryName",OracleDbType.NVarchar2,
msEntity.ManagerSalaryName,ParameterDirection.Input),
new OracleParameter(":BeginAccountMonth",OracleDbType.Date,
msEntity.BeginAccountMonth,ParameterDirection.Input),
new OracleParameter(":Remarks",OracleDbType.NVarchar2,
msEntity.Remarks,ParameterDirection.Input),
new OracleParameter(":AuditStatus",OracleDbType.Int32,
msEntity.AuditStatus,ParameterDirection.Input),
new OracleParameter(":AccountID",OracleDbType.Int32,
userInfo.AccountID,ParameterDirection.Input),
new OracleParameter(":CreateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
new OracleParameter(":UpdateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
};
//连接数据库并返回结果
RowsCount = oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WParas);
//正常添加的情况,要同时插入管理者信息
if (msEntity.CopyId == 0)
{
EditManagers(entityId, dsDetail, userInfo, oracleTrConn);
}
//如果是复制添加,那么还要将复制主体信息的明细全部添加
else
{
sbSql.Clear();
//首先获取要Copy的全部管理者信息查出
sbSql.Append("Select * from TP_TAT_Managers Where ManagerSalaryID=:MID");
OracleParameter[] MemberParas = new OracleParameter[]{
new OracleParameter(":MID",OracleDbType.Int32,
msEntity.CopyId,ParameterDirection.Input)
};
DataTable drManagers = oracleTrConn.GetSqlResultToDt(sbSql.ToString(), MemberParas);
foreach(DataRow drFor in drManagers.Rows)
{
//录入需要Copy的管理者信息并获取ID
//获取序列ID
sbSql.Clear();
sbSql.Append("select SEQ_TAT_Managers_ManagersID.nextval from dual");
int managerId = Convert.ToInt32(oracleTrConn.GetSqlResultToStr(sbSql.ToString()));
//插入被复制的信息
sbSql.Clear();
sbSql.Append(@"Insert into TP_TAT_Managers
(ManagersID,ManagerSalaryID,Manager,SalaryType,SalaryPercent,
AccountID,CreateUserID,UpdateUserID)
Values
(:ManagersID,:ManagerSalaryID,:Manager,:SalaryType,:SalaryPercent,
:AccountID,:CreateUserID,:UpdateUserID)");
OracleParameter[] CMParas = new OracleParameter[] {
new OracleParameter(":ManagersID",OracleDbType.Int32,
managerId,ParameterDirection.Input),
new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
entityId,ParameterDirection.Input),
new OracleParameter(":Manager",OracleDbType.Int32,
drFor["Manager"],ParameterDirection.Input),
new OracleParameter(":SalaryType",OracleDbType.Int32,
drFor["SalaryType"],ParameterDirection.Input),
new OracleParameter(":SalaryPercent",OracleDbType.Decimal,
drFor["SalaryPercent"],ParameterDirection.Input),
new OracleParameter(":AccountID",OracleDbType.Int32,
userInfo.AccountID,ParameterDirection.Input),
new OracleParameter(":CreateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
new OracleParameter(":UpdateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
};
CopyCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), CMParas);
//Copy明细 :ManagersID为新序列ID,ForManagersID为Copy信息ID
sbSql.Clear();
sbSql.Append(@"Insert into TP_TAT_Members
(ManagersID,ManagerSalaryID,Member,AccountID,CreateUserID,UpdateUserID)
Select :ManagersID,:ManagerSalaryID,Member,AccountID,:CreateUserID,:UpdateUserID
From TP_TAT_Members Where ManagersID=:ForManagersID");
OracleParameter[] CMemParas = new OracleParameter[] {
new OracleParameter(":ManagersID",OracleDbType.Int32,
managerId,ParameterDirection.Input),
new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
entityId,ParameterDirection.Input),
new OracleParameter(":CreateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
new OracleParameter(":UpdateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
new OracleParameter(":ForManagersID",OracleDbType.Int32,
drFor["ManagersID"],ParameterDirection.Input),
};
CopyCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), CMemParas);
}
}
//如果插入失败则回滚事务并关闭
if (RowsCount == 0)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.ValidationFailed;
srEntity.Message = string.Format(Messages.MSG_CMN_W001, "管理岗位工资策略", "新建");
}
else
{
oracleTrConn.Commit();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.Success;
srEntity.Message = string.Format(Messages.MSG_CMN_I001, "管理岗位工资策略", "新建");
}
return srEntity;
}
catch (Exception ex)
{
if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
}
srEntity.Exception = ex;
srEntity.Status = Constant.ServiceResultStatus.SystemError;
return srEntity;
}
}
///
/// 编辑管理岗位工资策略
///
/// 策略实体
/// 明细数据源
/// 当前用户
/// 服务对象实体
public static ServiceResultEntity EditManagerSalary(ManagerSalaryEntity msEntity, DataSet dsDetail, SUserInfo userInfo)
{
int RowsCount = 0;
IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
ServiceResultEntity srEntity = new ServiceResultEntity();
try
{
oracleTrConn.Connect();
StringBuilder sbSql = new StringBuilder();
sbSql.Append(@"Update TP_TAT_ManagerSalary
Set ManagerSalaryName=:ManagerSalaryName,
BeginAccountMonth=:BeginAccountMonth,
Remarks=:Remarks,
UpdateUserID=:UpdateUserID
Where ManagerSalaryID=:ManagerSalaryID and OPTimeStamp=:OPTimeStamp");
OracleParameter[] WParas = new OracleParameter[] {
new OracleParameter(":ManagerSalaryName",OracleDbType.NVarchar2,
msEntity.ManagerSalaryName,ParameterDirection.Input),
new OracleParameter(":BeginAccountMonth",OracleDbType.Date,
msEntity.BeginAccountMonth,ParameterDirection.Input),
new OracleParameter(":Remarks",OracleDbType.NVarchar2,
msEntity.Remarks,ParameterDirection.Input),
new OracleParameter(":UpdateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
msEntity.ManagerSalaryID,ParameterDirection.Input),
new OracleParameter(":OPTimeStamp",OracleDbType.TimeStamp,
msEntity.OPTimeStamp,ParameterDirection.Input),
};
//连接数据库并返回结果
RowsCount = oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WParas);
//并更新对应工种明细
EditManagers(Convert.ToInt32(msEntity.ManagerSalaryID), dsDetail, userInfo, oracleTrConn);
//如果插入失败则回滚事务并关闭
if (RowsCount == 0)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.DataChanged;
srEntity.Message = string.Format(Messages.MSG_CMN_W001, "管理岗位工资策略", "修改");
}
else
{
oracleTrConn.Commit();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.Success;
srEntity.Message = string.Format(Messages.MSG_CMN_I001, "管理岗位工资策略", "修改");
}
return srEntity;
}
catch (Exception ex)
{
if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
}
srEntity.Exception = ex;
srEntity.Status = Constant.ServiceResultStatus.SystemError;
return srEntity;
}
}
///
/// 审批管理岗位工资策略
///
/// 策略实体
/// 当前用户
///
/// 返回受影响行数
/// -999为策略开始月小于系统结算月,
/// -998为存在同类别同开始日期策略.
///
public static ServiceResultEntity AuditManagerSalary(ManagerSalaryEntity msEntity, SUserInfo userInfo)
{
int RowCount = 0;
IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
ServiceResultEntity srEntity = new ServiceResultEntity();
try
{
oracleTrConn.Connect();
//首先验证即将通过审批的实体的数据合法性
if (msEntity.AuditStatus == Convert.ToInt32(Constant.AuditStatus.Agree))
{
RowCount = ValidationManagerSalary(oracleTrConn, msEntity, userInfo);
if (RowCount != 0)
{
srEntity.Status = Constant.ServiceResultStatus.Other;
srEntity.OtherStatus = RowCount;
if (RowCount == -999)
{
srEntity.Message = "策略开始月不能小于系统结算月!";
}
else if (RowCount == -998)
{
srEntity.Message = "已存在相同开始日期的该类型策略!";
}
return srEntity;
}
}
// 获得账务日期
DateTime accountDate = CommonModuleLogic.CommonModuleLogic.GetAccountDate(oracleTrConn, userInfo);
//审批缺陷扣罚策略主体信息
StringBuilder sbSql = new StringBuilder();
sbSql.Append(@"Update TP_TAT_ManagerSalary
Set AuditStatus=:AuditStatus,
Auditor=:Auditor,
AuditlDate=:AuditlDate
Where ManagerSalaryID=:ManagerSalaryID
And OPTimeStamp=:OPTimeStamp");
OracleParameter[] WParas = new OracleParameter[] {
new OracleParameter(":AuditStatus",OracleDbType.Int32,
msEntity.AuditStatus,ParameterDirection.Input),
new OracleParameter(":Auditor",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
new OracleParameter(":AuditlDate",OracleDbType.Date,
accountDate,ParameterDirection.Input),
new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
msEntity.ManagerSalaryID,ParameterDirection.Input),
new OracleParameter(":OPTimeStamp",OracleDbType.TimeStamp,
msEntity.OPTimeStamp,ParameterDirection.Input),
};
//连接数据库并返回结果
RowCount = oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WParas);
//如果插入失败则回滚事务并关闭
if (RowCount == 0)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.DataChanged;
srEntity.Message = string.Format(Messages.MSG_CMN_W001, "管理岗位工资策略", "审批");
}
else
{
oracleTrConn.Commit();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.Success;
srEntity.Message = string.Format(Messages.MSG_CMN_I001, "管理岗位工资策略", "审批");
}
return srEntity;
}
catch (Exception ex)
{
if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
}
srEntity.Exception = ex;
srEntity.Status = Constant.ServiceResultStatus.SystemError;
return srEntity;
}
}
///
/// 停用管理岗位工资策略
///
/// 停用实体
/// 当前用户信息
/// 返回影响行
public static ServiceResultEntity StopManagerSalary(ManagerSalaryEntity msEntity, SUserInfo userInfo)
{
int RowCount = 0;
IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
ServiceResultEntity srEntity = new ServiceResultEntity();
try
{
oracleTrConn.Connect();
// 获得账务日期
DateTime accountDate = CommonModuleLogic.CommonModuleLogic.GetAccountDate(oracleTrConn, userInfo);
//停用管理岗位工资策略主体信息
StringBuilder sbSql = new StringBuilder();
sbSql.Append(@"Update TP_TAT_ManagerSalary
Set ValueFlag = 0
Where ManagerSalaryID=:ManagerSalaryID
And OPTimeStamp=:OPTimeStamp");
OracleParameter[] WParas = new OracleParameter[] {
new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
msEntity.ManagerSalaryID,ParameterDirection.Input),
new OracleParameter(":OPTimeStamp",OracleDbType.TimeStamp,
msEntity.OPTimeStamp,ParameterDirection.Input),
};
//连接数据库并返回结果
RowCount = oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WParas);
if (RowCount == 0) //时间戳不对
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.DataChanged;
srEntity.Message = string.Format(Messages.MSG_CMN_W001, "管理岗位工资策略", "停用");
return srEntity;
}
//停用管理岗位工资策略组员明细
sbSql.Clear();
sbSql.Append(@"Delete from TP_TAT_Members
Where ManagerSalaryID = :ManagerSalaryID");
OracleParameter[] WDParas = new OracleParameter[] {
new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
msEntity.ManagerSalaryID,ParameterDirection.Input)
};
RowCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WDParas);
//停用管理岗位工资策略管理者明细
sbSql.Clear();
sbSql.Append(@"Delete from TP_TAT_Managers
Where ManagerSalaryID = :ManagerSalaryID");
OracleParameter[] WGDParas = new OracleParameter[] {
new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
msEntity.ManagerSalaryID,ParameterDirection.Input)
};
RowCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WGDParas);
oracleTrConn.Commit();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.Success;
srEntity.Message = string.Format(Messages.MSG_CMN_I001, "管理岗位工资策略", "停用");
return srEntity;
}
catch (Exception ex)
{
if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
}
srEntity.Exception = ex;
srEntity.Status = Constant.ServiceResultStatus.SystemError;
return srEntity;
}
}
///
/// 验证数据有效性(是否可新建或编辑)
///
/// 数据库事务连接
/// 当前操作实体
/// 当前用户
///
/// 0为可进行相应操作
/// -999为策略开始月小于系统结算月,
/// -998为存在同类别同开始日期策略.
///
public static int ValidationManagerSalary(IDBTransaction trConn,
ManagerSalaryEntity msEntity, SUserInfo userInfo)
{
try
{
StringBuilder sbSql = new StringBuilder();
//条件一:策略开始月不得小于已结算月份(SystemDateType=5代表结算月日期)
sbSql.Append(@"Select * from TP_MST_SystemDate
Where SystemDateType = 5
and DateValue >= :BeginAccountMonth");
OracleParameter[] CSParas = new OracleParameter[] {
new OracleParameter(":BeginAccountMonth",OracleDbType.Date,
msEntity.BeginAccountMonth,ParameterDirection.Input)
};
DataTable dtCheckSys = trConn.GetSqlResultToDt(sbSql.ToString(), CSParas);
if (dtCheckSys.Rows.Count != 0) //如果当前结算月大于新建策略日期,False
{
return -999;
}
sbSql.Clear();
//条件二:不可存在同开始日期的已审批策略
sbSql.Append(@"Select * from TP_TAT_ManagerSalary
Where BeginAccountMonth = :BeginAccountMonth
and AccountID=:AccountID
and AuditStatus = 1
and ValueFlag = 1");
OracleParameter[] CWParas = new OracleParameter[] {
new OracleParameter(":BeginAccountMonth",OracleDbType.Date,
msEntity.BeginAccountMonth,ParameterDirection.Input),
new OracleParameter(":AccountID",OracleDbType.Int32,
userInfo.AccountID,ParameterDirection.Input),
};
DataTable dtCheckDef = trConn.GetSqlResultToDt(sbSql.ToString(), CWParas);
if (dtCheckDef.Rows.Count != 0) //如果存在同类别同开始日期策略,False
{
return -998;
}
//符合以上条件方可通过验证
return 0;
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 编辑管理岗位人员明细
///
/// 策略ID
/// 管理岗位人员数据源
/// 当前用户
/// 事务链接
/// 服务对象实体
public static ServiceResultEntity EditManagers(int ManagerSalaryID, DataSet dsDetail, SUserInfo userInfo,
IDBTransaction oracleTrConn)
{
int RowsCount = 0;
bool ConnIsNew = false;
//如果链接为空,则新建链接
if (oracleTrConn == null)
{
oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
ConnIsNew = true;
}
ServiceResultEntity srEntity = new ServiceResultEntity();
StringBuilder sbSql = new StringBuilder();
try
{
//如果是新链接,需要打开事务
if (ConnIsNew == true)
{
oracleTrConn.Connect();
}
//首先验证管理者人员唯一性
String isHaveName = ValidationManagers(oracleTrConn, ManagerSalaryID, dsDetail);
if(isHaveName != string.Empty)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.Other;
srEntity.Message = isHaveName + "已经是其他组内成员,不可设置为管理者.";
return srEntity;
}
DataTable dtDetail = dsDetail.Tables[0];
foreach (DataRow drFor in dtDetail.Rows)
{
if (drFor.RowState == DataRowState.Added) //添加
{
if (drFor["StaffID"] == DBNull.Value)
{
continue;
}
//获取序列ID
sbSql.Clear();
sbSql.Append("select SEQ_TAT_Managers_ManagersID.nextval from dual");
int managerId = Convert.ToInt32(oracleTrConn.GetSqlResultToStr(sbSql.ToString()));
//插入被复制的信息
sbSql.Clear();
sbSql.Append(@"Insert into TP_TAT_Managers
(ManagersID,ManagerSalaryID,Manager,SalaryType,SalaryPercent,
AccountID,CreateUserID,UpdateUserID)
Values
(:ManagersID,:ManagerSalaryID,:Manager,:SalaryType,:SalaryPercent,
:AccountID,:CreateUserID,:UpdateUserID)");
OracleParameter[] CMParas = new OracleParameter[] {
new OracleParameter(":ManagersID",OracleDbType.Int32,
managerId,ParameterDirection.Input),
new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
ManagerSalaryID,ParameterDirection.Input),
new OracleParameter(":Manager",OracleDbType.Int32,
drFor["StaffID"],ParameterDirection.Input),
new OracleParameter(":SalaryType",OracleDbType.Int32,
drFor["SalaryType"],ParameterDirection.Input),
new OracleParameter(":SalaryPercent",OracleDbType.Decimal,
drFor["SalaryPercent"],ParameterDirection.Input),
new OracleParameter(":AccountID",OracleDbType.Int32,
userInfo.AccountID,ParameterDirection.Input),
new OracleParameter(":CreateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
new OracleParameter(":UpdateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
};
RowsCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), CMParas);
}
else if (drFor.RowState == DataRowState.Modified) //修改
{
sbSql.Clear();
sbSql.Append(@"Update TP_TAT_Managers
Set SalaryType=:SalaryType,
SalaryPercent=:SalaryPercent,
UpdateUserID=:UpdateUserID
Where ManagersID=:ManagersID");
OracleParameter[] UpdateParas = new OracleParameter[] {
new OracleParameter(":SalaryType",OracleDbType.Int32,
drFor["SalaryType"],ParameterDirection.Input),
new OracleParameter(":SalaryPercent",OracleDbType.Int32,
drFor["SalaryPercent"],ParameterDirection.Input),
new OracleParameter(":UpdateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
new OracleParameter(":ManagersID",OracleDbType.Int32,
drFor["ManagersID"],ParameterDirection.Input)
};
RowsCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), UpdateParas);
}
else if (drFor.RowState == DataRowState.Deleted) //删除
{
sbSql.Clear();
//首先删除明细(组内成员)
sbSql.Append(@"Delete from TP_TAT_Members
Where ManagersID=:ManagersID");
OracleParameter[] DeleteParas = new OracleParameter[] {
new OracleParameter(":ManagersID",OracleDbType.Int32,
drFor["ManagersID",DataRowVersion.Original],ParameterDirection.Input)
};
RowsCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), DeleteParas);
sbSql.Clear();
sbSql.Append(@"Delete from TP_TAT_Managers
Where ManagersID=:ManagersID");
RowsCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), DeleteParas);
}
}
//不是新链接的情况下,直接Return出去
if (ConnIsNew == false)
{
return srEntity;
}
//新链接的情况下,如果插入失败则回滚事务并关闭
if (ConnIsNew == true && RowsCount == 0)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.ValidationFailed;
srEntity.Message = string.Format(Messages.MSG_CMN_W001, "管理岗位工资策略", "新建");
}
else
{
oracleTrConn.Commit();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.Success;
srEntity.Message = string.Format(Messages.MSG_CMN_I001, "管理岗位工资策略", "新建");
}
return srEntity;
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 编辑管理组内成员明细
///
/// 管理岗位人员ID
/// 数据源
/// 当前用户
/// 服务返回实体
public static ServiceResultEntity EditMembers(int ManagerSalaryID,int ManagersID, DataSet dsDetail, SUserInfo userInfo)
{
int RowCount = 0;
IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
ServiceResultEntity srEntity = new ServiceResultEntity();
StringBuilder sbSql = new StringBuilder();
try
{
oracleTrConn.Connect();
//首先验证是否有重复人员
string isHaveName = ValidationMembers(oracleTrConn, ManagerSalaryID, dsDetail);
if(isHaveName != string.Empty)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.Other;
srEntity.Message = isHaveName + "已经是管理者,不可加入其他组内.";
return srEntity;
}
//如果可通过验证再进行操作
DataTable dtDetail = dsDetail.Tables[0];
foreach (DataRow drFor in dtDetail.Rows)
{
if (drFor.RowState == DataRowState.Added) //添加
{
if (drFor["StaffID"] == DBNull.Value)
{
continue;
}
sbSql.Clear();
sbSql.Append(@"Insert into TP_TAT_Members
(ManagersID,ManagerSalaryID,Member,AccountID,CreateUserID,UpdateUserID)
Values
(:ManagersID,:ManagerSalaryID,:Member,:AccountID,:CreateUserID,:UpdateUserID)");
OracleParameter[] InsertParas = new OracleParameter[] {
new OracleParameter(":ManagersID",OracleDbType.Int32,
ManagersID,ParameterDirection.Input),
new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
ManagerSalaryID,ParameterDirection.Input),
new OracleParameter(":Member",OracleDbType.Int32,
drFor["StaffID"],ParameterDirection.Input),
new OracleParameter(":AccountID",OracleDbType.Int32,
userInfo.AccountID,ParameterDirection.Input),
new OracleParameter(":CreateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
new OracleParameter(":UpdateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input)
};
RowCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), InsertParas);
}
else if (drFor.RowState == DataRowState.Deleted) //删除
{
sbSql.Clear();
sbSql.Append(@"Delete from TP_TAT_Members
Where ManagersID=:ManagersID and Member=:Member");
OracleParameter[] DeleteParas = new OracleParameter[] {
new OracleParameter(":ManagersID",OracleDbType.Int32,
ManagersID,ParameterDirection.Input),
new OracleParameter(":Member",OracleDbType.Int32,
drFor["StaffId",DataRowVersion.Original],ParameterDirection.Input)
};
RowCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), DeleteParas);
}
}
if (RowCount == 0)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.ValidationFailed;
srEntity.Message = string.Format(Messages.MSG_CMN_W001, "管理组内成员", "编辑");
}
else
{
oracleTrConn.Commit();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.Success;
srEntity.Message = string.Format(Messages.MSG_CMN_I001, "管理组内成员", "编辑");
}
return srEntity;
}
catch (Exception ex)
{
if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
}
srEntity.Exception = ex;
srEntity.Status = Constant.ServiceResultStatus.SystemError;
return srEntity;
}
}
///
/// 验证插入人员唯一性(管理者)
///
/// 数据库连接
/// 管理岗位工资策略ID
/// 即将插入的管理者
/// 重复的管理者姓名
private static string ValidationManagers(IDBTransaction trConn,int ManagerSalaryID,DataSet dsManagers)
{
try
{
string strManagersId = string.Empty;
StringBuilder sbManagersId = new StringBuilder();
//获取即将插入的管理者员工ID字符串组
DataTable dtSourse = dsManagers.Tables[0];
foreach (DataRow drFor in dtSourse.Rows)
{
if (drFor.RowState == DataRowState.Added)
{
if (drFor["StaffID"] == DBNull.Value)
{
continue;
}
sbManagersId.Append(Convert.ToInt32(drFor["StaffID"]) + ",");
}
}
if (sbManagersId.Length != 0)
{
//查询组员表中是否有这些即将插入的管理者
strManagersId = sbManagersId.ToString().Substring(0, sbManagersId.Length - 1);
string strSql = @"Select StaffName from TP_TAT_Members
Inner join TP_HR_STAFF
on TP_TAT_Members.Member = TP_HR_STAFF.StaffID
Where ManagerSalaryID=:ManagerSalaryID
And Member in (" + strManagersId + ")";
OracleParameter[] ValidationParas = new OracleParameter[] {
new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
ManagerSalaryID,ParameterDirection.Input)
};
DataTable dtIsHave = trConn.GetSqlResultToDt(strSql, ValidationParas);
//遍历获取存在重复的员工姓名
StringBuilder sbStaffName = new StringBuilder();
foreach (DataRow drFor in dtIsHave.Rows)
{
sbStaffName.Append(drFor["StaffName"].ToString() + ",");
}
//如果存在,返回姓名字符串数组,不存在,返回空
if(sbStaffName.Length >0)
{
return sbStaffName.ToString().Substring(0, sbStaffName.Length - 1);
}
else
{
return string.Empty;
}
}
return string.Empty;
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 验证插入人员唯一性(组内人员)
///
/// 数据库连接
/// 管理岗位工资策略ID
/// 即将插入的组内人员
/// 重复的组内成员姓名
private static string ValidationMembers(IDBTransaction trConn, int ManagerSalaryID, DataSet dsMember)
{
try
{
string strMembersId = string.Empty;
StringBuilder sbMemberId = new StringBuilder();
//获取即将插入的组内成员员工ID字符串组
DataTable dtSourse = dsMember.Tables[0];
foreach (DataRow drFor in dtSourse.Rows)
{
if (drFor.RowState == DataRowState.Added)
{
if (drFor["StaffID"] == DBNull.Value)
{
continue;
}
sbMemberId.Append(Convert.ToInt32(drFor["StaffID"]) + ",");
}
}
if (sbMemberId.Length != 0)
{
//查询管理者表中是否有这些即将插入的组内成员
strMembersId = sbMemberId.ToString().Substring(0, sbMemberId.Length - 1);
string strSql = @"Select StaffName from TP_TAT_Managers
Inner join TP_HR_STAFF
on TP_TAT_Managers.Manager = TP_HR_STAFF.StaffID
Where ManagerSalaryID=:ManagerSalaryID
And Manager in (" + strMembersId + ")";
OracleParameter[] ValidationParas = new OracleParameter[] {
new OracleParameter(":ManagerSalaryID",OracleDbType.Int32,
ManagerSalaryID,ParameterDirection.Input)
};
DataTable dtIsHave = trConn.GetSqlResultToDt(strSql, ValidationParas);
//遍历获取存在重复的员工姓名
StringBuilder sbStaffName = new StringBuilder();
foreach (DataRow drFor in dtIsHave.Rows)
{
sbStaffName.Append(drFor["StaffName"].ToString() + ",");
}
//如果存在,返回姓名字符串数组,不存在,返回空
if (sbStaffName.Length > 0)
{
return sbStaffName.ToString().Substring(0, sbStaffName.Length - 1);
}
else
{
return string.Empty;
}
}
return string.Empty;
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#region 出勤考核明细
///
/// 新建出勤考核明细
///
/// 新建实体
/// 对应出勤考核扣罚明细
/// 当前用户信息
/// 服务返回实体
public static ServiceResultEntity AddAttendanceDetail(AttendanceDetailEntity attendanceDetailEntity, DataSet dsDetail, SUserInfo userInfo)
{
int RowsCount = 0;
//int CopyCount = 0;
IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
ServiceResultEntity srEntity = new ServiceResultEntity();
try
{
oracleTrConn.Connect();
StringBuilder sbSql = new StringBuilder();
//获取序列ID
sbSql.Clear();
sbSql.Append("select SEQ_TAT_ATTENDANCE_ID.nextval from dual");
int entityId = Convert.ToInt32(oracleTrConn.GetSqlResultToStr(sbSql.ToString()));
sbSql.Clear();
//添加出勤考核明细主体信息
sbSql.Append(@"Insert into TP_TAT_AttendanceDetail
(AttendanceID,JobsID,RestmMode,Monday,Tuesday,
Wednesday,Thursday,Friday,Saturday,Sunday,RestDays,PunishMode,AccountID,CreateUserID,UpdateUserID)
Values
(:AttendanceID,:JobsID,:RestmMode,:Monday,:Tuesday,
:Wednesday,:Thursday,:Friday,:Saturday,:Sunday,:RestDays,:PunishMode,:AccountID,:CreateUserID,:UpdateUserID)");
OracleParameter[] WParas = new OracleParameter[] {
new OracleParameter(":AttendanceID",OracleDbType.Int32,
entityId,ParameterDirection.Input),
new OracleParameter(":JobsID",OracleDbType.Int32,
attendanceDetailEntity.JobsID,ParameterDirection.Input),
new OracleParameter(":RestmMode",OracleDbType.Int32,
attendanceDetailEntity.RestmMode,ParameterDirection.Input),
new OracleParameter(":Monday",OracleDbType.Int32,
attendanceDetailEntity.Monday,ParameterDirection.Input),
new OracleParameter(":Tuesday",OracleDbType.Int32,
attendanceDetailEntity.Tuesday,ParameterDirection.Input),
new OracleParameter(":Wednesday",OracleDbType.Int32,
attendanceDetailEntity.Wednesday,ParameterDirection.Input),
new OracleParameter(":Thursday",OracleDbType.Int32,
attendanceDetailEntity.Thursday,ParameterDirection.Input),
new OracleParameter(":Friday",OracleDbType.Int32,
attendanceDetailEntity.Friday,ParameterDirection.Input),
new OracleParameter(":Saturday",OracleDbType.Int32,
attendanceDetailEntity.Saturday,ParameterDirection.Input),
new OracleParameter(":Sunday",OracleDbType.Int32,
attendanceDetailEntity.Sunday,ParameterDirection.Input),
new OracleParameter(":RestDays",OracleDbType.Decimal,
attendanceDetailEntity.RestDays,ParameterDirection.Input),
new OracleParameter(":PunishMode",OracleDbType.Int32,
attendanceDetailEntity.PunishMode,ParameterDirection.Input),
new OracleParameter(":AccountID",OracleDbType.Int32,
userInfo.AccountID,ParameterDirection.Input),
new OracleParameter(":CreateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
new OracleParameter(":UpdateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
};
//连接数据库并返回结果
RowsCount = oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WParas);
//如果插入失败则回滚事务并关闭
if (RowsCount == 0)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.ValidationFailed;
srEntity.Message = string.Format(Messages.MSG_CMN_W001, "出勤考核明细", "新建");
}
else
{
oracleTrConn.Commit();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.Success;
srEntity.Message = string.Format(Messages.MSG_CMN_I001, "出勤考核明细", "新建");
}
return srEntity;
}
catch (Exception ex)
{
if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
}
srEntity.Exception = ex;
srEntity.Status = Constant.ServiceResultStatus.SystemError;
return srEntity;
}
}
///
/// 编辑出勤考核明细
///
/// 工价实体
/// 工价对应工种关系数据源
/// 当前用户
/// 服务对象实体
public static ServiceResultEntity EditAttendanceDetail(AttendanceDetailEntity attendanceDetailEntity, DataSet dsDetail, SUserInfo userInfo)
{
int RowsCount = 0;
IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
ServiceResultEntity srEntity = new ServiceResultEntity();
try
{
oracleTrConn.Connect();
StringBuilder sbSql = new StringBuilder();
sbSql.Append(@"Update TP_TAT_AttendanceDetail
Set RestmMode=:RestmMode,
Monday=:Monday,
Tuesday=:Tuesday,
Wednesday=:Wednesday,
Thursday=:Thursday,
Friday=:Friday,
Saturday=:Saturday,
Sunday=:Sunday,
RestDays=:RestDays,
PunishMode=:PunishMode,
UpdateUserID=:UpdateUserID
Where AttendanceID=:AttendanceID and JobsID=:JobsID and OPTimeStamp=:OPTimeStamp");
OracleParameter[] WParas = new OracleParameter[] {
new OracleParameter(":RestmMode",OracleDbType.Int32,
attendanceDetailEntity.RestmMode,ParameterDirection.Input),
new OracleParameter(":Monday",OracleDbType.Int32,
attendanceDetailEntity.Monday,ParameterDirection.Input),
new OracleParameter(":Tuesday",OracleDbType.Int32,
attendanceDetailEntity.Tuesday,ParameterDirection.Input),
new OracleParameter(":Wednesday",OracleDbType.Int32,
attendanceDetailEntity.Wednesday,ParameterDirection.Input),
new OracleParameter(":Thursday",OracleDbType.Int32,
attendanceDetailEntity.Thursday,ParameterDirection.Input),
new OracleParameter(":Friday",OracleDbType.Int32,
attendanceDetailEntity.Friday,ParameterDirection.Input),
new OracleParameter(":Saturday",OracleDbType.Int32,
attendanceDetailEntity.Saturday,ParameterDirection.Input),
new OracleParameter(":Sunday",OracleDbType.Int32,
attendanceDetailEntity.Sunday,ParameterDirection.Input),
new OracleParameter(":RestDays",OracleDbType.Decimal,
attendanceDetailEntity.RestDays,ParameterDirection.Input),
new OracleParameter(":PunishMode",OracleDbType.Int32,
attendanceDetailEntity.PunishMode,ParameterDirection.Input),
new OracleParameter(":UpdateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
new OracleParameter(":AttendanceID",OracleDbType.Int32,
attendanceDetailEntity.AttendanceID,ParameterDirection.Input),
new OracleParameter(":JobsID",OracleDbType.Int32,
attendanceDetailEntity.JobsID,ParameterDirection.Input),
new OracleParameter(":OPTimeStamp",OracleDbType.TimeStamp,
attendanceDetailEntity.OPTimeStamp,ParameterDirection.Input),
};
//连接数据库并返回结果
RowsCount = oracleTrConn.ExecuteNonQuery(sbSql.ToString(), WParas);
//并更新对应扣罚明细
if (attendanceDetailEntity.CopyId == 0)
{
EditAttFinesRules(Convert.ToInt32(attendanceDetailEntity.AttendanceID), Convert.ToInt32(attendanceDetailEntity.JobsID), dsDetail, userInfo, oracleTrConn);
}
//如果插入失败则回滚事务并关闭
if (RowsCount == 0)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.DataChanged;
srEntity.Message = string.Format(Messages.MSG_CMN_W001, "出勤考核明细", "修改");
}
else
{
oracleTrConn.Commit();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.Success;
srEntity.Message = string.Format(Messages.MSG_CMN_I001, "出勤考核明细", "修改");
}
return srEntity;
}
catch (Exception ex)
{
if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
}
srEntity.Exception = ex;
srEntity.Status = Constant.ServiceResultStatus.SystemError;
return srEntity;
}
}
///
/// 编辑出勤考核明细对应扣罚
///
/// 出勤考核ID
/// 对应工种数据源
/// 当前用户
/// 事务链接
/// 服务对象实体
public static ServiceResultEntity EditAttFinesRules(int AttendanceID,int JobsID, DataSet dsDetail, SUserInfo userInfo,
IDBTransaction oracleTrConn)
{
int RowsCount = 0;
bool ConnIsNew = false;
//如果链接为空,则新建链接
if (oracleTrConn == null)
{
oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
ConnIsNew = true;
}
ServiceResultEntity srEntity = new ServiceResultEntity();
StringBuilder sbSql = new StringBuilder();
try
{
//如果是新链接,需要打开事务
if (ConnIsNew == true)
{
oracleTrConn.Connect();
}
DataTable dtDetail = dsDetail.Tables[0];
foreach (DataRow drFor in dtDetail.Rows)
{
//dsDetail.Tables[0].RejectChanges();
if (drFor.RowState == DataRowState.Added) //添加
{
sbSql.Clear();
sbSql.Append(@"Insert into TP_TAT_AttFinesRules(AttendanceID,JobsID,BeginAbsentDays,
EndAbsentDays,PunishAmount,AccountID,
CreateUserID,UpdateUserID)
Values(:AttendanceID,:JobsID,:BeginAbsentDays,:EndAbsentDays,
:PunishAmount,:AccountID,
:CreateUserID,:UpdateUserID)");
OracleParameter[] InsertParas = new OracleParameter[] {
new OracleParameter(":AttendanceID",OracleDbType.Int32,
AttendanceID,ParameterDirection.Input),
new OracleParameter(":JobsID",OracleDbType.Int32,
JobsID,ParameterDirection.Input),
new OracleParameter(":BeginAbsentDays",OracleDbType.Decimal,
drFor["BeginAbsentDays"],ParameterDirection.Input),
new OracleParameter(":EndAbsentDays",OracleDbType.Decimal,
drFor["EndAbsentDays"],ParameterDirection.Input),
new OracleParameter(":PunishAmount",OracleDbType.Decimal,
drFor["PunishAmount"],ParameterDirection.Input),
new OracleParameter(":AccountID",OracleDbType.Int32,
userInfo.AccountID,ParameterDirection.Input),
new OracleParameter(":CreateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
new OracleParameter(":UpdateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input)
};
RowsCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), InsertParas);
}
else if (drFor.RowState == DataRowState.Modified) //修改
{
sbSql.Clear();
sbSql.Append(@"Update TP_TAT_AttFinesRules
Set BeginAbsentDays=:BeginAbsentDays,
EndAbsentDays=:EndAbsentDays,
PunishAmount=:PunishAmount,
UpdateUserID=:UpdateUserID
Where AttendanceID=:AttendanceID and JobsID=:JobsID and FinesRulesID=:FinesRulesID");
OracleParameter[] UpdateParas = new OracleParameter[] {
new OracleParameter(":BeginAbsentDays",OracleDbType.Decimal,
drFor["BeginAbsentDays"],ParameterDirection.Input),
new OracleParameter(":EndAbsentDays",OracleDbType.Decimal,
drFor["EndAbsentDays"],ParameterDirection.Input),
new OracleParameter(":PunishAmount",OracleDbType.Decimal,
drFor["PunishAmount"],ParameterDirection.Input),
new OracleParameter(":UpdateUserID",OracleDbType.Int32,
userInfo.UserID,ParameterDirection.Input),
new OracleParameter(":AttendanceID",OracleDbType.Int32,
AttendanceID,ParameterDirection.Input),
new OracleParameter(":JobsID",OracleDbType.Int32,
JobsID,ParameterDirection.Input),
new OracleParameter(":FinesRulesID",OracleDbType.Int32,
drFor["FinesRulesID"],ParameterDirection.Input),
};
RowsCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), UpdateParas);
}
else if (drFor.RowState == DataRowState.Deleted) //删除
{
drFor.RejectChanges();
sbSql.Clear();
sbSql.Append(@"Delete from TP_TAT_AttFinesRules
Where AttendanceID=:AttendanceID and JobsID=:JobsID and FinesRulesID=:FinesRulesID");
OracleParameter[] DeleteParas = new OracleParameter[] {
new OracleParameter(":AttendanceID",OracleDbType.Int32,
AttendanceID,ParameterDirection.Input),
new OracleParameter(":JobsID",OracleDbType.Int32,
JobsID,ParameterDirection.Input),
new OracleParameter(":FinesRulesID",OracleDbType.Int32,
drFor["FinesRulesID"],ParameterDirection.Input),
};
RowsCount += oracleTrConn.ExecuteNonQuery(sbSql.ToString(), DeleteParas);
sbSql.Clear();
}
}
//不是新链接的情况下,直接Return出去
if (ConnIsNew == false)
{
return srEntity;
}
//新链接的情况下,如果插入失败则回滚事务并关闭
if (ConnIsNew == true && RowsCount == 0)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.ValidationFailed;
srEntity.Message = string.Format(Messages.MSG_CMN_W001, "出勤考核明细", "新建");
}
else
{
oracleTrConn.Commit();
oracleTrConn.Disconnect();
srEntity.Status = Constant.ServiceResultStatus.Success;
srEntity.Message = string.Format(Messages.MSG_CMN_I001, "出勤考核明细", "新建");
}
return srEntity;
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
}
}