public AscmWmsContainerDelivery(AscmWmsContainerDelivery containerDelivery, string compounder, string preparationStatus) { this.id = containerDelivery.id; this.organizationId = containerDelivery.organizationId; this.createUser = containerDelivery.createUser; this.createTime = containerDelivery.createTime; this.modifyUser = containerDelivery.modifyUser; this.modifyTime = containerDelivery.modifyTime; this.containerSn = containerDelivery.containerSn; this.preparationMainId = containerDelivery.preparationMainId; this.materialId = containerDelivery.materialId; this.quantity = containerDelivery.quantity; this.status = containerDelivery.status; this.wipEntityId = containerDelivery.wipEntityId; this.compounder = compounder; this.preparationStatus = preparationStatus; }
public AscmWmsContainerDelivery Add(string containerSn, int preparationMainId, int materialId, int warelocationId, decimal quantity) { try { AscmWmsContainerDelivery ascmWmsContainerDelivery = new AscmWmsContainerDelivery(); ascmWmsContainerDelivery.organizationId = 775; ascmWmsContainerDelivery.createUser = ""; ascmWmsContainerDelivery.createTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm"); ascmWmsContainerDelivery.modifyUser = ""; ascmWmsContainerDelivery.modifyTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm"); ascmWmsContainerDelivery.containerSn = containerSn; ascmWmsContainerDelivery.preparationMainId = preparationMainId; ascmWmsContainerDelivery.materialId = materialId; ascmWmsContainerDelivery.quantity = quantity; int maxId = YnDaoHelper.GetInstance().nHibernateHelper.GetMaxId("select max(id) from AscmWmsContainerDelivery"); maxId++; ascmWmsContainerDelivery.id = maxId; using (ITransaction tx = YnDaoHelper.GetInstance().nHibernateHelper.GetCurrentSession().BeginTransaction()) { try { YnDaoHelper.GetInstance().nHibernateHelper.Save(ascmWmsContainerDelivery); tx.Commit();//正确执行提交 } catch (Exception ex) { tx.Rollback();//回滚 throw ex; } } return ascmWmsContainerDelivery; } catch (Exception ex) { YnBaseClass2.Helper.LogHelper.GetLog().Error("保存失败(Save AscmWmsContainerDelivery)", ex); throw ex; } }
/// <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; }
public void Update(AscmWmsContainerDelivery ascmWmsContainerDelivery) { try { using (ITransaction tx = YnDaoHelper.GetInstance().nHibernateHelper.GetCurrentSession().BeginTransaction()) { try { YnDaoHelper.GetInstance().nHibernateHelper.Update<AscmWmsContainerDelivery>(ascmWmsContainerDelivery); tx.Commit();//正确执行提交 } catch (Exception ex) { tx.Rollback();//回滚 YnBaseClass2.Helper.LogHelper.GetLog().Error("修改失败(Update AscmWmsContainerDelivery)", ex); throw ex; } } } catch (Exception ex) { YnBaseClass2.Helper.LogHelper.GetLog().Error("修改失败(Save AscmWmsContainerDelivery)", ex); throw ex; } }
public void Delete(AscmWmsContainerDelivery ascmWmsContainerDelivery) { try { YnDaoHelper.GetInstance().nHibernateHelper.Delete<AscmWmsContainerDelivery>(ascmWmsContainerDelivery); } catch (Exception ex) { YnBaseClass2.Helper.LogHelper.GetLog().Error("删除失败(Delete AscmWmsContainerDelivery)", ex); throw ex; } }