private void btnUpdate_Click(object sender, EventArgs e) { if (!CheckSelectedRow() || !CheckDataItem()) { return; } string prompt = string.Format("您确定要更新【{0}】下的【{1}】零件吗?", dataGridView1.SelectedRows[0].Cells["父总成名称"].Value.ToString(), dataGridView1.SelectedRows[0].Cells["零件名称"].Value.ToString()); if (MessageDialog.ShowEnquiryMessage(prompt) == DialogResult.No) { return; } int id = (int)dataGridView1.SelectedRows[0].Cells["序号"].Value; P_AssemblingBom info = CreateAssemblingBom(); if (!m_assemblingBom.Update(id, info, out m_err)) { MessageDialog.ShowErrorMessage(m_err); return; } m_lstAssemblingBom = m_assemblingBom.GetAssemblingBom(cmbProductType.Text); InitViewData(m_lstAssemblingBom); PositioningRecord(info.ParentCode); }
/// <summary> /// 更新分总成下所有零件工位号 /// </summary> /// <param name="surEdition">源装配BOM版本号</param> /// <param name="parentName">分总成名称</param> /// <param name="workBench">要设置的工位号</param> /// <param name="updateParentPart">是否更新时一并更新分总成零件的工位号</param> /// <param name="error">操作错误时返回的错误信息</param> /// <returns>更新成功返回True,更新失败返回False</returns> public bool UpdateWorkBench(string surEdition, string parentName, string workBench, bool updateParentPart, out string error) { DepotManagementDataContext ctx = CommentParameter.DepotDataContext; error = null; try { if (updateParentPart) { P_AssemblingBom data = (from r in ctx.P_AssemblingBom where r.ProductCode == surEdition && r.PartName == parentName select r).Single(); data.UserCode = BasicInfo.LoginID; data.Date = ServerTime.Time; data.Workbench = workBench; } UpdateWorkBench(ctx, surEdition, parentName, workBench); ctx.SubmitChanges(); return(true); } catch (Exception exce) { error = exce.Message; return(false); } }
private void btnAdd_Click(object sender, EventArgs e) { if (!CheckDataItem()) { return; } if (dataGridView1.Rows.Count > 0) { for (int i = 0; i < dataGridView1.Rows.Count; i++) { DataGridViewCellCollection cells = dataGridView1.Rows[i].Cells; if (cells["父总成编码"].Value.ToString() == txtParentCode.Text && cells["零件编码"].Value.ToString() == txtCode.Text && cells["规格"].Value.ToString() == txtSpec.Text && cells["工位"].Value.ToString() == cmbWorkBench.Text) { MessageDialog.ShowPromptMessage("不允许进行此操作,当前装配BOM信息中已经存在父总成编码、零件编码、规格、工位完全相同的信息!"); return; } } } P_AssemblingBom info = CreateAssemblingBom(); if (!m_assemblingBom.Add(info, out m_err)) { MessageDialog.ShowErrorMessage(m_err); return; } m_lstAssemblingBom = m_assemblingBom.GetAssemblingBom(cmbProductType.Text); InitViewData(m_lstAssemblingBom); PositioningRecord(info.ParentCode); }
private void 制ToolStripMenuItem_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count == 0) { MessageDialog.ShowPromptMessage("请选择表格中的零件后再进行此操作"); return; } FormProductType form = new FormProductType(); if (form.ShowDialog() == DialogResult.OK) { List <View_P_ProductInfo> productList = form.SelectedProduct; foreach (View_P_ProductInfo item in productList) { if (item.产品类型编码 == dataGridView1.CurrentRow.Cells["产品编码"].Value.ToString()) { continue; } if (m_assemblingBom.IsExistGoodsWorkbench(item.产品类型编码, dataGridView1.CurrentRow.Cells["零件编码"].Value.ToString(), dataGridView1.CurrentRow.Cells["工位"].Value.ToString())) { continue; } P_AssemblingBom assembile = new P_AssemblingBom(); assembile.AssemblyFlag = (bool)dataGridView1.CurrentRow.Cells["是否总成"].Value; assembile.Date = ServerTime.Time; assembile.FittingCounts = Convert.ToInt32(dataGridView1.CurrentRow.Cells["装配数量"].Value); assembile.IsAdaptingPart = (bool)dataGridView1.CurrentRow.Cells["是否选配零件"].Value; assembile.NeedToClean = (bool)dataGridView1.CurrentRow.Cells["是否清洗"].Value; assembile.OrderNo = (int)dataGridView1.CurrentRow.Cells["装配顺序"].Value; assembile.ParentCode = (string)dataGridView1.CurrentRow.Cells["父总成编码"].Value; assembile.ParentName = (string)dataGridView1.CurrentRow.Cells["父总成名称"].Value; assembile.PartCode = (string)dataGridView1.CurrentRow.Cells["零件编码"].Value; assembile.PartName = (string)dataGridView1.CurrentRow.Cells["零件名称"].Value; assembile.ProductCode = item.产品类型编码; assembile.RasterProofing = (bool)dataGridView1.CurrentRow.Cells["需光栅防错"].Value; assembile.Remarks = (string)dataGridView1.CurrentRow.Cells["备注"].Value; assembile.Spec = (string)dataGridView1.CurrentRow.Cells["规格"].Value; assembile.UserCode = BasicInfo.LoginID; assembile.Workbench = (string)dataGridView1.CurrentRow.Cells["工位"].Value; if (!m_assemblingBom.Add(assembile, out m_err)) { MessageDialog.ShowErrorMessage(m_err); return; } } InitViewData(m_lstAssemblingBom); } }
/// <summary> /// 复制子零件 /// </summary> /// <param name="ctx">数据上下文</param> /// <param name="surEdition">源装配BOM版本号</param> /// <param name="tarEdition">目标装配BOM产品信息</param> /// <param name="parentName">分总成名称</param> private void CopyChildPart(DepotManagementDataContext ctx, string surEdition, View_P_ProductInfo tarEdition, string parentName) { var result = from r in ctx.P_AssemblingBom where r.ProductCode == surEdition && r.ParentName == parentName select r; DateTime serverTime = ServerTime.Time; foreach (var item in result) { P_AssemblingBom info = new P_AssemblingBom(); info.ProductCode = tarEdition.产品类型编码; info.ParentCode = item.ParentCode; info.ParentName = item.ParentName; info.PartCode = item.PartCode; info.PartName = item.PartName; info.Spec = item.Spec; info.IsMaterialShortage = item.IsMaterialShortage; info.IsAdaptingPart = item.IsAdaptingPart; info.NeedToClean = item.NeedToClean; info.AssemblyFlag = item.AssemblyFlag; info.RasterProofing = item.RasterProofing; info.Date = serverTime; info.Remarks = item.Remarks; info.UserCode = GlobalObject.BasicInfo.LoginID; info.Workbench = item.Workbench; info.FittingCounts = item.FittingCounts; info.OrderNo = item.OrderNo; if (info.ParentCode == surEdition) { info.ParentCode = tarEdition.产品类型编码; info.ParentName = tarEdition.产品类型名称; } else if (info.PartCode == surEdition) { info.PartCode = tarEdition.产品类型编码; info.PartName = tarEdition.产品类型名称; } ctx.P_AssemblingBom.InsertOnSubmit(info); if (item.AssemblyFlag) { var result2 = from r in ctx.P_AssemblingBom where r.ProductCode == surEdition && r.ParentName == item.PartName select r; if (result2.Count() > 0) { CopyChildPart(ctx, surEdition, tarEdition, item.PartName); } } } }
/// <summary> /// 更新分总成下所有零件工位号 /// </summary> /// <param name="ctx">数据上下文</param> /// <param name="surEdition">源装配BOM版本号</param> /// <param name="parentName">分总成名称</param> /// <param name="workBench">要设置的工位号</param> private void UpdateWorkBench(DepotManagementDataContext ctx, string surEdition, string parentName, string workBench) { List <P_AssemblingBom> result = (from r in ctx.P_AssemblingBom where r.ProductCode == surEdition && r.ParentName == parentName select r).ToList(); DateTime serverTime = ServerTime.Time; for (int i = 0; i < result.Count; i++) { P_AssemblingBom item = result[i]; List <P_AssemblingBom> result2 = (from r in ctx.P_AssemblingBom where r.ProductCode == surEdition && r.ParentName == parentName && r.PartCode == item.PartCode && r.PartName == item.PartName && r.Spec == item.Spec select r).ToList(); // 本分总成存在多个相同的零件(仅工位不同),此时需要合并 if (result2.Count > 1) { int amount = (from r in ctx.P_AssemblingBom where r.ProductCode == surEdition && r.ParentName == parentName && r.PartCode == item.PartCode && r.PartName == item.PartName && r.Spec == item.Spec select r.FittingCounts).Sum(); item.FittingCounts = amount; for (int index = 1; index < result2.Count; index++) { ctx.P_AssemblingBom.DeleteOnSubmit(result2[index]); } i += result2.Count - 1; } item.Workbench = workBench; item.UserCode = BasicInfo.LoginID; item.Date = serverTime; if (item.AssemblyFlag) { var result3 = from r in ctx.P_AssemblingBom where r.ProductCode == surEdition && r.ParentName == item.PartName select r; if (result3.Count() > 0) { UpdateWorkBench(ctx, surEdition, item.PartName, workBench); } } } }
/// <summary> /// 添加装配BOM零件信息 /// </summary> /// <param name="info">装配BOM零件信息</param> /// <param name="error">False时返回错误信息</param> /// <returns>True 添加成功,False 添加失败</returns> public bool Add(P_AssemblingBom info, out string error) { try { error = null; DepotManagementDataContext dataContxt = CommentParameter.DepotDataContext; info.Date = ServerTime.Time; dataContxt.P_AssemblingBom.InsertOnSubmit(info); dataContxt.SubmitChanges(); return(true); } catch (Exception exce) { error = exce.Message; return(false); } }
/// <summary> /// 删除装配BOM零件信息 /// </summary> /// <param name="id">装配BOM零件信息ID</param> /// <param name="error">False时返回的错误信息</param> /// <returns>True 删除成功,False 删除失败</returns> public bool Delete(int id, out string error) { try { error = null; DepotManagementDataContext dataContxt = CommentParameter.DepotDataContext; var result = from r in dataContxt.P_AssemblingBom where r.ID == id select r; if (result.Count() == 0) { error = string.Format("找不到ID为{0}的零件信息", id); return(false); } P_AssemblingBom lnqInfo = result.Single(); var childrenPart = from r in dataContxt.P_AssemblingBom where r.ProductCode == lnqInfo.ProductCode && r.ParentCode == lnqInfo.PartCode select r; if (childrenPart.Count() > 0) { error = "只有删除所有子零件后才能删除总成零件"; return(false); } dataContxt.P_AssemblingBom.DeleteOnSubmit(lnqInfo); dataContxt.SubmitChanges(); return(true); } catch (Exception exce) { error = exce.Message; return(false); } }
/// <summary> /// 根据界面信息创建装配BOM数据对象 /// </summary> /// <returns>返回创建的对象</returns> private P_AssemblingBom CreateAssemblingBom() { P_AssemblingBom info = new P_AssemblingBom(); info.ProductCode = cmbProductType.Text; info.ParentCode = txtParentCode.Text; info.ParentName = txtParentName.Text; info.PartCode = txtCode.Text; info.PartName = txtName.Text; info.Spec = txtSpec.Text; info.AssemblyFlag = chkIsAssemblyPart.Checked; info.IsMaterialShortage = chk缺料.Checked; info.NeedToClean = chkCleanout.Checked; info.IsAdaptingPart = chkIsAdapting.Checked; info.RasterProofing = chkRasterProofing.Checked; info.FittingCounts = Convert.ToInt32(numAssemblyCount.Value); info.Remarks = txtRemark.Text; info.Workbench = cmbWorkBench.Text; info.UserCode = BasicInfo.LoginID; info.OrderNo = Convert.ToInt32(numOrderNo.Value); return(info); }
/// <summary> /// 添加维修记录(不仅变更箱号还根据旧箱电子档案生成新箱电子档案) /// </summary> /// <param name="data">要添加的数据</param> /// <param name="error">出错时返回的错误信息</param> /// <returns>操作是否成功的标志</returns> public bool Add(DepotManagementDataContext ctx, ZPX_ConvertedCVTNumber data, out string error) { error = null; try { string oldCVTNumber = data.OldProductType + " " + data.OldProductNumber; string newCVTNumber = data.NewProductType + " " + data.NewProductNumber; if (!m_electronFileServer.IsExists(oldCVTNumber)) { error = "电子档案中找不到旧箱信息,检查操作是否有误,无法继续"; return(false); } P_AssemblingBom oldBom = m_assemblingBom.GetRootNode(data.OldProductType); P_AssemblingBom newBom = m_assemblingBom.GetRootNode(data.NewProductType); #region Modify by cjb on 2016.10.9, reason:由于LINQ无法调用存储过程ZPX_ConvertElectronFile,为保证操作在同一事务里,故用代码实现存储过程中的功能 string OldCode = oldCVTNumber; string OldName = oldBom.PartName; string NewCode = newCVTNumber; string NewName = newBom.PartName; var varData = from a in ctx.P_ElectronFile where a.ProductCode == OldCode select a; if (varData.Count() == 0) { throw new Exception(string.Format("箱号{0}的变速箱电子档案已经存在,无法进行此操作!", OldCode)); } foreach (P_ElectronFile item in varData) { P_ElectronFile tempFile = item; string NewType = NewCode.Substring(NewCode.IndexOf(' ')).Trim(); P_ElectronFile lnqInsert = new P_ElectronFile(); lnqInsert.ProductCode = NewCode; lnqInsert.ParentCode = tempFile.ParentName == OldName ? NewType : tempFile.ParentCode; lnqInsert.ParentName = tempFile.ParentName == OldName ? NewName : tempFile.ParentName; lnqInsert.ParentScanCode = tempFile.ParentScanCode == OldCode ? NewCode : tempFile.ParentScanCode; lnqInsert.GoodsCode = tempFile.GoodsName == OldName ? NewType : tempFile.GoodsCode; lnqInsert.GoodsName = tempFile.GoodsName == OldName ? NewName : tempFile.GoodsName; lnqInsert.Spec = tempFile.Spec; lnqInsert.GoodsOnlyCode = tempFile.GoodsOnlyCode == OldCode ? NewCode : tempFile.GoodsOnlyCode; lnqInsert.Counts = tempFile.Counts; lnqInsert.Provider = tempFile.Provider; lnqInsert.BatchNo = tempFile.BatchNo; lnqInsert.WorkBench = tempFile.WorkBench; lnqInsert.CheckDatas = tempFile.CheckDatas; lnqInsert.FactDatas = tempFile.FactDatas; lnqInsert.FittingPersonnel = tempFile.FittingPersonnel; lnqInsert.FittingTime = ServerTime.Time.ToString("yyyy-MM-dd HH:mm:ss"); lnqInsert.FinishTime = ServerTime.Time.ToString("yyyy-MM-dd HH:mm:ss"); lnqInsert.FillInPersonnel = tempFile.FillInPersonnel; lnqInsert.FillInDate = tempFile.FillInDate; lnqInsert.AssemblingMode = tempFile.AssemblingMode; if (lnqInsert.ParentCode == "") { lnqInsert.Remark = string.Format("[旧箱箱号:{0},{1}]; {2}", OldCode, ServerTime.Time.ToString("yyyy-MM-dd HH:mm:ss"), tempFile.Remark); } else { lnqInsert.Remark = string.Format("旧箱箱号:{0}; {1}", OldCode, tempFile.Remark); } ctx.P_ElectronFile.InsertOnSubmit(lnqInsert); } var varUpdate1 = from a in ctx.P_ElectronFile where a.ProductCode == OldCode && a.ParentCode == "" select a; foreach (P_ElectronFile item in varUpdate1) { item.Remark += string.Format("[新箱箱号:{0},{1}]", NewCode, ServerTime.Time.ToString("yyyy-MM-dd HH:mm:ss")); } #endregion //GlobalObject.DatabaseServer.QueryInfoPro("ZPX_ConvertElectronFile", hsTable, out error); //ctx.ZPX_ConvertElectronFile(oldCVTNumber, oldBom.PartName, newCVTNumber, newBom.PartName); //IDBOperate dbOperate = CommentParameter.GetDBOperate(); //Hashtable paramTable = new Hashtable(); //paramTable.Add("@OldCode", oldCVTNumber); //paramTable.Add("@OldName", oldBom.PartName); //paramTable.Add("@NewCode", newCVTNumber); //paramTable.Add("@NewName", newBom.PartName); //Dictionary<OperateCMD, object> dicOperateCMD = dbOperate.RunProc_CMD("ZPX_ConvertElectronFile", paramTable); //if (!Convert.ToBoolean(dicOperateCMD[OperateCMD.Return_OperateResult])) //{ // error = Convert.ToString(dicOperateCMD[OperateCMD.Return_Errmsg]); // return false; //} //DateTime serverTime = ServerTime.Time; //P_ElectronFile item = m_electronFileServer.CreateElectronFile(newCVTNumber); //item.GoodsCode = rootBom.PartCode; //item.GoodsName = rootBom.PartName; //item.GoodsOnlyCode = item.ProductCode; //item.WorkBench = rootBom.Workbench; //item.Remark = string.Format("旧箱箱号 {0};", oldCVTNumber); //m_electronFileServer.AddElectronFile(ctx, item); //P_ElectronFile oldRoot = m_electronFileServer.GetRootNode(ctx, oldCVTNumber); //oldRoot.Remark += string.Format("新箱箱号 {0};", newCVTNumber); ctx.ZPX_ConvertedCVTNumber.InsertOnSubmit(data); return(true); } catch (Exception exce) { error = exce.Message; return(false); } }
/// <summary> /// 复制指定版本的装配BOM信息到目标版本 /// </summary> /// <param name="surEdition">源装配BOM版本号</param> /// <param name="tarEdition">目标装配BOM版本号</param> /// <param name="error">操作错误时返回的错误信息</param> /// <returns>复制成功返回True,复制失败返回False</returns> public bool CopyBomData(string surEdition, string tarEdition, out string error) { try { error = null; DepotManagementDataContext dataContxt = CommentParameter.DepotDataContext; bool blIsExist = (from r in dataContxt.P_AssemblingBom where r.ProductCode == tarEdition select r).Count() > 0; if (blIsExist) { error = string.Format("{0}的零件信息已经存在,不允许再次复制", tarEdition); return(false); } var result = from r in dataContxt.P_AssemblingBom where r.ProductCode == surEdition select r; if (result.Count() == 0) { error = string.Format("找不到{0}的零件信息", surEdition); return(false); } View_P_ProductInfo lnqTargetProductInfo = (from r in dataContxt.View_P_ProductInfo where r.产品类型编码 == tarEdition select r).First(); DateTime dtServerTime = ServerTime.Time; foreach (var item in result) { P_AssemblingBom lnqInfo = new P_AssemblingBom(); lnqInfo.ProductCode = tarEdition; lnqInfo.ParentCode = item.ParentCode; lnqInfo.ParentName = item.ParentName; lnqInfo.PartCode = item.PartCode; lnqInfo.PartName = item.PartName; lnqInfo.Spec = item.Spec; lnqInfo.IsMaterialShortage = item.IsMaterialShortage; lnqInfo.IsAdaptingPart = item.IsAdaptingPart; lnqInfo.NeedToClean = item.NeedToClean; lnqInfo.AssemblyFlag = item.AssemblyFlag; lnqInfo.RasterProofing = item.RasterProofing; lnqInfo.Date = dtServerTime; lnqInfo.Remarks = item.Remarks; lnqInfo.UserCode = GlobalObject.BasicInfo.LoginID; lnqInfo.Workbench = item.Workbench; lnqInfo.FittingCounts = item.FittingCounts; lnqInfo.OrderNo = item.OrderNo; if (lnqInfo.ParentCode == surEdition) { lnqInfo.ParentCode = tarEdition; lnqInfo.ParentName = lnqTargetProductInfo.产品类型名称; } else if (lnqInfo.PartCode == surEdition) { lnqInfo.PartCode = tarEdition; lnqInfo.PartName = lnqTargetProductInfo.产品类型名称; } dataContxt.P_AssemblingBom.InsertOnSubmit(lnqInfo); } dataContxt.SubmitChanges(); return(true); } catch (Exception exce) { error = exce.Message; return(false); } }
/// <summary> /// 更新装配BOM零件信息 /// </summary> /// <param name="id">装配BOM零件信息ID</param> /// <param name="updateInfo">装配BOM零件更新后的信息</param> /// <param name="error">False时返回的错误信息</param> /// <returns>添加成功返回True 添加失败返回False</returns> public bool Update(int id, P_AssemblingBom updateInfo, out string error) { try { error = null; DepotManagementDataContext dataContxt = CommentParameter.DepotDataContext; var result = from r in dataContxt.P_AssemblingBom where r.ID == id select r; if (result.Count() == 0) { error = string.Format("找不到ID为{0}的零件信息", id); return(false); } P_AssemblingBom lnqInfo = result.Single(); var childrenPart = from r in dataContxt.P_AssemblingBom where r.ProductCode == lnqInfo.ProductCode && r.ParentCode == lnqInfo.PartCode select r; DateTime serverTime = ServerTime.Time; if (childrenPart.Count() > 0) { if (lnqInfo.AssemblyFlag && !updateInfo.AssemblyFlag) { error = "您要将总成零件修改成非总成零件时请确保该总成零件下无子零件"; return(false); } // 如果分总成图号改变时其子零件的父总成图号也要改变 if (updateInfo.PartCode != lnqInfo.PartCode) { foreach (var child in childrenPart) { child.ParentCode = updateInfo.PartCode; child.ParentName = updateInfo.PartName; child.Date = serverTime; child.UserCode = updateInfo.UserCode; child.Remarks += ";修改父总成图号为:" + updateInfo.PartCode; } } } lnqInfo.ProductCode = updateInfo.ProductCode; lnqInfo.ParentCode = updateInfo.ParentCode; lnqInfo.ParentName = updateInfo.ParentName; lnqInfo.PartCode = updateInfo.PartCode; lnqInfo.PartName = updateInfo.PartName; lnqInfo.Spec = updateInfo.Spec; lnqInfo.IsAdaptingPart = updateInfo.IsAdaptingPart; lnqInfo.NeedToClean = updateInfo.NeedToClean; lnqInfo.AssemblyFlag = updateInfo.AssemblyFlag; #region 2013-09-03 夏石友 lnqInfo.RasterProofing = updateInfo.RasterProofing; #endregion #region 2016-11-18 夏石友 lnqInfo.IsMaterialShortage = updateInfo.IsMaterialShortage; #endregion lnqInfo.Date = serverTime; if (updateInfo.Remarks != "" && updateInfo.Remarks != lnqInfo.Remarks) { lnqInfo.Remarks += ";" + updateInfo.Remarks; } lnqInfo.UserCode = updateInfo.UserCode; lnqInfo.Workbench = updateInfo.Workbench; lnqInfo.FittingCounts = updateInfo.FittingCounts; lnqInfo.OrderNo = updateInfo.OrderNo; dataContxt.SubmitChanges(); return(true); } catch (Exception exce) { error = exce.Message; return(false); } }