/******************************************************************************* * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential * 类的信息: * 1.程序名称:PAMModuleDAL.cs * 2.功能描述:工资方案参数设定更新db逻辑处理 * 编辑履历: * 作者 日期 版本 修改内容 * 王鑫 2015/08/17 1.00 新建 *******************************************************************************/ using System; using System.Collections.Generic; using System.Data; using System.Text; using Dongke.IBOSS.PRD.Basics.DataAccess; using Dongke.IBOSS.PRD.Service.DataModels; using Dongke.IBOSS.PRD.WCF.DataModels; using Dongke.IBOSS.PRD.Basics.BaseResources; using Oracle.ManagedDataAccess.Client; using Dongke.IBOSS.PRD.WCF.DataModels.PAMModule; using System.Collections; namespace Dongke.IBOSS.PRD.Service.PAMModuleService { public partial class PAMModuleDAL { /// /// 保存工资方案参数设定 /// /// 缺陷数据 /// 用户基本信息 /// int /// /// 2014.09.11 冯雪 新建 /// public static int SavePayPlanSetting(DataTable dataPayPlanSetting, SUserInfo sUserInfo) { IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { // 检验参数的有效性 if (dataPayPlanSetting == null && dataPayPlanSetting.Rows.Count == 0) { return -1; } int intResult = 0; oracleTrConn.Connect(); foreach (DataRow dataRow in dataPayPlanSetting.Rows) { //if (dataRow.RowState == DataRowState.Modified) int orgValue = Convert.ToInt32(dataRow["SettingValueOrg"].ToString() == "" ? 0 : dataRow["SettingValueOrg"]); int Value = Convert.ToInt32(dataRow["SettingValue"].ToString() == "" ? 0 : dataRow["SettingValue"]); //if (dataRow.RowState == DataRowState.Modified) if (orgValue != Value) { #region 更新缺陷信息 string sqlString = "UPDATE TP_PAS_PayPlanSetting SET " + " SettingValue = :SettingValue " + " WHERE SettingCode = :SettingCode"; OracleParameter[] parmeters1 = new OracleParameter[] { new OracleParameter(":SettingValue",dataRow["SettingValue"].ToString()), new OracleParameter(":SettingCode",dataRow["SettingCode"].ToString()) }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion } } oracleTrConn.Commit(); oracleTrConn.Disconnect(); return intResult; } catch (Exception ex) { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } throw ex; } finally { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } } } /// /// 保存工种工资方案 /// /// false 新建 true 编辑 /// 数据源 /// /// public static int SaveJobsPayPlan(bool IsEdit, DataTable dtJobsPayPlan, SUserInfo sUserInfo) { IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { // 检验参数的有效性 if (dtJobsPayPlan == null && dtJobsPayPlan.Rows.Count == 0) { return -1; } int intResult = 0; oracleTrConn.Connect(); OracleParameter[] parmeters1 = null; string sqlString = ""; bool isError = false; foreach (DataRow dataRow in dtJobsPayPlan.Rows) { //if (!IsEdit) // 新建 //{ // if (dataRow["JobsID"].ToString() != string.Empty) // { // parmeters1 = new OracleParameter[] // { // new OracleParameter(":PayPlanID",dataRow["PayPlanID"].ToString()), // new OracleParameter(":JobsID",dataRow["JobsID"].ToString()) // }; // sqlString = "select 1 from TP_PAM_JobsPayPlan where jobsid=:JobsID and PayPlanID=:PayPlanID "; // DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); // if (ds != null && ds.Tables[0].Rows.Count > 0) // { // isError = true; // intResult = -3;//重复数据 // break; // } // sqlString = "insert into TP_PAM_JobsPayPlan values(:JobsID,:PayPlanID) "; // intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); // } //} //else //{ // 编辑 if (dataRow.RowState == DataRowState.Added) { if (dataRow["JobsID"].ToString() != string.Empty) { parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dataRow["PayPlanID"].ToString()), new OracleParameter(":JobsID",dataRow["JobsID"].ToString()) }; sqlString = "select 1 from TP_PAM_JobsPayPlan where jobsid=:JobsID and PayPlanID=:PayPlanID "; DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (ds != null && ds.Tables[0].Rows.Count > 0) { isError = true; intResult = -3;//重复数据 break; } sqlString = "insert into TP_PAM_JobsPayPlan values(:JobsID,:PayPlanID) "; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } } else if (dataRow.RowState == DataRowState.Modified) { parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dataRow["PayPlanID"].ToString()), new OracleParameter(":JobsID",dataRow["JobsID"].ToString()) }; sqlString = "select 1 from TP_PAM_JobsPayPlan where jobsid=:JobsID and PayPlanID=:PayPlanID "; DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (ds != null && ds.Tables[0].Rows.Count > 0) { IsEdit = true; intResult = -3;//重复数据 break; } sqlString = "update TP_PAM_JobsPayPlan set JobsID=:JobsID where PayPlanID=:PayPlanID "; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } else if (dataRow.RowState == DataRowState.Deleted) { sqlString = "delete from TP_PAM_JobsPayPlan where PayPlanID=:PayPlanID and JobsID=:JobsID "; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dataRow["PayPlanID",DataRowVersion.Original].ToString()), new OracleParameter(":JobsID",dataRow["JobsID",DataRowVersion.Original].ToString()) }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } // } } if (isError) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } else { oracleTrConn.Commit(); oracleTrConn.Disconnect(); } return intResult; } catch (Exception ex) { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } throw ex; } finally { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } } } /// /// 保存工价分类数据 /// /// 用户基本信息 /// 工价分类数据源 /// int /// /// 2015.08.19 王鑫 新建 /// public static int SavetJobsData(DataTable datatWagesTypeData, SUserInfo sUserInfo) { IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { // 检验参数的有效性 if (datatWagesTypeData == null && datatWagesTypeData.Rows.Count < Constant.INT_IS_ZERO) { return Constant.INT_IS_THREE; } int returnResult = Constant.INT_IS_TWO; oracleTrConn.Connect(); #region 对要保存的工种数据进行必要的验证 foreach (DataRow dataRow in datatWagesTypeData.Rows) { // 新建工种 if (dataRow.RowState == DataRowState.Added) { #region 判断是否存在相同的工份名称 string sqlString = "SELECT Count(*) FROM TP_PAM_WagesType WHERE AccountID = :AccountID and WagesTypeName =:WagesTypeName "; OracleParameter[] oracleParameter = new OracleParameter[] { new OracleParameter(":AccountID",sUserInfo.AccountID), new OracleParameter(":WagesTypeName",dataRow["WagesTypeName"].ToString()) }; string sqlReturnStr = oracleTrConn.GetSqlResultToStr(sqlString, oracleParameter); if (!Constant.INT_IS_ZERO.ToString().Equals(sqlReturnStr)) { returnResult = Constant.INT_IS_ONE; break; } #endregion } else if (dataRow.RowState == DataRowState.Modified) { #region 判断是否存在相同的工种代码 string sqlStrings = "SELECT Count(*) FROM TP_PAM_WagesType WHERE AccountID = :AccountID and WagesTypeName = :WagesTypeName and WagesTypeID <> :WagesTypeID"; OracleParameter[] oracleParameters = new OracleParameter[] { new OracleParameter(":AccountID",sUserInfo.AccountID), new OracleParameter(":WagesTypeName",dataRow["WagesTypeName"]), new OracleParameter(":WagesTypeID",dataRow["WagesTypeID"]) }; string sqlReturnStr = oracleTrConn.GetSqlResultToStr(sqlStrings, oracleParameters); if (!Constant.INT_IS_ZERO.ToString().Equals(sqlReturnStr)) { returnResult = Constant.INT_IS_ONE; break; } #endregion } } if (returnResult == Constant.INT_IS_ONE) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); return returnResult; } #endregion foreach (DataRow dataRow in datatWagesTypeData.Rows) { // 新建工种 if (dataRow.RowState == DataRowState.Added) { #region 新增工种信息 #region 向T_MST_Jobs插入数据 string sqlInsertString = "INSERT INTO TP_PAM_WagesType " + "(WagesTypeName" + ",AccountID" + ",ValueFlag" + ",CreateTime" + ",UpdateTime" + ",UpdateUserID" + ",CreateUserID)" + " VALUES " + "(:WagesTypeName" + ",:AccountID" + ",:ValueFlag" + ",sysdate" + ",sysdate" + ",:UpdateUserID" + ",:CreateUserID)"; OracleParameter[] oracleParameters = new OracleParameter[] { new OracleParameter(":WagesTypeName",dataRow["WagesTypeName"].ToString()), new OracleParameter(":AccountID",sUserInfo.AccountID), new OracleParameter(":ValueFlag",dataRow["ValueFlag"].ToString()), new OracleParameter(":UpdateUserID",sUserInfo.UserID), new OracleParameter(":CreateUserID",sUserInfo.UserID) }; oracleTrConn.ExecuteNonQuery(sqlInsertString, oracleParameters); #endregion #endregion } else if (dataRow.RowState == DataRowState.Modified) { #region 更新工种信息 string sqlUpdateString = "UPDATE TP_PAM_WagesType SET " + " WagesTypeName = :WagesTypeName," + " AccountID = :AccountID," + " ValueFlag = :ValueFlag," + " UpdateUserID = :UpdateUserID," + " UpdateTime = :UpdateTime" + " WHERE WagesTypeID = :WagesTypeID"; OracleParameter[] oracleParametere = new OracleParameter[] { new OracleParameter(":WagesTypeName",dataRow["WagesTypeName"].ToString()), new OracleParameter(":AccountID",sUserInfo.AccountID), new OracleParameter(":ValueFlag",dataRow["ValueFlag"].ToString()), new OracleParameter(":UpdateUserID",sUserInfo.UserID), new OracleParameter(":UpdateTime",DateTime.Now), new OracleParameter(":WagesTypeID",dataRow["WagesTypeID"].ToString()) }; oracleTrConn.ExecuteNonQuery(sqlUpdateString, oracleParametere); #endregion } else if (dataRow.RowState == DataRowState.Deleted) { #region 删除工种信息 string sqlDeleteString = "DELETE TP_PAM_WagesType WHERE WagesTypeID = :WagesTypeID"; OracleParameter[] oracleParameter = new OracleParameter[] { new OracleParameter(":WagesTypeID",dataRow["WagesTypeID",DataRowVersion.Original].ToString()) }; oracleTrConn.ExecuteNonQuery(sqlDeleteString, oracleParameter); #endregion } } oracleTrConn.Commit(); oracleTrConn.Disconnect(); return returnResult; } catch (Exception ex) { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } throw ex; } finally { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } } } /// /// 保存产品工价分类 /// /// false 新建 true 编辑 /// 数据源 /// /// public static int SaveGoodsWagesTypeData(bool IsEdit, DataTable dtGoodsPayPlan, SUserInfo sUserInfo) { IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { // 检验参数的有效性 if (dtGoodsPayPlan == null && dtGoodsPayPlan.Rows.Count == 0) { return -1; } int intResult = 0; oracleTrConn.Connect(); OracleParameter[] parmeters1 = null; string sqlString = ""; bool isError = false; foreach (DataRow dataRow in dtGoodsPayPlan.Rows) { if (dataRow.RowState == DataRowState.Added) { if (dataRow["GoodsID"].ToString() != string.Empty) { parmeters1 = new OracleParameter[] { new OracleParameter(":WagesTypeID",dataRow["WagesTypeID"].ToString()), new OracleParameter(":GoodsID",dataRow["GoodsID"].ToString()) }; sqlString = "select 1 from TP_PAM_GoodsWagesType where GoodsID=:GoodsID and :WagesTypeID=:WagesTypeID "; DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (ds != null && ds.Tables[0].Rows.Count > 0) { isError = true; intResult = -3;//重复数据 break; } sqlString = "insert into TP_PAM_GoodsWagesType values(:GoodsID,:WagesTypeID) "; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } } else if (dataRow.RowState == DataRowState.Modified) { parmeters1 = new OracleParameter[] { new OracleParameter(":WagesTypeID",dataRow["WagesTypeID"].ToString()), new OracleParameter(":GoodsID",dataRow["GoodsID"].ToString()) }; sqlString = "select 1 from TP_PAM_GoodsWagesType where GoodsID=:GoodsID and WagesTypeID=:WagesTypeID "; DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (ds != null && ds.Tables[0].Rows.Count > 0) { isError = true; intResult = -3;//重复数据 break; } sqlString = "update TP_PAM_GoodsWagesType set GoodsID=:GoodsID where WagesTypeID=:WagesTypeID "; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } else if (dataRow.RowState == DataRowState.Deleted) { sqlString = "delete from TP_PAM_GoodsWagesType where WagesTypeID=:WagesTypeID and GoodsID=:GoodsID "; parmeters1 = new OracleParameter[] { new OracleParameter(":WagesTypeID",dataRow["WagesTypeID",DataRowVersion.Original].ToString()), new OracleParameter(":GoodsID",dataRow["GoodsID",DataRowVersion.Original].ToString()) }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } } if (isError) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } else { oracleTrConn.Commit(); oracleTrConn.Disconnect(); } return intResult; } catch (Exception ex) { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } throw ex; } finally { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } } } /// /// 保存计件工资策略 /// /// false 新建 true 编辑 /// 数据源 /// /// public static int SavePiecework(PieceworkEntity pieceworkendity, SUserInfo sUserInfo) { IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { int intResult = 0; oracleTrConn.Connect(); string sqlString = ""; OracleParameter[] parmeters1 = null; bool isError = false; if (pieceworkendity.PieceTacticsID == null) // 新增 { //一个解决方案只能对应一个计件工资策略 if (pieceworkendity.PayPlanID != null) { sqlString = "select 1 from TP_PAT_Piecework where PayPlanID=:PayPlanID and AccountID=:AccountID "; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",pieceworkendity.PayPlanID), new OracleParameter(":AccountID",sUserInfo.AccountID), }; DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (ds != null && ds.Tables[0].Rows.Count > 0) { isError = true; intResult = -1;//重复数据 oracleTrConn.Rollback(); oracleTrConn.Disconnect(); return intResult; } } string sql = "select SEQ_PAT_Piecework_ID.nextval from dual"; string idStr = oracleTrConn.GetSqlResultToStr(sql); sqlString = @"insert into TP_PAT_Piecework ( PieceTacticsID, PayPlanID, PieceType, PieceCoefficient, DamageFlag, DamageCoefficient, UnqualifiedFlag, UnqualifiedCoefficient, QualifiedFlag, QualifiedCoefficient, AccountID, CreateUserID, UpdateUserID, PieceTacticsName ) values ( :PieceTacticsID, :PayPlanID, :PieceType, :PieceCoefficient, :DamageFlag, :DamageCoefficient, :UnqualifiedFlag, :UnqualifiedCoefficient, :QualifiedFlag, :QualifiedCoefficient, :AccountID, :CreateUserID, :UpdateUserID, :PieceTacticsName )"; parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",idStr), new OracleParameter(":PayPlanID",pieceworkendity.PayPlanID), new OracleParameter(":PieceType",pieceworkendity.PieceType), new OracleParameter(":PieceCoefficient",pieceworkendity.PieceCoefficient), new OracleParameter(":DamageFlag",pieceworkendity.DamageFlag), new OracleParameter(":DamageCoefficient",pieceworkendity.DamageCoefficient), new OracleParameter(":UnqualifiedFlag",pieceworkendity.UnqualifiedFlag), new OracleParameter(":UnqualifiedCoefficient",pieceworkendity.UnqualifiedCoefficient), new OracleParameter(":QualifiedFlag",pieceworkendity.QualifiedFlag), new OracleParameter(":QualifiedCoefficient",pieceworkendity.QualifiedCoefficient), new OracleParameter(":AccountID",sUserInfo.AccountID), new OracleParameter(":CreateUserID",sUserInfo.UserID), new OracleParameter(":UpdateUserID",sUserInfo.UserID), new OracleParameter(":PieceTacticsName",pieceworkendity.PayPlanName), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); // 插入计件工序 sqlString = @"insert into TP_PAT_PIECEPROCEDURE ( PIECETACTICSID, PROCEDUREID, PROCEDUREFLAG ) values ( :PIECETACTICSID, :PROCEDUREID, :PROCEDUREFLAG )"; if (!string.IsNullOrEmpty(pieceworkendity.PieceProcedureIDS)) { string[] sub = pieceworkendity.PieceProcedureIDS.Split(','); for (int i = 0; i < sub.Length; i++) { parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",idStr), new OracleParameter(":PROCEDUREID",sub[i]), new OracleParameter(":PROCEDUREFLAG",1), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } } // 插入质量工序 sqlString = @"insert into TP_PAT_PIECEPROCEDURE ( PIECETACTICSID, PROCEDUREID, PROCEDUREFLAG ) values ( :PIECETACTICSID, :PROCEDUREID, :PROCEDUREFLAG )"; if (!string.IsNullOrEmpty(pieceworkendity.PieceProcedureIDS)) { string[] sub = pieceworkendity.QualityBaseProcedureIDS.Split(','); for (int i = 0; i < sub.Length; i++) { parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",idStr), new OracleParameter(":PROCEDUREID",sub[i]), new OracleParameter(":PROCEDUREFLAG",2), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } } if (pieceworkendity.wagesentity != null) { foreach (Dongke.IBOSS.PRD.WCF.DataModels.PAMModule.WagesEntity entity in pieceworkendity.wagesentity) { //sqlString = "select 1 from TP_PAT_Wages where WagesTypeID=:WagesTypeID "; //parmeters1 = new OracleParameter[] //{ // new OracleParameter(":WagesTypeID",entity.WagesTypeID), //}; //DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); //if (ds != null && ds.Tables[0].Rows.Count > 0) //{ // isError = true; // intResult = -2;//重复数据 // break; //} sqlString = @"insert into TP_PAT_Wages ( PieceTacticsID, WagesTypeID, StandardWages, DamageSubsidyRate, DamageSubsidy, RSuperiorCoefficient, RQualifiedCoefficient, RepairSubsidyRate, RepairSubsidy ) values ( :PieceTacticsID, :WagesTypeID, :StandardWages, :DamageSubsidyRate, :DamageSubsidy, :RSuperiorCoefficient, :RQualifiedCoefficient, :RepairSubsidyRate, :RepairSubsidy ) "; parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",idStr), new OracleParameter(":WagesTypeID",entity.WagesTypeID), new OracleParameter(":StandardWages",entity.StandardWages), new OracleParameter(":DamageSubsidyRate",entity.DamageSubsidyRate), new OracleParameter(":DamageSubsidy",entity.DamageSubsidy), new OracleParameter(":RSuperiorCoefficient",entity.RSuperiorCoefficient), new OracleParameter(":RQualifiedCoefficient",entity.RQualifiedCoefficient), new OracleParameter(":RepairSubsidyRate",entity.RepairSubsidyRate), new OracleParameter(":RepairSubsidy",entity.RepairSubsidy), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //质量工价 if (entity.qualitywagesentity != null) { foreach (QualityWagesEntity qualitywagesentity in entity.qualitywagesentity) { sqlString = "select 1 from TP_PAT_QualityWages where QualityRate=:QualityRate and WagesTypeID=:WagesTypeID and PieceTacticsID=:PieceTacticsID"; parmeters1 = new OracleParameter[] { new OracleParameter(":QualityRate",qualitywagesentity.QualityRate), new OracleParameter(":WagesTypeID",qualitywagesentity.WagesTypeID), new OracleParameter(":PieceTacticsID",pieceworkendity.PieceTacticsID), }; DataSet ds2 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (ds2 != null && ds2.Tables[0].Rows.Count > 0) { isError = true; intResult = -3;//重复数据 break; } sqlString = @"insert into TP_PAT_QualityWages ( PieceTacticsID, WagesTypeID, QualityRate, Balance, QualityWages ) values ( :PieceTacticsID, :WagesTypeID, :QualityRate, :Balance, :QualityWages ) "; parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",idStr), new OracleParameter(":WagesTypeID",qualitywagesentity.WagesTypeID), new OracleParameter(":QualityRate",qualitywagesentity.QualityRate), new OracleParameter(":Balance",qualitywagesentity.Balance), new OracleParameter(":QualityWages",qualitywagesentity.QualityWages), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } } } } } else { //编辑 //一个解决方案只能对应一个计件工资策略 if (pieceworkendity.PayPlanID != null) { sqlString = "select 1 from TP_PAT_Piecework where PayPlanID=:PayPlanID and AccountID=:AccountID and PieceTacticsID<>:PieceTacticsID"; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",pieceworkendity.PayPlanID), new OracleParameter(":AccountID",sUserInfo.AccountID), new OracleParameter(":PieceTacticsID",pieceworkendity.PieceTacticsID), }; DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (ds != null && ds.Tables[0].Rows.Count > 0) { isError = true; intResult = -1;//重复数据 oracleTrConn.Rollback(); oracleTrConn.Disconnect(); return intResult; } } // 更新语句 sqlString = @" update TP_PAT_Piecework set PieceTacticsID=:PieceTacticsID, PayPlanID=:PayPlanID, PieceType=:PieceType, PieceCoefficient=:PieceCoefficient, DamageFlag=:DamageFlag, DamageCoefficient=:DamageCoefficient, UnqualifiedFlag=:UnqualifiedFlag, UnqualifiedCoefficient=:UnqualifiedCoefficient, QualifiedFlag=:QualifiedFlag, QualifiedCoefficient=:QualifiedCoefficient, UpdateUserID=:UpdateUserID, PieceTacticsName=:PieceTacticsName where PieceTacticsID=:PieceTacticsID "; parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",pieceworkendity.PieceTacticsID), new OracleParameter(":PayPlanID",pieceworkendity.PayPlanID), new OracleParameter(":PieceType",pieceworkendity.PieceType), new OracleParameter(":PieceCoefficient",pieceworkendity.PieceCoefficient), new OracleParameter(":DamageFlag",pieceworkendity.DamageFlag), new OracleParameter(":DamageCoefficient",pieceworkendity.DamageCoefficient), new OracleParameter(":UnqualifiedFlag",pieceworkendity.UnqualifiedFlag), new OracleParameter(":UnqualifiedCoefficient",pieceworkendity.UnqualifiedCoefficient), new OracleParameter(":QualifiedFlag",pieceworkendity.QualifiedFlag), new OracleParameter(":QualifiedCoefficient",pieceworkendity.QualifiedCoefficient), new OracleParameter(":UpdateUserID",sUserInfo.UserID), new OracleParameter(":PieceTacticsName",pieceworkendity.PayPlanName), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //删除完事重新添加子表数据 sqlString = "delete from TP_PAT_Wages where PieceTacticsID=" + pieceworkendity.PieceTacticsID; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); sqlString = "delete from TP_PAT_QualityWages where PieceTacticsID=" + pieceworkendity.PieceTacticsID; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); sqlString = "delete from TP_PAT_PIECEPROCEDURE where PieceTacticsID=" + pieceworkendity.PieceTacticsID; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); // 插入计件工序 sqlString = @"insert into TP_PAT_PIECEPROCEDURE ( PIECETACTICSID, PROCEDUREID, PROCEDUREFLAG ) values ( :PIECETACTICSID, :PROCEDUREID, :PROCEDUREFLAG )"; if (!string.IsNullOrEmpty(pieceworkendity.PieceProcedureIDS)) { string[] sub = pieceworkendity.PieceProcedureIDS.Split(','); for (int i = 0; i < sub.Length; i++) { parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",pieceworkendity.PieceTacticsID), new OracleParameter(":PROCEDUREID",sub[i]), new OracleParameter(":PROCEDUREFLAG",1), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } } // 插入质量工序 sqlString = @"insert into TP_PAT_PIECEPROCEDURE ( PIECETACTICSID, PROCEDUREID, PROCEDUREFLAG ) values ( :PIECETACTICSID, :PROCEDUREID, :PROCEDUREFLAG )"; if (!string.IsNullOrEmpty(pieceworkendity.PieceProcedureIDS)) { string[] sub = pieceworkendity.QualityBaseProcedureIDS.Split(','); for (int i = 0; i < sub.Length; i++) { parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",pieceworkendity.PieceTacticsID), new OracleParameter(":PROCEDUREID",sub[i]), new OracleParameter(":PROCEDUREFLAG",2), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } } if (pieceworkendity.wagesentity != null) { foreach (Dongke.IBOSS.PRD.WCF.DataModels.PAMModule.WagesEntity entity in pieceworkendity.wagesentity) { //sqlString = "select 1 from TP_PAT_Wages where WagesTypeID=:WagesTypeID "; //parmeters1 = new OracleParameter[] //{ // new OracleParameter(":WagesTypeID",entity.WagesTypeID), //}; //DataSet ds3 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); //if (ds3 != null && ds3.Tables[0].Rows.Count > 0) //{ // isError = true; // intResult = -2;//重复数据 // break; //} sqlString = @"insert into TP_PAT_Wages ( PieceTacticsID, WagesTypeID, StandardWages, DamageSubsidyRate, DamageSubsidy, RSuperiorCoefficient, RQualifiedCoefficient, RepairSubsidyRate, RepairSubsidy ) values ( :PieceTacticsID, :WagesTypeID, :StandardWages, :DamageSubsidyRate, :DamageSubsidy, :RSuperiorCoefficient, :RQualifiedCoefficient, :RepairSubsidyRate, :RepairSubsidy ) "; parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",pieceworkendity.PieceTacticsID), new OracleParameter(":WagesTypeID",entity.WagesTypeID), new OracleParameter(":StandardWages",entity.StandardWages), new OracleParameter(":DamageSubsidyRate",entity.DamageSubsidyRate), new OracleParameter(":DamageSubsidy",entity.DamageSubsidy), new OracleParameter(":RSuperiorCoefficient",entity.RSuperiorCoefficient), new OracleParameter(":RQualifiedCoefficient",entity.RQualifiedCoefficient), new OracleParameter(":RepairSubsidyRate",entity.RepairSubsidyRate), new OracleParameter(":RepairSubsidy",entity.RepairSubsidy), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //质量工价 if (entity.qualitywagesentity != null) { foreach (QualityWagesEntity qualitywagesentity in entity.qualitywagesentity) { sqlString = "select 1 from TP_PAT_QualityWages where QualityRate=:QualityRate and WagesTypeID=:WagesTypeID and PieceTacticsID=:PieceTacticsID"; parmeters1 = new OracleParameter[] { new OracleParameter(":QualityRate",qualitywagesentity.QualityRate), new OracleParameter(":WagesTypeID",qualitywagesentity.WagesTypeID), new OracleParameter(":PieceTacticsID",pieceworkendity.PieceTacticsID), }; DataSet ds2 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (ds2 != null && ds2.Tables[0].Rows.Count > 0) { isError = true; intResult = -3;//重复数据 break; } sqlString = @"insert into TP_PAT_QualityWages ( PieceTacticsID, WagesTypeID, QualityRate, Balance, QualityWages ) values ( :PieceTacticsID, :WagesTypeID, :QualityRate, :Balance, :QualityWages ) "; parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",pieceworkendity.PieceTacticsID), new OracleParameter(":WagesTypeID",qualitywagesentity.WagesTypeID), new OracleParameter(":QualityRate",qualitywagesentity.QualityRate), new OracleParameter(":Balance",qualitywagesentity.Balance), new OracleParameter(":QualityWages",qualitywagesentity.QualityWages), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } } } } } if (isError) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } else { oracleTrConn.Commit(); oracleTrConn.Disconnect(); } return intResult; } catch (Exception ex) { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } throw ex; } } /// /// 保存品质考核策略 /// /// false 新建 true 编辑 /// 数据源 /// /// public static int SaveQualityASS(QualityASS qualityASS, SUserInfo sUserInfo) { IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { int intResult = 0; oracleTrConn.Connect(); string sqlString = ""; OracleParameter[] parmeters1 = null; bool isError = false; if (qualityASS.QualityASSTacticsID == 0) // 新增 { //一个解决方案只能对应一个计件工资策略 //if (qualityASS.PayPlanID != null) //{ // sqlString = "select 1 from TP_PAT_QualityASS where PayPlanID=:PayPlanID and AccountID=:AccountID "; // parmeters1 = new OracleParameter[] // { // new OracleParameter(":PayPlanID",qualityASS.PayPlanID), // new OracleParameter(":AccountID",sUserInfo.AccountID), // }; // DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); // if (ds != null && ds.Tables[0].Rows.Count > 0) // { // isError = true; // intResult = -1;//重复数据 // oracleTrConn.Rollback(); // oracleTrConn.Disconnect(); // return intResult; // } //} string sql = "select SEQ_PAT_QualityASS_ID.nextval from dual"; string idStr = oracleTrConn.GetSqlResultToStr(sql); sqlString = @"insert into TP_PAT_QualityASS ( QualityASSTacticsID, QualityTacticsName, PayPlanID, DefectFine, AccountID, CreateUserID, UpdateUserID ) values ( :QualityASSTacticsID, :QualityTacticsName, :PayPlanID, :DefectFine, :AccountID, :CreateUserID, :UpdateUserID )"; parmeters1 = new OracleParameter[] { new OracleParameter(":QualityASSTacticsID",idStr), new OracleParameter(":PayPlanID",qualityASS.PayPlanID), new OracleParameter(":QualityTacticsName",qualityASS.QualityTacticsName), new OracleParameter(":DefectFine",qualityASS.DefectFine), new OracleParameter(":AccountID",sUserInfo.AccountID), new OracleParameter(":CreateUserID",sUserInfo.UserID), new OracleParameter(":UpdateUserID",sUserInfo.UserID), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); // // 插入质量工序 // sqlString = @"insert into TP_PAT_QualityProcedure // ( // QualityASSTacticsID, // PROCEDUREID // ) values // ( // :QualityASSTacticsID, // :PROCEDUREID // )"; // if (!string.IsNullOrEmpty(qualityASS.QualityBaseProcedureIDS)) // { // string[] sub = qualityASS.QualityBaseProcedureIDS.Split(','); // for (int i = 0; i < sub.Length; i++) // { // parmeters1 = new OracleParameter[] // { // new OracleParameter(":QualityASSTacticsID",idStr), // new OracleParameter(":PROCEDUREID",sub[i]), // }; // intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); // } // } if (qualityASS.qualityGoods != null) { foreach (Dongke.IBOSS.PRD.WCF.DataModels.PAMModule.QualityGoods entity in qualityASS.qualityGoods) { //sqlString = "select 1 from TP_PAT_QualityGoods where WagesTypeID=:WagesTypeID "; //parmeters1 = new OracleParameter[] //{ // new OracleParameter(":WagesTypeID",entity.WagesTypeID), //}; //DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); //if (ds != null && ds.Tables[0].Rows.Count > 0) //{ // isError = true; // intResult = -2;//重复数据 // break; //} sqlString = @"insert into TP_PAT_QualityGoods ( QualityASSTacticsID, WagesTypeID ) values ( :PieceTacticsID, :WagesTypeID ) "; parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",idStr), new OracleParameter(":WagesTypeID",entity.WagesTypeID), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //质量工价 if (entity.qualityReward != null) { foreach (QualityReward qualitywagesentity in entity.qualityReward) { sqlString = "select 1 from TP_PAT_QualityReward where QualityRate=:QualityRate and WagesTypeID=:WagesTypeID and QualityASSTacticsID=:QualityASSTacticsID"; parmeters1 = new OracleParameter[] { new OracleParameter(":QualityRate",qualitywagesentity.QualityRate), new OracleParameter(":WagesTypeID",qualitywagesentity.WagesTypeID), new OracleParameter(":QualityASSTacticsID",qualitywagesentity.QualityASSTacticsID), }; DataSet ds2 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (ds2 != null && ds2.Tables[0].Rows.Count > 0) { isError = true; intResult = -3;//重复数据 break; } sqlString = @"insert into TP_PAT_QualityReward ( QualityASSTacticsID, WagesTypeID, QualityRate, QualityReward ) values ( :QualityASSTacticsID, :WagesTypeID, :QualityRate, :QualityReward ) "; parmeters1 = new OracleParameter[] { new OracleParameter(":QualityASSTacticsID",idStr), new OracleParameter(":WagesTypeID",qualitywagesentity.WagesTypeID), new OracleParameter(":QualityRate",qualitywagesentity.QualityRate), new OracleParameter(":QualityReward",qualitywagesentity.QualityReward2), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } } } } } else { //编辑 //一个解决方案只能对应一个计件工资策略 //if (qualityASS.PayPlanID != null) //{ // sqlString = "select 1 from TP_PAT_QualityASS where PayPlanID=:PayPlanID and AccountID=:AccountID "; // parmeters1 = new OracleParameter[] // { // new OracleParameter(":PayPlanID",qualityASS.PayPlanID), // new OracleParameter(":AccountID",sUserInfo.AccountID), // }; // DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); // if (ds != null && ds.Tables[0].Rows.Count > 0) // { // isError = true; // intResult = -1;//重复数据 // oracleTrConn.Rollback(); // oracleTrConn.Disconnect(); // return intResult; // } //} // 更新语句 sqlString = @" update TP_PAT_QualityASS set PayPlanID=:PayPlanID, DefectFine=:DefectFine, QualityTacticsName=:QualityTacticsName, UpdateUserID=:UpdateUserID where QualityASSTacticsID=:QualityASSTacticsID "; parmeters1 = new OracleParameter[] { new OracleParameter(":QualityASSTacticsID",qualityASS.QualityASSTacticsID), new OracleParameter(":PayPlanID",qualityASS.PayPlanID), new OracleParameter(":DefectFine",qualityASS.DefectFine), new OracleParameter(":QualityTacticsName",qualityASS.QualityTacticsName), new OracleParameter(":UpdateUserID",sUserInfo.UserID), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //删除完事重新添加子表数据 sqlString = "delete from TP_PAT_QualityGoods where QualityASSTacticsID=" + qualityASS.QualityASSTacticsID; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); sqlString = "delete from TP_PAT_QualityReward where QualityASSTacticsID=" + qualityASS.QualityASSTacticsID; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //sqlString = "delete from TP_PAT_QualityProcedure where QualityASSTacticsID=" + qualityASS.QualityASSTacticsID; //intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); // // 插入质量工序 // sqlString = @"insert into TP_PAT_QualityProcedure // ( // QualityASSTacticsID, // PROCEDUREID // ) values // ( // :QualityASSTacticsID, // :PROCEDUREID // )"; // if (!string.IsNullOrEmpty(qualityASS.QualityBaseProcedureIDS)) // { // string[] sub = qualityASS.QualityBaseProcedureIDS.Split(','); // for (int i = 0; i < sub.Length; i++) // { // parmeters1 = new OracleParameter[] // { // new OracleParameter(":QualityASSTacticsID", qualityASS.QualityASSTacticsID), // new OracleParameter(":PROCEDUREID",sub[i]), // }; // intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); // } // } if (qualityASS.qualityGoods != null) { foreach (Dongke.IBOSS.PRD.WCF.DataModels.PAMModule.QualityGoods entity in qualityASS.qualityGoods) { //sqlString = "select 1 from TP_PAT_QualityGoods where WagesTypeID=:WagesTypeID "; //parmeters1 = new OracleParameter[] //{ // new OracleParameter(":WagesTypeID",entity.WagesTypeID), //}; //DataSet ds3 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); //if (ds3 != null && ds3.Tables[0].Rows.Count > 0) //{ // isError = true; // intResult = -2;//重复数据 // break; //} sqlString = @"insert into TP_PAT_QualityGoods ( QualityASSTacticsID, WagesTypeID ) values ( :QualityASSTacticsID, :WagesTypeID ) "; parmeters1 = new OracleParameter[] { new OracleParameter(":QualityASSTacticsID",qualityASS.QualityASSTacticsID), new OracleParameter(":WagesTypeID",entity.WagesTypeID), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //质量工价 if (entity.qualityReward != null) { foreach (QualityReward qualitywagesentity in entity.qualityReward) { sqlString = "select 1 from TP_PAT_QualityReward where QualityRate=:QualityRate and WagesTypeID=:WagesTypeID and QualityASSTacticsID=:QualityASSTacticsID"; parmeters1 = new OracleParameter[] { new OracleParameter(":QualityRate",qualitywagesentity.QualityRate), new OracleParameter(":WagesTypeID",qualitywagesentity.WagesTypeID), new OracleParameter(":QualityASSTacticsID",qualityASS.QualityASSTacticsID), }; DataSet ds2 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (ds2 != null && ds2.Tables[0].Rows.Count > 0) { isError = true; intResult = -3;//重复数据 break; } sqlString = @"insert into TP_PAT_QualityReward ( QualityASSTacticsID, WagesTypeID, QualityRate, QualityReward ) values ( :QualityASSTacticsID, :WagesTypeID, :QualityRate, :QualityReward ) "; parmeters1 = new OracleParameter[] { new OracleParameter(":QualityASSTacticsID",qualityASS.QualityASSTacticsID), new OracleParameter(":WagesTypeID",qualitywagesentity.WagesTypeID), new OracleParameter(":QualityRate",qualitywagesentity.QualityRate), new OracleParameter(":QualityReward",qualitywagesentity.QualityReward2), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } } } } } if (isError) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } else { oracleTrConn.Commit(); oracleTrConn.Disconnect(); } return intResult; } catch (Exception ex) { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } throw ex; } finally { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } } } #region 工资结算 /// /// 结算工资 /// /// false 新建 true 编辑 /// 数据源 /// /// public static int SavePayPiecework(int Month, int Year, SUserInfo sUserInfo) { IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { DataTable dtExistUserID = new DataTable(); dtExistUserID.Columns.Add("staffid", typeof(int)); dtExistUserID.Columns.Add("userid", typeof(int)); int intResult = 0; bool UpdateSettlementFlag = false; oracleTrConn.Connect(); oracleTrConn.IsCommandTimeout = false; #region 判断是否已经结算此月 string sqlExist = "select 1 from TP_PAR_PayrollAccount where YYYYMM=:YYYYMM"; OracleParameter[] parmetersExist = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), }; DataSet dsExist = oracleTrConn.GetSqlResultToDs(sqlExist, parmetersExist); if (dsExist != null && dsExist.Tables[0].Rows.Count > 0) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); return -99; } #endregion #region 查询系统参数设定值,用来结算工资范围取值 DateTime? dateStartTime = null; DateTime? dateEndTime = null; string sqlString = "select SettingValue from TP_MST_SystemSetting where accountid=:accountid and SettingCode='S_CMN_0003'"; OracleParameter[] parmeters1 = new OracleParameter[] { new OracleParameter(":accountid",sUserInfo.AccountID), }; DataSet dsSystemSettings = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsSystemSettings != null && dsSystemSettings.Tables[0].Rows.Count > 0) { // 算出此月一共多少天,防止设置的值,大于当月的天数 int daysCount = DateTime.DaysInMonth(Year, Month); if (dsSystemSettings.Tables[0].Rows[0]["SettingValue"].ToString() == "月末" || dsSystemSettings.Tables[0].Rows[0]["SettingValue"].ToString() == "0") { dateStartTime = new DateTime(Year, Month, 1); dateEndTime = new DateTime(Year, Month, daysCount, 23, 59, 59); } else { // 选择的值,大于当月的天数 if (Convert.ToInt32(dsSystemSettings.Tables[0].Rows[0]["SettingValue"]) > daysCount) { dateEndTime = new DateTime(Year, Month, daysCount, 23, 59, 59); dateStartTime = dateEndTime.Value.AddMonths(-1).AddDays(1); } else { dateEndTime = new DateTime(Year, Month, Convert.ToInt32(dsSystemSettings.Tables[0].Rows[0]["SettingValue"]), 23, 59, 59); dateStartTime = dateEndTime.Value.AddMonths(-1).AddDays(1); } } } //dateStartTime = new DateTime(2015, 9, 8); //dateEndTime = new DateTime(2015,9, 8, 23, 59, 59); //dateEndTime = dateStartTime.Value.AddDays(10); #endregion #region 根据筛选日期往临时表里插入数据 parmeters1 = new OracleParameter[] { new OracleParameter(":dateStartTime",OracleDbType.Date,dateStartTime,ParameterDirection.Input), new OracleParameter(":dateEndTime",OracleDbType.Date,dateEndTime,ParameterDirection.Input), new OracleParameter(":accountid",sUserInfo.AccountID), }; // 生产数据临时表 // sqlString = @"insert into TMP_PAM_ProductionData // select // ProductionDataID, // BarCode, // CentralizedBatchNo, // ProductionLineID, // ProductionLineCode, // ProductionLineName, // ProcedureID, // ProcedureCode, // ProcedureName, // ProcedureModel, // ModelType, // PieceType, // IsReworked, // NodeType, // IsPublicBody, // IsReFire, // GoodsLevelID, // GoodsLevelTypeID, // SpecialRepairFlag, // OrganizationID, // GoodsID, // GoodsCode, // GoodsName, // UserID, // UserCode, // UserName, // ClassesSettingID, // KilnID, // KilnCode, // KilnName, // KilnCarID, // KilnCarCode, // KilnCarName, // KilnCarBatchNo, // KilnCarPosition, // ReworkProcedureID, // ReworkProcedureCode, // ReworkProcedureName, // GroutingDailyID, // GroutingDailyDetailID, // GroutingLineID, // GroutingLineCode, // GroutingLineName, // GMouldTypeID, // CanManyTimes, // GroutingLineDetailID, // GroutingDate, // GroutingMouldCode, // MouldCode, // GroutingUserID, // GroutingUserCode, // GroutingNum, // Remarks, // AccountDate, // SettlementFlag, // AccountID, // ValueFlag, // CreateTime, // CreateUserID, // UpdateTime, // UpdateUserID, // OPTimeStamp // from TP_PM_ProductionData where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1 ";//and SettlementFlag=0 // intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //#region 根据筛选日期更新生产数据结算标识 //// 更新生产数据结算标识 //sqlString = @"update TP_PM_ProductionData set SettlementFlag=1 where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1 and SettlementFlag=0"; //intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //#endregion // 生产缺陷 sqlString = @"insert into TMP_PAM_Defect select ProductionDefectID, ProductionDataID, BarCode, ProductionLineID, ProductionLineCode, ProductionLineName, ProcedureID, ProcedureCode, ProcedureName, UserID, UserCode, UserName, GoodsID, GoodsCode, GoodsName, DefectID, DefectCode, DefectName, DefectPositionID, DefectPositionCode, DefectPositionName, ScrapResponFlag, DefectProductionDataID, DefectProcedureID, DefectProcedureCode, DefectProcedureName, DefectUserID, DefectUserCode, DefectUserName, DefectJobs, DefectFine, MissedUserID, MissedUserCode, MissedUserName, Remarks, AccountID, ValueFlag, CreateTime, CreateUserID, UpdateTime, UpdateUserID, OPTimeStamp from TP_PM_Defect where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1"; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //生产缺陷责任者 sqlString = @"insert into TMP_PAM_DefectResponsible select ProductionDefectID, StaffID, StaffStatus, UserID, UserCode, UJobsID, SJobsID, AccountID, ValueFlag, CreateTime, CreateUserID, UpdateTime, UpdateUserID, OPTimeStamp from TP_PM_DefectResponsible where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1"; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); // //缺陷漏检责任者 // sqlString = @"insert into TP_PAM_DefectMissedResponsible // select * from TP_PM_DefectMissedResponsible where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1"; // intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //废弃产品 sqlString = @"insert into TMP_PAM_ScrapProduct select ScrapProductID, BarCode, ProductionLineID, ProductionLineCode, ProductionLineName, ProcedureID, ProcedureCode, ProcedureName, GoodsID, GoodsCode, GoodsName, GroutingDailyID, GroutingDailyDetailID, GroutingDate, GroutingLineID, GroutingLineCode, GroutingLineName, GMouldTypeID, GroutingLineDetailID, GroutingMouldCode, MouldCode, GroutingUserID, GroutingUserCode, GroutingNum, IsPublicBody, IsReFire, SpecialRepairFlag, GoodsLevelID, GoodsLevelTypeID, ResponType, ScrapFine, ScrapDate, Rreason, Remarks, AuditStatus, Auditor, AuditDate, AuditOpinion, AccountDate, KilnID, KilnCode, KilnName, KilnCarID, KilnCarCode, KilnCarName, KilnCarBatchNo, KilnCarPosition, AccountID, ValueFlag, CreateTime, CreateUserID, UpdateTime, UpdateUserID, OPTimeStamp from TP_PM_ScrapProduct where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1 and AuditStatus=1"; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //产品废弃责任工序 sqlString = @"insert into TMP_PAM_ResponProcedure select ResponProcedureID, ScrapProductID, BarCode, ProductionDataID, ProductionLineID, ProductionLineCode, ProductionLineName, ProcedureID, ProcedureCode, ProcedureName, UserID, UserCode, UserName, Remarks, AccountID, ValueFlag, CreateTime, CreateUserID, UpdateTime, UpdateUserID, OPTimeStamp from TP_PM_ResponProcedure where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1 "; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //产品废弃责任者 sqlString = @"insert into TMP_PAM_ScrapResponsible select ResponsibleID, ScrapProductID, BarCode, ResponType, ResponProcedureID, ScrapFine, StaffID, StaffStatus, UserID, UserCode, UJobsID, SJobsID, AccountID, CreateTime, CreateUserID, UpdateTime, UpdateUserID, OPTimeStamp from TP_PM_ScrapResponsible where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid "; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //成品 (干补补贴用) sqlString = @"insert into TMP_PAM_FinishedProduct select BarCode, ProductionLineID, ProductionLineCode, ProductionLineName, IsPublicBody, IsReFire, SpecialRepairFlag, GoodsLevelID, GoodsLevelTypeID, GoodsID, GoodsCode, GoodsName, GroutingDailyID, GroutingDailyDetailID, GroutingDate, GroutingLineID, GroutingLineCode, GroutingLineName, GMouldTypeID, GroutingLineDetailID, GroutingMouldCode, MouldCode, GroutingUserID, GroutingUserCode, GroutingNum, Remarks, AccountDate, SettlementFlag, KilnID, KilnCode, KilnName, KilnCarID, KilnCarCode, KilnCarName, KilnCarBatchNo, KilnCarPosition, AccountID, ValueFlag, CreateTime, CreateUserID, UpdateTime, UpdateUserID, OPTimeStamp from TP_PM_FinishedProduct where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1"; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion #region 读取工资方案,用来最外层循环,以后可以是多个方法,目前只有一个工资方案 sqlString = "select PayPlanID from TP_PAS_PayPlan where AccountID=:AccountID and ValueFlag=1"; parmeters1 = new OracleParameter[] { new OracleParameter(":AccountID",sUserInfo.AccountID), }; DataSet dsPayPlan = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion // dsPayPlan为工资方案数据集 if (dsPayPlan != null && dsPayPlan.Tables[0].Rows.Count > 0) { // 进入循环, for (int i = 0; i < dsPayPlan.Tables[0].Rows.Count; i++) { #region 查出计件工资策略 sqlString = @"select * from TP_PAT_Piecework where accountid=:accountid and valueflag=1 and PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":accountid",sUserInfo.AccountID), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dsPiecework = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); int PieceTacticsID = 0; //计件工资策略ID string PieceType = ""; // 工序类型 decimal PieceCoefficient = 1; // 计件系数 string DamageFlag = ""; //损坯计算标识 decimal? DamageCoefficient = null; //损坯系数 string UnqualifiedFlag = ""; //次品计算标识 decimal? UnqualifiedCoefficient = null; //次品系数 string QualifiedFlag = ""; //副品计算标识 decimal? QualifiedCoefficient = null; //副品系数 if (dsPiecework != null && dsPiecework.Tables[0].Rows.Count > 0) { // 有且只能一个对应的工资方案,直接取table0行,如果取出多行,此数据不对,因为有且只能一行 // 赋值代码 PieceTacticsID = Convert.ToInt32(dsPiecework.Tables[0].Rows[0]["PieceTacticsID"].ToString()); PieceType = dsPiecework.Tables[0].Rows[0]["PieceType"].ToString(); //PieceProcedureID = Convert.ToInt32(dsPiecework.Tables[0].Rows[0]["PieceProcedureID"]); PieceCoefficient = Convert.ToDecimal(dsPiecework.Tables[0].Rows[0]["PieceCoefficient"]); DamageFlag = dsPiecework.Tables[0].Rows[0]["DamageFlag"].ToString(); DamageCoefficient = Convert.ToDecimal(dsPiecework.Tables[0].Rows[0]["DamageCoefficient"]); UnqualifiedFlag = dsPiecework.Tables[0].Rows[0]["UnqualifiedFlag"].ToString(); UnqualifiedCoefficient = Convert.ToDecimal(dsPiecework.Tables[0].Rows[0]["UnqualifiedCoefficient"]); QualifiedFlag = dsPiecework.Tables[0].Rows[0]["QualifiedFlag"].ToString(); QualifiedCoefficient = Convert.ToDecimal(dsPiecework.Tables[0].Rows[0]["QualifiedCoefficient"]); //QualityBaseProcedureID = Convert.ToInt32(dsPiecework.Tables[0].Rows[0]["QualityBaseProcedureID"]); } #endregion #region 查出计件工资策略(计件工序) sqlString = "select PieceTacticsID,ProcedureID,ProcedureFlag from TP_PAT_PieceProcedure where PieceTacticsID=:PieceTacticsID and ProcedureFlag=1"; parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",PieceTacticsID), }; DataSet dsPieceProcedure_1 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); sqlString = "select PieceTacticsID,ProcedureID,ProcedureFlag from TP_PAT_PieceProcedure where PieceTacticsID=:PieceTacticsID and ProcedureFlag=2"; parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",PieceTacticsID), }; DataSet dsPieceProcedure_2 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion string ProcedureIDS_Delete = "0"; //默认给个0,怕没有些去进行筛选出现错误 for (int p1 = 0; p1 < dsPieceProcedure_1.Tables[0].Rows.Count; p1++) { if(p1==0) { ProcedureIDS_Delete = ""; } ProcedureIDS_Delete = ProcedureIDS_Delete + dsPieceProcedure_1.Tables[0].Rows[p1]["ProcedureID"].ToString() + ","; } ProcedureIDS_Delete = ProcedureIDS_Delete.Trim(','); dsPieceProcedure_1.Tables[0].Merge(dsPieceProcedure_2.Tables[0]); string ProcedureIDS_New = ""; for (int a1 = 0; a1 < dsPieceProcedure_1.Tables[0].Rows.Count; a1++) { ProcedureIDS_New += dsPieceProcedure_1.Tables[0].Rows[a1]["ProcedureID"].ToString() + ","; } ProcedureIDS_New = ProcedureIDS_New.Trim(','); //modify wangx 20150917 parmeters1 = new OracleParameter[] { new OracleParameter(":dateStartTime",OracleDbType.Date,dateStartTime,ParameterDirection.Input), new OracleParameter(":dateEndTime",OracleDbType.Date,dateEndTime,ParameterDirection.Input), new OracleParameter(":accountid",sUserInfo.AccountID), new OracleParameter(":PieceTacticsID",PieceTacticsID), }; // 生产数据临时表 sqlString = @"insert into TMP_PAM_ProductionData select ProductionDataID, BarCode, CentralizedBatchNo, ProductionLineID, ProductionLineCode, ProductionLineName, ProcedureID, ProcedureCode, ProcedureName, ProcedureModel, ModelType, PieceType, IsReworked, NodeType, IsPublicBody, IsReFire, GoodsLevelID, GoodsLevelTypeID, SpecialRepairFlag, OrganizationID, GoodsID, GoodsCode, GoodsName, UserID, UserCode, UserName, ClassesSettingID, KilnID, KilnCode, KilnName, KilnCarID, KilnCarCode, KilnCarName, KilnCarBatchNo, KilnCarPosition, ReworkProcedureID, ReworkProcedureCode, ReworkProcedureName, GroutingDailyID, GroutingDailyDetailID, GroutingLineID, GroutingLineCode, GroutingLineName, GMouldTypeID, CanManyTimes, GroutingLineDetailID, GroutingDate, GroutingMouldCode, MouldCode, GroutingUserID, GroutingUserCode, GroutingNum, Remarks, AccountDate, SettlementFlag, AccountID, ValueFlag, CreateTime, CreateUserID, UpdateTime, UpdateUserID, OPTimeStamp from TP_PM_ProductionData where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1 and (TP_PM_ProductionData.ProcedureID in(select ProcedureID from TP_PAT_PieceProcedure where PieceTacticsID=:PieceTacticsID ) or TP_PM_ProductionData.ModelType=-1)"; //and (TP_PM_ProductionData.ProcedureID in(select ProcedureID from TP_PAT_PieceProcedure where PieceTacticsID=:PieceTacticsID ) // or TP_PM_ProductionData.ModelType=-1) intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #region 根据筛选日期更新生产数据结算标识 if (UpdateSettlementFlag) { // 更新生产数据结算标识 sqlString = @"update TP_PM_ProductionData set SettlementFlag=1 where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1 and SettlementFlag=0 and (TP_PM_ProductionData.ProcedureID in(select ProcedureID from TP_PAT_PieceProcedure where PieceTacticsID=:PieceTacticsID ) or TP_PM_ProductionData.ModelType=-1)"; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } #endregion //modify wangx 20150917 end #region 查出工资方案参数设定 sqlString = "select SettingCode,SettingName,PayPlanID,SettingValue from TP_PAS_PayPlanSetting where PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dsPayPlanSetting = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion // 1.算出是否有新品,还是老品 DataRow[] drMonth = dsPayPlanSetting.Tables[0].Select("SettingCode='01001'"); int newGoodsMonth = Convert.ToInt32(drMonth[0]["SettingValue"]); //新产品适应周期(月) #region 查出工资临时生产数据表数据,用于计算工资 //查出在产品工介分类中的生产数据,用于计算每个人的工资 sqlString = @"select TMP_PAM_ProductionData.ProductionDataID, TMP_PAM_ProductionData.BarCode, TMP_PAM_ProductionData.ProcedureID, TMP_PAM_ProductionData.GoodsID, TMP_PAM_ProductionData.UserID, TP_MST_Goods.StartingDate, TP_PAM_GoodsWagesType.WagesTypeID, TMP_PAM_ProductionData.GoodsLevelTypeID, case when add_months(TP_MST_Goods.StartingDate, :month)>TMP_PAM_ProductionData.Groutingdate then 1 else 3 end as GoodsFlag, TMP_PAM_ProductionData.ModelType from TMP_PAM_ProductionData inner join TP_PAM_GoodsWagesType on TMP_PAM_ProductionData.GoodsID=TP_PAM_GoodsWagesType.GoodsID left join TP_MST_Goods on TP_PAM_GoodsWagesType.GoodsID=TP_MST_Goods.GoodsID order by TMP_PAM_ProductionData.UserID "; parmeters1 = new OracleParameter[] { new OracleParameter(":month",newGoodsMonth), }; DataSet dsTMPProductionData = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion #region 查出工资方案对应工种的员工,用于给每个员工结算工资 sqlString = @"select TP_HR_Staff.StaffID,TP_HR_Staff.StaffStatus ,TP_HR_Staff.EntryDate,TP_HR_Staff.TurnoverDate,TP_HR_Staff.ExProbationEndDate, TP_MST_UserStaff.UserID from TP_HR_Staff inner join TP_MST_UserStaff on TP_HR_Staff.StaffID=TP_MST_UserStaff.StaffID where TP_HR_Staff.Jobs in ( select JobsID from TP_PAM_JobsPayPlan where PayPlanID=:PayPlanID ) and TP_HR_Staff.accountid=:accountid and TP_HR_Staff.valueflag=1 order by TP_MST_UserStaff.UserID ";//and userid=547 parmeters1 = new OracleParameter[] { new OracleParameter(":accountid",sUserInfo.AccountID), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dsJobsPayPlan = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion #region 查出全部废弃产品表数据,用于计算工资 sqlString = @"select TMP_PAM_ResponProcedure.UserID,TP_PAM_GoodsWagesType.WagesTypeID,TP_MST_Goods.StartingDate,TMP_PAM_ScrapProduct.barcode,TMP_PAM_ScrapProduct.AuditStatus, case when add_months(TP_MST_Goods.StartingDate, :month)>TMP_PAM_ScrapProduct.Groutingdate then 1 else 3 end as GoodsFlag from TMP_PAM_ScrapProduct left join TMP_PAM_ResponProcedure on TMP_PAM_ScrapProduct.ScrapProductID=TMP_PAM_ResponProcedure.ScrapProductID left join TP_PAM_GoodsWagesType on TMP_PAM_ScrapProduct.GoodsID=TP_PAM_GoodsWagesType.GoodsID left join TP_MST_Goods on TP_PAM_GoodsWagesType.GoodsID=TP_MST_Goods.GoodsID"; parmeters1 = new OracleParameter[] { new OracleParameter(":month",newGoodsMonth), }; DataSet dsTMPResponProcedure = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion #region 查出产品工价分类 sqlString = @"select WagesTypeID,GoodsID from TP_PAM_GoodsWagesType "; DataSet dsGoodsWagesType = oracleTrConn.GetSqlResultToDs(sqlString); #endregion #region 查出产品工价 sqlString = @"select * from TP_PAT_Wages "; DataSet dsWages = oracleTrConn.GetSqlResultToDs(sqlString); #endregion #region 查出质量工价 sqlString = @"select PieceTacticsID,WagesTypeID,QualityRate,Balance,QualityWages from TP_PAT_QualityWages order by QualityRate desc "; DataSet dsQualityWages = oracleTrConn.GetSqlResultToDs(sqlString); #endregion #region 查出临时成品表,用于计算干补补贴,这些数据肯定配置了产品工价 sqlString = @"select TMP_PAM_FinishedProduct.BarCode, TMP_PAM_FinishedProduct.SpecialRepairFlag, TMP_PAM_FinishedProduct.GoodsLevelID, TMP_PAM_FinishedProduct.GoodsLevelTypeID, TMP_PAM_FinishedProduct.GoodsID, TP_PAM_GoodsWagesType.GoodsID, TP_PAM_GoodsWagesType.WagesTypeID from TMP_PAM_FinishedProduct inner join TP_PAM_GoodsWagesType on TMP_PAM_FinishedProduct.GoodsID=TP_PAM_GoodsWagesType.GoodsID "; DataSet dsFinishedProduct = oracleTrConn.GetSqlResultToDs(sqlString); #endregion #region 读出对应解决方案品质考核策略,可以存在多个 sqlString = @"select TP_PAT_QualityASS.QualityASSTacticsID, TP_PAT_QualityASS.PayPlanID, TP_PAT_QualityASS.DefectFine, TP_MST_DataDictionary.Dictionaryvalue from TP_PAT_QualityASS left join TP_MST_DataDictionary on TP_PAT_QualityASS.DefectFine=TP_MST_DataDictionary.DictionaryID where PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dsQualityASS = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion #region 读出对应解决方案品质考核策略工序 //sqlString = "select * from TP_PAT_QualityProcedure"; //DataSet dsQualityProcedure = oracleTrConn.GetSqlResultToDs(sqlString); #endregion #region 查出生产缺陷数据表(暂时未用) sqlString = @"select TMP_PAM_Defect.ProductionDataID, TMP_PAM_Defect.BarCode, TMP_PAM_Defect.ProcedureID, TMP_PAM_Defect.UserID, TMP_PAM_Defect.DefectProcedureID, TMP_PAM_Defect.DefectUserID, TMP_PAM_Defect.DefectFine, TP_PAM_GoodsWagesType.GoodsID, TP_PAM_GoodsWagesType.WagesTypeID from TMP_PAM_Defect inner join TP_PAM_GoodsWagesType on TMP_PAM_Defect.GoodsID=TP_PAM_GoodsWagesType.GoodsID "; DataSet dsDefect = oracleTrConn.GetSqlResultToDs(sqlString); #endregion #region 损坯补贴(用到的数据源) string sql = @"select TMP_PAM_ScrapProduct.barcode from TMP_PAM_ScrapProduct left join TMP_PAM_ResponProcedure on TMP_PAM_ScrapProduct.ScrapProductID=TMP_PAM_ResponProcedure.ScrapProductID "; sql = sql + " where TMP_PAM_ResponProcedure.UserID is null "; DataSet dsScrap_New = oracleTrConn.GetSqlResultToDs(sql); #endregion #region 缺陷数量用到的数据源 // 求出缺陷数 sqlString = @"select distinct TMP_PAM_ProductionData.barcode,TP_PAM_GoodsWagesType.WagesTypeID,TMP_PAM_Defect.goodsid,TMP_PAM_Defect.DefectFine,TMP_PAM_ProductionData.UserID,TMP_PAM_Defect.defectuserid from TMP_PAM_Defect inner join TP_PAM_GoodsWagesType on TMP_PAM_Defect.goodsID=TP_PAM_GoodsWagesType.goodsID left join TMP_PAM_ProductionData on TMP_PAM_Defect.ProductionDataID=TMP_PAM_ProductionData.ProductionDataID "; DataSet ds_w = oracleTrConn.GetSqlResultToDs(sqlString); #endregion // 读取计件工资策略 int PieceTacticsID_Insert = 0; int PieceTacticsID_Insert2 = 0; int PieceTacticsID_Insert3 = 0; sqlString = "select PieceTacticsID from TP_PAT_Piecework where PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dss = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dss != null && dss.Tables[0].Rows.Count > 0) { PieceTacticsID_Insert = Convert.ToInt32(dss.Tables[0].Rows[0]["PieceTacticsID"]); PieceTacticsID_Insert2 = Convert.ToInt32(dss.Tables[0].Rows[0]["PieceTacticsID"]); PieceTacticsID_Insert3 = Convert.ToInt32(dss.Tables[0].Rows[0]["PieceTacticsID"]); } // 读取计件工资策略 int PieceTacticsID_Insert4 = 0; sqlString = "select QualityASSTacticsID from TP_PAT_QualityASS where PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dss3 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dss3 != null && dss3.Tables[0].Rows.Count > 0) { PieceTacticsID_Insert4 = Convert.ToInt32(dss3.Tables[0].Rows[0]["QualityASSTacticsID"]); } // 变量集 DataSet dsExistPiecework = null; // 用于插入工资单各类数值 decimal? totalcount_Piecegiework = 0; //计件工资 decimal? totalcount_Scrap = 0; //损坯补贴 decimal? totalcount_RepairSubsidy = 0; //干补补贴 decimal temp_Repair = 0; DataRow[] drPieceProcedureCount = null; DataRow[] dr2 = null; DataRow[] rt = null; DataRow[] drQualityBaseProcedure = null; DataRow[] r7 = null; DataSet dsTemp = null; DataRow[] r17 = null; DataRow[] r18 = null; DataRow[] rr6 = null; // 缺陷数量 DataRow[] drDefect = null; DataSet ds3 = null; DataSet dsUserStaffCount = null; DataRow[] drGoodsCount = null; DataTable dtWagesType = null; DataTable dtGoodsFlag = null; int PieceProcedureCount = 0; //计件数量 int UnqualifiedCount = 0; //次品数量 int QualifiedCount = 0; //副品数量 int QualityBaseProcedureCount = 0; //出窑数量 string FinishedProduct_BarCode = ""; //成品过滤条码集 DataSet ds = null; DataRow[] drUnqualifiedCount = null; DataRow[] drQualified = null; decimal QualityBaseProcedureTotal = 0;//只是算出优等品率,还有和产品质量区间进行匹配 decimal QualityWages = 0; //质量工价 ,用于最后计算相乘 decimal Quality = 0; //质量 DataRow[] drQualityWages = null; int scrapcount_1 = 0; //损坯数量 decimal scrap_StandardWages = 0; //损坯标准工价 decimal scrap_DamageSubsidyRate = 0; //损坯补贴系数 decimal scrap_DamageSubsidy = 0; //损坯补贴 decimal temp_Scrap = 0;// //最后损坯补贴钱 decimal? totalcount_AdminEXA2 = 0;// 行政工资 DataSet dsAdminEXA2 = null; DataSet ds44 = null; // 变量集结束 // 遍历工种数据集,统计每个员工的工资 //dsJobsPayPlan.Tables[0].Rows.Count for (int j = 0; j < dsJobsPayPlan.Tables[0].Rows.Count; j++) { // #region 查出工资临时生产数据表数据,用于计算工资 // //查出在产品工介分类中的生产数据,用于计算每个人的工资 // sqlString = @"select // TMP_PAM_ProductionData.ProductionDataID, // TMP_PAM_ProductionData.BarCode, // TMP_PAM_ProductionData.ProcedureID, // TMP_PAM_ProductionData.GoodsID, // TMP_PAM_ProductionData.UserID, // TP_MST_Goods.StartingDate, // TP_PAM_GoodsWagesType.WagesTypeID, // TMP_PAM_ProductionData.GoodsLevelTypeID, // case // when add_months(TP_MST_Goods.StartingDate, :month)>TMP_PAM_ProductionData.Groutingdate // then 3 else 1 end as GoodsFlag // from // TMP_PAM_ProductionData // inner join TP_PAM_GoodsWagesType // on TMP_PAM_ProductionData.GoodsID=TP_PAM_GoodsWagesType.GoodsID // left join TP_MST_Goods // on TP_PAM_GoodsWagesType.GoodsID=TP_MST_Goods.GoodsID where TMP_PAM_ProductionData.userid=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"]; // parmeters1 = new OracleParameter[] // { // new OracleParameter(":month",newGoodsMonth), // }; // DataSet dsTMPProductionData = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); // #endregion //string ProcedureIDS_Delete = "0"; //默认给个0,怕没有些去进行筛选出现错误 //for (int p1 = 0; p1 < dsPieceProcedure_1.Tables[0].Rows.Count; p1++) //{ // ProcedureIDS_Delete = ProcedureIDS_Delete + dsPieceProcedure_1.Tables[0].Rows[p1]["ProcedureID"].ToString() + ","; //} //ProcedureIDS_Delete = ProcedureIDS_Delete.Trim(','); // modify wangx 20150911 //1.查出此员在是否存在计件工资 DataRow[] r_UserID = dtExistUserID.Select("userid=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"]); if (r_UserID.Length > 0) { //已经存在 #region (1)插入计件工资 sqlString = "select 1 from TP_PAR_Piecework where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; dsExistPiecework = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsExistPiecework != null && dsExistPiecework.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_Piecework ( YYYYMM, StaffID, PayPlanID, StaffFlag, GoodsFlag, WagesTypeID, PieceworkNum, PieceCoefficient, DamageNum, DamageCoefficient, UnqualifiedNum, UnqualifiedCoefficient, QualifiedNum, QualifiedCoefficient, QualityBaseNum, QualityRate, QualityWages, Amount, PieceTacticsID ) select YYYYMM, :StaffID_New, PayPlanID, StaffFlag, GoodsFlag, WagesTypeID, PieceworkNum, PieceCoefficient, DamageNum, DamageCoefficient, UnqualifiedNum, UnqualifiedCoefficient, QualifiedNum, QualifiedCoefficient, QualityBaseNum, QualityRate, QualityWages, Amount, PieceTacticsID from TP_PAR_Piecework where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID "; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID_New",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":StaffID",r_UserID[0]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } #endregion #region (2)插入损坏补贴 sqlString = @"insert into TP_PAR_DamageSubsidy ( YYYYMM, StaffID, PayPlanID, WagesTypeID, DamageNum, StandardWages, DamageSubsidyRate, DamageSubsidy, Amount, PieceTacticsID ) select YYYYMM, :StaffID_New, PayPlanID, WagesTypeID, DamageNum, StandardWages, DamageSubsidyRate, DamageSubsidy, Amount, PieceTacticsID from TP_PAR_DamageSubsidy where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID_New",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":StaffID",r_UserID[0]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion #region (3)插入干补补贴 sqlString = @"insert into TP_PAR_RepairSubsidy ( YYYYMM, StaffID, PayPlanID, WagesTypeID, RSuperioNum, RSuperiorCoefficient, RQualifiedNum, RQualifiedCoefficient, StandardWages, RepairSubsidyRate, RepairSubsidy, Amount, PieceTacticsID ) select YYYYMM, :StaffID_New, PayPlanID, WagesTypeID, RSuperioNum, RSuperiorCoefficient, RQualifiedNum, RQualifiedCoefficient, StandardWages, RepairSubsidyRate, RepairSubsidy, Amount, PieceTacticsID from TP_PAR_RepairSubsidy where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID "; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID_New",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":StaffID",r_UserID[0]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion #region (4)插入品质考核 sqlString = @"insert into TP_PAR_QualityASS ( YYYYMM, StaffID, PayPlanID, WagesTypeID, DefectFine, DefectNum, QualityBaseNum, QualityRate, Amount, QualityASSTacticsID ) select YYYYMM, :StaffID_New, PayPlanID, WagesTypeID, DefectFine, DefectNum, QualityBaseNum, QualityRate, Amount, QualityASSTacticsID from TP_PAR_QualityASS where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID "; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID_New",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":StaffID",r_UserID[0]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion totalcount_AdminEXA2 = 0;// 行政工资 #region (5)插入行政考核 sqlString = "select Amount from TP_PAD_AdminEXA where StaffID=:StaffID and AuditStatus=1 and AuditlDate >=:dateStartTime and AuditlDate<=:dateEndTime";// parmeters1 = new OracleParameter[] { //new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[i]["UserID"]), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":dateStartTime",dateStartTime), new OracleParameter(":dateEndTime",dateEndTime), }; dsAdminEXA2 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsAdminEXA2 != null && dsAdminEXA2.Tables[0].Rows.Count > 0) { for (int y = 0; y < dsAdminEXA2.Tables[0].Rows.Count; y++) { totalcount_AdminEXA2 += Convert.ToDecimal(dsAdminEXA2.Tables[0].Rows[y]["Amount"]); } sqlString = "update TP_PAD_AdminEXA set SettlementFlag=1 where SettlementFlag=0 and StaffID=:StaffID and AuditStatus=1 and AuditlDate >=:dateStartTime and AuditlDate<=:dateEndTime"; parmeters1 = new OracleParameter[] { new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":dateStartTime",dateStartTime), new OracleParameter(":dateEndTime",dateEndTime), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } #endregion // 防止一个员工在多个工号下面 sqlString = "select Piecework,DamageSubsidy,RepairSubsidy,QualityEXA,AdminEXA,ADAmount,TotalAmount from TP_PAR_Payroll where YYYYMM=:YYYYMM and StaffID=:StaffID "; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",OracleDbType.Varchar2,(Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())),ParameterDirection.Input), new OracleParameter(":StaffID",OracleDbType.Int32,dsJobsPayPlan.Tables[0].Rows[j]["StaffID"],ParameterDirection.Input), }; ds44 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (ds44 != null && ds44.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_Payroll ( YYYYMM, StaffID, Piecework, DamageSubsidy, RepairSubsidy, QualityEXA, AdminEXA, ADAmount, TotalAmount, AuditStatus, AccountID, CreateUserID, UpdateUserID ) select YYYYMM, :StaffID_New, Piecework, DamageSubsidy, RepairSubsidy, QualityEXA, :AdminEXA, 0, Piecework+DamageSubsidy+RepairSubsidy+QualityEXA+:AdminEXA, 0, AccountID, CreateUserID, UpdateUserID from TP_PAR_Payroll where YYYYMM=:YYYYMM and StaffID=:StaffID "; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID_New",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":StaffID",r_UserID[0]["StaffID"]), new OracleParameter(":AdminEXA",totalcount_AdminEXA2), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } else { sqlString = @"update TP_PAR_Payroll set Piecework=Piecework+:Piecework, DamageSubsidy=DamageSubsidy+:DamageSubsidy, RepairSubsidy=RepairSubsidy+:RepairSubsidy, QualityEXA=QualityEXA+:QualityEXA, AdminEXA=AdminEXA+:AdminEXA, ADAmount=AdminEXA+:ADAmount, TotalAmount=TotalAmount+:TotalAmount where YYYYMM=:YYYYMM and StaffID=:StaffID "; decimal? a = (Convert.ToDecimal(ds44.Tables[0].Rows[0]["Piecework"]) + Convert.ToDecimal(ds44.Tables[0].Rows[0]["DamageSubsidy"]) + Convert.ToDecimal(ds44.Tables[0].Rows[0]["RepairSubsidy"]) + Convert.ToDecimal(ds44.Tables[0].Rows[0]["QualityEXA"]) + Convert.ToDecimal(ds44.Tables[0].Rows[0]["AdminEXA"])); parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",OracleDbType.Varchar2,(Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())),ParameterDirection.Input), new OracleParameter(":StaffID",OracleDbType.Int32,dsJobsPayPlan.Tables[0].Rows[j]["StaffID"],ParameterDirection.Input), //new OracleParameter(":PayPlanID",OracleDbType.Int32,dsPayPlan.Tables[0].Rows[i]["PayPlanID"],ParameterDirection.Input), new OracleParameter(":Piecework",OracleDbType.Decimal,Convert.ToDecimal(ds44.Tables[0].Rows[0]["Piecework"]),ParameterDirection.Input), new OracleParameter(":DamageSubsidy",OracleDbType.Decimal,Convert.ToDecimal(ds44.Tables[0].Rows[0]["DamageSubsidy"]),ParameterDirection.Input), new OracleParameter(":RepairSubsidy",OracleDbType.Decimal,Convert.ToDecimal(ds44.Tables[0].Rows[0]["RepairSubsidy"]),ParameterDirection.Input), new OracleParameter(":QualityEXA",OracleDbType.Decimal,Convert.ToDecimal(ds44.Tables[0].Rows[0]["QualityEXA"]),ParameterDirection.Input), new OracleParameter(":AdminEXA",OracleDbType.Decimal,Convert.ToDecimal(ds44.Tables[0].Rows[0]["AdminEXA"]),ParameterDirection.Input), new OracleParameter(":ADAmount",OracleDbType.Decimal,0,ParameterDirection.Input), new OracleParameter(":TotalAmount",OracleDbType.Decimal,a,ParameterDirection.Input), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } continue;//继续循环 } else { DataRow dr_NEW = dtExistUserID.NewRow(); dr_NEW["staffid"] = dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]; dr_NEW["userid"] = dsJobsPayPlan.Tables[0].Rows[j]["UserID"]; dtExistUserID.Rows.Add(dr_NEW); } // modify wangx 20150911 end // 用于插入工资单各类数值 totalcount_Piecegiework = 0; //计件工资 totalcount_Scrap = 0; //损坯补贴 totalcount_RepairSubsidy = 0; //干补补贴 temp_Repair = 0; #region 查出这个工号下有多少员工,计件工资进行平分 sqlString = "select 1 from tp_mst_userstaff where userid=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString(); int userstaffcount = 1; dsUserStaffCount = oracleTrConn.GetSqlResultToDs(sqlString); if (dsUserStaffCount != null && dsUserStaffCount.Tables[0].Rows.Count > 0) { userstaffcount = dsUserStaffCount.Tables[0].Rows.Count; } #endregion #region 计件工资整体累计 if (PieceType == "0") // 工序计件 { // 查出这个工号,在此计件工序,有多少产品 drGoodsCount = dsTMPProductionData.Tables[0] .Select(string.Format("UserID={0}", dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString())); if (drGoodsCount.Length > 0) // 此工号下代表有产品 { // 接下来在过滤产品分类有多少种,用来分别计算各分类的工资 // 以下表有多少行,去掉重复算出有多少个分类 dtWagesType = drGoodsCount.CopyToDataTable().DefaultView.ToTable(true, "WagesTypeID"); // 有多少产品标识 dtGoodsFlag = drGoodsCount.CopyToDataTable().DefaultView.ToTable(true, "GoodsFlag"); PieceProcedureCount = 0; //计件数量 UnqualifiedCount = 0; //次品数量 QualifiedCount = 0; //副品数量 QualityBaseProcedureCount = 0; //出窑数量 FinishedProduct_BarCode = ""; //成品过滤条码集 for (int wagestype = 0; wagestype < dtWagesType.Rows.Count; wagestype++) { for (int vv = 0; vv < dtGoodsFlag.Rows.Count; vv++) { decimal? temp_Piecegiework = 0; #region 1.求出各分类计件工序数量 PieceProcedureCount = 0; //每个分类之前置空 decimal PieceProcedureTotal = 0;//系数*数量 //下面开始计算每个分类的计件工资 for (int p1 = 0; p1 < dsPieceProcedure_1.Tables[0].Rows.Count; p1++) { drPieceProcedureCount = dsTMPProductionData.Tables[0] .Select(string.Format("UserID={0} and ProcedureID={1} and WagesTypeID={2} and GoodsFlag={3}", dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString(), dsPieceProcedure_1.Tables[0].Rows[p1]["ProcedureID"], dtWagesType.Rows[wagestype]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); foreach (DataRow r in drPieceProcedureCount) { if (!FinishedProduct_BarCode.Contains(r["barcode"].ToString())) FinishedProduct_BarCode = FinishedProduct_BarCode + r["barcode"].ToString() + ","; } PieceProcedureCount += drPieceProcedureCount.Length; //工序数量 } PieceProcedureTotal = PieceProcedureCount * PieceCoefficient; //工序数量*系数 #endregion 1.求出计件工序数量 #region 2.求出各工价分类损坯数量 int ScrapCount = 0; //损坯数量 decimal? Scrap = 0; //每个类别损坯的值 if (DamageFlag == "1") //计算损坯数量 { // 查出此人在计件工序的条码,完事关联报损表存在多少报损条码 string ProcedureIDS = "0"; //默认给个0,怕没有些去进行筛选出现错误 for (int p1 = 0; p1 < dsPieceProcedure_1.Tables[0].Rows.Count; p1++) { if(p1==0) { ProcedureIDS = ""; } ProcedureIDS = ProcedureIDS + dsPieceProcedure_1.Tables[0].Rows[p1]["ProcedureID"].ToString() + ","; } ProcedureIDS = ProcedureIDS.Trim(','); //if (dsJobsPayPlan.Tables[0].Rows[j]["Staffid"].ToString() == "1955") //{ // int a = 0; //} // 筛选出生产数据这几个工序所用的条码 DataRow[] dr_BarCode = dsTMPProductionData.Tables[0].Select(string.Format("UserID={0} and ProcedureID in ({1}) and WagesTypeID={2} and GoodsFlag={3}", dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString(), ProcedureIDS, dtWagesType.Rows[wagestype]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); if (dr_BarCode.Length > 0) { string temp_barcode = ""; foreach (DataRow r3 in dr_BarCode) //有可能出现重复barcode { dr2 = dsTMPResponProcedure.Tables[0].Select("barcode='" + r3["barcode"] + "' and AuditStatus=1 and UserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()); if (dr2.Length > 0) { if (!temp_barcode.Contains(r3["barcode"].ToString())) { // 有损坯数据 ScrapCount = ScrapCount + 1; } temp_barcode += r3["barcode"].ToString() + ","; } } } // end Scrap = ScrapCount * DamageCoefficient; //DamageCoefficient为损坯系数 } #endregion 2.求出损坯数量 end #region 3.求出各工价分类次品数 // 筛出产品分级为次品的生产数据,完事一个一个去查对应责任工号的,进行累加 drUnqualifiedCount = dsTMPProductionData.Tables[0] .Select(string.Format("WagesTypeID={0} and GoodsLevelTypeID=7 and GoodsFlag={1} ", dtWagesType.Rows[wagestype]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); UnqualifiedCount = 0; //次品数量 decimal? UnqualifiedTotal = 0;//系数*数量 if (drUnqualifiedCount.Length > 0) { // 表示有次品,但是得对应责任工号,进行累加 foreach (DataRow row in drUnqualifiedCount) { rt = dsDefect.Tables[0].Select("DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and ProductionDataID=" + row["ProductionDataID"]); if (rt.Length > 0) { // 多个缺陷也算一个数,所以直接+1 UnqualifiedCount = UnqualifiedCount + 1; } } UnqualifiedTotal = UnqualifiedCount * UnqualifiedCoefficient; } #endregion #region 4.求出各工价分类副品数 // 筛出产品分级为副品的生产数据,完事一个一个去查对应责任工号的,进行累加 drQualified = dsTMPProductionData.Tables[0] .Select(string.Format("WagesTypeID={0} and GoodsLevelTypeID=5 and GoodsFlag={1}", dtWagesType.Rows[wagestype]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); QualifiedCount = 0; //副品数量 decimal? QualifiedTotal = 0;//系数*数量 if (drQualified.Length > 0) { // 表示有副品,但是得对应责任工号,进行累加 foreach (DataRow row in drQualified) { rt = dsDefect.Tables[0].Select("DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and ProductionDataID=" + row["ProductionDataID"]); if (rt.Length > 0) { // 多个缺陷也算一个数,所以直接+1 QualifiedCount = QualifiedCount + 1; } } QualifiedTotal = QualifiedCount * QualifiedCoefficient; } #endregion 求出各工价分类副品数 #region 5.求出质量工价 string barcodes_Procedure = ""; QualityBaseProcedureCount = 0; for (int p1 = 0; p1 < dsPieceProcedure_2.Tables[0].Rows.Count; p1++) { drQualityBaseProcedure = dsTMPProductionData.Tables[0] .Select(string.Format("ProcedureID={0} and WagesTypeID={1}", dsPieceProcedure_2.Tables[0].Rows[p1]["ProcedureID"], dtWagesType.Rows[wagestype]["WagesTypeID"])); if (drQualityBaseProcedure.Length > 0) { foreach (DataRow r4 in drQualityBaseProcedure) { if (!barcodes_Procedure.Contains(r4["barcode"].ToString())) { QualityBaseProcedureCount += 1; // 质量工序数量 } barcodes_Procedure = barcodes_Procedure + r4["barcode"].ToString() + ","; } } } //if (dsJobsPayPlan.Tables[0].Rows[j]["Staffid"].ToString() == "1955") //{ // int a = 0; //} QualityBaseProcedureTotal = 0;//只是算出优等品率,还有和产品质量区间进行匹配 QualityWages = 0; //质量工价 ,用于最后计算相乘 Quality = 0; //质量 if (QualityBaseProcedureCount != 0) { QualityBaseProcedureTotal = Convert.ToDecimal((QualityBaseProcedureCount - UnqualifiedCount)) / Convert.ToDecimal(QualityBaseProcedureCount); } //查看此员工是否为正式员工还是试用员工,如果试用取工价类别的标准工价 // 1取出此工类下的产品工价区间 DataRow[] drWages = dsWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"]); decimal StandardWages = 0; if (drWages.Length > 0) { StandardWages = Convert.ToDecimal(drWages[0]["StandardWages"]); //标准工价 } if (dsJobsPayPlan.Tables[0].Rows[j]["ExProbationEndDate"].ToString() == "") //表示正式员工 { // 2取出此工类下的质量区间 drQualityWages = dsQualityWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"] + " and QualityRate<=" + QualityBaseProcedureTotal, "QualityRate desc"); if (drQualityWages.Length > 0) { //表示质量区间设置没有比优品率大的 QualityWages = Convert.ToDecimal(drQualityWages[0]["QualityWages"]); Quality = Convert.ToDecimal(drQualityWages[0]["QualityRate"]); } else { QualityWages = 0;// Convert.ToDecimal(drQualityWages[0]["QualityWages"]); } } else { if (Convert.ToDateTime(dsJobsPayPlan.Tables[0].Rows[j]["ExProbationEndDate"]) < DateTime.Now) { // 试用结束结束 // 2取出此工类下的质量区间 drQualityWages = dsQualityWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"] + " and QualityRate<=" + QualityBaseProcedureTotal); if (drQualityWages.Length > 0) { //表示质量区间设置没有比优品率大的 QualityWages = Convert.ToDecimal(drQualityWages[0]["QualityWages"]); Quality = Convert.ToDecimal(drQualityWages[0]["QualityRate"]); } else { QualityWages = 0;// Convert.ToDecimal(drQualityWages[0]["QualityWages"]); } } } #endregion //#region 查出这个工号下有多少员工,计件工资进行平分 //sqlString = "select 1 from tp_mst_userstaff where userid=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString(); //userstaffcount = 1; //dsUserStaffCount = oracleTrConn.GetSqlResultToDs(sqlString); //if (dsUserStaffCount != null && dsUserStaffCount.Tables[0].Rows.Count > 0) //{ // userstaffcount = dsUserStaffCount.Tables[0].Rows.Count; //} //#endregion totalcount_Piecegiework += ((PieceProcedureTotal - Scrap - UnqualifiedTotal - QualifiedTotal) * QualityWages) < 0 ? 0 : ((PieceProcedureTotal - Scrap - UnqualifiedTotal - QualifiedTotal) * QualityWages) / userstaffcount; temp_Piecegiework += ((PieceProcedureTotal - Scrap - UnqualifiedTotal - QualifiedTotal) * QualityWages) < 0 ? 0 : ((PieceProcedureTotal - Scrap - UnqualifiedTotal - QualifiedTotal) * QualityWages);// / userstaffcount // } #region 插入计件工资 sqlString = "select 1 from TP_PAR_Piecework where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[wagestype]["WagesTypeID"]), }; dsExistPiecework = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsExistPiecework != null && dsExistPiecework.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_Piecework ( YYYYMM, StaffID, PayPlanID, StaffFlag, GoodsFlag, WagesTypeID, PieceworkNum, PieceCoefficient, DamageNum, DamageCoefficient, UnqualifiedNum, UnqualifiedCoefficient, QualifiedNum, QualifiedCoefficient, QualityBaseNum, QualityRate, QualityWages, Amount, PieceTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :StaffFlag, :GoodsFlag, :WagesTypeID, :PieceworkNum, :PieceCoefficient, :DamageNum, :DamageCoefficient, :UnqualifiedNum, :UnqualifiedCoefficient, :QualifiedNum, :QualifiedCoefficient, :QualityBaseNum, :QualityRate, :QualityWages, :Amount, :PieceTacticsID )"; } else { sqlString = @"update TP_PAR_Piecework set YYYYMM=:YYYYMM, StaffID=:StaffID, PayPlanID=:PayPlanID, StaffFlag=:StaffFlag, PieceTacticsID=:PieceTacticsID, GoodsFlag=:GoodsFlag, WagesTypeID=:WagesTypeID, PieceworkNum=PieceworkNum+:PieceworkNum, PieceCoefficient=PieceCoefficient+:PieceCoefficient, DamageNum=DamageNum+:DamageNum, DamageCoefficient=DamageCoefficient+:DamageCoefficient, UnqualifiedNum=UnqualifiedNum+:UnqualifiedNum, UnqualifiedCoefficient=UnqualifiedCoefficient+:UnqualifiedCoefficient, QualifiedNum=QualifiedNum+:QualifiedNum, QualifiedCoefficient=QualifiedCoefficient+:QualifiedCoefficient, QualityBaseNum=QualityBaseNum+:QualityBaseNum, QualityRate=QualityRate+:QualityRate, QualityWages=QualityWages+:QualityWages, Amount=Amount+:Amount where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID "; } parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":StaffFlag",dsJobsPayPlan.Tables[0].Rows[j]["StaffStatus"]), //new OracleParameter(":BeginDate",dateStartTime), //new OracleParameter(":EndDate",dateEndTime), new OracleParameter(":GoodsFlag", dtGoodsFlag.Rows[vv]["GoodsFlag"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[wagestype]["WagesTypeID"]), //new OracleParameter(":GoodsID",null), new OracleParameter(":PieceworkNum",PieceProcedureCount), new OracleParameter(":PieceCoefficient",PieceCoefficient), new OracleParameter(":DamageNum",ScrapCount), new OracleParameter(":DamageCoefficient",DamageCoefficient), new OracleParameter(":UnqualifiedNum",UnqualifiedCount), new OracleParameter(":UnqualifiedCoefficient",UnqualifiedCoefficient), new OracleParameter(":QualifiedNum",QualifiedCount), new OracleParameter(":QualifiedCoefficient",QualifiedCoefficient), new OracleParameter(":QualityBaseNum",QualityBaseProcedureCount), new OracleParameter(":QualifiedCoefficient",QualifiedCoefficient), new OracleParameter(":QualityRate",QualityBaseProcedureTotal), new OracleParameter(":QualityWages",QualityWages), new OracleParameter(":Amount",temp_Piecegiework), new OracleParameter(":PieceTacticsID",PieceTacticsID_Insert), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion } FinishedProduct_BarCode = FinishedProduct_BarCode.Trim(','); #region 损坯补贴 scrapcount_1 = 0; //损坯数量 scrap_StandardWages = 0; //损坯标准工价 scrap_DamageSubsidyRate = 0; //损坯补贴系数 scrap_DamageSubsidy = 0; //损坯补贴 temp_Scrap = 0;// //最后损坯补贴钱 //1.查出此员工工号下所生产数据,即做过哪此产品条码 DataRow[] drScrapProduction = dsTMPProductionData.Tables[0].Select("UserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"]); if (drScrapProduction.Length > 0) { string inPro = ""; if (dsPieceProcedure_1 != null && dsPieceProcedure_1.Tables[0].Rows.Count > 0) { for (int zz = 0; zz < dsPieceProcedure_1.Tables[0].Rows.Count; zz++) { inPro = inPro + dsPieceProcedure_1.Tables[0].Rows[zz]["ProcedureID"].ToString() + ","; } inPro = inPro.Trim(','); } if (inPro == "") inPro = "0"; // 1. 查出此人计工序的条码 DataRow[] r5 = dsTMPProductionData.Tables[0].Select("UserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and ProcedureID in (" + inPro + ")"); string a1 = ""; int scrapcount = 0; string sqlInsertDamageSubsidy = "insert into TP_PAD_DamageSubsidy(Barcode,userID) values(:Barcode,:UserID)"; string sqladd = "select 1 from TP_PAD_DamageSubsidy where barcode=:barcode and userid=:userid"; if (r5.Length > 0) { // 有条码 foreach (DataRow rr in r5) { r7 = dsScrap_New.Tables[0].Select("barcode='" + rr["barcode"] + "'"); if (r7.Length > 0 && !a1.Contains(rr["barcode"].ToString())) { scrapcount = scrapcount + 1; a1 = a1 + rr["barcode"].ToString(); parmeters1 = new OracleParameter[] { new OracleParameter(":Barcode",rr["Barcode"]), new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), }; ds3 = oracleTrConn.GetSqlResultToDs(sqladd, parmeters1); if (ds3 != null && ds3.Tables[0].Rows.Count == 0) oracleTrConn.ExecuteNonQuery(sqlInsertDamageSubsidy, parmeters1); } } } //算出此工号,此工价分类存在条码,拼出条码,进而去报损查出非自身损坯的数量,进而计算 // sql = @"select TMP_PAM_ScrapProduct.barcode from TMP_PAM_ScrapProduct left join TMP_PAM_ResponProcedure // on TMP_PAM_ScrapProduct.ScrapProductID=TMP_PAM_ResponProcedure.ScrapProductID "; // sql = sql + " where TMP_PAM_ScrapProduct.barcode in (select barcode from TMP_PAM_ProductionData where UserID=:UserID and ProcedureID in (select TP_PAT_PieceProcedure.ProcedureID from TP_PAT_Piecework left join TP_PAT_PieceProcedure on TP_PAT_Piecework.PieceTacticsID=TP_PAT_PieceProcedure.PieceTacticsID and TP_PAT_PieceProcedure.ProcedureFlag=1 where TP_PAT_Piecework.PayPlanID=:PayPlanID)) "; // sql = sql + " and TMP_PAM_ResponProcedure.UserID is null"; // parmeters1 = new OracleParameter[] // { // //new OracleParameter(":barcodes",barcodes), // new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), // new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), // }; // DataSet dsTemp = oracleTrConn.GetSqlResultToDs(sql, parmeters1); //if (dsTemp.Tables[0].Rows.Count > 0) if (scrapcount > 0) { // 大于零遍历此表,插入损坯补贴记录表中,过滤给报损补贴后就不能给干补补贴 //string sqlInsertDamageSubsidy = "insert into TP_PAD_DamageSubsidy(Barcode,userID) values(:Barcode,:UserID)"; //for (int insert = 0; insert < dsTemp.Tables[0].Rows.Count; insert++) //{ // string sqladd = "select 1 from TP_PAD_DamageSubsidy where barcode=:barcode and userid=:userid"; // parmeters1 = new OracleParameter[] // { // new OracleParameter(":Barcode",dsTemp.Tables[0].Rows[insert]["Barcode"]), // new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), // }; // DataSet ds3 = oracleTrConn.GetSqlResultToDs(sqladd, parmeters1); // if (ds3 != null && ds3.Tables[0].Rows.Count == 0) // oracleTrConn.ExecuteNonQuery(sqlInsertDamageSubsidy, parmeters1); //} scrapcount_1 = scrapcount;// dsTemp.Tables[0].Rows.Count; //非自身损坯数量 // 求出损坯对应系数 DataRow[] drScrapWages = dsWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"]); //decimal? scrapDamageSubsidy = 0; //损坯补贴 if (drScrapWages.Length > 0) { //scrapDamageSubsidy += Convert.ToDecimal(drScrapWages[0]["DamageSubsidy"]); scrap_StandardWages = Convert.ToDecimal(drScrapWages[0]["StandardWages"]); //标准工价 scrap_DamageSubsidyRate = Convert.ToDecimal(drScrapWages[0]["DamageSubsidyRate"]);//损坯补贴系数 // scrap_DamageSubsidy = Convert.ToDecimal(drScrapWages[0]["DamageSubsidy"]); //损坯补贴 scrap_DamageSubsidy = Convert.ToDecimal(scrap_StandardWages) * scrap_DamageSubsidyRate; //损坯补贴 } //totalcount_Scrap += scrapDamageSubsidy; temp_Scrap = Convert.ToDecimal(scrapcount_1 * scrap_StandardWages * scrap_DamageSubsidyRate); totalcount_Scrap += temp_Scrap / userstaffcount; } } #endregion #region 插入损坯补贴 sqlString = "select 1 from TP_PAR_DamageSubsidy where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[wagestype]["WagesTypeID"]), }; DataSet dsExistDamageSubsidy = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsExistDamageSubsidy != null && dsExistDamageSubsidy.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_DamageSubsidy ( YYYYMM, StaffID, PayPlanID, WagesTypeID, DamageNum, StandardWages, DamageSubsidyRate, DamageSubsidy, Amount, PieceTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :WagesTypeID, :DamageNum, :StandardWages, :DamageSubsidyRate, :DamageSubsidy, :Amount, :PieceTacticsID )"; } else { sqlString = @"update TP_PAR_DamageSubsidy set YYYYMM=:YYYYMM, StaffID=StaffID, PayPlanID=:PayPlanID, WagesTypeID=:WagesTypeID, DamageNum=DamageNum+:DamageNum, StandardWages=StandardWages+:StandardWages, DamageSubsidyRate=DamageSubsidyRate+:DamageSubsidyRate, DamageSubsidy=DamageSubsidy+:DamageSubsidy, Amount=Amount+:Amount, PieceTacticsID=:PieceTacticsID where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID "; } parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[wagestype]["WagesTypeID"]), new OracleParameter(":DamageNum",scrapcount_1), new OracleParameter(":StandardWages",scrap_StandardWages), new OracleParameter(":DamageSubsidyRate",scrap_DamageSubsidyRate), new OracleParameter(":DamageSubsidy",scrap_DamageSubsidy), new OracleParameter(":Amount",temp_Scrap), new OracleParameter(":PieceTacticsID",PieceTacticsID_Insert2), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion #region 干补补贴,从成品表时读取数据来计算干补数量 // 1 查出这个工号的,这个分类的,下一面在去过滤正品,还是副品 int RepairSubsidy_RSuperioNum = 0;//干补正品数 // 干补正品数 if (!string.IsNullOrEmpty(FinishedProduct_BarCode)) { DataRow[] drRepairSubsidy_RSuperioNum = dsFinishedProduct.Tables[0].Select("SpecialRepairFlag=1 and GoodsLevelTypeID=4 and WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"] + " and barcode in(" + FinishedProduct_BarCode + ")"); if (drRepairSubsidy_RSuperioNum.Length > 0) { RepairSubsidy_RSuperioNum = drRepairSubsidy_RSuperioNum.Length; // 尽管有干补,但是有可能在损坯补贴给了,此处得查询一下干补补贴表,如果存在就不给此补贴 foreach (DataRow mm in drRepairSubsidy_RSuperioNum) { sqlString = "select 1 from TP_PAD_DamageSubsidy where Barcode=:Barcode and UserID=:UserID"; parmeters1 = new OracleParameter[] { new OracleParameter(":Barcode",mm["barcode"].ToString()), new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), }; dsTemp = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsTemp.Tables[0].Rows.Count > 0) { RepairSubsidy_RSuperioNum = RepairSubsidy_RSuperioNum - 1; } } } } int RepairSubsidy_RQualifiedNum = 0;//干补副品数 // 干补正品数 if (!string.IsNullOrEmpty(FinishedProduct_BarCode)) { DataRow[] drRepairSubsidy_RQualifiedNum = dsFinishedProduct.Tables[0].Select("SpecialRepairFlag=1 and GoodsLevelTypeID=5 and WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"] + " and barcode in(" + FinishedProduct_BarCode + ")"); if (drRepairSubsidy_RQualifiedNum.Length > 0) { RepairSubsidy_RQualifiedNum = drRepairSubsidy_RQualifiedNum.Length; // 尽管有干补,但是有可能在损坯补贴给了,此处得查询一下干补补贴表,如果存在就不给此补贴 foreach (DataRow mm in drRepairSubsidy_RQualifiedNum) { sqlString = "select 1 from TP_PAD_DamageSubsidy where Barcode=:Barcode and UserID=:UserID"; parmeters1 = new OracleParameter[] { new OracleParameter(":Barcode",mm["barcode"].ToString()), new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), }; dsTemp = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsTemp.Tables[0].Rows.Count > 0) { RepairSubsidy_RQualifiedNum = RepairSubsidy_RQualifiedNum - 1; } } } } // 查出此分类干补正负品补贴 // 求出损坯对应系数 DataRow[] drRepairSubsidy = dsWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"]); decimal RSuperiorCoefficient = 0;//干补正品系数 decimal RQualifiedCoefficient = 0;//干补副品系数 decimal RepairSubsidyRate = 0;//干补补贴系数 decimal RepairStandardWages = 0;//标准工价 decimal RepairTotalCount = 0; // decimal RepairSubsidy = 0; temp_Repair = 0; if (drRepairSubsidy.Length > 0) { RSuperiorCoefficient = Convert.ToDecimal(drRepairSubsidy[0]["RSuperiorCoefficient"]); RQualifiedCoefficient = Convert.ToDecimal(drRepairSubsidy[0]["RQualifiedCoefficient"]); RepairSubsidyRate = Convert.ToDecimal(drRepairSubsidy[0]["RepairSubsidyRate"]); RepairStandardWages = Convert.ToDecimal(drRepairSubsidy[0]["StandardWages"]); RepairSubsidy = Convert.ToDecimal(drRepairSubsidy[0]["RepairSubsidy"]); RepairTotalCount = (RepairSubsidy_RSuperioNum * RSuperiorCoefficient + RepairSubsidy_RQualifiedNum * RQualifiedCoefficient) * RepairStandardWages * RepairSubsidyRate; totalcount_RepairSubsidy += RepairTotalCount / userstaffcount; temp_Repair = RepairTotalCount; } #endregion #region 插入干补补贴 sqlString = "select 1 from TP_PAR_RepairSubsidy where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[wagestype]["WagesTypeID"]), }; DataSet dsExistRepairSubsidy = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsExistRepairSubsidy != null && dsExistRepairSubsidy.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_RepairSubsidy ( YYYYMM, StaffID, PayPlanID, WagesTypeID, RSuperioNum, RSuperiorCoefficient, RQualifiedNum, RQualifiedCoefficient, StandardWages, RepairSubsidyRate, RepairSubsidy, Amount, PieceTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :WagesTypeID, :RSuperioNum, :RSuperiorCoefficient, :RQualifiedNum, :RQualifiedCoefficient, :StandardWages, :RepairSubsidyRate, :RepairSubsidy, :Amount, :PieceTacticsID )"; } else { sqlString = @"update TP_PAR_RepairSubsidy set YYYYMM=:YYYYMM, StaffID=:StaffID, PayPlanID=:PayPlanID, WagesTypeID=:WagesTypeID, RSuperioNum=RSuperioNum+:RSuperioNum, RSuperiorCoefficient=RSuperiorCoefficient+:RSuperiorCoefficient, RQualifiedNum=RQualifiedNum+:RQualifiedNum, RQualifiedCoefficient=RQualifiedCoefficient+:RQualifiedCoefficient, StandardWages=StandardWages+:StandardWages, RepairSubsidyRate=RepairSubsidyRate+:RepairSubsidyRate, RepairSubsidy=RepairSubsidy+:RepairSubsidy, Amount=Amount+:Amount, PieceTacticsID=:PieceTacticsID where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID "; } parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[wagestype]["WagesTypeID"]), new OracleParameter(":RSuperioNum",RepairSubsidy_RSuperioNum), new OracleParameter(":RSuperiorCoefficient",RSuperiorCoefficient), new OracleParameter(":RQualifiedNum",RepairSubsidy_RQualifiedNum), new OracleParameter(":RQualifiedCoefficient",RQualifiedCoefficient), new OracleParameter(":StandardWages",RepairStandardWages), new OracleParameter(":RepairSubsidyRate",RepairSubsidyRate), new OracleParameter(":RepairSubsidy",RepairSubsidy), new OracleParameter(":Amount",temp_Repair), new OracleParameter(":PieceTacticsID",PieceTacticsID_Insert3), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion } } } else { // 经过该计件工序 // 先找出此工序的所有条码.用于筛选条码前的数据 //dsPieceProcedure_1.Tables[0].Merge(dsPieceProcedure_2.Tables[0]); string ProcedureIDS = ""; //for (int a1 = 0; a1 < dsPieceProcedure_1.Tables[0].Rows.Count; a1++) //{ // ProcedureIDS += dsPieceProcedure_1.Tables[0].Rows[a1]["ProcedureID"].ToString() + ","; //} ProcedureIDS = ProcedureIDS_New.Trim(','); //DataRow[] drBarCode = dsTMPProductionData.Tables[0].Select("(ProcedureID=" + PieceProcedureID + " or ProcedureID=" + QualityBaseProcedureID + ") and UserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()); DataRow[] drBarCode = dsTMPProductionData.Tables[0].Select("ProcedureID in (" + ProcedureIDS + " )" + " and UserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()); DataTable dtTemp = new DataTable(); dtTemp.Columns.Add("ProcedureID"); //工序ID,用于有哪些分类 dtTemp.Columns.Add("BarCode"); //产品条码 dtTemp.Columns.Add("WagesTypeID"); // 工价分类 dtTemp.Columns.Add("GoodsFlag"); //产品标识 //DataRow[] drMonth = dsPayPlanSetting.Tables[0].Select("SettingCode='01001'"); //int newGoodsMonth = Convert.ToInt32(drMonth[0]["SettingValue"]); //新产品适应周期(月) if (drBarCode.Length > 0) { DataTable dtTemp_TMPProductionData = drBarCode.CopyToDataTable(); foreach (DataRow r in drBarCode) { DataRow[] drFirst = dtTemp_TMPProductionData.Select("barcode='" + r["barcode"] + "' and ProductionDataID<" + r["ProductionDataID"] + " and UserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()); if (drFirst.Length > 0) { foreach (DataRow rr in drFirst)//可能会多行, { DataRow drNew = dtTemp.NewRow(); drNew["ProcedureID"] = rr["ProcedureID"]; drNew["BarCode"] = rr["BarCode"]; drNew["WagesTypeID"] = rr["WagesTypeID"]; if (Convert.ToDateTime(rr["StartingDate"]).AddMonths(newGoodsMonth) > DateTime.Now) { drNew["GoodsFlag"] = 3; //正常 } else { drNew["GoodsFlag"] = 1; //新品 } dtTemp.Rows.Add(drNew); } } } } if (dtTemp.Rows.Count > 0) { //----------------------------------- // 1.算出是否有新品,还是老品 //3 报损责任工序 //if (!dsTMPResponProcedure.Tables[0].Columns.Contains("GoodsFlag")) //{ // dsTMPResponProcedure.Tables[0].Columns.Add("GoodsFlag"); // for (int bb = 0; bb < dsTMPResponProcedure.Tables[0].Rows.Count; bb++) // { // if (dsTMPResponProcedure.Tables[0].Rows[bb]["StartingDate"].ToString() != "") // { // if (Convert.ToDateTime(dsTMPResponProcedure.Tables[0].Rows[bb]["StartingDate"]).AddMonths(newGoodsMonth) > DateTime.Now) // { // dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 3; //正常 // } // else // { // dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 1; //新品 // } // } // else // { // dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 3; //正常 // } // } //} //for (int bb = 0; bb < dsTMPResponProcedure.Tables[0].Rows.Count; bb++) //{ // if (dsTMPResponProcedure.Tables[0].Rows[bb]["StartingDate"].ToString() != "") // { // if (Convert.ToDateTime(dsTMPResponProcedure.Tables[0].Rows[bb]["StartingDate"]).AddMonths(newGoodsMonth) > DateTime.Now) // { // dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 3; //正常 // } // else // { // dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 1; //新品 // } // } // else // { // dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 3; //正常 // } //} //----------------------------------- // 重新排序,把生产数据ID大的排在上面,便于下面进行筛选 DataView dv = dtTemp.DefaultView; dv.Sort = "ProductionDataID desc"; dtTemp = dv.ToTable(); // 此时dtTemp有产品分类,同时也可能有多个工序 // 1看有多少个分类 dtWagesType = dtTemp.DefaultView.ToTable(true, "WagesTypeID"); // 2看有多少个工序 DataTable dtProcedure = dtTemp.DefaultView.ToTable(true, "ProcedureID"); // 有多少产品标识 dtGoodsFlag = dtTemp.DefaultView.ToTable(true, "GoodsFlag"); int PieceProcedureCount2 = 0; int UnqualifiedCount2 = 0; int QualifiedCount2 = 0; int QualityBaseProcedureCount2 = 0; FinishedProduct_BarCode = ""; for (int ii = 0; ii < dtWagesType.Rows.Count; ii++) { for (int vv = 0; vv < dtGoodsFlag.Rows.Count; vv++) { decimal? temp_Piecegiework = 0; #region 1.求出各分类计件工序数量 PieceProcedureCount2 = 0; QualityBaseProcedureCount2 = 0; decimal PieceProcedureTotal = 0; //系数*数量 //for (int jj = 0; jj < dtProcedure.Rows.Count; jj++) //{ for (int p1 = 0; p1 < dsPieceProcedure_1.Tables[0].Rows.Count; p1++) { DataRow[] datarow = dtTemp.Select("WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"] + " and ProcedureID=" + dsPieceProcedure_1.Tables[0].Rows[p1]["ProcedureID"]); if (datarow.Length > 0) { foreach (DataRow r in datarow) { if (!FinishedProduct_BarCode.Contains(r["barcode"].ToString())) FinishedProduct_BarCode = FinishedProduct_BarCode + r["barcode"].ToString() + ","; } PieceProcedureCount2 += datarow.Length; break; } else { continue; } } //} PieceProcedureTotal = PieceProcedureCount2 * PieceCoefficient; #endregion 1.求出各分类计件工序数量 #region 2.求出各工价分类损坯数量 int ScrapCount = 0; //损坯数量 decimal? Scrap = 0; //每个类别损坯的值 if (DamageFlag == "1") //计算损坯数量 { // 查出此人在计件工序的条码,完事关联报损表存在多少报损条码 string ProcedureIDS2 = "0"; //默认给个0,怕没有些去进行筛选出现错误 for (int p1 = 0; p1 < dsPieceProcedure_1.Tables[0].Rows.Count; p1++) { if(p1==0) { ProcedureIDS2 = ""; } ProcedureIDS2 = ProcedureIDS2 + dsPieceProcedure_1.Tables[0].Rows[p1]["ProcedureID"].ToString() + ","; } ProcedureIDS2 = ProcedureIDS2.Trim(','); // 筛选出生产数据这几个工序所用的条码 // DataRow[] dr_BarCode = dsTMPProductionData.Tables[0].Select(string.Format("UserID={0} and ProcedureID in ({1}) and WagesTypeID={2} and GoodsFlag={3}", dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString(), ProcedureIDS2, dtWagesType.Rows[ii]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); DataRow[] dr_BarCode = dsTMPProductionData.Tables[0].Select(string.Format("UserID={0} and ProcedureID in ({1}) and WagesTypeID={2} and GoodsFlag={3}", dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString(), ProcedureIDS, dtWagesType.Rows[ii]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); if (dr_BarCode.Length > 0) { string temp_barcode = ""; foreach (DataRow r3 in dr_BarCode) //有可能出现重复barcode { dr2 = dsTMPResponProcedure.Tables[0].Select("barcode='" + r3["barcode"] + "' and AuditStatus=1 and UserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()); if (dr2.Length > 0) { if (!temp_barcode.Contains(r3["barcode"].ToString())) { // 有损坯数据 ScrapCount = ScrapCount + 1; } temp_barcode += r3["barcode"].ToString() + ","; } } } // end Scrap = ScrapCount * DamageCoefficient; //DamageCoefficient为损坯系数 } #endregion 2.求出损坯数量 end #region 3.求出各工价分类次品数 // 筛出产品分级为次品的生产数据,完事一个一个去查对应责任工号的,进行累加 drUnqualifiedCount = dsTMPProductionData.Tables[0] .Select(string.Format("WagesTypeID={0} and GoodsLevelTypeID=7 and GoodsFlag={1} ", dtWagesType.Rows[ii]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); UnqualifiedCount2 = 0; //次品数量 decimal? UnqualifiedTotal = 0;//系数*数量 if (drUnqualifiedCount.Length > 0) { // 表示有次品,但是得对应责任工号,进行累加 foreach (DataRow row in drUnqualifiedCount) { //string sqlView = "select 1 from TMP_PAM_Defect where DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and ProductionDataID=" + row["ProductionDataID"]; //DataSet ds = oracleTrConn.GetSqlResultToDs(sqlView); //if (ds != null && ds.Tables[0].Rows.Count > 0) //{ // // 多个缺陷也算一个数,所以直接+1 // UnqualifiedCount2 = UnqualifiedCount2 + 1; //} rt = dsDefect.Tables[0].Select("DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and ProductionDataID=" + row["ProductionDataID"]); if (rt.Length > 0) { // 多个缺陷也算一个数,所以直接+1 UnqualifiedCount2 = UnqualifiedCount2 + 1; } } UnqualifiedTotal = UnqualifiedCount2 * UnqualifiedCoefficient; } #endregion #region 4.求出各工价分类副品数 // 筛出产品分级为副品的生产数据,完事一个一个去查对应责任工号的,进行累加 drQualified = dsTMPProductionData.Tables[0] .Select(string.Format("WagesTypeID={0} and GoodsLevelTypeID=5 and GoodsFlag={1}", dtWagesType.Rows[ii]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); QualifiedCount2 = 0; //副品数量 decimal? QualifiedTotal = 0;//系数*数量 if (drQualified.Length > 0) { // 表示有副品,但是得对应责任工号,进行累加 foreach (DataRow row in drQualified) { //string sqlView = "select 1 from TMP_PAM_Defect where DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and ProductionDataID=" + row["ProductionDataID"]; //DataSet ds = oracleTrConn.GetSqlResultToDs(sqlView); //if (ds != null && ds.Tables[0].Rows.Count > 0) //{ // // 多个缺陷也算一个数,所以直接+1 // QualifiedCount2 = QualifiedCount2 + 1; //} rt = dsDefect.Tables[0].Select("DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and ProductionDataID=" + row["ProductionDataID"]); if (rt.Length > 0) { // 多个缺陷也算一个数,所以直接+1 QualifiedCount2 = QualifiedCount2 + 1; } } QualifiedTotal = QualifiedCount2 * QualifiedCoefficient; } #endregion 求出各工价分类副品数 #region 5.求出质量工价 string barcodes_Procedure = ""; QualityBaseProcedureCount2 = 0; for (int p1 = 0; p1 < dsPieceProcedure_2.Tables[0].Rows.Count; p1++) { //DataRow[] drQualityBaseProcedure = dsTMPProductionData.Tables[0] // .Select(string.Format("UserID={0} and ProcedureID={1} and WagesTypeID={2} and GoodsFlag={3}", dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString(), dsPieceProcedure_2.Tables[0].Rows[p1]["ProcedureID"], dtWagesType.Rows[wagestype]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); //QualityBaseProcedureCount += drQualityBaseProcedure.Length; // 质量工序数量 //DataRow[] drQualityBaseProcedure = dsTMPProductionData.Tables[0] // .Select(string.Format("ProcedureID={0} and WagesTypeID={1} and GoodsFlag={2}", dsPieceProcedure_2.Tables[0].Rows[p1]["ProcedureID"], dtWagesType.Rows[wagestype]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); drQualityBaseProcedure = dsTMPProductionData.Tables[0] .Select(string.Format("ProcedureID={0} and WagesTypeID={1}", dsPieceProcedure_2.Tables[0].Rows[p1]["ProcedureID"], dtWagesType.Rows[ii]["WagesTypeID"])); if (drQualityBaseProcedure.Length > 0) { foreach (DataRow r4 in drQualityBaseProcedure) { if (!barcodes_Procedure.Contains(r4["barcode"].ToString())) { QualityBaseProcedureCount2 += 1; // 质量工序数量 } barcodes_Procedure = barcodes_Procedure + r4["barcode"].ToString() + ","; } } } QualityBaseProcedureTotal = 0;//只是算出优等品率,还有和产品质量区间进行匹配 QualityWages = 0; //质量工价 ,用于最后计算相乘 Quality = 0; //质量 if (QualityBaseProcedureCount2 != 0) { QualityBaseProcedureTotal = Convert.ToDecimal((QualityBaseProcedureCount2 - UnqualifiedCount2)) / Convert.ToDecimal(QualityBaseProcedureCount2); } //查看此员工是否为正式员工还是试用员工,如果试用取工价类别的标准工价 // 1取出此工类下的产品工价区间 DataRow[] drWages = dsWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"]); decimal StandardWages = 0; if (drWages.Length > 0) { StandardWages = Convert.ToDecimal(drWages[0]["StandardWages"]); //标准工价 } if (dsJobsPayPlan.Tables[0].Rows[j]["ExProbationEndDate"].ToString() == "") //表示正式员工 { // 2取出此工类下的质量区间 drQualityWages = dsQualityWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"] + " and QualityRate>=" + QualityBaseProcedureTotal, "QualityRate desc"); if (drQualityWages.Length > 0) { //表示质量区间设置没有比优品率大的 QualityWages = Convert.ToDecimal(drQualityWages[0]["QualityWages"]); Quality = Convert.ToDecimal(drQualityWages[0]["QualityRate"]); } else { QualityWages = 0;// Convert.ToDecimal(drQualityWages[0]["QualityWages"]); } } else { if (Convert.ToDateTime(dsJobsPayPlan.Tables[0].Rows[j]["ExProbationEndDate"]) < DateTime.Now) { // 试用结束结束 // 2取出此工类下的质量区间 drQualityWages = dsQualityWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"] + " and QualityRate>=" + QualityBaseProcedureTotal); if (drQualityWages.Length > 0) { //表示质量区间设置没有比优品率大的 QualityWages = Convert.ToDecimal(drQualityWages[0]["QualityWages"]); Quality = Convert.ToDecimal(drQualityWages[0]["QualityRate"]); } else { QualityWages = 0;// Convert.ToDecimal(drQualityWages[0]["QualityWages"]); } } } #endregion //#region 查出这个工号下有多少员工,计件工资进行平分 //sqlString = "select 1 from tp_mst_userstaff where userid=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString(); //userstaffcount = 1; //dsUserStaffCount = oracleTrConn.GetSqlResultToDs(sqlString); //if (dsUserStaffCount != null && dsUserStaffCount.Tables[0].Rows.Count > 0) //{ // userstaffcount = dsUserStaffCount.Tables[0].Rows.Count; //} //#endregion totalcount_Piecegiework += ((PieceProcedureTotal - Scrap - UnqualifiedTotal - QualifiedTotal) * QualityWages) < 0 ? 0 : ((PieceProcedureTotal - Scrap - UnqualifiedTotal - QualifiedTotal) * QualityWages) / userstaffcount; temp_Piecegiework = ((PieceProcedureTotal - Scrap - UnqualifiedTotal - QualifiedTotal) * QualityWages) < 0 ? 0 : ((PieceProcedureTotal - Scrap - UnqualifiedTotal - QualifiedTotal) * QualityWages);// userstaffcount; #region 插入计件工资 sqlString = "select 1 from TP_PAR_Piecework where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[ii]["WagesTypeID"]), }; dsExistPiecework = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); //// 读取计件工资策略 //int PieceTacticsID_Insert = 0; //sqlString = "select PieceTacticsID from TP_PAT_Piecework where PayPlanID=:PayPlanID"; //parmeters1 = new OracleParameter[] //{ // new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), //}; //DataSet dss = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); //if (dss != null && dss.Tables[0].Rows.Count > 0) //{ // PieceTacticsID_Insert = Convert.ToInt32(dss.Tables[0].Rows[0]["PieceTacticsID"]); //} ////------------------------------------- if (dsExistPiecework != null && dsExistPiecework.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_Piecework ( YYYYMM, StaffID, PayPlanID, StaffFlag, GoodsFlag, WagesTypeID, PieceworkNum, PieceCoefficient, DamageNum, DamageCoefficient, UnqualifiedNum, UnqualifiedCoefficient, QualifiedNum, QualifiedCoefficient, QualityBaseNum, QualityRate, QualityWages, Amount, PieceTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :StaffFlag, :GoodsFlag, :WagesTypeID, :PieceworkNum, :PieceCoefficient, :DamageNum, :DamageCoefficient, :UnqualifiedNum, :UnqualifiedCoefficient, :QualifiedNum, :QualifiedCoefficient, :QualityBaseNum, :QualityRate, :QualityWages, :Amount, :PieceTacticsID )"; } else { sqlString = @"update TP_PAR_Piecework set YYYYMM=:YYYYMM, StaffID=:StaffID, PayPlanID=:PayPlanID, StaffFlag=:StaffFlag, PieceTacticsID=:PieceTacticsID, GoodsFlag=:GoodsFlag, WagesTypeID=:WagesTypeID, PieceworkNum=PieceworkNum+:PieceworkNum, PieceCoefficient=PieceCoefficient+:PieceCoefficient, DamageNum=DamageNum+:DamageNum, DamageCoefficient=DamageCoefficient+:DamageCoefficient, UnqualifiedNum=UnqualifiedNum+:UnqualifiedNum, UnqualifiedCoefficient=UnqualifiedCoefficient+:UnqualifiedCoefficient, QualifiedNum=QualifiedNum+:QualifiedNum, QualifiedCoefficient=QualifiedCoefficient+:QualifiedCoefficient, QualityBaseNum=QualityBaseNum+:QualityBaseNum, QualityRate=QualityRate+:QualityRate, QualityWages=QualityWages+:QualityWages, Amount=Amount+:Amount where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID "; } parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":StaffFlag",dsJobsPayPlan.Tables[0].Rows[j]["StaffStatus"]), //new OracleParameter(":BeginDate",dateStartTime), //new OracleParameter(":EndDate",dateEndTime), new OracleParameter(":GoodsFlag", dtGoodsFlag.Rows[vv]["GoodsFlag"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[ii]["WagesTypeID"]), //new OracleParameter(":GoodsID",null), new OracleParameter(":PieceworkNum",PieceProcedureCount2), new OracleParameter(":PieceCoefficient",PieceCoefficient), new OracleParameter(":DamageNum",ScrapCount), new OracleParameter(":DamageCoefficient",DamageCoefficient), new OracleParameter(":UnqualifiedNum",UnqualifiedCount2), new OracleParameter(":UnqualifiedCoefficient",UnqualifiedCoefficient), new OracleParameter(":QualifiedNum",QualifiedCount2), new OracleParameter(":QualifiedCoefficient",QualifiedCoefficient), new OracleParameter(":QualityBaseNum",QualityBaseProcedureCount2), new OracleParameter(":QualifiedCoefficient",QualifiedCoefficient), new OracleParameter(":QualityRate",QualityBaseProcedureTotal), new OracleParameter(":QualityWages",QualityWages), new OracleParameter(":Amount",temp_Piecegiework), new OracleParameter(":PieceTacticsID",PieceTacticsID_Insert), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion } FinishedProduct_BarCode = FinishedProduct_BarCode.Trim(','); #region 损坯补贴 scrapcount_1 = 0; //损坯数量 scrap_StandardWages = 0; //损坯标准工价 scrap_DamageSubsidyRate = 0; //损坯补贴系数 scrap_DamageSubsidy = 0; //损坯补贴 temp_Scrap = 0;// //最后损坯补贴钱 //1.查出此员工工号下所生产数据,即做过哪此产品条码 DataRow[] drScrapProduction = dsTMPProductionData.Tables[0].Select("UserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"]); if (drScrapProduction.Length > 0) { //算出此工号,此工价分类存在条码,拼出条码,进而去报损查出非自身损坯的数量,进而计算 //string barcodes = ""; //foreach (DataRow rbarcode in drScrapProduction) //{ // barcodes += rbarcode["barcode"].ToString() + ","; //} //barcodes = barcodes.Trim(','); // string sql = @"select TMP_PAM_ScrapProduct.barcode,TMP_PAM_ResponProcedure.UserID from TMP_PAM_ScrapProduct left join TMP_PAM_ResponProcedure // on TMP_PAM_ScrapProduct.ScrapProductID=TMP_PAM_ResponProcedure.ScrapProductID "; // sql = sql + " where instr(','||:barcodes||',',','||TMP_PAM_ScrapProduct.BarCode||',')>0 "; // sql = sql + " and TMP_PAM_ResponProcedure.UserID<>:UserID"; // sql = @"select distinct TMP_PAM_ScrapProduct.barcode,TMP_PAM_ResponProcedure.UserID from TMP_PAM_ScrapProduct left join TMP_PAM_ResponProcedure // on TMP_PAM_ScrapProduct.ScrapProductID=TMP_PAM_ResponProcedure.ScrapProductID "; // sql = sql + " where TMP_PAM_ScrapProduct.barcode in (select barcode from TMP_PAM_ProductionData where UserID=:UserID and ProcedureID in (select TP_PAT_PieceProcedure.ProcedureID from TP_PAT_Piecework left join TP_PAT_PieceProcedure on TP_PAT_Piecework.PieceTacticsID=TP_PAT_PieceProcedure.PieceTacticsID and TP_PAT_PieceProcedure.ProcedureFlag=1 where TP_PAT_Piecework.PayPlanID=:PayPlanID)) "; // sql = sql + " and TMP_PAM_ResponProcedure.UserID<>:UserID"; // parmeters1 = new OracleParameter[] // { // //new OracleParameter(":barcodes",barcodes), // new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), // new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), // }; // DataSet dsTemp = oracleTrConn.GetSqlResultToDs(sql, parmeters1); string inPro = ""; if (dsPieceProcedure_1 != null && dsPieceProcedure_1.Tables[0].Rows.Count > 0) { for (int zz = 0; zz < dsPieceProcedure_1.Tables[0].Rows.Count; zz++) { inPro = inPro + dsPieceProcedure_1.Tables[0].Rows[zz]["ProcedureID"].ToString() + ","; } inPro = inPro.Trim(','); } if (inPro == "") inPro = "0"; // 1. 查出此人计工序的条码 DataRow[] r5 = dsTMPProductionData.Tables[0].Select("UserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and ProcedureID in (" + inPro + ")"); string a1 = ""; int scrapcount = 0; string sqlInsertDamageSubsidy = "insert into TP_PAD_DamageSubsidy(Barcode,userID) values(:Barcode,:UserID)"; string sqladd = "select 1 from TP_PAD_DamageSubsidy where barcode=:barcode and userid=:userid"; if (r5.Length > 0) { // 有条码 foreach (DataRow rr in r5) { r7 = dsScrap_New.Tables[0].Select("barcode='" + rr["barcode"] + "'"); if (r7.Length > 0 && !a1.Contains(rr["barcode"].ToString())) { scrapcount = scrapcount + 1; a1 = a1 + rr["barcode"].ToString(); parmeters1 = new OracleParameter[] { new OracleParameter(":Barcode",rr["Barcode"]), new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), }; ds3 = oracleTrConn.GetSqlResultToDs(sqladd, parmeters1); if (ds3 != null && ds3.Tables[0].Rows.Count == 0) oracleTrConn.ExecuteNonQuery(sqlInsertDamageSubsidy, parmeters1); } } } //if (dsTemp.Tables[0].Rows.Count > 0) if (scrapcount > 0) { //// 大于零遍历此表,插入损坯补贴记录表中,过滤给报损补贴后就不能给干补补贴 //string sqlInsertDamageSubsidy = "insert into TP_PAD_DamageSubsidy(Barcode,userID) values(:Barcode,:UserID)"; //for (int insert = 0; insert < dsTemp.Tables[0].Rows.Count; insert++) //{ // string sqladd = "select 1 from TP_PAD_DamageSubsidy where barcode=:barcode and userid=:userid"; // parmeters1 = new OracleParameter[] // { // new OracleParameter(":Barcode",dsTemp.Tables[0].Rows[insert]["Barcode"]), // new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), // }; // DataSet ds3 = oracleTrConn.GetSqlResultToDs(sqladd, parmeters1); // if (ds3 != null && ds3.Tables[0].Rows.Count == 0) // oracleTrConn.ExecuteNonQuery(sqlInsertDamageSubsidy, parmeters1); //} scrapcount_1 = scrapcount;// dsTemp.Tables[0].Rows.Count; //非自身损坯数量 // 求出损坯对应系数 DataRow[] drScrapWages = dsWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"]); //decimal? scrapDamageSubsidy = 0; //损坯补贴 if (drScrapWages.Length > 0) { //scrapDamageSubsidy += Convert.ToDecimal(drScrapWages[0]["DamageSubsidy"]); scrap_StandardWages = Convert.ToDecimal(drScrapWages[0]["StandardWages"]); //标准工价 scrap_DamageSubsidyRate = Convert.ToDecimal(drScrapWages[0]["DamageSubsidyRate"]);//损坯补贴系数 //scrap_DamageSubsidy = Convert.ToDecimal(drScrapWages[0]["DamageSubsidy"]); //损坯补贴 scrap_DamageSubsidy = Convert.ToDecimal(scrap_StandardWages) * scrap_DamageSubsidyRate; //损坯补贴 } //totalcount_Scrap += scrapDamageSubsidy; temp_Scrap = Convert.ToDecimal(scrapcount_1 * scrap_StandardWages * scrap_DamageSubsidyRate); totalcount_Scrap += temp_Scrap / userstaffcount; } } #endregion #region 插入损坯补贴 //// 读取计件工资策略 //int PieceTacticsID_Insert2 = 0; //sqlString = "select PieceTacticsID from TP_PAT_Piecework where PayPlanID=:PayPlanID"; //parmeters1 = new OracleParameter[] // { // new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), // }; //DataSet dss2 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); //if (dss2 != null && dss2.Tables[0].Rows.Count > 0) //{ // PieceTacticsID_Insert2 = Convert.ToInt32(dss2.Tables[0].Rows[0]["PieceTacticsID"]); //} ////------------------------------------- sqlString = "select 1 from TP_PAR_DamageSubsidy where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[ii]["WagesTypeID"]), }; DataSet dsExistDamageSubsidy = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsExistDamageSubsidy != null && dsExistDamageSubsidy.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_DamageSubsidy ( YYYYMM, StaffID, PayPlanID, WagesTypeID, DamageNum, StandardWages, DamageSubsidyRate, DamageSubsidy, Amount, PieceTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :WagesTypeID, :DamageNum, :StandardWages, :DamageSubsidyRate, :DamageSubsidy, :Amount, :PieceTacticsID )"; } else { sqlString = @"update TP_PAR_DamageSubsidy set YYYYMM=:YYYYMM, StaffID=StaffID, PayPlanID=:PayPlanID, WagesTypeID=:WagesTypeID, DamageNum=DamageNum+:DamageNum, StandardWages=StandardWages+:StandardWages, DamageSubsidyRate=DamageSubsidyRate+:DamageSubsidyRate, DamageSubsidy=DamageSubsidy+:DamageSubsidy, Amount=Amount+:Amount, PieceTacticsID=:PieceTacticsID where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID "; } parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[ii]["WagesTypeID"]), new OracleParameter(":DamageNum",scrapcount_1), new OracleParameter(":StandardWages",scrap_StandardWages), new OracleParameter(":DamageSubsidyRate",scrap_DamageSubsidyRate), new OracleParameter(":DamageSubsidy",scrap_DamageSubsidy), new OracleParameter(":Amount",temp_Scrap), new OracleParameter(":PieceTacticsID",PieceTacticsID_Insert2), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion #region 干补补贴,从成品表时读取数据来计算干补数量 // 1 查出这个工号的,这个分类的,下一面在去过滤正品,还是副品 int RepairSubsidy_RSuperioNum = 0;//干补正品数 // 干补正品数 if (!string.IsNullOrEmpty(FinishedProduct_BarCode)) { DataRow[] drRepairSubsidy_RSuperioNum = dsFinishedProduct.Tables[0].Select("SpecialRepairFlag=1 and GoodsLevelTypeID=4 and WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"] + " and barcode in(" + FinishedProduct_BarCode + ")"); if (drRepairSubsidy_RSuperioNum.Length > 0) { RepairSubsidy_RSuperioNum = drRepairSubsidy_RSuperioNum.Length; // 尽管有干补,但是有可能在损坯补贴给了,此处得查询一下干补补贴表,如果存在就不给此补贴 sqlString = "select 1 from TP_PAD_DamageSubsidy where Barcode=:Barcode and UserID=:UserID"; foreach (DataRow mm in drRepairSubsidy_RSuperioNum) { parmeters1 = new OracleParameter[] { new OracleParameter(":Barcode",mm["barcode"].ToString()), new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), }; dsTemp = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsTemp.Tables[0].Rows.Count > 0) { RepairSubsidy_RSuperioNum = RepairSubsidy_RSuperioNum - 1; } } } } int RepairSubsidy_RQualifiedNum = 0;//干补副品数 // 干补正品数 if (!string.IsNullOrEmpty(FinishedProduct_BarCode)) { DataRow[] drRepairSubsidy_RQualifiedNum = dsFinishedProduct.Tables[0].Select("SpecialRepairFlag=1 and GoodsLevelTypeID=5 and WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"] + " and barcode in(" + FinishedProduct_BarCode + ")"); if (drRepairSubsidy_RQualifiedNum.Length > 0) { RepairSubsidy_RQualifiedNum = drRepairSubsidy_RQualifiedNum.Length; // 尽管有干补,但是有可能在损坯补贴给了,此处得查询一下干补补贴表,如果存在就不给此补贴 sqlString = "select 1 from TP_PAD_DamageSubsidy where Barcode=:Barcode and UserID=:UserID"; foreach (DataRow mm in drRepairSubsidy_RQualifiedNum) { parmeters1 = new OracleParameter[] { new OracleParameter(":Barcode",mm["barcode"].ToString()), new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), }; dsTemp = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsTemp.Tables[0].Rows.Count > 0) { RepairSubsidy_RQualifiedNum = RepairSubsidy_RQualifiedNum - 1; } } } } // 查出此分类干补正负品补贴 // 求出损坯对应系数 DataRow[] drRepairSubsidy = dsWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"]); decimal RSuperiorCoefficient = 0;//干补正品系数 decimal RQualifiedCoefficient = 0;//干补副品系数 decimal RepairSubsidyRate = 0;//干补补贴系数 decimal RepairStandardWages = 0;//标准工价 decimal RepairTotalCount = 0; // decimal RepairSubsidy = 0; temp_Repair = 0; if (drRepairSubsidy.Length > 0) { RSuperiorCoefficient = Convert.ToDecimal(drRepairSubsidy[0]["RSuperiorCoefficient"]); RQualifiedCoefficient = Convert.ToDecimal(drRepairSubsidy[0]["RQualifiedCoefficient"]); RepairSubsidyRate = Convert.ToDecimal(drRepairSubsidy[0]["RepairSubsidyRate"]); RepairStandardWages = Convert.ToDecimal(drRepairSubsidy[0]["RepairStandardWages"]); RepairTotalCount = (RepairSubsidy_RQualifiedNum * RSuperiorCoefficient + RepairSubsidy_RQualifiedNum * RQualifiedCoefficient) * RepairStandardWages * RepairSubsidyRate; totalcount_RepairSubsidy += RepairTotalCount / userstaffcount; temp_Repair += RepairTotalCount; } #endregion #region 插入干补补贴 sqlString = "select 1 from TP_PAR_RepairSubsidy where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[ii]["WagesTypeID"]), }; DataSet dsExistRepairSubsidy = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsExistRepairSubsidy != null && dsExistRepairSubsidy.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_RepairSubsidy ( YYYYMM, StaffID, PayPlanID, WagesTypeID, RSuperioNum, RSuperiorCoefficient, RQualifiedNum, RQualifiedCoefficient, StandardWages, RepairSubsidyRate, RepairSubsidy, Amount, PieceTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :WagesTypeID, :RSuperioNum, :RSuperiorCoefficient, :RQualifiedNum, :RQualifiedCoefficient, :StandardWages, :RepairSubsidyRate, :RepairSubsidy, :Amount, :PieceTacticsID )"; } else { sqlString = @"update TP_PAR_RepairSubsidy set YYYYMM=:YYYYMM, StaffID=:StaffID, PayPlanID=:PayPlanID, WagesTypeID=:WagesTypeID, RSuperioNum=RSuperioNum+:RSuperioNum, RSuperiorCoefficient=RSuperiorCoefficient+:RSuperiorCoefficient, RQualifiedNum=RQualifiedNum+:RQualifiedNum, RQualifiedCoefficient=RQualifiedCoefficient+:RQualifiedCoefficient, StandardWages=StandardWages+:StandardWages, RepairSubsidyRate=RepairSubsidyRate+:RepairSubsidyRate, RepairSubsidy=RepairSubsidy+:RepairSubsidy, Amount=Amount+:Amount, PieceTacticsID=:PieceTacticsID where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID "; } parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[ii]["WagesTypeID"]), new OracleParameter(":RSuperioNum",RepairSubsidy_RSuperioNum), new OracleParameter(":RSuperiorCoefficient",RSuperiorCoefficient), new OracleParameter(":RQualifiedNum",RepairSubsidy_RQualifiedNum), new OracleParameter(":RQualifiedCoefficient",RQualifiedCoefficient), new OracleParameter(":StandardWages",RepairStandardWages), new OracleParameter(":RepairSubsidyRate",RepairSubsidyRate), new OracleParameter(":RepairSubsidy",RepairSubsidy), new OracleParameter(":Amount",temp_Repair), new OracleParameter(":PieceTacticsID",PieceTacticsID_Insert3), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion } } } #endregion decimal? totalcount_QualityASS = 0;// 品质工资 #region 品质考核策略 decimal min_TotalCount = 0; //dsQualityASS 已经是此工资策略的解决方案 for (int h = 0; h < dsQualityASS.Tables[0].Rows.Count; h++) { min_TotalCount = 0; ////// // 求出缺陷数 ////// sqlString = @"select distinct TMP_PAM_ProductionData.barcode,TP_PAM_GoodsWagesType.WagesTypeID,TMP_PAM_Defect.goodsid,TMP_PAM_Defect.DefectFine,TMP_PAM_ProductionData.UserID from TMP_PAM_Defect ////// inner join TP_PAM_GoodsWagesType ////// on TMP_PAM_Defect.goodsID=TP_PAM_GoodsWagesType.goodsID ////// ////// left join TMP_PAM_ProductionData on TMP_PAM_Defect.ProductionDataID=TMP_PAM_ProductionData.ProductionDataID ////// and TMP_PAM_ProductionData.barcode in ////// ( ////// select barcode from TP_PAT_QualityASS left join TP_PAT_Piecework on TP_PAT_QualityASS.PayPlanID=TP_PAT_Piecework.PayPlanID ////// left join TP_PAT_PieceProcedure on TP_PAT_Piecework.PieceTacticsID=TP_PAT_PieceProcedure.PieceTacticsID and TP_PAT_PieceProcedure.ProcedureFlag=1 ////// left join TMP_PAM_ProductionData on TMP_PAM_ProductionData.ProcedureID=TP_PAT_PieceProcedure.ProcedureID ////// where TP_PAT_QualityASS.QualityASSTacticsID=:QualityASSTacticsID ////// ) ////// where TMP_PAM_Defect.DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"] ////// + " and TMP_PAM_Defect.DefectFine=" + dsQualityASS.Tables[0].Rows[h]["DefectFine"] ////// + " and TMP_PAM_ProductionData.barcode in " ////// + "(" ////// + " select barcode from TP_PAT_QualityASS left join TP_PAT_Piecework on TP_PAT_QualityASS.PayPlanID=TP_PAT_Piecework.PayPlanID" ////// + " left join TP_PAT_PieceProcedure on TP_PAT_Piecework.PieceTacticsID=TP_PAT_PieceProcedure.PieceTacticsID and TP_PAT_PieceProcedure.ProcedureFlag=1" ////// + " left join TMP_PAM_ProductionData on TMP_PAM_ProductionData.ProcedureID=TP_PAT_PieceProcedure.ProcedureID" ////// + " where TMP_PAM_ProductionData.UserID=:UserID and TP_PAT_QualityASS.QualityASSTacticsID=:QualityASSTacticsID" ////// + ")"; ////// parmeters1 = new OracleParameter[] ////// { ////// new OracleParameter(":QualityASSTacticsID",dsQualityASS.Tables[0].Rows[h]["QualityASSTacticsID"]), ////// new OracleParameter(":UserID", dsJobsPayPlan.Tables[0].Rows[j]["userID"] ), ////// //new OracleParameter(":QualityASSTacticsID", dsQualityASS.Tables[0].Rows[h]["QualityASSTacticsID"] ), ////// }; ////// DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1);//查询出有多少分类,进行计算 // modify wangx // 求出缺陷数 //// sqlString = @"select distinct TMP_PAM_ProductionData.barcode,TP_PAM_GoodsWagesType.WagesTypeID,TMP_PAM_Defect.goodsid,TMP_PAM_Defect.DefectFine,TMP_PAM_ProductionData.UserID from TMP_PAM_Defect //// inner join TP_PAM_GoodsWagesType //// on TMP_PAM_Defect.goodsID=TP_PAM_GoodsWagesType.goodsID //// //// left join TMP_PAM_ProductionData on TMP_PAM_Defect.ProductionDataID=TMP_PAM_ProductionData.ProductionDataID //// and TMP_PAM_ProductionData.barcode in //// ( //// select barcode from TP_PAT_QualityASS left join TP_PAT_Piecework on TP_PAT_QualityASS.PayPlanID=TP_PAT_Piecework.PayPlanID //// left join TP_PAT_PieceProcedure on TP_PAT_Piecework.PieceTacticsID=TP_PAT_PieceProcedure.PieceTacticsID and TP_PAT_PieceProcedure.ProcedureFlag=1 //// left join TMP_PAM_ProductionData on TMP_PAM_ProductionData.ProcedureID=TP_PAT_PieceProcedure.ProcedureID //// where TP_PAT_QualityASS.QualityASSTacticsID=:QualityASSTacticsID //// ) //// where TMP_PAM_Defect.DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"] //// + " and TMP_PAM_Defect.DefectFine=" + dsQualityASS.Tables[0].Rows[h]["DefectFine"] //// + " and TMP_PAM_ProductionData.barcode in " //// + "(" //// + " select barcode from TP_PAT_QualityASS left join TP_PAT_Piecework on TP_PAT_QualityASS.PayPlanID=TP_PAT_Piecework.PayPlanID" //// + " left join TP_PAT_PieceProcedure on TP_PAT_Piecework.PieceTacticsID=TP_PAT_PieceProcedure.PieceTacticsID and TP_PAT_PieceProcedure.ProcedureFlag=1" //// + " left join TMP_PAM_ProductionData on TMP_PAM_ProductionData.ProcedureID=TP_PAT_PieceProcedure.ProcedureID" //// + " where TMP_PAM_ProductionData.UserID=:UserID and TP_PAT_QualityASS.QualityASSTacticsID=:QualityASSTacticsID" //// + ")"; //// parmeters1 = new OracleParameter[] //// { //// new OracleParameter(":QualityASSTacticsID",dsQualityASS.Tables[0].Rows[h]["QualityASSTacticsID"]), //// new OracleParameter(":UserID", dsJobsPayPlan.Tables[0].Rows[j]["userID"] ), //// //new OracleParameter(":QualityASSTacticsID", dsQualityASS.Tables[0].Rows[h]["QualityASSTacticsID"] ), //// }; //// DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1);//查询出有多少分类,进行计算 // 1查出此品质工资方案对应的计件工序与品质工序集 sqlString = @"select distinct TP_PAT_PieceProcedure.ProcedureID,TP_PAT_PieceProcedure.Procedureflag from TP_PAT_QualityASS inner join TP_PAT_Piecework on TP_PAT_QualityASS.PayPlanID = TP_PAT_Piecework.PayPlanID inner join TP_PAT_PieceProcedure on TP_PAT_Piecework.PieceTacticsID = TP_PAT_PieceProcedure.PieceTacticsID where TP_PAT_QualityASS.QualityASSTacticsID=:QualityASSTacticsID"; parmeters1 = new OracleParameter[] { new OracleParameter(":QualityASSTacticsID",dsQualityASS.Tables[0].Rows[h]["QualityASSTacticsID"]), }; string jisian_ids = ""; string pinzhi_ids = ""; DataSet dsjieguo = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsjieguo != null && dsjieguo.Tables[0].Rows.Count > 0) { foreach (DataRow r10 in dsjieguo.Tables[0].Rows) { if (r10["Procedureflag"].ToString() == "1") { jisian_ids = jisian_ids + r10["ProcedureID"].ToString() + ","; } else if (r10["Procedureflag"].ToString() == "2") { pinzhi_ids = pinzhi_ids + r10["ProcedureID"].ToString() + ","; } } jisian_ids = jisian_ids.Trim(','); pinzhi_ids = pinzhi_ids.Trim(','); } DataRow[] r12 = ds_w.Tables[0].Select("DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"] + " and DefectFine=" + dsQualityASS.Tables[0].Rows[h]["DefectFine"]); ds = new DataSet(); if (r12.Length > 0) { string deletebarcode = ""; foreach (DataRow r15 in r12) { r17 = dsTMPProductionData.Tables[0].Select("barcode =" + r15["barcode"] + " " + " and ( ProcedureID in(" + pinzhi_ids + "))"); r18 = dsTMPProductionData.Tables[0].Select("barcode =" + r15["barcode"] + " " + " and ( ProcedureID in(" + jisian_ids + ")) and userID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"]); if (r17.Length == 0 || r18.Length == 0) { deletebarcode = deletebarcode + r15["barcode"].ToString() + ","; } } deletebarcode = deletebarcode.Trim(','); if (deletebarcode == "") { deletebarcode = "0"; } r12 = ds_w.Tables[0].Select("DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"] + " and DefectFine=" + dsQualityASS.Tables[0].Rows[h]["DefectFine"] + " and barcode not in(" + deletebarcode + ")"); if (r12.Length > 0) ds.Tables.Add(r12.CopyToDataTable().Copy()); } // DataRow[] r12 = ds_w.Tables[0].Select("DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"] + " and DefectFine=" + dsQualityASS.Tables[0].Rows[h]["DefectFine"] + " and ProcedureID in(" + pinzhi_ids + ") and ( ProcedureID in(" + jisian_ids + ")" + " and userID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"] + ")"); //DataSet ds = new DataSet(); //if (r12.Length > 0) //{ // ds.Tables.Add(r12.CopyToDataTable().Copy()); //} string barcodes_Procedure = ""; int drCount_Total = 0; for (int p1 = 0; p1 < dsPieceProcedure_2.Tables[0].Rows.Count; p1++) { drQualityBaseProcedure = dsTMPProductionData.Tables[0] .Select(string.Format("ProcedureID={0}", dsPieceProcedure_2.Tables[0].Rows[p1]["ProcedureID"])); if (drQualityBaseProcedure.Length > 0) { foreach (DataRow r4 in drQualityBaseProcedure) { rr6 = dsTMPProductionData.Tables[0].Select("barcode='" + r4["barcode"] + "' and userid=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"]); if (rr6.Length > 0) { if (!barcodes_Procedure.Contains(r4["barcode"].ToString())) { drCount_Total += 1; // 质量工序数量 } barcodes_Procedure = barcodes_Procedure + r4["barcode"].ToString() + ","; } } } } //if (ds != null && ds.Tables[0].Rows.Count > 0) if (ds != null && ds.Tables.Count > 0) { // 此工号有对应的缺陷扣罚 DataTable dt2 = ds.Tables[0].DefaultView.ToTable(true, "WagesTypeID");//有多少行,就有多少分类 for (int p = 0; p < dt2.Rows.Count; p++) { decimal temp_QualityReward = 0; // 读取质量基数工序 // 缺陷数量 drDefect = ds.Tables[0].Select("DefectFine=" + dsQualityASS.Tables[0].Rows[h]["DefectFine"] + " and WagesTypeID=" + dt2.Rows[p]["WagesTypeID"]); // temp 为品质率,真正的价格在区间取 decimal temp = 0; if (drCount_Total != 0) { //temp = Convert.ToDecimal(dsQualityASS.Tables[0].Rows[h]["DictionaryValue"]) * drDefect.Length / drCount_Total; temp = Convert.ToDecimal(drDefect.Length) / Convert.ToDecimal(drCount_Total); } // 查出对应分类品质奖励 sqlString = "select QualityReward,QualityRate from TP_PAT_QualityReward where WagesTypeID=" + dt2.Rows[p]["WagesTypeID"] + " and QualityRate<=" + temp + " and QualityASSTacticsID=" + dsQualityASS.Tables[0].Rows[h]["QualityASSTacticsID"] + " order by QualityRate desc"; DataSet dsQualityReward_Temp = oracleTrConn.GetSqlResultToDs(sqlString); decimal QualityRate = 0; if (dsQualityReward_Temp != null && dsQualityReward_Temp.Tables[0].Rows.Count > 0) { //表示有对应的品质价格,结果集如有多个,取第一个对应的金额即可 min_TotalCount = Convert.ToDecimal(dsQualityReward_Temp.Tables[0].Rows[0]["QualityReward"]); temp_QualityReward = Convert.ToDecimal(dsQualityReward_Temp.Tables[0].Rows[0]["QualityReward"]);//品质奖励金额 QualityRate = Convert.ToDecimal(dsQualityReward_Temp.Tables[0].Rows[0]["QualityRate"]); } #region 插入品质考核 sqlString = @"select 1 from TP_PAR_QualityASS where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID and DefectFine=:DefectFine"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dt2.Rows[p]["WagesTypeID"]), new OracleParameter(":DefectFine",dsQualityASS.Tables[0].Rows[h]["DefectFine"]), }; DataSet dsExistDefectFine = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsExistDefectFine != null && dsExistDefectFine.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_QualityASS ( YYYYMM, StaffID, PayPlanID, WagesTypeID, DefectFine, DefectNum, QualityBaseNum, QualityRate, Amount, QualityASSTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :WagesTypeID, :DefectFine, :DefectNum, :QualityBaseNum, :QualityRate, :Amount, :QualityASSTacticsID )"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dt2.Rows[p]["WagesTypeID"]), new OracleParameter(":DefectFine",dsQualityASS.Tables[0].Rows[h]["DefectFine"]), new OracleParameter(":DefectNum",drDefect.Length), new OracleParameter(":QualityBaseNum",drCount_Total), new OracleParameter(":QualityRate",temp), new OracleParameter(":Amount",min_TotalCount), new OracleParameter(":QualityASSTacticsID",PieceTacticsID_Insert4), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } #endregion } } else { //此工号没有缺陷扣罚 decimal temp_QualityReward = 0; //int drCount_Total = 0; //string QualityProcedureIDS = ""; //DataRow[] drCount = null; //////// sqlString = @"select distinct TMP_PAM_ProductionData.barcode,TP_PAM_GoodsWagesType.WagesTypeID,TMP_PAM_Defect.goodsid,TMP_PAM_Defect.DefectFine,TMP_PAM_ProductionData.UserID from TMP_PAM_Defect //////// inner join TP_PAM_GoodsWagesType //////// on TMP_PAM_Defect.goodsID=TP_PAM_GoodsWagesType.goodsID //////// //////// left join TMP_PAM_ProductionData on TMP_PAM_Defect.ProductionDataID=TMP_PAM_ProductionData.ProductionDataID //////// and TMP_PAM_ProductionData.barcode in //////// ( //////// select barcode from TP_PAT_QualityASS left join TP_PAT_Piecework on TP_PAT_QualityASS.PayPlanID=TP_PAT_Piecework.PayPlanID //////// left join TP_PAT_PieceProcedure on TP_PAT_Piecework.PieceTacticsID=TP_PAT_PieceProcedure.PieceTacticsID and TP_PAT_PieceProcedure.ProcedureFlag=1 //////// left join TMP_PAM_ProductionData on TMP_PAM_ProductionData.ProcedureID=TP_PAT_PieceProcedure.ProcedureID //////// where TP_PAT_QualityASS.QualityASSTacticsID=:QualityASSTacticsID //////// ) //////// where TMP_PAM_Defect.DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"] //////// // + " and TMP_PAM_Defect.DefectFine=" + dsQualityASS.Tables[0].Rows[h]["DefectFine"] //////// + " and TMP_PAM_ProductionData.barcode in " //////// + "(" //////// + " select barcode from TP_PAT_QualityASS left join TP_PAT_Piecework on TP_PAT_QualityASS.PayPlanID=TP_PAT_Piecework.PayPlanID" //////// + " left join TP_PAT_PieceProcedure on TP_PAT_Piecework.PieceTacticsID=TP_PAT_PieceProcedure.PieceTacticsID and TP_PAT_PieceProcedure.ProcedureFlag=1" //////// + " left join TMP_PAM_ProductionData on TMP_PAM_ProductionData.ProcedureID=TP_PAT_PieceProcedure.ProcedureID" //////// + " where TMP_PAM_ProductionData.UserID=:UserID and TP_PAT_QualityASS.QualityASSTacticsID=:QualityASSTacticsID" //////// + ")"; //////// parmeters1 = new OracleParameter[] //////// { //////// new OracleParameter(":QualityASSTacticsID",dsQualityASS.Tables[0].Rows[h]["QualityASSTacticsID"]), //////// new OracleParameter(":UserID", dsJobsPayPlan.Tables[0].Rows[j]["userID"] ), //////// //new OracleParameter(":QualityASSTacticsID", dsQualityASS.Tables[0].Rows[h]["QualityASSTacticsID"] ), //////// }; //////// DataSet ds7 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); // 1查出此品质工资方案对应的计件工序与品质工序集 sqlString = @"select distinct TP_PAT_PieceProcedure.ProcedureID,TP_PAT_PieceProcedure.Procedureflag from TP_PAT_QualityASS inner join TP_PAT_Piecework on TP_PAT_QualityASS.PayPlanID = TP_PAT_Piecework.PayPlanID inner join TP_PAT_PieceProcedure on TP_PAT_Piecework.PieceTacticsID = TP_PAT_PieceProcedure.PieceTacticsID where TP_PAT_QualityASS.QualityASSTacticsID=:QualityASSTacticsID"; parmeters1 = new OracleParameter[] { new OracleParameter(":QualityASSTacticsID",dsQualityASS.Tables[0].Rows[h]["QualityASSTacticsID"]), }; string jisian_ids_1 = ""; string pinzhi_ids_1 = ""; DataSet dsjieguo_1 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsjieguo_1 != null && dsjieguo_1.Tables[0].Rows.Count > 0) { foreach (DataRow r10 in dsjieguo_1.Tables[0].Rows) { if (r10["Procedureflag"].ToString() == "1") { jisian_ids_1 = jisian_ids_1 + r10["ProcedureID"].ToString() + ","; } else if (r10["Procedureflag"].ToString() == "2") { pinzhi_ids_1 = pinzhi_ids_1 + r10["ProcedureID"].ToString() + ","; } } jisian_ids_1 = jisian_ids_1.Trim(','); pinzhi_ids_1 = pinzhi_ids_1.Trim(','); } //DataRow[] r13 = ds_w.Tables[0].Select("DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"] + " and ProcedureID in(" + pinzhi_ids_1 + ") and ( ProcedureID in(" + jisian_ids_1 + ")" + ")");//nd userID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"] + DataRow[] r13 = ds_w.Tables[0].Select("DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"]); DataSet ds7 = new DataSet(); if (r13.Length > 0) { string deletebarcode = ""; foreach (DataRow r15 in r13) { r17 = dsTMPProductionData.Tables[0].Select("barcode =" + r15["barcode"] + " " + " and ( ProcedureID in(" + pinzhi_ids_1 + "))"); r18 = dsTMPProductionData.Tables[0].Select("barcode =" + r15["barcode"] + " " + " and ( ProcedureID in(" + jisian_ids_1 + ")) and userID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"]); if (r17.Length == 0 || r18.Length == 0) { deletebarcode = deletebarcode + r15["barcode"].ToString() + ","; //ds_w.Tables[0].AcceptChanges(); } } deletebarcode = deletebarcode.Trim(','); if (deletebarcode == "") { deletebarcode = "0"; } r13 = ds_w.Tables[0].Select("DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"] + " and barcode not in(" + deletebarcode + ")"); if (r13.Length > 0) ds7.Tables.Add(r13.CopyToDataTable().Copy()); } //drCount_Total = ds7.Tables[0].Rows.Count; // //for (int yy = 0; yy < dsQualityProcedure.Tables[0].Rows.Count; yy++) //{ // //drCount = dsTMPProductionData.Tables[0].Select("ProcedureID=" + dsQualityProcedure.Tables[0].Rows[yy]["ProcedureID"] + " and userID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"]); // //QualityProcedureIDS += dsQualityProcedure.Tables[0].Rows[yy]["ProcedureID"].ToString() + ","; // drCount_Total += drCount.Length; //} //QualityProcedureIDS = QualityProcedureIDS.Trim(','); //drCount = dsTMPProductionData.Tables[0].Select("ProcedureID in (" + QualityProcedureIDS + ") and userID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"]);//有多少行,就有多少分类 //if (drCount.Length > 0) //{ if (ds7 != null && ds7.Tables.Count > 0) { DataTable dt2 = ds7.Tables[0].DefaultView.ToTable(true, "WagesTypeID");//有多少行,就有多少分类 for (int p = 0; p < dt2.Rows.Count; p++) { // 读取质量基数工序 // 缺陷数量 drDefect = ds7.Tables[0].Select("DefectFine=" + dsQualityASS.Tables[0].Rows[h]["DefectFine"] + " and WagesTypeID=" + dt2.Rows[p]["WagesTypeID"]); // temp 为品质率,真正的价格在区间取 decimal temp = 0 / drCount_Total; // 查出对应分类品质奖励 sqlString = "select QualityReward,QualityRate from TP_PAT_QualityReward where WagesTypeID=" + dt2.Rows[p]["WagesTypeID"] + " and QualityRate<=" + temp + " and QualityASSTacticsID=" + dsQualityASS.Tables[0].Rows[h]["QualityASSTacticsID"] + " order by QualityRate"; DataSet dsQualityReward_Temp = oracleTrConn.GetSqlResultToDs(sqlString); decimal QualityRate = 0; if (dsQualityReward_Temp != null && dsQualityReward_Temp.Tables[0].Rows.Count > 0) { //表示有对应的品质价格,结果集如有多个,取第一个对应的金额即可 min_TotalCount = Convert.ToDecimal(dsQualityReward_Temp.Tables[0].Rows[0]["QualityReward"]); temp_QualityReward = Convert.ToDecimal(dsQualityReward_Temp.Tables[0].Rows[0]["QualityReward"]);//品质奖励金额 QualityRate = Convert.ToDecimal(dsQualityReward_Temp.Tables[0].Rows[0]["QualityRate"]); } //// 读取计件工资策略 //int PieceTacticsID_Insert4 = 0; //sqlString = "select QualityASSTacticsID from TP_PAT_QualityASS where PayPlanID=:PayPlanID"; //parmeters1 = new OracleParameter[] //{ // new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), //}; //DataSet dss3 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); //if (dss3 != null && dss3.Tables[0].Rows.Count > 0) //{ // PieceTacticsID_Insert4 = Convert.ToInt32(dss3.Tables[0].Rows[0]["QualityASSTacticsID"]); //} #region 插入品质考核 sqlString = @"select 1 from TP_PAR_QualityASS where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID and DefectFine=:DefectFine"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dt2.Rows[p]["WagesTypeID"]), new OracleParameter(":DefectFine",dsQualityASS.Tables[0].Rows[h]["DefectFine"]), }; DataSet dsExistDefectFine = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsExistDefectFine != null && dsExistDefectFine.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_QualityASS ( YYYYMM, StaffID, PayPlanID, WagesTypeID, DefectFine, DefectNum, QualityBaseNum, QualityRate, Amount, QualityASSTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :WagesTypeID, :DefectFine, :DefectNum, :QualityBaseNum, :QualityRate, :Amount, :QualityASSTacticsID )"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dt2.Rows[p]["WagesTypeID"]), new OracleParameter(":DefectFine",dsQualityASS.Tables[0].Rows[h]["DefectFine"]), new OracleParameter(":DefectNum",drDefect.Length), new OracleParameter(":QualityBaseNum",drCount_Total), new OracleParameter(":QualityRate",temp), new OracleParameter(":Amount",min_TotalCount), new OracleParameter(":QualityASSTacticsID",PieceTacticsID_Insert4), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } #endregion }// for 外层循环 } // } } // modify wangx end totalcount_QualityASS += min_TotalCount; } #endregion decimal? totalcount_AdminEXA = 0;// 行政工资 #region 行政考核 //sqlString = "select Amount from TP_PAD_AdminEXA where SettlementFlag=0 and StaffID=:StaffID and AuditStatus=1 and AuditlDate >=:dateStartTime and AuditlDate<=:dateEndTime";// sqlString = "select Amount from TP_PAD_AdminEXA where StaffID=:StaffID and AuditStatus=1 and AuditlDate >=:dateStartTime and AuditlDate<=:dateEndTime";// parmeters1 = new OracleParameter[] { //new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[i]["UserID"]), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":dateStartTime",dateStartTime), new OracleParameter(":dateEndTime",dateEndTime), }; DataSet dsAdminEXA = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsAdminEXA != null && dsAdminEXA.Tables[0].Rows.Count > 0) { for (int y = 0; y < dsAdminEXA.Tables[0].Rows.Count; y++) { totalcount_AdminEXA += Convert.ToDecimal(dsAdminEXA.Tables[0].Rows[y]["Amount"]); } sqlString = "update TP_PAD_AdminEXA set SettlementFlag=1 where SettlementFlag=0 and StaffID=:StaffID and AuditStatus=1 and AuditlDate >=:dateStartTime and AuditlDate<=:dateEndTime"; parmeters1 = new OracleParameter[] { new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":dateStartTime",dateStartTime), new OracleParameter(":dateEndTime",dateEndTime), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } #endregion #region 插入工资单 // 防止一个员工在多个工号下面 sqlString = "select 1 from TP_PAR_Payroll where YYYYMM=:YYYYMM and StaffID=:StaffID "; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",OracleDbType.Varchar2,(Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())),ParameterDirection.Input), new OracleParameter(":StaffID",OracleDbType.Int32,dsJobsPayPlan.Tables[0].Rows[j]["StaffID"],ParameterDirection.Input), }; DataSet ds4 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (ds4 != null && ds4.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_Payroll ( YYYYMM, StaffID, Piecework, DamageSubsidy, RepairSubsidy, QualityEXA, AdminEXA, ADAmount, TotalAmount, AuditStatus, AccountID, CreateUserID, UpdateUserID ) values ( :YYYYMM, :StaffID, :Piecework, :DamageSubsidy, :RepairSubsidy, :QualityEXA, :AdminEXA, :ADAmount, :TotalAmount, :AuditStatus, :AccountID, :CreateUserID, :UpdateUserID )"; decimal? a = (totalcount_Piecegiework + totalcount_Scrap + totalcount_RepairSubsidy + totalcount_QualityASS / userstaffcount + totalcount_AdminEXA); parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",OracleDbType.Varchar2,(Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())),ParameterDirection.Input), new OracleParameter(":StaffID",OracleDbType.Int32,dsJobsPayPlan.Tables[0].Rows[j]["StaffID"],ParameterDirection.Input), //new OracleParameter(":PayPlanID",OracleDbType.Int32,dsPayPlan.Tables[0].Rows[i]["PayPlanID"],ParameterDirection.Input), new OracleParameter(":Piecework",OracleDbType.Decimal,totalcount_Piecegiework,ParameterDirection.Input), new OracleParameter(":DamageSubsidy",OracleDbType.Decimal,totalcount_Scrap,ParameterDirection.Input), new OracleParameter(":RepairSubsidy",OracleDbType.Decimal,totalcount_RepairSubsidy,ParameterDirection.Input), new OracleParameter(":QualityEXA",OracleDbType.Decimal,totalcount_QualityASS/userstaffcount,ParameterDirection.Input), new OracleParameter(":AdminEXA",OracleDbType.Decimal,totalcount_AdminEXA,ParameterDirection.Input), new OracleParameter(":ADAmount",OracleDbType.Decimal,0,ParameterDirection.Input), new OracleParameter(":TotalAmount",OracleDbType.Decimal,a,ParameterDirection.Input), new OracleParameter(":CreateUserID",OracleDbType.Int32,sUserInfo.UserID,ParameterDirection.Input), new OracleParameter(":UpdateUserID",OracleDbType.Int32,sUserInfo.UserID,ParameterDirection.Input), new OracleParameter(":AccountID",OracleDbType.Int32,sUserInfo.AccountID,ParameterDirection.Input), new OracleParameter(":AuditStatus",OracleDbType.Int32,0,ParameterDirection.Input), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } else { sqlString = @"update TP_PAR_Payroll set Piecework=Piecework+:Piecework, DamageSubsidy=DamageSubsidy+:DamageSubsidy, RepairSubsidy=RepairSubsidy+:RepairSubsidy, QualityEXA=QualityEXA+:QualityEXA, AdminEXA=AdminEXA+:AdminEXA, ADAmount=AdminEXA+:ADAmount, TotalAmount=TotalAmount+:TotalAmount where YYYYMM=:YYYYMM and StaffID=:StaffID "; decimal? a = (totalcount_Piecegiework + totalcount_Scrap + totalcount_RepairSubsidy + totalcount_QualityASS + totalcount_AdminEXA); parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",OracleDbType.Varchar2,(Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())),ParameterDirection.Input), new OracleParameter(":StaffID",OracleDbType.Int32,dsJobsPayPlan.Tables[0].Rows[j]["StaffID"],ParameterDirection.Input), //new OracleParameter(":PayPlanID",OracleDbType.Int32,dsPayPlan.Tables[0].Rows[i]["PayPlanID"],ParameterDirection.Input), new OracleParameter(":Piecework",OracleDbType.Decimal,totalcount_Piecegiework,ParameterDirection.Input), new OracleParameter(":DamageSubsidy",OracleDbType.Decimal,totalcount_Scrap,ParameterDirection.Input), new OracleParameter(":RepairSubsidy",OracleDbType.Decimal,totalcount_RepairSubsidy,ParameterDirection.Input), new OracleParameter(":QualityEXA",OracleDbType.Decimal,totalcount_QualityASS,ParameterDirection.Input), new OracleParameter(":AdminEXA",OracleDbType.Decimal,totalcount_AdminEXA,ParameterDirection.Input), new OracleParameter(":ADAmount",OracleDbType.Decimal,0,ParameterDirection.Input), new OracleParameter(":TotalAmount",OracleDbType.Decimal,a,ParameterDirection.Input), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } #endregion #region 删除临时数据表(工号) DataRow[] drDeleteUserID = dsTMPProductionData.Tables[0] .Select(string.Format("UserID={0} and ProcedureID in({1})", dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString(), ProcedureIDS_Delete)); //int aaaa = dsTMPProductionData.Tables[0].Rows.Count; foreach (DataRow r in drDeleteUserID) { r.Delete(); //dsTMPProductionData.Tables[0].Rows.Remove(r); } dsTMPProductionData.Tables[0].AcceptChanges(); //int aaaaaa = dsTMPProductionData.Tables[0].Rows.Count; #endregion } if (intResult > 0) { sqlString = @"insert into TP_PAR_PayrollAccount ( YYYYMM, BeginDate, EndDate, AccountID, CreateUserID ) values ( :YYYYMM, :BeginDate, :EndDate, :AccountID, :CreateUserID )"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":BeginDate",dateStartTime), new OracleParameter(":EndDate",dateEndTime), new OracleParameter(":AccountID",sUserInfo.AccountID), new OracleParameter(":CreateUserID",sUserInfo.UserID), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); // 更新系统结算月 sqlString = "update TP_MST_SystemDate set datevalue=sysdate where systemdatetype=2"; intResult += oracleTrConn.ExecuteNonQuery(sqlString); sqlString = "update TP_MST_SystemDate set datevalue=:datevalue where systemdatetype=5"; parmeters1 = new OracleParameter[] { new OracleParameter(":datevalue",dateEndTime), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); oracleTrConn.Commit(); oracleTrConn.Disconnect(); } else { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } } } return intResult; } catch (Exception ex) { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } throw ex; } finally { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } } } #endregion #region 工资结算历史记录查询 /// /// 获取工资结算历史记录 /// /// /// /// public static DataSet GetPayroll(string YYYYMM, SUserInfo sUserInfo) { IDBConnection con = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); try { con.Open(); string sqlString = @"select 0 as Sel, TP_PAR_Payroll.Yyyymm, TP_HR_Staff.StaffName, TP_HR_Staff.StaffCode, TP_PAR_Payroll.StaffID, TP_PAR_Payroll.Piecework, TP_PAR_Payroll.DamageSubsidy, TP_PAR_Payroll.RepairSubsidy, TP_PAR_Payroll.QualityEXA, TP_PAR_Payroll.AdminEXA, TP_PAR_Payroll.ADAmount, TP_PAR_Payroll.TotalAmount, TP_PAR_Payroll.Remarks, TP_PAR_Payroll.AuditStatus, decode(TP_PAR_Payroll.AuditStatus,0,'待审核','1','审核通过','审核未通过') as AuditStatusName, TP_PAR_Payroll.AuditlDate, TP_PAR_Payroll.Auditor, ( select wmsys.wm_concat(to_char(tp_mst_user.usercode)) as usercode from tp_mst_userstaff left join tp_mst_user on tp_mst_userstaff.userid=tp_mst_user.userid where tp_mst_userstaff.staffid=TP_PAR_Payroll.Staffid ) as usercode from TP_PAR_Payroll left join TP_HR_Staff on TP_PAR_Payroll.StaffID=TP_HR_Staff.StaffID where TP_PAR_Payroll.YYYYMM=:YYYYMM"; OracleParameter[] paras = new OracleParameter[]{ new OracleParameter("YYYYMM",OracleDbType.Varchar2, YYYYMM,ParameterDirection.Input), }; DataSet ds = con.GetSqlResultToDs(sqlString, paras); return ds; } catch (Exception ex) { throw ex; } finally { if (con.ConnState == ConnectionState.Open) { con.Close(); } } } /// /// 获取工资结算历史记录详情 /// /// /// /// /// public static DataSet GetPayrollInfo(string YYYYMM, int staffid, SUserInfo sUserInfo) { IDBConnection con = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); try { con.Open(); DataSet dsReturn = new DataSet(); string sqlString = @"select TP_HR_Staff.StaffName, TP_HR_Staff.StaffCode, decode(StaffFlag,'1','试用','正式') as StaffFlag, YYYYMM, decode(GoodsFlag,'1','新品','2','变产','正常') as GoodsFlag , PieceworkNum, PieceCoefficient, DamageNum, DamageCoefficient, UnqualifiedNum, UnqualifiedCoefficient, QualifiedNum, QualifiedCoefficient, QualityBaseNum, QualityRate*100 as QualityRate, QualityWages, Amount, TP_PAS_PayPlan.PayPlanName, TP_PAT_Piecework.PieceTacticsName, TP_PAM_WagesType.WagesTypeName from TP_PAR_Piecework left join TP_HR_Staff on TP_PAR_Piecework.StaffID=TP_HR_Staff.StaffID left join TP_PAS_PayPlan on TP_PAS_PayPlan.PayPlanID=TP_PAR_Piecework.PayPlanID left join TP_PAM_WagesType on TP_PAM_WagesType.WagesTypeID=TP_PAR_Piecework.WagesTypeID left join TP_PAT_Piecework on TP_PAR_Piecework.PieceTacticsID=TP_PAT_Piecework.PieceTacticsID where TP_PAR_Piecework.YYYYMM=:YYYYMM and TP_PAR_Piecework.staffid=:staffid"; OracleParameter[] paras = new OracleParameter[]{ new OracleParameter(":YYYYMM",OracleDbType.Varchar2, YYYYMM,ParameterDirection.Input), new OracleParameter(":staffid",OracleDbType.Int32, staffid,ParameterDirection.Input), }; DataSet ds = con.GetSqlResultToDs(sqlString, paras); ds.Tables[0].TableName = "TP_PAR_Piecework"; string sqlString2 = @"select TP_HR_Staff.StaffName, TP_HR_Staff.StaffCode, DamageNum, YYYYMM, StandardWages, DamageSubsidyRate, DamageSubsidy, Amount, TP_PAS_PayPlan.PayPlanName, TP_PAT_Piecework.PieceTacticsName, TP_PAM_WagesType.WagesTypeName from TP_PAR_DamageSubsidy left join TP_HR_Staff on TP_PAR_DamageSubsidy.StaffID=TP_HR_Staff.StaffID left join TP_PAS_PayPlan on TP_PAS_PayPlan.PayPlanID=TP_PAR_DamageSubsidy.PayPlanID left join TP_PAM_WagesType on TP_PAM_WagesType.WagesTypeID=TP_PAR_DamageSubsidy.WagesTypeID left join TP_PAT_Piecework on TP_PAR_DamageSubsidy.PieceTacticsID=TP_PAT_Piecework.PieceTacticsID where TP_PAR_DamageSubsidy.YYYYMM=:YYYYMM and TP_PAR_DamageSubsidy.staffid=:staffid"; DataSet ds2 = con.GetSqlResultToDs(sqlString2, paras); ds2.Tables[0].TableName = "TP_PAR_DamageSubsidy"; string sqlString3 = @"select TP_HR_Staff.StaffName, TP_HR_Staff.StaffCode, RSuperioNum, YYYYMM, RSuperiorCoefficient, RQualifiedNum, RQualifiedCoefficient, StandardWages, RepairSubsidyRate, RepairSubsidy, Amount, TP_PAS_PayPlan.PayPlanName, TP_PAT_Piecework.PieceTacticsName, TP_PAM_WagesType.WagesTypeName from TP_PAR_RepairSubsidy left join TP_HR_Staff on TP_PAR_RepairSubsidy.StaffID=TP_HR_Staff.StaffID left join TP_PAS_PayPlan on TP_PAS_PayPlan.PayPlanID=TP_PAR_RepairSubsidy.PayPlanID left join TP_PAM_WagesType on TP_PAM_WagesType.WagesTypeID=TP_PAR_RepairSubsidy.WagesTypeID left join TP_PAT_Piecework on TP_PAR_RepairSubsidy.PieceTacticsID=TP_PAT_Piecework.PieceTacticsID where TP_PAR_RepairSubsidy.YYYYMM=:YYYYMM and TP_PAR_RepairSubsidy.staffid=:staffid"; DataSet ds3 = con.GetSqlResultToDs(sqlString3, paras); ds3.Tables[0].TableName = "TP_PAR_RepairSubsidy"; string sqlString4 = @"select TP_HR_Staff.StaffName, TP_HR_Staff.StaffCode, TP_MST_DataDictionary.DictionaryValue as DefectFine, DefectNum, YYYYMM, QualityBaseNum, QualityRate*100 as QualityRate, Amount, TP_PAS_PayPlan.PayPlanName, TP_PAT_QualityASS.QualityTacticsName, TP_PAM_WagesType.WagesTypeName from TP_PAR_QualityASS left join TP_HR_Staff on TP_PAR_QualityASS.StaffID=TP_HR_Staff.StaffID left join TP_MST_DataDictionary on TP_MST_DataDictionary.DictionaryID=TP_PAR_QualityASS.DefectFine and TP_MST_DataDictionary.DictionaryType='ASE002' left join TP_PAS_PayPlan on TP_PAS_PayPlan.PayPlanID=TP_PAR_QualityASS.PayPlanID left join TP_PAM_WagesType on TP_PAM_WagesType.WagesTypeID=TP_PAR_QualityASS.WagesTypeID left join TP_PAT_QualityASS on TP_PAR_QualityASS.QualityASSTacticsID=TP_PAT_QualityASS.QualityASSTacticsID where TP_PAR_QualityASS.YYYYMM=:YYYYMM and TP_PAR_QualityASS.staffid=:staffid"; DataSet ds4 = con.GetSqlResultToDs(sqlString4, paras); ds4.Tables[0].TableName = "TP_PAR_QualityASS"; dsReturn.Tables.Add(ds.Tables[0].Copy()); dsReturn.Tables.Add(ds2.Tables[0].Copy()); dsReturn.Tables.Add(ds3.Tables[0].Copy()); dsReturn.Tables.Add(ds4.Tables[0].Copy()); return dsReturn; } catch (Exception ex) { throw ex; } finally { if (con.ConnState == ConnectionState.Open) { con.Close(); } } } /// /// 工资单调整 /// /// 工资单数据 /// 用户基本信息 /// int /// /// 2014.09.11 冯雪 新建 /// public static int SavePayrollChange(DataTable dataPayroll, SUserInfo sUserInfo) { IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { // 检验参数的有效性 if (dataPayroll == null && dataPayroll.Rows.Count == 0) { return -1; } int intResult = 0; oracleTrConn.Connect(); foreach (DataRow dataRow in dataPayroll.Rows) { if (dataRow.RowState == DataRowState.Modified) { #region 工资单对应金额 string sqlString = "UPDATE TP_PAR_Payroll SET " + " ADAmount = :ADAmount, " + " TotalAmount =TotalAmount+:ADAmount, " + " Remarks = :Remarks " + " WHERE YYYYMM = :YYYYMM" + " and StaffID = :StaffID" + " and AuditStatus=0"; OracleParameter[] parmeters1 = new OracleParameter[] { new OracleParameter(":ADAmount",dataRow["ADAmount"].ToString()), new OracleParameter(":YYYYMM",dataRow["YYYYMM"].ToString()), new OracleParameter(":StaffID",dataRow["StaffID"].ToString()), new OracleParameter(":Remarks",dataRow["Remarks"].ToString()) }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion } } oracleTrConn.Commit(); oracleTrConn.Disconnect(); return intResult; } catch (Exception ex) { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } throw ex; } finally { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } } } /// /// 工资单审批 /// /// 工资单数据 /// 用户基本信息 /// int /// /// 2014.09.11 冯雪 新建 /// public static int SavePayrollAuditStatus(DataTable dataPayrollAuditStatus, SUserInfo sUserInfo) { IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { int intResult = 0; oracleTrConn.Connect(); foreach (DataRow dataRow in dataPayrollAuditStatus.Rows) { #region 工资单对应审核 string sqlString = "UPDATE TP_PAR_Payroll SET " + " AuditStatus = :AuditStatus, " + " Auditor =:Auditor, " + " AuditlDate =sysdate " + " WHERE YYYYMM = :YYYYMM" + " and StaffID = :StaffID"; OracleParameter[] parmeters1 = new OracleParameter[] { new OracleParameter(":AuditStatus",dataRow["sel"].ToString()=="1"?"1":"0"), new OracleParameter(":Auditor",sUserInfo.UserID), new OracleParameter(":YYYYMM",dataRow["YYYYMM"].ToString()), new OracleParameter(":StaffID",dataRow["StaffID"].ToString()), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion } oracleTrConn.Commit(); oracleTrConn.Disconnect(); return intResult; } catch (Exception ex) { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } throw ex; } finally { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } } } #endregion /// /// 结算工资 /// /// false 新建 true 编辑 /// 数据源 /// /// public static int SavePayPiecework2(int Month, int Year, DateTime start, DateTime end, SUserInfo sUserInfo) { IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { int intResult = 0; oracleTrConn.Connect(); oracleTrConn.IsCommandTimeout = false; #region 判断是否已经结算此月 string sqlExist = "select 1 from TP_PAR_PayrollAccount where YYYYMM=:YYYYMM"; OracleParameter[] parmetersExist = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), }; DataSet dsExist = oracleTrConn.GetSqlResultToDs(sqlExist, parmetersExist); if (dsExist != null && dsExist.Tables[0].Rows.Count > 0) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); return -99; } #endregion #region 查询系统参数设定值,用来结算工资范围取值 DateTime? dateStartTime = null; DateTime? dateEndTime = null; string sqlString = "select SettingValue from TP_MST_SystemSetting where accountid=:accountid and SettingCode='S_CMN_0003'"; OracleParameter[] parmeters1 = new OracleParameter[] { new OracleParameter(":accountid",sUserInfo.AccountID), }; DataSet dsSystemSettings = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsSystemSettings != null && dsSystemSettings.Tables[0].Rows.Count > 0) { // 算出此月一共多少天,防止设置的值,大于当月的天数 int daysCount = DateTime.DaysInMonth(Year, Month); if (dsSystemSettings.Tables[0].Rows[0]["SettingValue"].ToString() == "月末") { dateStartTime = new DateTime(Year, Month, 1); dateEndTime = new DateTime(Year, Month, daysCount, 23, 59, 59); } else { // 选择的值,大于当月的天数 if (Convert.ToInt32(dsSystemSettings.Tables[0].Rows[0]["SettingValue"]) > daysCount) { dateEndTime = new DateTime(Year, Month, daysCount, 23, 59, 59); dateStartTime = dateEndTime.Value.AddMonths(-1).AddDays(1); } else { dateEndTime = new DateTime(Year, Month, Convert.ToInt32(dsSystemSettings.Tables[0].Rows[0]["SettingValue"]), 23, 59, 59); dateStartTime = dateEndTime.Value.AddMonths(-1).AddDays(1); } } } dateStartTime = start; //dateEndTime = new DateTime(DateTime.Now.Year, DateTime.Now.AddMonths(-2).Month, 27, 23, 59, 59); dateEndTime = end; #endregion #region 根据筛选日期往临时表里插入数据 parmeters1 = new OracleParameter[] { new OracleParameter(":dateStartTime",OracleDbType.Date,dateStartTime,ParameterDirection.Input), new OracleParameter(":dateEndTime",OracleDbType.Date,dateEndTime,ParameterDirection.Input), new OracleParameter(":accountid",sUserInfo.AccountID), }; // 生产数据临时表 sqlString = @"insert into TMP_PAM_ProductionData select ProductionDataID, BarCode, CentralizedBatchNo, ProductionLineID, ProductionLineCode, ProductionLineName, ProcedureID, ProcedureCode, ProcedureName, ProcedureModel, ModelType, PieceType, IsReworked, NodeType, IsPublicBody, IsReFire, GoodsLevelID, GoodsLevelTypeID, SpecialRepairFlag, OrganizationID, GoodsID, GoodsCode, GoodsName, UserID, UserCode, UserName, ClassesSettingID, KilnID, KilnCode, KilnName, KilnCarID, KilnCarCode, KilnCarName, KilnCarBatchNo, KilnCarPosition, ReworkProcedureID, ReworkProcedureCode, ReworkProcedureName, GroutingDailyID, GroutingDailyDetailID, GroutingLineID, GroutingLineCode, GroutingLineName, GMouldTypeID, CanManyTimes, GroutingLineDetailID, GroutingDate, GroutingMouldCode, MouldCode, GroutingUserID, GroutingUserCode, GroutingNum, Remarks, AccountDate, SettlementFlag, AccountID, ValueFlag, CreateTime, CreateUserID, UpdateTime, UpdateUserID, OPTimeStamp from TP_PM_ProductionData where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1"; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); // 生产缺陷 sqlString = @"insert into TMP_PAM_Defect select ProductionDefectID, ProductionDataID, BarCode, ProductionLineID, ProductionLineCode, ProductionLineName, ProcedureID, ProcedureCode, ProcedureName, UserID, UserCode, UserName, GoodsID, GoodsCode, GoodsName, DefectID, DefectCode, DefectName, DefectPositionID, DefectPositionCode, DefectPositionName, ScrapResponFlag, DefectProductionDataID, DefectProcedureID, DefectProcedureCode, DefectProcedureName, DefectUserID, DefectUserCode, DefectUserName, DefectJobs, DefectFine, MissedUserID, MissedUserCode, MissedUserName, Remarks, AccountID, ValueFlag, CreateTime, CreateUserID, UpdateTime, UpdateUserID, OPTimeStamp from TP_PM_Defect where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1"; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //生产缺陷责任者 sqlString = @"insert into TMP_PAM_DefectResponsible select ProductionDefectID, StaffID, StaffStatus, UserID, UserCode, UJobsID, SJobsID, AccountID, ValueFlag, CreateTime, CreateUserID, UpdateTime, UpdateUserID, OPTimeStamp from TP_PM_DefectResponsible where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1"; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); // //缺陷漏检责任者 // sqlString = @"insert into TP_PAM_DefectMissedResponsible // select * from TP_PM_DefectMissedResponsible where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1"; // intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //废弃产品 sqlString = @"insert into TMP_PAM_ScrapProduct select ScrapProductID, BarCode, ProductionLineID, ProductionLineCode, ProductionLineName, ProcedureID, ProcedureCode, ProcedureName, GoodsID, GoodsCode, GoodsName, GroutingDailyID, GroutingDailyDetailID, GroutingDate, GroutingLineID, GroutingLineCode, GroutingLineName, GMouldTypeID, GroutingLineDetailID, GroutingMouldCode, MouldCode, GroutingUserID, GroutingUserCode, GroutingNum, IsPublicBody, IsReFire, SpecialRepairFlag, GoodsLevelID, GoodsLevelTypeID, ResponType, ScrapFine, ScrapDate, Rreason, Remarks, AuditStatus, Auditor, AuditDate, AuditOpinion, AccountDate, KilnID, KilnCode, KilnName, KilnCarID, KilnCarCode, KilnCarName, KilnCarBatchNo, KilnCarPosition, AccountID, ValueFlag, CreateTime, CreateUserID, UpdateTime, UpdateUserID, OPTimeStamp from TP_PM_ScrapProduct where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1 and AuditStatus=1"; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //产品废弃责任工序 sqlString = @"insert into TMP_PAM_ResponProcedure select ResponProcedureID, ScrapProductID, BarCode, ProductionDataID, ProductionLineID, ProductionLineCode, ProductionLineName, ProcedureID, ProcedureCode, ProcedureName, UserID, UserCode, UserName, Remarks, AccountID, ValueFlag, CreateTime, CreateUserID, UpdateTime, UpdateUserID, OPTimeStamp from TP_PM_ResponProcedure where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1 "; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //产品废弃责任者 sqlString = @"insert into TMP_PAM_ScrapResponsible select ResponsibleID, ScrapProductID, BarCode, ResponType, ResponProcedureID, ScrapFine, StaffID, StaffStatus, UserID, UserCode, UJobsID, SJobsID, AccountID, CreateTime, CreateUserID, UpdateTime, UpdateUserID, OPTimeStamp from TP_PM_ScrapResponsible where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid "; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); //成品 (干补补贴用) sqlString = @"insert into TMP_PAM_FinishedProduct select BarCode, ProductionLineID, ProductionLineCode, ProductionLineName, IsPublicBody, IsReFire, SpecialRepairFlag, GoodsLevelID, GoodsLevelTypeID, GoodsID, GoodsCode, GoodsName, GroutingDailyID, GroutingDailyDetailID, GroutingDate, GroutingLineID, GroutingLineCode, GroutingLineName, GMouldTypeID, GroutingLineDetailID, GroutingMouldCode, MouldCode, GroutingUserID, GroutingUserCode, GroutingNum, Remarks, AccountDate, SettlementFlag, KilnID, KilnCode, KilnName, KilnCarID, KilnCarCode, KilnCarName, KilnCarBatchNo, KilnCarPosition, AccountID, ValueFlag, CreateTime, CreateUserID, UpdateTime, UpdateUserID, OPTimeStamp from TP_PM_FinishedProduct where CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1"; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion #region 读取工资方案,用来最外层循环,以后可以是多个方法,目前只有一个工资方案 sqlString = "select PayPlanID from TP_PAS_PayPlan where AccountID=:AccountID and ValueFlag=1"; parmeters1 = new OracleParameter[] { new OracleParameter(":AccountID",sUserInfo.AccountID), }; DataSet dsPayPlan = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion // dsPayPlan为工资方案数据集 if (dsPayPlan != null && dsPayPlan.Tables[0].Rows.Count > 0) { // 进入循环, for (int i = 0; i < dsPayPlan.Tables[0].Rows.Count; i++) { #region 查出工资临时生产数据表数据,用于计算工资 //查出在产品工介分类中的生产数据,用于计算每个人的工资 sqlString = @"select TMP_PAM_ProductionData.ProductionDataID, TMP_PAM_ProductionData.BarCode, TMP_PAM_ProductionData.ProcedureID, TMP_PAM_ProductionData.GoodsID, TMP_PAM_ProductionData.GoodsCode, TMP_PAM_ProductionData.GoodsName, TMP_PAM_ProductionData.UserID, TMP_PAM_ProductionData.UserCode, TMP_PAM_ProductionData.UserName, TP_MST_Goods.StartingDate, TP_PAM_GoodsWagesType.WagesTypeID, TMP_PAM_ProductionData.GoodsLevelTypeID from TMP_PAM_ProductionData inner join TP_PAM_GoodsWagesType on TMP_PAM_ProductionData.GoodsID=TP_PAM_GoodsWagesType.GoodsID left join TP_MST_Goods on TP_PAM_GoodsWagesType.GoodsID=TP_MST_Goods.GoodsID where TMP_PAM_ProductionData.CreateTime >=:dateStartTime and TMP_PAM_ProductionData.CreateTime<=:dateEndTime and accountid=:accountid order by TMP_PAM_ProductionData.ProductionDataID desc"; parmeters1 = new OracleParameter[] { new OracleParameter(":accountid",sUserInfo.AccountID), new OracleParameter(":dateStartTime",dateStartTime), new OracleParameter(":dateEndTime",dateEndTime), }; DataSet dsTMPProductionData = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion #region 查出工资方案对应工种的员工,用于给每个员工结算工资 sqlString = @"select TP_HR_Staff.StaffID,TP_HR_Staff.StaffCode,TP_HR_Staff.StaffName,TP_HR_Staff.Jobs,TP_HR_Staff.StaffStatus ,TP_HR_Staff.EntryDate,TP_HR_Staff.TurnoverDate,TP_HR_Staff.ExProbationEndDate, TP_MST_UserStaff.UserID from TP_HR_Staff inner join TP_MST_UserStaff on TP_HR_Staff.StaffID=TP_MST_UserStaff.StaffID where TP_HR_Staff.Jobs in ( select JobsID from TP_PAM_JobsPayPlan where PayPlanID=:PayPlanID ) and TP_HR_Staff.accountid=:accountid and TP_HR_Staff.valueflag=1 "; parmeters1 = new OracleParameter[] { new OracleParameter(":accountid",sUserInfo.AccountID), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dsJobsPayPlan = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion #region 查出计件工资策略 sqlString = @"select * from TP_PAT_Piecework where accountid=:accountid and valueflag=1 and PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":accountid",sUserInfo.AccountID), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dsPiecework = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); int PieceTacticsID = 0; //计件工资策略ID //int PieceworkValue = 0; //计件工资策略,如果未配置工资方案计件策略,计件工资为0 string PieceType = ""; // 工序类型 //int? PieceProcedureID = null; //计件工序 decimal PieceCoefficient = 1; // 计件系数 string DamageFlag = ""; //损坯计算标识 decimal? DamageCoefficient = null; //损坯系数 string UnqualifiedFlag = ""; //次品计算标识 decimal? UnqualifiedCoefficient = null; //次品系数 string QualifiedFlag = ""; //副品计算标识 decimal? QualifiedCoefficient = null; //副品系数 //int? QualityBaseProcedureID = null; //质量基数工序 if (dsPiecework != null && dsPiecework.Tables[0].Rows.Count > 0) { // 有且只能一个对应的工资方案,直接取table0行,如果取出多行,此数据不对,因为有且只能一行 // 赋值代码 PieceTacticsID = Convert.ToInt32(dsPiecework.Tables[0].Rows[0]["PieceTacticsID"].ToString()); PieceType = dsPiecework.Tables[0].Rows[0]["PieceType"].ToString(); //PieceProcedureID = Convert.ToInt32(dsPiecework.Tables[0].Rows[0]["PieceProcedureID"]); PieceCoefficient = Convert.ToDecimal(dsPiecework.Tables[0].Rows[0]["PieceCoefficient"]); DamageFlag = dsPiecework.Tables[0].Rows[0]["DamageFlag"].ToString(); DamageCoefficient = Convert.ToDecimal(dsPiecework.Tables[0].Rows[0]["DamageCoefficient"]); UnqualifiedFlag = dsPiecework.Tables[0].Rows[0]["UnqualifiedFlag"].ToString(); UnqualifiedCoefficient = Convert.ToDecimal(dsPiecework.Tables[0].Rows[0]["UnqualifiedCoefficient"]); QualifiedFlag = dsPiecework.Tables[0].Rows[0]["QualifiedFlag"].ToString(); QualifiedCoefficient = Convert.ToDecimal(dsPiecework.Tables[0].Rows[0]["QualifiedCoefficient"]); //QualityBaseProcedureID = Convert.ToInt32(dsPiecework.Tables[0].Rows[0]["QualityBaseProcedureID"]); } #endregion #region 查出计件工资策略(计件工序) sqlString = "select * from TP_PAT_PieceProcedure where PieceTacticsID=:PieceTacticsID and ProcedureFlag=1"; parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",PieceTacticsID), }; DataSet dsPieceProcedure_1 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); sqlString = "select * from TP_PAT_PieceProcedure where PieceTacticsID=:PieceTacticsID and ProcedureFlag=2"; parmeters1 = new OracleParameter[] { new OracleParameter(":PieceTacticsID",PieceTacticsID), }; DataSet dsPieceProcedure_2 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion #region 查出全部废弃产品表数据,用于计算工资 sqlString = @"select TMP_PAM_ResponProcedure.UserID,TP_PAM_GoodsWagesType.WagesTypeID,TP_MST_Goods.StartingDate,TMP_PAM_ScrapProduct.barcode, from TMP_PAM_ScrapProduct left join TMP_PAM_ResponProcedure on TMP_PAM_ScrapProduct.ScrapProductID=TMP_PAM_ResponProcedure.ScrapProductID left join TP_PAM_GoodsWagesType on TMP_PAM_ScrapProduct.GoodsID=TP_PAM_GoodsWagesType.GoodsID left join TP_MST_Goods on TP_PAM_GoodsWagesType.GoodsID=TP_MST_Goods.GoodsID where TMP_PAM_ScrapProduct.CreateTime >=:dateStartTime and TMP_PAM_ScrapProduct.CreateTime<=:dateEndTime and TMP_PAM_ScrapProduct.accountid=:accountid and TMP_PAM_ScrapProduct.AuditStatus=1 "; parmeters1 = new OracleParameter[] { new OracleParameter(":accountid",sUserInfo.AccountID), new OracleParameter(":dateStartTime",dateStartTime), new OracleParameter(":dateEndTime",dateEndTime), }; DataSet dsTMPResponProcedure = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion #region 查出产品工价分类 sqlString = @"select * from TP_PAM_GoodsWagesType "; DataSet dsGoodsWagesType = oracleTrConn.GetSqlResultToDs(sqlString); #endregion #region 查出产品工价 sqlString = @"select * from TP_PAT_Wages "; DataSet dsWages = oracleTrConn.GetSqlResultToDs(sqlString); #endregion #region 查出质量工价 sqlString = @"select * from TP_PAT_QualityWages order by WagesTypeID,QualityRate "; DataSet dsQualityWages = oracleTrConn.GetSqlResultToDs(sqlString); #endregion #region 查出工资方案参数设定 sqlString = "select * from TP_PAS_PayPlanSetting where PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dsPayPlanSetting = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion #region 查出临时成品表,用于计算干补补贴,这些数据肯定配置了产品工价 sqlString = @"select * from TMP_PAM_FinishedProduct inner join TP_PAM_GoodsWagesType on TMP_PAM_FinishedProduct.GoodsID=TP_PAM_GoodsWagesType.GoodsID where TMP_PAM_FinishedProduct.CreateTime >=:dateStartTime and TMP_PAM_FinishedProduct.CreateTime<=:dateEndTime and TMP_PAM_FinishedProduct.accountid=:accountid "; parmeters1 = new OracleParameter[] { new OracleParameter(":accountid",sUserInfo.AccountID), new OracleParameter(":dateStartTime",dateStartTime), new OracleParameter(":dateEndTime",dateEndTime), }; DataSet dsFinishedProduct = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion #region 读出对应解决方案品质考核策略,可以存在多个 sqlString = "select * from TP_PAT_QualityASS where PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dsQualityASS = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion #region 读出对应解决方案品质考核策略工序 //sqlString = "select * from TP_PAT_QualityProcedure"; //DataSet dsQualityProcedure = oracleTrConn.GetSqlResultToDs(sqlString); #endregion #region 查出生产缺陷数据表(暂时未用) // sqlString = @"select * from TMP_PAM_Defect inner join TP_PAM_GoodsWagesType // on TMP_PAM_Defect.GoodsID=TP_PAM_GoodsWagesType.GoodsID // where TMP_PAM_Defect.CreateTime >=:dateStartTime and TMP_PAM_Defect.CreateTime<=:dateEndTime // and TMP_PAM_Defect.accountid=:accountid // "; // parmeters1 = new OracleParameter[] // { // new OracleParameter(":accountid",sUserInfo.AccountID), // new OracleParameter(":dateStartTime",dateStartTime), // new OracleParameter(":dateEndTime",dateEndTime), // }; // DataSet dsDefect = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); #endregion // 遍历工种数据集,统计每个员工的工资 //dsJobsPayPlan.Tables[0].Rows.Count for (int j = 0; j < dsJobsPayPlan.Tables[0].Rows.Count; j++) { // 用于插入工资单各类数值 decimal? totalcount_Piecegiework = 0; //计件工资 decimal? totalcount_Scrap = 0; //损坯补贴 decimal? totalcount_RepairSubsidy = 0; //干补补贴 #region 计件工资整体累计 if (PieceType == "0") // 工序计件 { // 查出这个工号,在此计件工序,有多少产品 DataRow[] drGoodsCount = dsTMPProductionData.Tables[0] .Select(string.Format("UserID={0}", dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString())); if (drGoodsCount.Length > 0) // 此工号下代表有产品 { //----------------------------------- // 1.算出是否有新品,还是老品 DataRow[] drMonth = dsPayPlanSetting.Tables[0].Select("SettingCode='01001'"); int newGoodsMonth = Convert.ToInt32(drMonth[0]["SettingValue"]); //新产品适应周期(月) // 2.添加一列,产品标识,是否新品,还是旧品,遍历数据集,并一个一个更改 if (!dsTMPProductionData.Tables[0].Columns.Contains("GoodsFlag")) { dsTMPProductionData.Tables[0].Columns.Add("GoodsFlag"); for (int bb = 0; bb < dsTMPProductionData.Tables[0].Rows.Count; bb++) { if (Convert.ToDateTime(dsTMPProductionData.Tables[0].Rows[bb]["StartingDate"]).AddMonths(newGoodsMonth) > DateTime.Now) { dsTMPProductionData.Tables[0].Rows[bb]["GoodsFlag"] = 3; //正常 } else { dsTMPProductionData.Tables[0].Rows[bb]["GoodsFlag"] = 1; //新品 } } } //for (int bb = 0; bb < dsTMPProductionData.Tables[0].Rows.Count; bb++) //{ // if (Convert.ToDateTime(dsTMPProductionData.Tables[0].Rows[bb]["StartingDate"]).AddMonths(newGoodsMonth) > DateTime.Now) // { // dsTMPProductionData.Tables[0].Rows[bb]["GoodsFlag"] = 3; //正常 // } // else // { // dsTMPProductionData.Tables[0].Rows[bb]["GoodsFlag"] = 1; //新品 // } //} //3 报损责任工序 if (!dsTMPResponProcedure.Tables[0].Columns.Contains("GoodsFlag")) { dsTMPResponProcedure.Tables[0].Columns.Add("GoodsFlag"); for (int bb = 0; bb < dsTMPResponProcedure.Tables[0].Rows.Count; bb++) { if (dsTMPResponProcedure.Tables[0].Rows[bb]["StartingDate"].ToString() != "") { if (Convert.ToDateTime(dsTMPResponProcedure.Tables[0].Rows[bb]["StartingDate"]).AddMonths(newGoodsMonth) > DateTime.Now) { dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 3; //正常 } else { dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 1; //新品 } } else { dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 3; //正常 } } } //for (int bb = 0; bb < dsTMPResponProcedure.Tables[0].Rows.Count; bb++) //{ // if (dsTMPResponProcedure.Tables[0].Rows[bb]["StartingDate"].ToString() != "") // { // if (Convert.ToDateTime(dsTMPResponProcedure.Tables[0].Rows[bb]["StartingDate"]).AddMonths(newGoodsMonth) > DateTime.Now) // { // dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 3; //正常 // } // else // { // dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 1; //新品 // } // } // else // { // dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 3; //正常 // } //} //----------------------------------- // 接下来在过滤产品分类有多少种,用来分别计算各分类的工资 // 以下表有多少行,去掉重复算出有多少个分类 DataTable dtWagesType = drGoodsCount.CopyToDataTable().DefaultView.ToTable(true, "WagesTypeID"); // 有多少产品标识 DataTable dtGoodsFlag = drGoodsCount.CopyToDataTable().DefaultView.ToTable(true, "GoodsFlag"); int PieceProcedureCount = 0; //计件数量 int UnqualifiedCount = 0; //次品数量 int QualifiedCount = 0; //副品数量 int QualityBaseProcedureCount = 0; //出窑数量 for (int wagestype = 0; wagestype < dtWagesType.Rows.Count; wagestype++) { for (int vv = 0; vv < dtGoodsFlag.Rows.Count; vv++) { decimal? temp_Piecegiework = 0; #region 1.求出各分类计件工序数量 PieceProcedureCount = 0; //每个分类之前置空 decimal PieceProcedureTotal = 0;//系数*数量 //下面开始计算每个分类的计件工资 for (int p1 = 0; p1 < dsPieceProcedure_1.Tables[0].Rows.Count; p1++) { DataRow[] drPieceProcedureCount = dsTMPProductionData.Tables[0] .Select(string.Format("UserID={0} and ProcedureID={1} and WagesTypeID={2} and GoodsFlag={3}", dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString(), dsPieceProcedure_1.Tables[0].Rows[p1]["ProcedureID"], dtWagesType.Rows[wagestype]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); PieceProcedureCount += drPieceProcedureCount.Length; //工序数量 } PieceProcedureTotal = PieceProcedureCount * PieceCoefficient; //工序数量*系数 #endregion 1.求出计件工序数量 #region 2.求出各工价分类损坯数量 int ScrapCount = 0; //损坯数量 decimal? Scrap = 0; //每个类别损坯的值 if (DamageFlag == "1") //计算损坯数量 { // 查出此人在计件工序的条码,完事关联报损表存在多少报损条码 string ProcedureIDS = "0"; //默认给个0,怕没有些去进行筛选出现错误 for (int p1 = 0; p1 < dsPieceProcedure_1.Tables[0].Rows.Count; p1++) { ProcedureIDS = ProcedureIDS + dsPieceProcedure_1.Tables[0].Rows[p1]["ProcedureID"].ToString() + ","; } ProcedureIDS = ProcedureIDS.Trim(','); // 筛选出生产数据这几个工序所用的条码 DataRow[] dr_BarCode = dsTMPProductionData.Tables[0].Select(string.Format("UserID={0} and ProcedureID in ({1}) and WagesTypeID={2} and GoodsFlag={3}", dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString(), ProcedureIDS, dtWagesType.Rows[wagestype]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); if (dr_BarCode.Length > 0) { string temp_barcode = ""; foreach (DataRow r3 in dr_BarCode) { DataRow[] dr2 = dsTMPResponProcedure.Tables[0].Select("barcode='" + r3["barcode"] + "'"); if (dr2.Length > 0) { if (!temp_barcode.Contains(r3["barcode"].ToString())) { // 有损坯数据 ScrapCount = ScrapCount + 1; } temp_barcode += r3["barcode"].ToString() + ","; } } } // end Scrap = ScrapCount * DamageCoefficient; //DamageCoefficient为损坯系数 } #endregion 2.求出损坯数量 end #region 3.求出各工价分类次品数 // 筛出产品分级为次品的生产数据,完事一个一个去查对应责任工号的,进行累加 DataRow[] drUnqualifiedCount = dsTMPProductionData.Tables[0] .Select(string.Format("WagesTypeID={0} and GoodsLevelTypeID=7 and GoodsFlag={1} ", dtWagesType.Rows[wagestype]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); UnqualifiedCount = 0; //次品数量 decimal? UnqualifiedTotal = 0;//系数*数量 if (drUnqualifiedCount.Length > 0) { // 表示有次品,但是得对应责任工号,进行累加 foreach (DataRow row in drUnqualifiedCount) { string sqlView = "select 1 from TMP_PAM_Defect where DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and ProductionDataID=" + row["ProductionDataID"]; DataSet ds = oracleTrConn.GetSqlResultToDs(sqlView); if (ds != null && ds.Tables[0].Rows.Count > 0) { // 多个缺陷也算一个数,所以直接+1 UnqualifiedCount = UnqualifiedCount + 1; } } UnqualifiedTotal = UnqualifiedCount * UnqualifiedCoefficient; } #endregion #region 4.求出各工价分类副品数 // 筛出产品分级为副品的生产数据,完事一个一个去查对应责任工号的,进行累加 DataRow[] drQualified = dsTMPProductionData.Tables[0] .Select(string.Format("WagesTypeID={0} and GoodsLevelTypeID=5 and GoodsFlag={1}", dtWagesType.Rows[wagestype]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); QualifiedCount = 0; //副品数量 decimal? QualifiedTotal = 0;//系数*数量 if (drQualified.Length > 0) { // 表示有副品,但是得对应责任工号,进行累加 foreach (DataRow row in drQualified) { string sqlView = "select 1 from TMP_PAM_Defect where DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and ProductionDataID=" + row["ProductionDataID"]; DataSet ds = oracleTrConn.GetSqlResultToDs(sqlView); if (ds != null && ds.Tables[0].Rows.Count > 0) { // 多个缺陷也算一个数,所以直接+1 QualifiedCount = QualifiedCount + 1; } } QualifiedTotal = QualifiedCount * QualifiedCoefficient; } #endregion 求出各工价分类副品数 #region 5.求出质量工价 string barcodes_Procedure = ""; QualityBaseProcedureCount = 0; for (int p1 = 0; p1 < dsPieceProcedure_2.Tables[0].Rows.Count; p1++) { //DataRow[] drQualityBaseProcedure = dsTMPProductionData.Tables[0] // .Select(string.Format("UserID={0} and ProcedureID={1} and WagesTypeID={2} and GoodsFlag={3}", dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString(), dsPieceProcedure_2.Tables[0].Rows[p1]["ProcedureID"], dtWagesType.Rows[wagestype]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); //QualityBaseProcedureCount += drQualityBaseProcedure.Length; // 质量工序数量 //DataRow[] drQualityBaseProcedure = dsTMPProductionData.Tables[0] // .Select(string.Format("ProcedureID={0} and WagesTypeID={1} and GoodsFlag={2}", dsPieceProcedure_2.Tables[0].Rows[p1]["ProcedureID"], dtWagesType.Rows[wagestype]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); DataRow[] drQualityBaseProcedure = dsTMPProductionData.Tables[0] .Select(string.Format("ProcedureID={0} and WagesTypeID={1}", dsPieceProcedure_2.Tables[0].Rows[p1]["ProcedureID"], dtWagesType.Rows[wagestype]["WagesTypeID"])); if (drQualityBaseProcedure.Length > 0) { foreach (DataRow r4 in drQualityBaseProcedure) { if (!barcodes_Procedure.Contains(r4["barcode"].ToString())) { QualityBaseProcedureCount += 1; // 质量工序数量 } barcodes_Procedure = barcodes_Procedure + r4["barcode"].ToString() + ","; } } } decimal QualityBaseProcedureTotal = 0;//只是算出优等品率,还有和产品质量区间进行匹配 decimal QualityWages = 0; //质量工价 ,用于最后计算相乘 decimal Quality = 0; //质量 if (QualityBaseProcedureCount != 0) { QualityBaseProcedureTotal = (QualityBaseProcedureCount - UnqualifiedCount) / QualityBaseProcedureCount; } //查看此员工是否为正式员工还是试用员工,如果试用取工价类别的标准工价 // 1取出此工类下的产品工价区间 DataRow[] drWages = dsWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"]); decimal StandardWages = 0; if (drWages.Length > 0) { StandardWages = Convert.ToDecimal(drWages[0]["StandardWages"]); //标准工价 } if (dsJobsPayPlan.Tables[0].Rows[j]["ExProbationEndDate"].ToString() == "") //表示正式员工 { // 2取出此工类下的质量区间 DataRow[] drQualityWages = dsQualityWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"] + " and QualityRate>=" + QualityBaseProcedureTotal); if (drQualityWages.Length > 0) { //表示质量区间设置没有比优品率大的 QualityWages = StandardWages; Quality = Convert.ToDecimal(drQualityWages[0]["QualityRate"]); } else { QualityWages = 0;// Convert.ToDecimal(drQualityWages[0]["QualityWages"]); } } else { if (Convert.ToDateTime(dsJobsPayPlan.Tables[0].Rows[j]["ExProbationEndDate"]) < DateTime.Now) { // 试用结束结束 // 2取出此工类下的质量区间 DataRow[] drQualityWages = dsQualityWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"] + " and QualityRate>=" + QualityBaseProcedureTotal); if (drQualityWages.Length > 0) { //表示质量区间设置没有比优品率大的 QualityWages = StandardWages; Quality = Convert.ToDecimal(drQualityWages[0]["QualityRate"]); } else { QualityWages = 0;// Convert.ToDecimal(drQualityWages[0]["QualityWages"]); } } } #endregion totalcount_Piecegiework += (PieceProcedureTotal - Scrap - UnqualifiedTotal - QualifiedTotal) * QualityWages; temp_Piecegiework += (PieceProcedureTotal - Scrap - UnqualifiedTotal - QualifiedTotal) * QualityWages; // } #region 插入计件工资 sqlString = "select 1 from TP_PAR_Piecework where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[wagestype]["WagesTypeID"]), }; DataSet dsExistPiecework = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); // 读取计件工资策略 int PieceTacticsID_Insert = 0; sqlString = "select PieceTacticsID from TP_PAT_Piecework where PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dss = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dss != null && dss.Tables[0].Rows.Count > 0) { PieceTacticsID_Insert = Convert.ToInt32(dss.Tables[0].Rows[0]["PieceTacticsID"]); } //------------------------------------- if (dsExistPiecework != null && dsExistPiecework.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_Piecework ( YYYYMM, StaffID, PayPlanID, StaffFlag, GoodsFlag, WagesTypeID, PieceworkNum, PieceCoefficient, DamageNum, DamageCoefficient, UnqualifiedNum, UnqualifiedCoefficient, QualifiedNum, QualifiedCoefficient, QualityBaseNum, QualityRate, QualityWages, Amount, PieceTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :StaffFlag, :GoodsFlag, :WagesTypeID, :PieceworkNum, :PieceCoefficient, :DamageNum, :DamageCoefficient, :UnqualifiedNum, :UnqualifiedCoefficient, :QualifiedNum, :QualifiedCoefficient, :QualityBaseNum, :QualityRate, :QualityWages, :Amount, :PieceTacticsID )"; } else { sqlString = @"update TP_PAR_Piecework set YYYYMM=:YYYYMM, StaffID=:StaffID, PayPlanID=:PayPlanID, StaffFlag=:StaffFlag, PieceTacticsID=:PieceTacticsID, GoodsFlag=:GoodsFlag, WagesTypeID=:WagesTypeID, PieceworkNum=PieceworkNum+:PieceworkNum, PieceCoefficient=PieceCoefficient+:PieceCoefficient, DamageNum=DamageNum+:DamageNum, DamageCoefficient=DamageCoefficient+:DamageCoefficient, UnqualifiedNum=UnqualifiedNum+:UnqualifiedNum, UnqualifiedCoefficient=UnqualifiedCoefficient+:UnqualifiedCoefficient, QualifiedNum=QualifiedNum+:QualifiedNum, QualifiedCoefficient=QualifiedCoefficient+:QualifiedCoefficient, QualityBaseNum=QualityBaseNum+:QualityBaseNum, QualityRate=QualityRate+:QualityRate, QualityWages=QualityWages+:QualityWages, Amount=Amount+:Amount where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID "; } parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":StaffFlag",dsJobsPayPlan.Tables[0].Rows[j]["StaffStatus"]), //new OracleParameter(":BeginDate",dateStartTime), //new OracleParameter(":EndDate",dateEndTime), new OracleParameter(":GoodsFlag", dtGoodsFlag.Rows[vv]["GoodsFlag"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[wagestype]["WagesTypeID"]), //new OracleParameter(":GoodsID",null), new OracleParameter(":PieceworkNum",PieceProcedureCount), new OracleParameter(":PieceCoefficient",PieceCoefficient), new OracleParameter(":DamageNum",ScrapCount), new OracleParameter(":DamageCoefficient",DamageCoefficient), new OracleParameter(":UnqualifiedNum",UnqualifiedCount), new OracleParameter(":UnqualifiedCoefficient",UnqualifiedCoefficient), new OracleParameter(":QualifiedNum",QualifiedCount), new OracleParameter(":QualifiedCoefficient",QualifiedCoefficient), new OracleParameter(":QualityBaseNum",QualityBaseProcedureCount), new OracleParameter(":QualifiedCoefficient",QualifiedCoefficient), new OracleParameter(":QualityRate",QualityBaseProcedureTotal), new OracleParameter(":QualityWages",QualityWages), new OracleParameter(":Amount",temp_Piecegiework), new OracleParameter(":PieceTacticsID",PieceTacticsID_Insert), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion } #region 损坯补贴 int scrapcount_1 = 0; //损坯数量 decimal scrap_StandardWages = 0; //损坯标准工价 decimal scrap_DamageSubsidyRate = 0; //损坯补贴系数 decimal scrap_DamageSubsidy = 0; //损坯补贴 decimal temp_Scrap = 0;// //最后损坯补贴钱 //1.查出此员工工号下所生产数据,即做过哪此产品条码 DataRow[] drScrapProduction = dsTMPProductionData.Tables[0].Select("UserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"]); if (drScrapProduction.Length > 0) { //算出此工号,此工价分类存在条码,拼出条码,进而去报损查出非自身损坯的数量,进而计算 //string barcodes = ""; //foreach (DataRow rbarcode in drScrapProduction) //{ // barcodes += rbarcode["barcode"].ToString() + ","; //} //barcodes = barcodes.Trim(','); // string sql = @"select TMP_PAM_ScrapProduct.barcode,TMP_PAM_ResponProcedure.UserID from TMP_PAM_ScrapProduct left join TMP_PAM_ResponProcedure // on TMP_PAM_ScrapProduct.ScrapProductID=TMP_PAM_ResponProcedure.ScrapProductID "; // sql = sql + " where instr(','||:barcodes||',',','||TMP_PAM_ScrapProduct.BarCode||',')>0 "; // sql = sql + " and TMP_PAM_ResponProcedure.UserID<>:UserID"; string sql = @"select distinct TMP_PAM_ScrapProduct.barcode,TMP_PAM_ResponProcedure.UserID from TMP_PAM_ScrapProduct left join TMP_PAM_ResponProcedure on TMP_PAM_ScrapProduct.ScrapProductID=TMP_PAM_ResponProcedure.ScrapProductID "; sql = sql + " where TMP_PAM_ScrapProduct.barcode in (select barcode from TMP_PAM_ProductionData where UserID=:UserID and ProcedureID in (select TP_PAT_PieceProcedure.ProcedureID from TP_PAT_Piecework left join TP_PAT_PieceProcedure on TP_PAT_Piecework.PieceTacticsID=TP_PAT_PieceProcedure.PieceTacticsID and TP_PAT_PieceProcedure.ProcedureFlag=1 where TP_PAT_Piecework.PayPlanID=:PayPlanID)) "; sql = sql + " and TMP_PAM_ResponProcedure.UserID<>:UserID"; parmeters1 = new OracleParameter[] { //new OracleParameter(":barcodes",barcodes), new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dsTemp = oracleTrConn.GetSqlResultToDs(sql, parmeters1); if (dsTemp.Tables[0].Rows.Count > 0) { // 大于零遍历此表,插入损坯补贴记录表中,过滤给报损补贴后就不能给干补补贴 string sqlInsertDamageSubsidy = "insert into TP_PAD_DamageSubsidy(Barcode,userID) values(:Barcode,:UserID)"; for (int insert = 0; insert < dsTemp.Tables[0].Rows.Count; insert++) { string sqladd = "select 1 from TP_PAD_DamageSubsidy where barcode=:barcode and userid=:userid"; parmeters1 = new OracleParameter[] { new OracleParameter(":Barcode",dsTemp.Tables[0].Rows[insert]["Barcode"]), new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), }; DataSet ds3 = oracleTrConn.GetSqlResultToDs(sqladd, parmeters1); if (ds3 != null && ds3.Tables[0].Rows.Count == 0) oracleTrConn.ExecuteNonQuery(sqlInsertDamageSubsidy, parmeters1); } scrapcount_1 = dsTemp.Tables[0].Rows.Count; //非自身损坯数量 // 求出损坯对应系数 DataRow[] drScrapWages = dsWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"]); //decimal? scrapDamageSubsidy = 0; //损坯补贴 if (drScrapWages.Length > 0) { //scrapDamageSubsidy += Convert.ToDecimal(drScrapWages[0]["DamageSubsidy"]); scrap_StandardWages = Convert.ToDecimal(drScrapWages[0]["StandardWages"]); //标准工价 scrap_DamageSubsidyRate = Convert.ToDecimal(drScrapWages[0]["DamageSubsidyRate"]);//损坯补贴系数 // scrap_DamageSubsidy = Convert.ToDecimal(drScrapWages[0]["DamageSubsidy"]); //损坯补贴 scrap_DamageSubsidy = Convert.ToDecimal(scrap_StandardWages) * scrap_DamageSubsidyRate; //损坯补贴 } //totalcount_Scrap += scrapDamageSubsidy; temp_Scrap = Convert.ToDecimal(scrapcount_1 * scrap_StandardWages * scrap_DamageSubsidyRate); totalcount_Scrap += temp_Scrap; } } #endregion #region 插入损坯补贴 sqlString = "select 1 from TP_PAR_DamageSubsidy where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[wagestype]["WagesTypeID"]), }; // 读取计件工资策略 int PieceTacticsID_Insert2 = 0; sqlString = "select PieceTacticsID from TP_PAT_Piecework where PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dss2 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dss2 != null && dss2.Tables[0].Rows.Count > 0) { PieceTacticsID_Insert2 = Convert.ToInt32(dss2.Tables[0].Rows[0]["PieceTacticsID"]); } //------------------------------------- DataSet dsExistDamageSubsidy = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsExistDamageSubsidy != null && dsExistDamageSubsidy.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_DamageSubsidy ( YYYYMM, StaffID, PayPlanID, WagesTypeID, DamageNum, StandardWages, DamageSubsidyRate, DamageSubsidy, Amount, PieceTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :WagesTypeID, :DamageNum, :StandardWages, :DamageSubsidyRate, :DamageSubsidy, :Amount, :PieceTacticsID )"; } else { sqlString = @"update TP_PAR_DamageSubsidy set YYYYMM=:YYYYMM, StaffID=StaffID, PayPlanID=:PayPlanID, WagesTypeID=:WagesTypeID, DamageNum=DamageNum+:DamageNum, StandardWages=StandardWages+:StandardWages, DamageSubsidyRate=DamageSubsidyRate+:DamageSubsidyRate, DamageSubsidy=DamageSubsidy+:DamageSubsidy, Amount=Amount+:Amount, PieceTacticsID=:PieceTacticsID where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID "; } parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[wagestype]["WagesTypeID"]), new OracleParameter(":DamageNum",scrapcount_1), new OracleParameter(":StandardWages",scrap_StandardWages), new OracleParameter(":DamageSubsidyRate",scrap_DamageSubsidyRate), new OracleParameter(":DamageSubsidy",scrap_DamageSubsidy), new OracleParameter(":Amount",temp_Scrap), new OracleParameter(":PieceTacticsID",PieceTacticsID_Insert2), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion #region 干补补贴,从成品表时读取数据来计算干补数量 // 1 查出这个工号的,这个分类的,下一面在去过滤正品,还是副品 int RepairSubsidy_RSuperioNum = 0;//干补正品数 // 干补正品数 DataRow[] drRepairSubsidy_RSuperioNum = dsFinishedProduct.Tables[0].Select("SpecialRepairFlag=1 and GoodsLevelTypeID=4 and WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"]); if (drRepairSubsidy_RSuperioNum.Length > 0) { RepairSubsidy_RSuperioNum = drRepairSubsidy_RSuperioNum.Length; // 尽管有干补,但是有可能在损坯补贴给了,此处得查询一下干补补贴表,如果存在就不给此补贴 foreach (DataRow mm in drRepairSubsidy_RSuperioNum) { sqlString = "select 1 from TP_PAD_DamageSubsidy where Barcode=:Barcode and UserID=:UserID"; parmeters1 = new OracleParameter[] { new OracleParameter(":Barcode",mm["barcode"].ToString()), new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), }; DataSet dsTemp = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsTemp.Tables[0].Rows.Count > 0) { RepairSubsidy_RSuperioNum = RepairSubsidy_RSuperioNum - 1; } } } int RepairSubsidy_RQualifiedNum = 0;//干补副品数 // 干补正品数 DataRow[] drRepairSubsidy_RQualifiedNum = dsFinishedProduct.Tables[0].Select("SpecialRepairFlag=1 and GoodsLevelTypeID=5 and WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"]); if (drRepairSubsidy_RQualifiedNum.Length > 0) { RepairSubsidy_RQualifiedNum = drRepairSubsidy_RQualifiedNum.Length; // 尽管有干补,但是有可能在损坯补贴给了,此处得查询一下干补补贴表,如果存在就不给此补贴 foreach (DataRow mm in drRepairSubsidy_RQualifiedNum) { sqlString = "select 1 from TP_PAD_DamageSubsidy where Barcode=:Barcode and UserID=:UserID"; parmeters1 = new OracleParameter[] { new OracleParameter(":Barcode",mm["barcode"].ToString()), new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), }; DataSet dsTemp = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsTemp.Tables[0].Rows.Count > 0) { RepairSubsidy_RQualifiedNum = RepairSubsidy_RQualifiedNum - 1; } } } // 查出此分类干补正负品补贴 // 求出损坯对应系数 DataRow[] drRepairSubsidy = dsWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[wagestype]["WagesTypeID"]); decimal RSuperiorCoefficient = 0;//干补正品系数 decimal RQualifiedCoefficient = 0;//干补副品系数 decimal RepairSubsidyRate = 0;//干补补贴系数 decimal RepairStandardWages = 0;//标准工价 decimal RepairTotalCount = 0; // decimal RepairSubsidy = 0; decimal temp_Repair = 0; if (drRepairSubsidy.Length > 0) { RSuperiorCoefficient = Convert.ToDecimal(drRepairSubsidy[0]["RSuperiorCoefficient"]); RQualifiedCoefficient = Convert.ToDecimal(drRepairSubsidy[0]["RQualifiedCoefficient"]); RepairSubsidyRate = Convert.ToDecimal(drRepairSubsidy[0]["RepairSubsidyRate"]); RepairStandardWages = Convert.ToDecimal(drRepairSubsidy[0]["StandardWages"]); RepairSubsidy = Convert.ToDecimal(drRepairSubsidy[0]["RepairSubsidy"]); RepairTotalCount = (RepairSubsidy_RSuperioNum * RSuperiorCoefficient - RepairSubsidy_RQualifiedNum * RQualifiedCoefficient) * RepairStandardWages * RepairSubsidyRate; totalcount_RepairSubsidy += RepairTotalCount; temp_Repair = RepairTotalCount; } #endregion #region 插入干补补贴 sqlString = "select 1 from TP_PAR_RepairSubsidy where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[wagestype]["WagesTypeID"]), }; // 读取计件工资策略 int PieceTacticsID_Insert3 = 0; sqlString = "select PieceTacticsID from TP_PAT_Piecework where PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dss3 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dss3 != null && dss3.Tables[0].Rows.Count > 0) { PieceTacticsID_Insert3 = Convert.ToInt32(dss3.Tables[0].Rows[0]["PieceTacticsID"]); } //------------------------------------- DataSet dsExistRepairSubsidy = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsExistRepairSubsidy != null && dsExistRepairSubsidy.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_RepairSubsidy ( YYYYMM, StaffID, PayPlanID, WagesTypeID, RSuperioNum, RSuperiorCoefficient, RQualifiedNum, RQualifiedCoefficient, StandardWages, RepairSubsidyRate, RepairSubsidy, Amount, PieceTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :WagesTypeID, :RSuperioNum, :RSuperiorCoefficient, :RQualifiedNum, :RQualifiedCoefficient, :StandardWages, :RepairSubsidyRate, :RepairSubsidy, :Amount, :PieceTacticsID )"; } else { sqlString = @"update TP_PAR_RepairSubsidy set YYYYMM=:YYYYMM, StaffID=:StaffID, PayPlanID=:PayPlanID, WagesTypeID=:WagesTypeID, RSuperioNum=RSuperioNum+:RSuperioNum, RSuperiorCoefficient=RSuperiorCoefficient+:RSuperiorCoefficient, RQualifiedNum=RQualifiedNum+:RQualifiedNum, RQualifiedCoefficient=RQualifiedCoefficient+:RQualifiedCoefficient, StandardWages=StandardWages+:StandardWages, RepairSubsidyRate=RepairSubsidyRate+:RepairSubsidyRate, RepairSubsidy=RepairSubsidy+:RepairSubsidy, Amount=Amount+:Amount, PieceTacticsID=:PieceTacticsID where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID "; } parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[wagestype]["WagesTypeID"]), new OracleParameter(":RSuperioNum",RepairSubsidy_RSuperioNum), new OracleParameter(":RSuperiorCoefficient",RSuperiorCoefficient), new OracleParameter(":RQualifiedNum",RepairSubsidy_RQualifiedNum), new OracleParameter(":RQualifiedCoefficient",RQualifiedCoefficient), new OracleParameter(":StandardWages",RepairStandardWages), new OracleParameter(":RepairSubsidyRate",RepairSubsidyRate), new OracleParameter(":RepairSubsidy",RepairSubsidy), new OracleParameter(":Amount",temp_Repair), new OracleParameter(":PieceTacticsID",PieceTacticsID_Insert3), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion } } } else { // 经过该计件工序 // 先找出此工序的所有条码.用于筛选条码前的数据 dsPieceProcedure_1.Tables[0].Merge(dsPieceProcedure_2.Tables[0]); string ProcedureIDS = ""; for (int a1 = 0; a1 < dsPieceProcedure_1.Tables[0].Rows.Count; a1++) { ProcedureIDS += dsPieceProcedure_1.Tables[0].Rows[a1]["ProcedureID"].ToString() + ","; } ProcedureIDS = ProcedureIDS.Trim(','); //DataRow[] drBarCode = dsTMPProductionData.Tables[0].Select("(ProcedureID=" + PieceProcedureID + " or ProcedureID=" + QualityBaseProcedureID + ") and UserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()); DataRow[] drBarCode = dsTMPProductionData.Tables[0].Select("ProcedureID in (" + ProcedureIDS + " )" + " and UserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()); DataTable dtTemp = new DataTable(); dtTemp.Columns.Add("ProcedureID"); //工序ID,用于有哪些分类 dtTemp.Columns.Add("BarCode"); //产品条码 dtTemp.Columns.Add("WagesTypeID"); // 工价分类 dtTemp.Columns.Add("GoodsFlag"); //产品标识 DataRow[] drMonth = dsPayPlanSetting.Tables[0].Select("SettingCode='01001'"); int newGoodsMonth = Convert.ToInt32(drMonth[0]["SettingValue"]); //新产品适应周期(月) if (drBarCode.Length > 0) { DataTable dtTemp_TMPProductionData = drBarCode.CopyToDataTable(); foreach (DataRow r in drBarCode) { DataRow[] drFirst = dtTemp_TMPProductionData.Select("barcode='" + r["barcode"] + "' and ProductionDataID<" + r["ProductionDataID"] + " and UserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()); if (drFirst.Length > 0) { foreach (DataRow rr in drFirst)//可能会多行, { DataRow drNew = dtTemp.NewRow(); drNew["ProcedureID"] = rr["ProcedureID"]; drNew["BarCode"] = rr["BarCode"]; drNew["WagesTypeID"] = rr["WagesTypeID"]; if (Convert.ToDateTime(rr["StartingDate"]).AddMonths(newGoodsMonth) > DateTime.Now) { drNew["GoodsFlag"] = 3; //正常 } else { drNew["GoodsFlag"] = 1; //新品 } dtTemp.Rows.Add(drNew); } } } } if (dtTemp.Rows.Count > 0) { //----------------------------------- // 1.算出是否有新品,还是老品 //3 报损责任工序 if (!dsTMPResponProcedure.Tables[0].Columns.Contains("GoodsFlag")) { dsTMPResponProcedure.Tables[0].Columns.Add("GoodsFlag"); for (int bb = 0; bb < dsTMPResponProcedure.Tables[0].Rows.Count; bb++) { if (dsTMPResponProcedure.Tables[0].Rows[bb]["StartingDate"].ToString() != "") { if (Convert.ToDateTime(dsTMPResponProcedure.Tables[0].Rows[bb]["StartingDate"]).AddMonths(newGoodsMonth) > DateTime.Now) { dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 3; //正常 } else { dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 1; //新品 } } else { dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 3; //正常 } } } //for (int bb = 0; bb < dsTMPResponProcedure.Tables[0].Rows.Count; bb++) //{ // if (dsTMPResponProcedure.Tables[0].Rows[bb]["StartingDate"].ToString() != "") // { // if (Convert.ToDateTime(dsTMPResponProcedure.Tables[0].Rows[bb]["StartingDate"]).AddMonths(newGoodsMonth) > DateTime.Now) // { // dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 3; //正常 // } // else // { // dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 1; //新品 // } // } // else // { // dsTMPResponProcedure.Tables[0].Rows[bb]["GoodsFlag"] = 3; //正常 // } //} //----------------------------------- // 重新排序,把生产数据ID大的排在上面,便于下面进行筛选 DataView dv = dtTemp.DefaultView; dv.Sort = "ProductionDataID desc"; dtTemp = dv.ToTable(); // 此时dtTemp有产品分类,同时也可能有多个工序 // 1看有多少个分类 DataTable dtWagesType = dtTemp.DefaultView.ToTable(true, "WagesTypeID"); // 2看有多少个工序 DataTable dtProcedure = dtTemp.DefaultView.ToTable(true, "ProcedureID"); // 有多少产品标识 DataTable dtGoodsFlag = dtTemp.DefaultView.ToTable(true, "GoodsFlag"); int PieceProcedureCount2 = 0; int UnqualifiedCount2 = 0; int QualifiedCount2 = 0; int QualityBaseProcedureCount2 = 0; for (int ii = 0; ii < dtWagesType.Rows.Count; ii++) { for (int vv = 0; vv < dtGoodsFlag.Rows.Count; vv++) { decimal? temp_Piecegiework = 0; #region 1.求出各分类计件工序数量 PieceProcedureCount2 = 0; QualityBaseProcedureCount2 = 0; decimal PieceProcedureTotal = 0; //系数*数量 //for (int jj = 0; jj < dtProcedure.Rows.Count; jj++) //{ for (int p1 = 0; p1 < dsPieceProcedure_1.Tables[0].Rows.Count; p1++) { DataRow[] datarow = dtTemp.Select("WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"] + " and ProcedureID=" + dsPieceProcedure_1.Tables[0].Rows[p1]["ProcedureID"]); if (datarow.Length > 0) { PieceProcedureCount2 += datarow.Length; break; } else { continue; } } //} PieceProcedureTotal = PieceProcedureCount2 * PieceCoefficient; #endregion 1.求出各分类计件工序数量 #region 2.求出各工价分类损坯数量 int ScrapCount = 0; //损坯数量 decimal? Scrap = 0; //每个类别损坯的值 if (DamageFlag == "1") //计算损坯数量 { // 查出此人在计件工序的条码,完事关联报损表存在多少报损条码 string ProcedureIDS2 = "0"; //默认给个0,怕没有些去进行筛选出现错误 for (int p1 = 0; p1 < dsPieceProcedure_1.Tables[0].Rows.Count; p1++) { ProcedureIDS2 = ProcedureIDS2 + dsPieceProcedure_1.Tables[0].Rows[p1]["ProcedureID"].ToString() + ","; } ProcedureIDS2 = ProcedureIDS2.Trim(','); // 筛选出生产数据这几个工序所用的条码 DataRow[] dr_BarCode = dsTMPProductionData.Tables[0].Select(string.Format("UserID={0} and ProcedureID in ({1}) and WagesTypeID={2} and GoodsFlag={3}", dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString(), ProcedureIDS2, dtWagesType.Rows[ii]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); if (dr_BarCode.Length > 0) { string temp_barcode = ""; foreach (DataRow r3 in dr_BarCode) { DataRow[] dr2 = dsTMPResponProcedure.Tables[0].Select("barcode='" + r3["barcode"] + "'"); if (dr2.Length > 0) { if (!temp_barcode.Contains(r3["barcode"].ToString())) { // 有损坯数据 ScrapCount = ScrapCount + 1; } temp_barcode += r3["barcode"].ToString() + ","; } } } // end Scrap = ScrapCount * DamageCoefficient; //DamageCoefficient为损坯系数 } #endregion 2.求出损坯数量 end #region 3.求出各工价分类次品数 // 筛出产品分级为次品的生产数据,完事一个一个去查对应责任工号的,进行累加 DataRow[] drUnqualifiedCount = dsTMPProductionData.Tables[0] .Select(string.Format("WagesTypeID={0} and GoodsLevelTypeID=7 and GoodsFlag={1} ", dtWagesType.Rows[ii]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); UnqualifiedCount2 = 0; //次品数量 decimal? UnqualifiedTotal = 0;//系数*数量 if (drUnqualifiedCount.Length > 0) { // 表示有次品,但是得对应责任工号,进行累加 foreach (DataRow row in drUnqualifiedCount) { string sqlView = "select 1 from TMP_PAM_Defect where DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and ProductionDataID=" + row["ProductionDataID"]; DataSet ds = oracleTrConn.GetSqlResultToDs(sqlView); if (ds != null && ds.Tables[0].Rows.Count > 0) { // 多个缺陷也算一个数,所以直接+1 UnqualifiedCount2 = UnqualifiedCount2 + 1; } } UnqualifiedTotal = UnqualifiedCount2 * UnqualifiedCoefficient; } #endregion #region 4.求出各工价分类副品数 // 筛出产品分级为副品的生产数据,完事一个一个去查对应责任工号的,进行累加 DataRow[] drQualified = dsTMPProductionData.Tables[0] .Select(string.Format("WagesTypeID={0} and GoodsLevelTypeID=5 and GoodsFlag={1}", dtWagesType.Rows[ii]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); QualifiedCount2 = 0; //副品数量 decimal? QualifiedTotal = 0;//系数*数量 if (drQualified.Length > 0) { // 表示有副品,但是得对应责任工号,进行累加 foreach (DataRow row in drQualified) { string sqlView = "select 1 from TMP_PAM_Defect where DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and ProductionDataID=" + row["ProductionDataID"]; DataSet ds = oracleTrConn.GetSqlResultToDs(sqlView); if (ds != null && ds.Tables[0].Rows.Count > 0) { // 多个缺陷也算一个数,所以直接+1 QualifiedCount2 = QualifiedCount2 + 1; } } QualifiedTotal = QualifiedCount2 * QualifiedCoefficient; } #endregion 求出各工价分类副品数 #region 5.求出质量工价 string barcodes_Procedure = ""; QualityBaseProcedureCount2 = 0; for (int p1 = 0; p1 < dsPieceProcedure_2.Tables[0].Rows.Count; p1++) { //DataRow[] drQualityBaseProcedure = dsTMPProductionData.Tables[0] // .Select(string.Format("UserID={0} and ProcedureID={1} and WagesTypeID={2} and GoodsFlag={3}", dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString(), dsPieceProcedure_2.Tables[0].Rows[p1]["ProcedureID"], dtWagesType.Rows[wagestype]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); //QualityBaseProcedureCount += drQualityBaseProcedure.Length; // 质量工序数量 //DataRow[] drQualityBaseProcedure = dsTMPProductionData.Tables[0] // .Select(string.Format("ProcedureID={0} and WagesTypeID={1} and GoodsFlag={2}", dsPieceProcedure_2.Tables[0].Rows[p1]["ProcedureID"], dtWagesType.Rows[wagestype]["WagesTypeID"], dtGoodsFlag.Rows[vv]["GoodsFlag"])); DataRow[] drQualityBaseProcedure = dsTMPProductionData.Tables[0] .Select(string.Format("ProcedureID={0} and WagesTypeID={1}", dsPieceProcedure_2.Tables[0].Rows[p1]["ProcedureID"], dtWagesType.Rows[ii]["WagesTypeID"])); if (drQualityBaseProcedure.Length > 0) { foreach (DataRow r4 in drQualityBaseProcedure) { if (!barcodes_Procedure.Contains(r4["barcode"].ToString())) { QualityBaseProcedureCount2 += 1; // 质量工序数量 } barcodes_Procedure = barcodes_Procedure + r4["barcode"].ToString() + ","; } } } decimal QualityBaseProcedureTotal = 0;//只是算出优等品率,还有和产品质量区间进行匹配 decimal QualityWages = 0; //质量工价 ,用于最后计算相乘 decimal Quality = 0; //质量 if (QualityBaseProcedureCount2 != 0) { QualityBaseProcedureTotal = (QualityBaseProcedureCount2 - UnqualifiedCount2) / QualityBaseProcedureCount2; } //查看此员工是否为正式员工还是试用员工,如果试用取工价类别的标准工价 // 1取出此工类下的产品工价区间 DataRow[] drWages = dsWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"]); decimal StandardWages = 0; if (drWages.Length > 0) { StandardWages = Convert.ToDecimal(drWages[0]["StandardWages"]); //标准工价 } if (dsJobsPayPlan.Tables[0].Rows[j]["ExProbationEndDate"].ToString() == "") //表示正式员工 { // 2取出此工类下的质量区间 DataRow[] drQualityWages = dsQualityWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"] + " and QualityRate>=" + QualityBaseProcedureTotal); if (drQualityWages.Length > 0) { //表示质量区间设置没有比优品率大的 QualityWages = StandardWages; Quality = Convert.ToDecimal(drQualityWages[0]["QualityRate"]); } else { QualityWages = 0;// Convert.ToDecimal(drQualityWages[0]["QualityWages"]); } } else { if (Convert.ToDateTime(dsJobsPayPlan.Tables[0].Rows[j]["ExProbationEndDate"]) < DateTime.Now) { // 试用结束结束 // 2取出此工类下的质量区间 DataRow[] drQualityWages = dsQualityWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"] + " and QualityRate>=" + QualityBaseProcedureTotal); if (drQualityWages.Length > 0) { //表示质量区间设置没有比优品率大的 QualityWages = StandardWages; Quality = Convert.ToDecimal(drQualityWages[0]["QualityRate"]); } else { QualityWages = 0;// Convert.ToDecimal(drQualityWages[0]["QualityWages"]); } } } #endregion totalcount_Piecegiework += (PieceProcedureTotal - Scrap - UnqualifiedTotal - QualifiedTotal) * QualityWages; temp_Piecegiework = (PieceProcedureTotal - Scrap - UnqualifiedTotal - QualifiedTotal) * QualityWages; #region 插入计件工资 sqlString = "select 1 from TP_PAR_Piecework where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[ii]["WagesTypeID"]), }; DataSet dsExistPiecework = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); // 读取计件工资策略 int PieceTacticsID_Insert = 0; sqlString = "select PieceTacticsID from TP_PAT_Piecework where PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dss = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dss != null && dss.Tables[0].Rows.Count > 0) { PieceTacticsID_Insert = Convert.ToInt32(dss.Tables[0].Rows[0]["PieceTacticsID"]); } //------------------------------------- if (dsExistPiecework != null && dsExistPiecework.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_Piecework ( YYYYMM, StaffID, PayPlanID, StaffFlag, GoodsFlag, WagesTypeID, PieceworkNum, PieceCoefficient, DamageNum, DamageCoefficient, UnqualifiedNum, UnqualifiedCoefficient, QualifiedNum, QualifiedCoefficient, QualityBaseNum, QualityRate, QualityWages, Amount, PieceTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :StaffFlag, :GoodsFlag, :WagesTypeID, :PieceworkNum, :PieceCoefficient, :DamageNum, :DamageCoefficient, :UnqualifiedNum, :UnqualifiedCoefficient, :QualifiedNum, :QualifiedCoefficient, :QualityBaseNum, :QualityRate, :QualityWages, :Amount, :PieceTacticsID )"; } else { sqlString = @"update TP_PAR_Piecework set YYYYMM=:YYYYMM, StaffID=:StaffID, PayPlanID=:PayPlanID, StaffFlag=:StaffFlag, PieceTacticsID=:PieceTacticsID, GoodsFlag=:GoodsFlag, WagesTypeID=:WagesTypeID, PieceworkNum=PieceworkNum+:PieceworkNum, PieceCoefficient=PieceCoefficient+:PieceCoefficient, DamageNum=DamageNum+:DamageNum, DamageCoefficient=DamageCoefficient+:DamageCoefficient, UnqualifiedNum=UnqualifiedNum+:UnqualifiedNum, UnqualifiedCoefficient=UnqualifiedCoefficient+:UnqualifiedCoefficient, QualifiedNum=QualifiedNum+:QualifiedNum, QualifiedCoefficient=QualifiedCoefficient+:QualifiedCoefficient, QualityBaseNum=QualityBaseNum+:QualityBaseNum, QualityRate=QualityRate+:QualityRate, QualityWages=QualityWages+:QualityWages, Amount=Amount+:Amount where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID "; } parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":StaffFlag",dsJobsPayPlan.Tables[0].Rows[j]["StaffStatus"]), //new OracleParameter(":BeginDate",dateStartTime), //new OracleParameter(":EndDate",dateEndTime), new OracleParameter(":GoodsFlag", dtGoodsFlag.Rows[vv]["GoodsFlag"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[ii]["WagesTypeID"]), //new OracleParameter(":GoodsID",null), new OracleParameter(":PieceworkNum",PieceProcedureCount2), new OracleParameter(":PieceCoefficient",PieceCoefficient), new OracleParameter(":DamageNum",ScrapCount), new OracleParameter(":DamageCoefficient",DamageCoefficient), new OracleParameter(":UnqualifiedNum",UnqualifiedCount2), new OracleParameter(":UnqualifiedCoefficient",UnqualifiedCoefficient), new OracleParameter(":QualifiedNum",QualifiedCount2), new OracleParameter(":QualifiedCoefficient",QualifiedCoefficient), new OracleParameter(":QualityBaseNum",QualityBaseProcedureCount2), new OracleParameter(":QualifiedCoefficient",QualifiedCoefficient), new OracleParameter(":QualityRate",QualityBaseProcedureTotal), new OracleParameter(":QualityWages",QualityWages), new OracleParameter(":Amount",temp_Piecegiework), new OracleParameter(":PieceTacticsID",PieceTacticsID_Insert), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion } #region 损坯补贴 int scrapcount_1 = 0; //损坯数量 decimal scrap_StandardWages = 0; //损坯标准工价 decimal scrap_DamageSubsidyRate = 0; //损坯补贴系数 decimal scrap_DamageSubsidy = 0; //损坯补贴 decimal temp_Scrap = 0;// //最后损坯补贴钱 //1.查出此员工工号下所生产数据,即做过哪此产品条码 DataRow[] drScrapProduction = dsTMPProductionData.Tables[0].Select("UserID=" + dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString() + " and WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"]); if (drScrapProduction.Length > 0) { //算出此工号,此工价分类存在条码,拼出条码,进而去报损查出非自身损坯的数量,进而计算 string barcodes = ""; foreach (DataRow rbarcode in drScrapProduction) { barcodes += rbarcode["barcode"].ToString() + ","; } barcodes = barcodes.Trim(','); // string sql = @"select TMP_PAM_ScrapProduct.barcode,TMP_PAM_ResponProcedure.UserID from TMP_PAM_ScrapProduct left join TMP_PAM_ResponProcedure // on TMP_PAM_ScrapProduct.ScrapProductID=TMP_PAM_ResponProcedure.ScrapProductID "; // sql = sql + " where instr(','||:barcodes||',',','||TMP_PAM_ScrapProduct.BarCode||',')>0 "; // sql = sql + " and TMP_PAM_ResponProcedure.UserID<>:UserID"; string sql = @"select distinct TMP_PAM_ScrapProduct.barcode,TMP_PAM_ResponProcedure.UserID from TMP_PAM_ScrapProduct left join TMP_PAM_ResponProcedure on TMP_PAM_ScrapProduct.ScrapProductID=TMP_PAM_ResponProcedure.ScrapProductID "; sql = sql + " where TMP_PAM_ScrapProduct.barcode in (select barcode from TMP_PAM_ProductionData where UserID=:UserID and ProcedureID in (select TP_PAT_PieceProcedure.ProcedureID from TP_PAT_Piecework left join TP_PAT_PieceProcedure on TP_PAT_Piecework.PieceTacticsID=TP_PAT_PieceProcedure.PieceTacticsID and TP_PAT_PieceProcedure.ProcedureFlag=1 where TP_PAT_Piecework.PayPlanID=:PayPlanID)) "; sql = sql + " and TMP_PAM_ResponProcedure.UserID<>:UserID"; parmeters1 = new OracleParameter[] { //new OracleParameter(":barcodes",barcodes), new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dsTemp = oracleTrConn.GetSqlResultToDs(sql, parmeters1); if (dsTemp.Tables[0].Rows.Count > 0) { // 大于零遍历此表,插入损坯补贴记录表中,过滤给报损补贴后就不能给干补补贴 string sqlInsertDamageSubsidy = "insert into TP_PAD_DamageSubsidy(Barcode,userID) values(:Barcode,:UserID)"; for (int insert = 0; insert < dsTemp.Tables[0].Rows.Count; insert++) { string sqladd = "select 1 from TP_PAD_DamageSubsidy where barcode=:barcode and userid=:userid"; parmeters1 = new OracleParameter[] { new OracleParameter(":Barcode",dsTemp.Tables[0].Rows[insert]["Barcode"]), new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), }; DataSet ds3 = oracleTrConn.GetSqlResultToDs(sqladd, parmeters1); if (ds3 != null && ds3.Tables[0].Rows.Count == 0) oracleTrConn.ExecuteNonQuery(sqlInsertDamageSubsidy, parmeters1); } scrapcount_1 = dsTemp.Tables[0].Rows.Count; //非自身损坯数量 // 求出损坯对应系数 DataRow[] drScrapWages = dsWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"]); //decimal? scrapDamageSubsidy = 0; //损坯补贴 if (drScrapWages.Length > 0) { //scrapDamageSubsidy += Convert.ToDecimal(drScrapWages[0]["DamageSubsidy"]); scrap_StandardWages = Convert.ToDecimal(drScrapWages[0]["StandardWages"]); //标准工价 scrap_DamageSubsidyRate = Convert.ToDecimal(drScrapWages[0]["DamageSubsidyRate"]);//损坯补贴系数 //scrap_DamageSubsidy = Convert.ToDecimal(drScrapWages[0]["DamageSubsidy"]); //损坯补贴 scrap_DamageSubsidy = Convert.ToDecimal(scrap_StandardWages) * scrap_DamageSubsidyRate; //损坯补贴 } //totalcount_Scrap += scrapDamageSubsidy; temp_Scrap = Convert.ToDecimal(scrapcount_1 * scrap_StandardWages * scrap_DamageSubsidyRate); totalcount_Scrap += temp_Scrap; } } #endregion #region 插入损坯补贴 sqlString = "select 1 from TP_PAR_DamageSubsidy where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[ii]["WagesTypeID"]), }; // 读取计件工资策略 int PieceTacticsID_Insert2 = 0; sqlString = "select PieceTacticsID from TP_PAT_Piecework where PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dss2 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dss2 != null && dss2.Tables[0].Rows.Count > 0) { PieceTacticsID_Insert2 = Convert.ToInt32(dss2.Tables[0].Rows[0]["PieceTacticsID"]); } //------------------------------------- DataSet dsExistDamageSubsidy = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsExistDamageSubsidy != null && dsExistDamageSubsidy.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_DamageSubsidy ( YYYYMM, StaffID, PayPlanID, WagesTypeID, DamageNum, StandardWages, DamageSubsidyRate, DamageSubsidy, Amount, PieceTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :WagesTypeID, :DamageNum, :StandardWages, :DamageSubsidyRate, :DamageSubsidy, :Amount, :PieceTacticsID )"; } else { sqlString = @"update TP_PAR_DamageSubsidy set YYYYMM=:YYYYMM, StaffID=StaffID, PayPlanID=:PayPlanID, WagesTypeID=:WagesTypeID, DamageNum=DamageNum+:DamageNum, StandardWages=StandardWages+:StandardWages, DamageSubsidyRate=DamageSubsidyRate+:DamageSubsidyRate, DamageSubsidy=DamageSubsidy+:DamageSubsidy, Amount=Amount+:Amount, PieceTacticsID=:PieceTacticsID where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID "; } parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[ii]["WagesTypeID"]), new OracleParameter(":DamageNum",scrapcount_1), new OracleParameter(":StandardWages",scrap_StandardWages), new OracleParameter(":DamageSubsidyRate",scrap_DamageSubsidyRate), new OracleParameter(":DamageSubsidy",scrap_DamageSubsidy), new OracleParameter(":Amount",temp_Scrap), new OracleParameter(":PieceTacticsID",PieceTacticsID_Insert2), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion #region 干补补贴,从成品表时读取数据来计算干补数量 // 1 查出这个工号的,这个分类的,下一面在去过滤正品,还是副品 int RepairSubsidy_RSuperioNum = 0;//干补正品数 // 干补正品数 DataRow[] drRepairSubsidy_RSuperioNum = dsFinishedProduct.Tables[0].Select("SpecialRepairFlag=1 and GoodsLevelTypeID=4 and WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"]); if (drRepairSubsidy_RSuperioNum.Length > 0) { RepairSubsidy_RSuperioNum = drRepairSubsidy_RSuperioNum.Length; // 尽管有干补,但是有可能在损坯补贴给了,此处得查询一下干补补贴表,如果存在就不给此补贴 foreach (DataRow mm in drRepairSubsidy_RSuperioNum) { sqlString = "select 1 from TP_PAD_DamageSubsidy where Barcode=:Barcode and UserID=:UserID"; parmeters1 = new OracleParameter[] { new OracleParameter(":Barcode",mm["barcode"].ToString()), new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), }; DataSet dsTemp = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsTemp.Tables[0].Rows.Count > 0) { RepairSubsidy_RSuperioNum = RepairSubsidy_RSuperioNum - 1; } } } int RepairSubsidy_RQualifiedNum = 0;//干补副品数 // 干补正品数 DataRow[] drRepairSubsidy_RQualifiedNum = dsFinishedProduct.Tables[0].Select("SpecialRepairFlag=1 and GoodsLevelTypeID=5 and WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"]); if (drRepairSubsidy_RQualifiedNum.Length > 0) { RepairSubsidy_RQualifiedNum = drRepairSubsidy_RQualifiedNum.Length; // 尽管有干补,但是有可能在损坯补贴给了,此处得查询一下干补补贴表,如果存在就不给此补贴 foreach (DataRow mm in drRepairSubsidy_RQualifiedNum) { sqlString = "select 1 from TP_PAD_DamageSubsidy where Barcode=:Barcode and UserID=:UserID"; parmeters1 = new OracleParameter[] { new OracleParameter(":Barcode",mm["barcode"].ToString()), new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[j]["UserID"].ToString()), }; DataSet dsTemp = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsTemp.Tables[0].Rows.Count > 0) { RepairSubsidy_RQualifiedNum = RepairSubsidy_RQualifiedNum - 1; } } } // 查出此分类干补正负品补贴 // 求出损坯对应系数 DataRow[] drRepairSubsidy = dsWages.Tables[0].Select("WagesTypeID=" + dtWagesType.Rows[ii]["WagesTypeID"]); decimal RSuperiorCoefficient = 0;//干补正品系数 decimal RQualifiedCoefficient = 0;//干补副品系数 decimal RepairSubsidyRate = 0;//干补补贴系数 decimal RepairStandardWages = 0;//标准工价 decimal RepairTotalCount = 0; // decimal RepairSubsidy = 0; decimal temp_Repair = 0; if (drRepairSubsidy.Length > 0) { RSuperiorCoefficient = Convert.ToDecimal(drRepairSubsidy[0]["RSuperiorCoefficient"]); RQualifiedCoefficient = Convert.ToDecimal(drRepairSubsidy[0]["RQualifiedCoefficient"]); RepairSubsidyRate = Convert.ToDecimal(drRepairSubsidy[0]["RepairSubsidyRate"]); RepairStandardWages = Convert.ToDecimal(drRepairSubsidy[0]["RepairStandardWages"]); RepairTotalCount = (RepairSubsidy_RQualifiedNum * RSuperiorCoefficient - RepairSubsidy_RQualifiedNum * RQualifiedCoefficient) * RepairStandardWages * RepairSubsidyRate; totalcount_RepairSubsidy += RepairTotalCount; } #endregion #region 插入干补补贴 sqlString = "select 1 from TP_PAR_RepairSubsidy where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[ii]["WagesTypeID"]), }; // 读取计件工资策略 int PieceTacticsID_Insert3 = 0; sqlString = "select PieceTacticsID from TP_PAT_Piecework where PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dss3 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dss3 != null && dss3.Tables[0].Rows.Count > 0) { PieceTacticsID_Insert3 = Convert.ToInt32(dss3.Tables[0].Rows[0]["PieceTacticsID"]); } //------------------------------------- DataSet dsExistRepairSubsidy = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsExistRepairSubsidy != null && dsExistRepairSubsidy.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_RepairSubsidy ( YYYYMM, StaffID, PayPlanID, WagesTypeID, RSuperioNum, RSuperiorCoefficient, RQualifiedNum, RQualifiedCoefficient, StandardWages, RepairSubsidyRate, RepairSubsidy, Amount, PieceTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :WagesTypeID, :RSuperioNum, :RSuperiorCoefficient, :RQualifiedNum, :RQualifiedCoefficient, :StandardWages, :RepairSubsidyRate, :RepairSubsidy, :Amount, :PieceTacticsID )"; } else { sqlString = @"update TP_PAR_RepairSubsidy set YYYYMM=:YYYYMM, StaffID=:StaffID, PayPlanID=:PayPlanID, WagesTypeID=:WagesTypeID, RSuperioNum=RSuperioNum+:RSuperioNum, RSuperiorCoefficient=RSuperiorCoefficient+:RSuperiorCoefficient, RQualifiedNum=RQualifiedNum+:RQualifiedNum, RQualifiedCoefficient=RQualifiedCoefficient+:RQualifiedCoefficient, StandardWages=StandardWages+:StandardWages, RepairSubsidyRate=RepairSubsidyRate+:RepairSubsidyRate, RepairSubsidy=RepairSubsidy+:RepairSubsidy, Amount=Amount+:Amount, PieceTacticsID=:PieceTacticsID where YYYYMM=:YYYYMM and StaffID=:StaffID and PayPlanID=:PayPlanID and WagesTypeID=:WagesTypeID "; } parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dtWagesType.Rows[ii]["WagesTypeID"]), new OracleParameter(":RSuperioNum",RepairSubsidy_RSuperioNum), new OracleParameter(":RSuperiorCoefficient",RSuperiorCoefficient), new OracleParameter(":RQualifiedNum",RepairSubsidy_RQualifiedNum), new OracleParameter(":RQualifiedCoefficient",RQualifiedCoefficient), new OracleParameter(":StandardWages",RepairStandardWages), new OracleParameter(":RepairSubsidyRate",RepairSubsidyRate), new OracleParameter(":RepairSubsidy",RepairSubsidy), new OracleParameter(":Amount",temp_Repair), new OracleParameter(":PieceTacticsID",PieceTacticsID_Insert3), }; intResult = oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion } } } #endregion decimal? totalcount_QualityASS = 0;// 品质工资 #region 品质考核策略 decimal min_TotalCount = 0; for (int h = 0; h < dsQualityASS.Tables[0].Rows.Count; h++) { min_TotalCount = 0; // 求出缺陷数 sqlString = @"select TP_PAM_GoodsWagesType.WagesTypeID,TMP_PAM_Defect.goodsid,TMP_PAM_Defect.DefectFine from TMP_PAM_Defect inner join TP_PAM_GoodsWagesType on TMP_PAM_Defect.goodsID=TP_PAM_GoodsWagesType.goodsID where TMP_PAM_Defect.DefectUserID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"] + " and TMP_PAM_Defect.DefectFine=" + dsQualityASS.Tables[0].Rows[h]["DefectFine"]; DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString);//查询出有多少分类,进行计算 DataTable dt2 = ds.Tables[0].DefaultView.ToTable(true, "WagesTypeID");//有多少行,就有多少分类 for (int p = 0; p < dt2.Rows.Count; p++) { decimal temp_QualityReward = 0; int drCount_Total = 0; // modify string barcodes_Procedure = ""; drCount_Total = 0; for (int p1 = 0; p1 < dsPieceProcedure_2.Tables[0].Rows.Count; p1++) { DataRow[] drQualityBaseProcedure = dsTMPProductionData.Tables[0] .Select(string.Format("ProcedureID={0} and WagesTypeID={1}", dsPieceProcedure_2.Tables[0].Rows[p1]["ProcedureID"], dt2.Rows[p]["WagesTypeID"])); if (drQualityBaseProcedure.Length > 0) { foreach (DataRow r4 in drQualityBaseProcedure) { if (!barcodes_Procedure.Contains(r4["barcode"].ToString())) { drCount_Total += 1; // 质量工序数量 } barcodes_Procedure = barcodes_Procedure + r4["barcode"].ToString() + ","; } } } //// modify en //for (int yy = 0; yy < dsQualityProcedure.Tables[0].Rows.Count; yy++) //{ // DataRow[] drCount = dsTMPProductionData.Tables[0].Select("ProcedureID=" + dsQualityProcedure.Tables[0].Rows[yy]["ProcedureID"] + " and userID=" + dsJobsPayPlan.Tables[0].Rows[j]["userID"] + " and WagesTypeID=" + dt2.Rows[p]["WagesTypeID"]); // drCount_Total += drCount.Length; //} // 读取质量基数工序 // 缺陷数量 DataRow[] drDefect = ds.Tables[0].Select("DefectFine=" + dsQualityASS.Tables[0].Rows[h]["DefectFine"] + " and WagesTypeID=" + dt2.Rows[p]["WagesTypeID"]); // temp 为品质率,真正的价格在区间取 decimal temp = 0; if (drCount_Total != 0) { temp = Convert.ToDecimal(dsQualityASS.Tables[0].Rows[h]["DefectFine"]) * drDefect.Length / drCount_Total; } // 查出对应分类品质奖励 sqlString = "select * from TP_PAT_QualityReward where WagesTypeID=" + dt2.Rows[p]["WagesTypeID"] + " and QualityRate>=" + temp + " order by QualityRate"; DataSet dsQualityReward_Temp = oracleTrConn.GetSqlResultToDs(sqlString); decimal QualityRate = 0; if (dsQualityReward_Temp != null && dsQualityReward_Temp.Tables[0].Rows.Count > 0) { //表示有对应的品质价格,结果集如有多个,取第一个对应的金额即可 min_TotalCount = Convert.ToDecimal(dsQualityReward_Temp.Tables[0].Rows[0]["QualityReward"]); temp_QualityReward = Convert.ToDecimal(dsQualityReward_Temp.Tables[0].Rows[0]["QualityReward"]);//品质奖励金额 QualityRate = Convert.ToDecimal(dsQualityReward_Temp.Tables[0].Rows[0]["QualityRate"]); } // 读取品质考核策略 int PieceTacticsID_Insert3 = 0; sqlString = "select QualityASSTacticsID from TP_PAT_QualityASS where PayPlanID=:PayPlanID"; parmeters1 = new OracleParameter[] { new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), }; DataSet dss3 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dss3 != null && dss3.Tables[0].Rows.Count > 0) { PieceTacticsID_Insert3 = Convert.ToInt32(dss3.Tables[0].Rows[0]["QualityASSTacticsID"]); } #region 插入品质考核 sqlString = @"insert into TP_PAR_QualityASS ( YYYYMM, StaffID, PayPlanID, WagesTypeID, DefectFine, DefectNum, QualityBaseNum, QualityRate, Amount, QualityASSTacticsID ) values ( :YYYYMM, :StaffID, :PayPlanID, :WagesTypeID, :DefectFine, :DefectNum, :QualityBaseNum, :QualityRate, :Amount, :QualityASSTacticsID )"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[j]["StaffID"]), new OracleParameter(":PayPlanID",dsPayPlan.Tables[0].Rows[i]["PayPlanID"]), new OracleParameter(":WagesTypeID",dt2.Rows[p]["WagesTypeID"]), new OracleParameter(":DefectFine",dsQualityASS.Tables[0].Rows[h]["DefectFine"]), new OracleParameter(":DefectNum",drDefect.Length), new OracleParameter(":QualityBaseNum",drCount_Total), new OracleParameter(":QualityRate",QualityRate), new OracleParameter(":Amount",min_TotalCount), new OracleParameter(":QualityASSTacticsID",PieceTacticsID_Insert3), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion } totalcount_QualityASS += min_TotalCount; } #endregion decimal? totalcount_AdminEXA = 0;// 行政工资 #region 行政考核 sqlString = "select Amount from TP_PAD_AdminEXA where SettlementFlag=0 and StaffID=:StaffID"; parmeters1 = new OracleParameter[] { //new OracleParameter(":UserID",dsJobsPayPlan.Tables[0].Rows[i]["UserID"]), new OracleParameter(":StaffID",dsJobsPayPlan.Tables[0].Rows[i]["StaffID"]), }; DataSet dsAdminEXA = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsAdminEXA != null && dsAdminEXA.Tables[0].Rows.Count > 0) { for (int y = 0; y < dsAdminEXA.Tables[0].Rows.Count; y++) { totalcount_AdminEXA += Convert.ToDecimal(dsAdminEXA.Tables[0].Rows[y]["Amount"]); } } #endregion #region 插入工资单 // 防止一个员工在多个工号下面 sqlString = "select 1 from TP_PAR_Payroll where YYYYMM=:YYYYMM and StaffID=:StaffID "; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",OracleDbType.Varchar2,(Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())),ParameterDirection.Input), new OracleParameter(":StaffID",OracleDbType.Int32,dsJobsPayPlan.Tables[0].Rows[j]["StaffID"],ParameterDirection.Input), }; DataSet ds4 = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (ds4 != null && ds4.Tables[0].Rows.Count == 0) { sqlString = @"insert into TP_PAR_Payroll ( YYYYMM, StaffID, Piecework, DamageSubsidy, RepairSubsidy, QualityEXA, AdminEXA, ADAmount, TotalAmount, AuditStatus, AccountID, CreateUserID, UpdateUserID ) values ( :YYYYMM, :StaffID, :Piecework, :DamageSubsidy, :RepairSubsidy, :QualityEXA, :AdminEXA, :ADAmount, :TotalAmount, :AuditStatus, :AccountID, :CreateUserID, :UpdateUserID )"; decimal? a = (totalcount_Piecegiework + totalcount_Scrap + totalcount_RepairSubsidy + totalcount_QualityASS + totalcount_AdminEXA); parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",OracleDbType.Varchar2,(Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())),ParameterDirection.Input), new OracleParameter(":StaffID",OracleDbType.Int32,dsJobsPayPlan.Tables[0].Rows[j]["StaffID"],ParameterDirection.Input), //new OracleParameter(":PayPlanID",OracleDbType.Int32,dsPayPlan.Tables[0].Rows[i]["PayPlanID"],ParameterDirection.Input), new OracleParameter(":Piecework",OracleDbType.Decimal,totalcount_Piecegiework,ParameterDirection.Input), new OracleParameter(":DamageSubsidy",OracleDbType.Decimal,totalcount_Scrap,ParameterDirection.Input), new OracleParameter(":RepairSubsidy",OracleDbType.Decimal,totalcount_RepairSubsidy,ParameterDirection.Input), new OracleParameter(":QualityEXA",OracleDbType.Decimal,totalcount_QualityASS,ParameterDirection.Input), new OracleParameter(":AdminEXA",OracleDbType.Decimal,totalcount_AdminEXA,ParameterDirection.Input), new OracleParameter(":ADAmount",OracleDbType.Decimal,0,ParameterDirection.Input), new OracleParameter(":TotalAmount",OracleDbType.Decimal,a,ParameterDirection.Input), new OracleParameter(":CreateUserID",OracleDbType.Int32,sUserInfo.UserID,ParameterDirection.Input), new OracleParameter(":UpdateUserID",OracleDbType.Int32,sUserInfo.UserID,ParameterDirection.Input), new OracleParameter(":AccountID",OracleDbType.Int32,sUserInfo.AccountID,ParameterDirection.Input), new OracleParameter(":AuditStatus",OracleDbType.Int32,0,ParameterDirection.Input), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } else { sqlString = @"update TP_PAR_Payroll set Piecework=Piecework+:Piecework, DamageSubsidy=DamageSubsidy+:DamageSubsidy, RepairSubsidy=RepairSubsidy+:RepairSubsidy, QualityEXA=QualityEXA+:QualityEXA, AdminEXA=AdminEXA+:AdminEXA, ADAmount=AdminEXA+:ADAmount, TotalAmount=TotalAmount+:TotalAmount where YYYYMM=:YYYYMM and StaffID=:StaffID "; decimal? a = (totalcount_Piecegiework + totalcount_Scrap + totalcount_RepairSubsidy + totalcount_QualityASS + totalcount_AdminEXA); parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",OracleDbType.Varchar2,(Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())),ParameterDirection.Input), new OracleParameter(":StaffID",OracleDbType.Int32,dsJobsPayPlan.Tables[0].Rows[j]["StaffID"],ParameterDirection.Input), //new OracleParameter(":PayPlanID",OracleDbType.Int32,dsPayPlan.Tables[0].Rows[i]["PayPlanID"],ParameterDirection.Input), new OracleParameter(":Piecework",OracleDbType.Decimal,totalcount_Piecegiework,ParameterDirection.Input), new OracleParameter(":DamageSubsidy",OracleDbType.Decimal,totalcount_Scrap,ParameterDirection.Input), new OracleParameter(":RepairSubsidy",OracleDbType.Decimal,totalcount_RepairSubsidy,ParameterDirection.Input), new OracleParameter(":QualityEXA",OracleDbType.Decimal,totalcount_QualityASS,ParameterDirection.Input), new OracleParameter(":AdminEXA",OracleDbType.Decimal,totalcount_AdminEXA,ParameterDirection.Input), new OracleParameter(":ADAmount",OracleDbType.Decimal,0,ParameterDirection.Input), new OracleParameter(":TotalAmount",OracleDbType.Decimal,a,ParameterDirection.Input), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } #endregion } if (intResult > 0) { sqlString = @"insert into TP_PAR_PayrollAccount ( YYYYMM, BeginDate, EndDate, AccountID, CreateUserID ) values ( :YYYYMM, :BeginDate, :EndDate, :AccountID, :CreateUserID )"; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",Year.ToString()+(Month.ToString().Length<2?"0"+Month.ToString():Month.ToString())), new OracleParameter(":BeginDate",dateStartTime), new OracleParameter(":EndDate",dateEndTime), new OracleParameter(":AccountID",sUserInfo.AccountID), new OracleParameter(":CreateUserID",sUserInfo.UserID), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); // 更新系统结算月 sqlString = "update TP_MST_SystemDate set datevalue=sysdate where systemdatetype=2"; intResult += oracleTrConn.ExecuteNonQuery(sqlString); sqlString = "update TP_MST_SystemDate set datevalue=:datevalue where systemdatetype=5"; parmeters1 = new OracleParameter[] { new OracleParameter(":datevalue",dateEndTime), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); oracleTrConn.Commit(); oracleTrConn.Disconnect(); } else { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } } } return intResult; } catch (Exception ex) { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } throw ex; } finally { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } } } /// /// 保存产品工价分类 /// /// false 新建 true 编辑 /// 数据源 /// /// public static int ChangePayPiecework(string YYYYMM, SUserInfo sUserInfo) { IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { int intResult = 0; oracleTrConn.Connect(); OracleParameter[] parmeters1 = null; string sqlString = ""; sqlString = "delete from TP_PAR_PayrollAccount where YYYYMM=:YYYYMM "; parmeters1 = new OracleParameter[] { new OracleParameter(":YYYYMM",YYYYMM), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); sqlString = "delete from TP_PAR_Payroll where YYYYMM=:YYYYMM "; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); sqlString = "delete from TP_PAR_Piecework where YYYYMM=:YYYYMM "; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); sqlString = "delete from TP_PAR_DamageSubsidy where YYYYMM=:YYYYMM "; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); sqlString = "delete from TP_PAR_RepairSubsidy where YYYYMM=:YYYYMM "; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); sqlString = "delete from TP_PAR_QualityASS where YYYYMM=:YYYYMM "; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); sqlString = "select * from TP_PAR_PayrollAccount where AccountID=:AccountID order by CreateTime desc"; parmeters1 = new OracleParameter[] { new OracleParameter(":AccountID",sUserInfo.AccountID), }; DataSet ds = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (ds != null && ds.Tables[0].Rows.Count > 0) { //反结算,更新生产数据与行政考核数据标识 int Year = Convert.ToInt32(YYYYMM.Substring(0, 4)); int Month = Convert.ToInt32(YYYYMM.Substring(5)); #region 查询系统参数设定值,用来结算工资范围取值 DateTime? dateStartTime = null; DateTime? dateEndTime = null; sqlString = "select SettingValue from TP_MST_SystemSetting where accountid=:accountid and SettingCode='S_CMN_0003'"; parmeters1 = new OracleParameter[] { new OracleParameter(":accountid",sUserInfo.AccountID), }; DataSet dsSystemSettings = oracleTrConn.GetSqlResultToDs(sqlString, parmeters1); if (dsSystemSettings != null && dsSystemSettings.Tables[0].Rows.Count > 0) { // 算出此月一共多少天,防止设置的值,大于当月的天数 int daysCount = DateTime.DaysInMonth(Year, Month); if (dsSystemSettings.Tables[0].Rows[0]["SettingValue"].ToString() == "月末") { dateStartTime = new DateTime(Year, Month, 1); dateEndTime = new DateTime(Year, Month, daysCount, 23, 59, 59); } else { // 选择的值,大于当月的天数 if (Convert.ToInt32(dsSystemSettings.Tables[0].Rows[0]["SettingValue"]) > daysCount) { dateEndTime = new DateTime(Year, Month, daysCount, 23, 59, 59); dateStartTime = dateEndTime.Value.AddMonths(-1).AddDays(1); } else { dateEndTime = new DateTime(Year, Month, Convert.ToInt32(dsSystemSettings.Tables[0].Rows[0]["SettingValue"]), 23, 59, 59); dateStartTime = dateEndTime.Value.AddMonths(-1).AddDays(1); } } } #endregion #region 根据筛选日期更新生产数据结算标识 parmeters1 = new OracleParameter[] { new OracleParameter(":dateStartTime",OracleDbType.Date,dateStartTime,ParameterDirection.Input), new OracleParameter(":dateEndTime",OracleDbType.Date,dateEndTime,ParameterDirection.Input), new OracleParameter(":accountid",sUserInfo.AccountID), }; // 更新生产数据结算标识 sqlString = @"update TP_PM_ProductionData set SettlementFlag=0 where SettlementFlag=1 and CreateTime >=:dateStartTime and CreateTime<=:dateEndTime and accountid=:accountid and valueflag=1"; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); #endregion // sqlString = "update TP_PAD_AdminEXA set SettlementFlag=0 where SettlementFlag=1 and AuditStatus=1 and AuditlDate >=:dateStartTime and AuditlDate<=:dateEndTime and accountid=:accountid"; parmeters1 = new OracleParameter[] { new OracleParameter(":dateStartTime",dateStartTime), new OracleParameter(":dateEndTime",dateEndTime), new OracleParameter(":accountid",sUserInfo.AccountID), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); sqlString = "update TP_MST_SystemDate set datevalue=:datevalue where systemdatetype=2"; parmeters1 = new OracleParameter[] { new OracleParameter(":datevalue",ds.Tables[0].Rows[0]["CreateTime"]), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); sqlString = "update TP_MST_SystemDate set datevalue=:datevalue where systemdatetype=5"; string yyyy_mm = ds.Tables[0].Rows[0]["YYYYMM"].ToString(); int year = Convert.ToInt32(yyyy_mm.Substring(0, 4)); int month = Convert.ToInt32(yyyy_mm.Substring(4)); DateTime updatetime = new DateTime(year, month, 1, 23, 59, 59); parmeters1 = new OracleParameter[] { new OracleParameter(":datevalue",updatetime), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } else { sqlString = "update TP_MST_SystemDate set datevalue=:datevalue where systemdatetype=2"; parmeters1 = new OracleParameter[] { new OracleParameter(":datevalue",new DateTime(2000,1,1)), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); sqlString = "update TP_MST_SystemDate set datevalue=:datevalue where systemdatetype=5"; DateTime updatetime = new DateTime(2000, 1, 1, 23, 59, 59); parmeters1 = new OracleParameter[] { new OracleParameter(":datevalue",updatetime), }; intResult += oracleTrConn.ExecuteNonQuery(sqlString, parmeters1); } if (intResult == 0) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } else { oracleTrConn.Commit(); oracleTrConn.Disconnect(); } return intResult; } catch (Exception ex) { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } throw ex; } } } }