public void Delete(AscmWmsPreparationMain preparationMain) { try { YnDaoHelper.GetInstance().nHibernateHelper.Delete<AscmWmsPreparationMain>(preparationMain); } catch (Exception ex) { YnBaseClass2.Helper.LogHelper.GetLog().Error("删除失败(Delete AscmWmsPreparationMain)", ex); throw ex; } }
public void Update(AscmWmsPreparationMain preparationMain, bool changeWipEntityStatus = false) { try { // 2014/5/14 当备料单状态变更为“已备齐”或“备料中_已确认”时,如果作业状态处于“待领料”或“已领料”则变更为“备料中” AscmWipDiscreteJobs wipDiscreteJobs = null; AscmWipDiscreteJobsStatus jobsStatus = null; if (changeWipEntityStatus && (preparationMain.status == AscmWmsPreparationMain.StatusDefine.prepared || preparationMain.status == AscmWmsPreparationMain.StatusDefine.preparing)) { //旧的逻辑 wipDiscreteJobs = AscmWipDiscreteJobsService.GetInstance().Get(preparationMain.wipEntityId.ToString()); if (wipDiscreteJobs.ascmStatus == AscmWipDiscreteJobs.AscmStatusDefine.unPick || wipDiscreteJobs.ascmStatus == AscmWipDiscreteJobs.AscmStatusDefine.picked) wipDiscreteJobs.ascmStatus = AscmWipDiscreteJobs.AscmStatusDefine.preparing; else wipDiscreteJobs = null; //新的逻辑,保存到明细状态 jobsStatus = AscmWipDiscreteJobsService.Instance.Get(preparationMain.wipEntityId, AscmWhTeamUserService.Instance.GetLeaderId(preparationMain.createUser)); if (jobsStatus != null && jobsStatus.subStatus == AscmWipDiscreteJobs.AscmStatusDefine.unPick || jobsStatus.subStatus == AscmWipDiscreteJobs.AscmStatusDefine.picked) jobsStatus.subStatus = AscmWipDiscreteJobs.AscmStatusDefine.preparing; else jobsStatus = null; } using (ITransaction tx = YnDaoHelper.GetInstance().nHibernateHelper.GetCurrentSession().BeginTransaction()) { try { YnDaoHelper.GetInstance().nHibernateHelper.Update<AscmWmsPreparationMain>(preparationMain); if (wipDiscreteJobs != null) YnDaoHelper.GetInstance().nHibernateHelper.Update<AscmWipDiscreteJobs>(wipDiscreteJobs); if (jobsStatus != null) YnDaoHelper.GetInstance().nHibernateHelper.Update<AscmWipDiscreteJobsStatus>(jobsStatus); tx.Commit();//正确执行提交 } catch (Exception ex) { tx.Rollback();//回滚 throw ex; } } } catch (Exception ex) { YnBaseClass2.Helper.LogHelper.GetLog().Error("修改失败(Update AscmWmsPreparationMain)", ex); throw ex; } }
public void Save(AscmWmsPreparationMain preparationMain) { try { using (ITransaction tx = YnDaoHelper.GetInstance().nHibernateHelper.GetCurrentSession().BeginTransaction()) { try { YnDaoHelper.GetInstance().nHibernateHelper.Save(preparationMain); tx.Commit();//正确执行提交 } catch (Exception ex) { tx.Rollback();//回滚 throw ex; } } } catch (Exception ex) { YnBaseClass2.Helper.LogHelper.GetLog().Error("保存失败(Save AscmWmsPreparationMain)", ex); throw ex; } }
/// <summary>备料时更新备料单状态</summary> public void PrepareChangeStatus(AscmWmsPreparationMain preparationMain) { if (preparationMain.status == AscmWmsPreparationMain.StatusDefine.unPrepare || preparationMain.status == AscmWmsPreparationMain.StatusDefine.preparingUnConfirm || preparationMain.status == AscmWmsPreparationMain.StatusDefine.preparing) { List<AscmWmsPreparationDetail> listPreparationDetail = AscmWmsPreparationDetailService.GetInstance().GetBomBindNumberList(preparationMain.id); if (listPreparationDetail != null && listPreparationDetail.Exists(P => P.planQuantity > P.containerBindNumber)) preparationMain.status = AscmWmsPreparationMain.StatusDefine.preparingUnConfirm; else preparationMain.status = AscmWmsPreparationMain.StatusDefine.prepared; } }
/// <summary>PC端备料</summary> public bool DoWebPreparation(AscmWmsPreparationMain preparationMain, List<AscmWmsPreparationDetail> listPreparationDetail, ref string error, bool doMerge = false) { error = string.Empty; if (preparationMain == null || listPreparationDetail == null || listPreparationDetail.Count == 0) return false; //获取作业BOM string where = ""; var wipEntityIds = listPreparationDetail.Select(P => P.wipEntityId).Distinct(); where = YnBaseClass2.Helper.StringHelper.SqlWhereAndAdd(where, "wipEntityId in(" + string.Join(",", wipEntityIds) + ")"); var materialIds = listPreparationDetail.Select(P => P.materialId).Distinct(); where = YnBaseClass2.Helper.StringHelper.SqlWhereAndAdd(where, "inventoryItemId in(" + string.Join(",", materialIds) + ")"); string hql = "from AscmWipRequirementOperations"; if (!string.IsNullOrEmpty(where)) hql += " where " + where; List<AscmWipRequirementOperations> listBom = AscmWipRequirementOperationsService.GetInstance().GetList(hql); if (listBom == null || listBom.Count == 0) return false; //获取备料单对应的容器备料表 hql = "from AscmWmsContainerDelivery where preparationMainId=" + preparationMain.id; List<AscmWmsContainerDelivery> listContainerDelivery = AscmWmsContainerDeliveryService.GetInstance().GetList(hql); List<AscmWipRequirementOperations> listBomUpdate = new List<AscmWipRequirementOperations>(); List<AscmWmsContainerDelivery> listContainerDeliverySaveOrUpdate = new List<AscmWmsContainerDelivery>(); int containerDeliveryId = 0; foreach (AscmWmsPreparationDetail preparationDetail in listPreparationDetail) { if (preparationDetail.prepareQuantity == 0) continue; //验证作业BOM备料数量 var bom = listBom.Find(P => P.wipEntityId == preparationDetail.wipEntityId && P.inventoryItemId == preparationDetail.materialId); if (bom != null) { //作业中物料备料总数=本次作业物料备料数量+作业中物料已备数量 decimal preparationTotal = preparationDetail.prepareQuantity + bom.ascmPreparedQuantity; if (bom.requiredQuantity < preparationTotal) error = "作业【" + preparationDetail.wipEntityName + "】物料【" + preparationDetail.materialDocNumber + "】的备料数量[" + preparationTotal + "]大于需求数量[" + bom.requiredQuantity + "]"; } else error = "作业【" + preparationDetail.wipEntityName + "】物料清单中找不到物料【" + preparationDetail.materialDocNumber + "】"; if (!string.IsNullOrEmpty(error)) return false; bom.ascmPreparedQuantity += preparationDetail.prepareQuantity; //更新作业BOM备料数量 listBomUpdate.Add(bom); //容器备料 AscmWmsContainerDelivery containerDelivery = null; if (listContainerDelivery != null) containerDelivery = listContainerDelivery.Find(P => P.wipEntityId == preparationDetail.wipEntityId && P.materialId == preparationDetail.materialId); if (containerDelivery == null) { containerDelivery = new AscmWmsContainerDelivery(); containerDelivery.id = --containerDeliveryId; containerDelivery.createUser = preparationDetail.modifyUser; containerDelivery.createTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); containerDelivery.wipEntityId = preparationDetail.wipEntityId; containerDelivery.materialId = preparationDetail.materialId; containerDelivery.preparationMainId = preparationMain.id; } containerDelivery.modifyUser = preparationDetail.modifyUser; containerDelivery.modifyTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); containerDelivery.quantity += preparationDetail.prepareQuantity; listContainerDeliverySaveOrUpdate.Add(containerDelivery); } if (containerDeliveryId < 0) { string maxIdKey = YnFrame.Services.YnBillKeyService.GetInstance().GetBillKey("ascm_wms_container_delivery_id", "", "", 10, Math.Abs(containerDeliveryId)); int maxId = Convert.ToInt32(maxIdKey); listContainerDeliverySaveOrUpdate.Where(P => P.id < 0).ToList().ForEach(P => P.id = maxId++); } //作业备料时要对作业状态进行更新 List<AscmWipDiscreteJobs> listWipDiscreteJobs = null; AscmWipDiscreteJobsStatus jobsStatus = null; if (preparationMain.pattern == AscmWmsPreparationMain.PatternDefine.wipJob) { //旧的逻辑 listWipDiscreteJobs = AscmWipDiscreteJobsService.GetInstance().GetList(wipEntityIds.ToList(), "ascmStatus='" + AscmWipDiscreteJobs.AscmStatusDefine.unPrepare + "'"); if (listWipDiscreteJobs != null) listWipDiscreteJobs.ForEach(P => P.ascmStatus = AscmWipDiscreteJobs.AscmStatusDefine.preparing); //新的逻辑,保存到明细状态 jobsStatus = AscmWipDiscreteJobsService.Instance.Get(preparationMain.wipEntityId, AscmWhTeamUserService.Instance.GetLeaderId(preparationMain.createUser)); if (jobsStatus != null && jobsStatus.subStatus == AscmWipDiscreteJobs.AscmStatusDefine.unPrepare) { jobsStatus.subStatus = AscmWipDiscreteJobs.AscmStatusDefine.preparing; } else if (jobsStatus != null && jobsStatus.subStatus == AscmWipDiscreteJobs.AscmStatusDefine.unPick) { jobsStatus.subStatus = AscmWipDiscreteJobs.AscmStatusDefine.preparing; } else if (jobsStatus != null && jobsStatus.subStatus == AscmWipDiscreteJobs.AscmStatusDefine.picked) { jobsStatus.subStatus = AscmWipDiscreteJobs.AscmStatusDefine.preparing; } else { jobsStatus = null; } } //执行事务处理 ISession session = YnDaoHelper.GetInstance().nHibernateHelper.GetCurrentSession(); session.Clear(); using (ITransaction tx = session.BeginTransaction()) { try { if (doMerge) listPreparationDetail.ForEach(P => session.Merge(P)); else YnDaoHelper.GetInstance().nHibernateHelper.UpdateList(listPreparationDetail); if (listBomUpdate != null && listBomUpdate.Count > 0) YnDaoHelper.GetInstance().nHibernateHelper.UpdateList(listBomUpdate); if (listContainerDeliverySaveOrUpdate.Count > 0) YnDaoHelper.GetInstance().nHibernateHelper.SaveOrUpdateList(listContainerDeliverySaveOrUpdate); if (listWipDiscreteJobs != null && listWipDiscreteJobs.Count > 0) YnDaoHelper.GetInstance().nHibernateHelper.UpdateList(listWipDiscreteJobs); if (jobsStatus != null) YnDaoHelper.GetInstance().nHibernateHelper.Update<AscmWipDiscreteJobsStatus>(jobsStatus); tx.Commit(); } catch (Exception ex) { tx.Rollback(); error = ex.Message; } } if (!string.IsNullOrEmpty(error)) return false; //更新备料单状态 string previousStatus = preparationMain.status; PrepareChangeStatus(preparationMain); List<AscmWmsPreparationMain> listPreparationMainUpdate = new List<AscmWmsPreparationMain>(); if (previousStatus != preparationMain.status) listPreparationMainUpdate.Add(preparationMain); //其他备料单 string whereOther = ""; whereOther = YnBaseClass2.Helper.StringHelper.SqlWhereAndAdd(whereOther, "id<>" + preparationMain.id); if (preparationMain.pattern == AscmWmsPreparationMain.PatternDefine.wipJob) { whereOther = YnBaseClass2.Helper.StringHelper.SqlWhereAndAdd(whereOther, "pattern='" + AscmWmsPreparationMain.PatternDefine.wipJob + "'"); whereOther = YnBaseClass2.Helper.StringHelper.SqlWhereAndAdd(whereOther, "wipEntityId=" + preparationMain.wipEntityId); } else if (preparationMain.pattern == AscmWmsPreparationMain.PatternDefine.wipRequire) { whereOther = YnBaseClass2.Helper.StringHelper.SqlWhereAndAdd(whereOther, "id in(select mainId from AscmWmsPreparationDetail where wipEntityId in(" + string.Join(",", wipEntityIds) + "))"); } hql = "from AscmWmsPreparationMain where " + whereOther; List<AscmWmsPreparationMain> listPreparationMain = GetList(hql); if (listPreparationMain != null && listPreparationMain.Count > 0) { foreach (AscmWmsPreparationMain _preparationMain in listPreparationMain) { //只有当其它备料单状态更新为“已备齐”时,才更新 PrepareChangeStatus(_preparationMain); if (_preparationMain.status == AscmWmsPreparationMain.StatusDefine.prepared) listPreparationMainUpdate.Add(_preparationMain); } } if (listPreparationMainUpdate.Count > 0) Update(listPreparationMainUpdate, preparationMain.pattern == AscmWmsPreparationMain.PatternDefine.wipJob); return true; }
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { List <AscmWmsPreparationMain> listAscmWmsPreparationMain = null; List <AscmWmsPreparationDetail> listAscmWmsPreparationDetail = null; List <AscmWmsPreparationDetail> listDetail = new List <AscmWmsPreparationDetail>();; AscmWmsPreparationMain ascmWmsPreparationMain = null; List <AscmWipDiscreteJobs> listAscmWipDiscreteJobs = null; string wipSupplyType = ""; string billNoStart = "", billNoEnd = ""; string materialDocNumberStart = "", materialDocNumberEnd = ""; string warehouseIdStart = "", warehouseIdEnd = ""; string scheduledStartDateStart = "", scheduledStartDateEnd = ""; string jobScheduleGroupsStart = "", jobScheduleGroupsEnd = ""; string jobProductionLineStart = "", jobProductionLineEnd = ""; if (!string.IsNullOrEmpty(Request.QueryString["docNumber"])) { string docNumber = Request.QueryString["docNumber"]; if (!string.IsNullOrEmpty(docNumber)) { listAscmWmsPreparationMain = AscmWmsPreparationMainService.GetInstance().GetList(" from AscmWmsPreparationMain where docNumber='" + docNumber + "'"); if (listAscmWmsPreparationMain != null && listAscmWmsPreparationMain.Count() > 0) { YnBaseDal.YnPage ynPage = new YnBaseDal.YnPage(); ynPage.SetPageSize(500); //pageRows; ynPage.SetCurrentPage(1); //pageNumber; ascmWmsPreparationMain = listAscmWmsPreparationMain[0]; //listAscmWmsPreparationDetail = AscmWmsPreparationDetailService.GetInstance().GetSumList(null,"", "", ascmWmsPreparationMain.id, "", ""); //listAscmWmsPreparationDetail = AscmWmsPreparationDetailService.GetInstance().GetList(ynPage,"","",ascmWmsPreparationMain.id,"",""); listAscmWmsPreparationDetail = AscmWmsPreparationDetailService.GetInstance().GetList(null, "", "", ascmWmsPreparationMain.id, "", ""); AscmWmsPreparationDetailService.GetInstance().SetWipDiscreteJobs(listAscmWmsPreparationDetail); List <AscmWarelocation> listAscmWarelocation = AscmWarelocationService.GetInstance().GetList("from AscmWarelocation"); if (listAscmWmsPreparationDetail != null && listAscmWmsPreparationDetail.Count() > 0) { foreach (AscmWmsPreparationDetail ascmWmsPreparationDetail in listAscmWmsPreparationDetail) { var find = listAscmWarelocation.Find(item => item.id == ascmWmsPreparationDetail.warelocationId); if (find != null) { ascmWmsPreparationDetail.locationDocNumber = find.docNumber; } } billNoStart = listAscmWmsPreparationDetail.OrderBy(item => item.wipEntityName).First().wipEntityName; billNoEnd = listAscmWmsPreparationDetail.OrderBy(item => item.wipEntityName).Last().wipEntityName; materialDocNumberStart = listAscmWmsPreparationDetail.OrderBy(item => item.materialDocNumber).First().materialDocNumber; materialDocNumberEnd = listAscmWmsPreparationDetail.OrderBy(item => item.materialDocNumber).Last().materialDocNumber; warehouseIdStart = listAscmWmsPreparationDetail.OrderBy(item => item.warehouseId).First().warehouseId; warehouseIdEnd = listAscmWmsPreparationDetail.OrderBy(item => item.warehouseId).Last().warehouseId; //wipSupplyType = listAscmWmsPreparationDetail[0].ascmMaterialItem.wipSupplyTypeCn; jobScheduleGroupsStart = listAscmWmsPreparationDetail.OrderBy(item => item.jobScheduleGroupsName).First().jobScheduleGroupsName; jobScheduleGroupsEnd = listAscmWmsPreparationDetail.OrderBy(item => item.jobScheduleGroupsName).Last().jobScheduleGroupsName; jobProductionLineStart = listAscmWmsPreparationDetail.OrderBy(item => item.jobProductionLine).First().jobProductionLine; jobProductionLineEnd = listAscmWmsPreparationDetail.OrderBy(item => item.jobProductionLine).Last().jobProductionLine; //string billIds = ""; var vbillIds = listAscmWmsPreparationDetail.Select(item => item.wipEntityId).Distinct(); if (vbillIds != null) { string billIds = string.Empty; foreach (int billId in vbillIds) { if (!string.IsNullOrEmpty(billIds)) { billIds += ","; } billIds += "'" + billId + "'"; } if (!string.IsNullOrEmpty(billIds)) { string whereOther = " id in (" + billIds + ")"; listAscmWipDiscreteJobs = AscmWipDiscreteJobsService.GetInstance().GetList(null, "", "", "", whereOther); scheduledStartDateStart = listAscmWipDiscreteJobs.OrderBy(item => item._scheduledStartDate).First()._scheduledStartDate; scheduledStartDateEnd = listAscmWipDiscreteJobs.OrderBy(item => item._scheduledStartDate).Last()._scheduledStartDate; } } #region 合计 同种物料在一个货位,进行数量合计,同种物料在不同货位,进行分开显示 var groupByMaterial = listAscmWmsPreparationDetail.GroupBy(p => p.materialId); foreach (IGrouping <int, AscmWmsPreparationDetail> ig in groupByMaterial) { //判断此物料的有多少条数据 List <AscmWmsPreparationDetail> list = listAscmWmsPreparationDetail.Where(item => item.materialId == ig.Key).ToList(); if (list != null && list.Count() > 1) { var groupByWarelocation = list.GroupBy(p => p.warelocationId); foreach (IGrouping <int, AscmWmsPreparationDetail> igrouping in groupByWarelocation) { AscmWmsPreparationDetail ascmWmsPreparationDetail_ByWarelocation = igrouping.First(); AscmWmsPreparationDetail ascmWmsPreparationDetail = new AscmWmsPreparationDetail(); ascmWmsPreparationDetail.materialId = igrouping.Key; //ascmWmsPreparationDetail.ascmMaterialItem = ascmWmsPreparationDetail_ByWarelocation.ascmMaterialItem; ascmWmsPreparationDetail.warehouseId = ascmWmsPreparationDetail_ByWarelocation.warehouseId; ascmWmsPreparationDetail.locationDocNumber = ascmWmsPreparationDetail_ByWarelocation.locationDocNumber; ascmWmsPreparationDetail.wipSupplyType = ascmWmsPreparationDetail_ByWarelocation.wipSupplyType; ascmWmsPreparationDetail.planQuantity = igrouping.Sum(P => P.planQuantity); //ascmWmsPreparationDetail.quantity = igrouping.Sum(P => P.quantity); ascmWmsPreparationDetail.issueQuantity = igrouping.Sum(P => P.issueQuantity); ascmWmsPreparationDetail.containerBindNumber = igrouping.Sum(P => P.containerBindNumber); listDetail.Add(ascmWmsPreparationDetail); } } else { AscmWmsPreparationDetail _ascmWmsPreparationDetail = ig.First(); AscmWmsPreparationDetail ascmWmsPreparationDetail = new AscmWmsPreparationDetail(); ascmWmsPreparationDetail.materialId = ig.Key; //ascmWmsPreparationDetail.ascmMaterialItem = _ascmWmsPreparationDetail.ascmMaterialItem; ascmWmsPreparationDetail.warehouseId = _ascmWmsPreparationDetail.warehouseId; ascmWmsPreparationDetail.locationDocNumber = _ascmWmsPreparationDetail.locationDocNumber; ascmWmsPreparationDetail.wipSupplyType = _ascmWmsPreparationDetail.wipSupplyType; ascmWmsPreparationDetail.planQuantity = ig.Sum(P => P.planQuantity); //ascmWmsPreparationDetail.quantity = ig.Sum(P => P.quantity); ascmWmsPreparationDetail.issueQuantity = ig.Sum(P => P.issueQuantity); ascmWmsPreparationDetail.containerBindNumber = ig.Sum(P => P.containerBindNumber); listDetail.Add(ascmWmsPreparationDetail); } } #endregion } #region Code128 System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(); MideaAscm.Code.BarCode128 barCode128 = new Code.BarCode128(); barCode128.TitleFont = new System.Drawing.Font("宋体", 10); barCode128.HeightImage = 50; System.Drawing.Bitmap bitmap = barCode128.GetCodeImage(docNumber, docNumber, Code.BarCode128.Encode.Code128B); bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Gif); if (listDetail != null && listDetail.Count() > 0) { listDetail = listDetail.OrderBy(item => item.materialDocNumber).ToList(); listDetail[0].barcodeShow = memoryStream.ToArray(); } bitmap.Dispose(); #endregion #region 条码 Code39 //System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(); //YnBaseClass2.Helper.BarCode39 barCode39 = new YnBaseClass2.Helper.BarCode39(); //barCode39.WidthCU = 10; //barCode39.WidthXI = 3; //System.Drawing.Bitmap bitmap = barCode39.CreateBarCode(docNumber, docNumber, 0, 0); //bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Gif); //bitmap.Dispose(); //if (listDetail != null && listDetail.Count()>0) // listDetail[0].barcodeShow = memoryStream.ToArray(); #endregion } } } ReportViewer1.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local; ReportViewer1.LocalReport.ReportPath = Server.MapPath("WmsPreparationReport.rdlc"); ReportDataSource rds1 = new ReportDataSource(); rds1.Name = "DataSet1"; rds1.Value = listDetail; ReportViewer1.LocalReport.DataSources.Clear();//好像不clear也可以 ReportViewer1.LocalReport.DataSources.Add(rds1); string title = "中央空调顺德工厂需求备料单"; //string secondTitle = "车间任务物料需求报表"; string userName = string.Empty; if (User.Identity.IsAuthenticated) { userName = User.Identity.Name; } ReportParameter[] reportParameters = new ReportParameter[] { new ReportParameter("ReportParameter_Title", title), //new ReportParameter("ReportParameter_secondTitle", secondTitle), new ReportParameter("ReportParameter_ReportTime", "打印时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), new ReportParameter("ReportParameter_wipSupplyType", "供应类型:" + wipSupplyType), new ReportParameter("ReportParameter_scheduledStartDate", "计划时间从:" + scheduledStartDateStart + " 至 " + scheduledStartDateEnd), new ReportParameter("ReportParameter_BillNo", "任务从:" + billNoStart + " 至 " + billNoEnd), new ReportParameter("ReportParameter_materialDocNumber", "组件从:" + materialDocNumberStart + " 至 " + materialDocNumberEnd), new ReportParameter("ReportParameter_warehouseId", "子库从:" + warehouseIdStart + " 至 " + warehouseIdEnd), new ReportParameter("ReportParameter_jobScheduleGroups", "计划组从:" + jobScheduleGroupsStart + " 至 " + jobScheduleGroupsEnd), new ReportParameter("ReportParameter_jobProductionLine", "生产线从:" + jobProductionLineStart + " 至 " + jobProductionLineEnd), new ReportParameter("ReportParameter_Printer", "打印人:" + userName), }; ReportViewer1.LocalReport.SetParameters(reportParameters); ReportViewer1.LocalReport.Refresh(); } }