/// <summary> /// 执行删除数据并处理相关数据一致性 /// </summary> /// <param name="e">传入的带有数据的事件参数</param> /// <returns></returns> private bool DeleteData(ListViewDeleteEventArgs e) { //当前用户输入的id号 Int64 id = Convert.ToInt64(e.Keys[0]); //数据适配器 //当前数据库连接 //当前更新语句对象 using (var da = new t_scrap_record_loseTableAdapter()) using (var cmd = da.Adapter.DeleteCommand) using (var conn = cmd.Connection) { //打开数据库连接 conn.Open(); //开启事务 using (var tran = conn.BeginTransaction()) { //试运行 try { //设置事务 da.Transaction = tran; //获取数据 using (var tab = da.GetDataById(id)) { //检查是否获取到行 if (tab.Rows.Count == 0) { //显示失败 throw new Exception("当前遗失报废记录已经被其他用户删除,请刷新后重试!"); } else { //首行 var row = (DataSetLoseRecord.t_scrap_record_loseRow)tab.Rows[0]; //之前录入的用户名称 string userName = row.add_person; //检测当前用户所在部门名称和角色以及之前保存该记录的用户部门名称 //当前用户所在部门 string curUserDeptName = Session["dept_name"].ToString(); //用户名称 string curUserName = Session["user_name"].ToString(); //当前角色id Int16 curUserRoleId = Convert.ToInt16(Session["role_id"]); //录入权限用户则必须和原录入用户一样的名字 if (curUserRoleId > 3) { //用户只能操作自己之前录入的 if (userName.ToUpper().Equals(curUserName.ToUpper())) { //显示失败 throw new Exception("当前遗失报废记录录入者并非是您,请找更高级权限的用户操作!"); } } //主管级别可以修改本部门人员的 else if (curUserRoleId == 3) { //检测之前录入用户所在部门 using (var daUser = new DAL.Shared.DataSetUserDeptRoleTableAdapters.v_user_dept_roleTableAdapter()) { //设置事务 daUser.Transaction = tran; //检测该用户是否属于该部门 int i = Convert.ToInt32(daUser.CountByUserNameAndDeptName(userName, curUserDeptName)); if (i <= 0) { //显示失败 throw new Exception("当前遗失报废记录录入者并非是您当前部门用户,请找更高级权限的用户操作!"); } } } //样板经理级别只能修改样板lot卡,生产板经理只能修改生产板lot卡 else if (curUserRoleId == 2) { //之前录入的lot卡号 string lotId = row.lot_id; //检测是否样板 bool isSample = lotId.ToUpper().Contains("S"); //检查是否一致 if (!isSample && curUserDeptName == "样板") { //显示失败 throw new Exception("当前遗失报废记录并非是样板,请找更高级权限的用户操作!"); } else if (isSample && curUserDeptName == "计划") { //显示失败 throw new Exception("当前遗失报废记录并非是生产板,请找更高级权限的用户操作!"); } } //部门名称 string deptName = row.dept_name; //目标数据库表名 string toTabName = "[t_dept_lot_card_balance]"; //添加到部门结存lot卡或者遗失报废记录 if (!ydOperateBalanceLotCrad.InsertOneRecordToLotCardBalance( tran, ydOperateBalanceLotCrad.GetTabNameByDeptName("MRB2"), deptName, toTabName, id )) { return false; } //从遗失报废记录删除数据 if (!ydOperateBalanceLotCrad.DeleteOneRecordFromProductOrScrapRecord(cmd, id)) { return false; } } } //提交事务 tran.Commit(); //返回成功 return true; } catch (Exception ex) { //回滚事务 tran.Rollback(); //非数字返回失败 throw new Exception(ex.Message); } } } }
/// <summary> /// 根据输入的参数值来执行更新数据 /// </summary> /// <param name="e">传入的带有数据的事件参数</param> /// <returns></returns> private bool UpdateData(FormViewUpdateEventArgs e) { //检测是否更改了需要更新到其他部门的数据内容 if (e.OldValues["dept_name"].Equals(e.NewValues["dept_name"]) && e.OldValues["lot_id"].Equals(e.NewValues["lot_id"]) && e.OldValues["product_num"].Equals(e.NewValues["product_num"]) && e.OldValues["scrap_dept_name"].Equals(e.NewValues["scrap_dept_name"]) && e.OldValues["pnl_qty"].Equals(e.NewValues["pnl_qty"]) ) { //执行只更新本遗失报废记录 e.Cancel = false; //更新事件继续执行 return false; } //当前用户所在部门 string deptName = Session["dept_name"].ToString(); //之前lot卡号 string lotIdOld = e.OldValues["lot_id"].ToString().ToUpper(); //当前用户输入的新的lot卡号 string lotIdNew = e.NewValues["lot_id"].ToString().ToUpper(); //不能从样板lot卡修改为生产板lot卡,反之亦然 if (lotIdNew.Contains("S") != lotIdOld.Contains("S")) { throw new Exception("不能从样板lot卡修改为生产板lot卡,反之亦然!"); } //检测部门名称 if (lotIdOld.Contains("S") && deptName != "样板" && deptName != "MRB") { throw new Exception("当前只能录入生产板lot卡!"); } //检测部门名称 if (!lotIdOld.Contains("S") && deptName != "计划" && deptName != "MRB") { throw new Exception("当前只能录入样板lot卡!"); } //检测是否正确lot卡号 if (!ydOperateLotCard.IsLotCardId(ref lotIdNew) || !ydOperateSampleLotCard.IsSampleLotCardId(ref lotIdNew)) { //非数字返回失败 throw new Exception("您输入了一个不合格的lot卡号 " + lotIdNew + " !"); } //数据适配器 //当前添加语句对象 //当前数据库连接 using (var da = new t_scrap_record_loseTableAdapter()) using (var cmd = da.Adapter.UpdateCommand) using (var conn = cmd.Connection) { //打开数据库连接 conn.Open(); //开启事务 using (var tran = conn.BeginTransaction()) { //设置事务 da.Transaction = tran; //试运行 try { //之前提供遗失板的部门名称 string deptNameOld = e.OldValues["dept_name"].ToString(); //之后提供遗失板的部门名称 string deptNameNew = e.NewValues["dept_name"].ToString(); //当前行id号 Int64 id = Convert.ToInt64(e.Keys["id"]); //获取数据 using (var tab = da.GetDataById(id)) { //检查是否获取到行 if (tab.Rows.Count == 0) { //显示失败 throw new Exception("当前遗失报废记录已经被其他用户删除,请刷新后重试!"); } else { //首行 var row = (DataSetLoseRecord.t_scrap_record_loseRow)tab.Rows[0]; //之前录入的用户名称 string userName = row.add_person; //检测当前用户所在部门名称和角色以及之前保存该记录的用户部门名称 //当前用户所在部门 string curUserDeptName = Session["dept_name"].ToString(); //用户名称 string curUserName = Session["user_name"].ToString(); //当前角色id Int16 curUserRoleId = Convert.ToInt16(Session["role_id"]); //录入权限用户则必须和原录入用户一样的名字 if (curUserRoleId > 3) { //用户只能操作自己之前录入的 if (userName.ToUpper().Equals(curUserName.ToUpper())) { //显示失败 throw new Exception("当前遗失报废记录录入者并非是您,请找更高级权限的用户操作!"); } } //主管级别可以修改本部门的 else if (curUserRoleId == 3) { //检测之前录入用户所在部门 using (var daUser = new DAL.Shared.DataSetUserDeptRoleTableAdapters.v_user_dept_roleTableAdapter()) { //设置事务 daUser.Transaction = tran; //检测该用户是否属于该部门 int i = Convert.ToInt32(daUser.CountByUserNameAndDeptName(userName, curUserDeptName)); if (i <= 0) { //显示失败 throw new Exception("当前遗失报废记录录入者并非是您当前部门用户,请找更高级权限的用户操作!"); } } } //样板经理级别只能修改样板lot卡,生产板经理只能修改生产板lot卡 else if (curUserRoleId == 2) { //之前录入的lot卡号 string lotId = row.lot_id; //检测是否样板 bool isSample = lotId.ToUpper().Contains("S"); //检查是否一致 if (!isSample && curUserDeptName == "样板") { //显示失败 throw new Exception("当前遗失报废记录并非是样板,请找更高级权限的用户操作!"); } else if (isSample && curUserDeptName == "计划") { //显示失败 throw new Exception("当前遗失报废记录并非是生产板,请找更高级权限的用户操作!"); } } //目标数据库表名 string toTabName = deptNameOld == "成品仓" ? "[t_complete_lot_card_wait]" : "[t_dept_lot_card_balance]"; //添加到部门结存lot卡 if (!ydOperateBalanceLotCrad.InsertOneRecordToLotCardBalance( tran, ydOperateBalanceLotCrad.GetTabNameByDeptName("MRB2"), deptNameOld, toTabName, id )) { return false; } } } //保存一条记录到数据库 if (!ydOperateBalanceLotCrad.UpdateOneRecord( cmd, e, deptNameNew, "MRB", false, Convert.ToBoolean(e.NewValues["is_updated_balance"]) )) { //失败就直接返回 return false; } //提交事务 tran.Commit(); //返回成功 return true; } catch (Exception ex) { //回滚事务 tran.Rollback(); //非数字返回失败 throw new Exception(ex.Message); } } } }