public static AscmWmsContainerDeliveryService GetInstance() { if (ascmWmsContainerDeliveryServices == null) { ascmWmsContainerDeliveryServices = new AscmWmsContainerDeliveryService(); } return(ascmWmsContainerDeliveryServices); }
public void SetPrepareQuantity(List <AscmWmsPreparationDetail> list) { if (list == null || list.Count == 0) { return; } var preparationMainIds = list.Select(P => P.wipEntityId).Distinct(); var count = preparationMainIds.Count(); string ids = string.Empty; for (int i = 0; i < count; i++) { if (!string.IsNullOrEmpty(ids)) { ids += ","; } ids += preparationMainIds.ElementAt(i); if ((i + 1) % 500 == 0 || (i + 1) == count) { if (!string.IsNullOrEmpty(ids)) { string hql = "from AscmWmsContainerDelivery where preparationMainId in(" + preparationMainIds + ")"; List <AscmWmsContainerDelivery> listContainerDelivery = AscmWmsContainerDeliveryService.GetInstance().GetList(hql); if (listContainerDelivery != null && listContainerDelivery.Count > 0) { foreach (AscmWmsPreparationDetail preparationDetail in list) { List <AscmWmsContainerDelivery> _listContainerDelivery = listContainerDelivery.FindAll(P => P.preparationMainId == preparationDetail.mainId && P.wipEntityId == preparationDetail.wipEntityId && P.materialId == preparationDetail.materialId); if (_listContainerDelivery != null && _listContainerDelivery.Count > 0) { preparationDetail.containerBindNumber = _listContainerDelivery.Sum(P => P.quantity); } } } } ids = string.Empty; } } }
//发料校验 public List <AscmWmsStoreIssueCheck> GetWmsLedStoreIssueCheck() { List <AscmWmsStoreIssueCheck> listStoreIssueCheck = new List <AscmWmsStoreIssueCheck>(); //获取当天的领料单 string whereOther = ""; whereOther = YnBaseClass2.Helper.StringHelper.SqlWhereAndAdd(whereOther, "createTime>='" + DateTime.Now.ToString("yyyy-MM-dd 00:00:00") + "'"); whereOther = YnBaseClass2.Helper.StringHelper.SqlWhereAndAdd(whereOther, "createTime<'" + DateTime.Now.AddDays(1).ToString("yyyy-MM-dd 00:00:00") + "'"); whereOther = YnBaseClass2.Helper.StringHelper.SqlWhereAndAdd(whereOther, "checkOutNo>0"); List <AscmWmsMtlRequisitionMain> listRequisitionMain = GetList(null, "", "", "", whereOther); if (listRequisitionMain == null || listRequisitionMain.Count == 0) { return(listStoreIssueCheck); } SetWipDiscreteJobs(listRequisitionMain, true, true, false, false); //获取当天的领料明细 List <AscmWmsMtlRequisitionDetail> listRequisitionDetail = AscmWmsMtlRequisitionDetailService.GetInstance().GetList(listRequisitionMain); if (listRequisitionDetail == null || listRequisitionDetail.Count == 0) { return(listStoreIssueCheck); } //获取领料单与备料单关联 List <AscmWmsMtlReqMainLink> listReqMainLink = GetReqMainLinkList(listRequisitionMain); //获取备料容器 List <AscmWmsContainerDelivery> listContainerDelivery = AscmWmsContainerDeliveryService.GetInstance().GetList(listReqMainLink.Select(P => P.reqMainLinkPK.preMainId).ToList(), ""); //按领料员分组 var result = listRequisitionMain.Where(P => !string.IsNullOrEmpty(P.workerId)).GroupBy(P => P.workerId); foreach (IGrouping <string, AscmWmsMtlRequisitionMain> ig in result) { //按领料次数分组 var result2 = ig.GroupBy(P => P.checkOutNo); foreach (IGrouping <int, AscmWmsMtlRequisitionMain> ig2 in result2) { AscmWmsStoreIssueCheck storeIssueCheck = new AscmWmsStoreIssueCheck(); storeIssueCheck.workerId = ig.Key; storeIssueCheck.checkTime = ig2.First().checkTime; storeIssueCheck.times = ig2.Key; storeIssueCheck.destination = ig2.First().jobScheduleGroupsName; listStoreIssueCheck.Add(storeIssueCheck); //获取应发容器 List <AscmWmsContainerDelivery> listContainerDeliverySub = new List <AscmWmsContainerDelivery>(); foreach (AscmWmsMtlRequisitionMain requisitionMain in ig2) { List <AscmWmsMtlRequisitionDetail> listRequisitionDetailSub = listRequisitionDetail.Where(P => P.mainId == requisitionMain.id).ToList(); storeIssueCheck.shouldMaterialNum += listRequisitionDetailSub.Sum(P => P.quantity); //考虑相同作业、相同物料、取自不同货位,所以应按物料分组 var detailResult = listRequisitionDetailSub.GroupBy(P => P.materialId); foreach (IGrouping <int, AscmWmsMtlRequisitionDetail> detailIg in detailResult) { var findContainerDelivery = listContainerDeliverySub.Where(P => P.wipEntityId == requisitionMain.wipEntityId && P.materialId == detailIg.Key && listReqMainLink.Where(T => T.reqMainLinkPK.reqMainId == requisitionMain.id).Select(T => T.reqMainLinkPK.preMainId).Contains(P.preparationMainId)); if (findContainerDelivery != null) { listContainerDeliverySub.AddRange(findContainerDelivery); } } } if (listContainerDeliverySub.Count > 0) { storeIssueCheck.shouldContainerNum = listContainerDeliverySub.Select(P => P.containerSn).Distinct().Count(); var findContainerDelivery = listContainerDeliverySub.Where(P => P.status == AscmWmsContainerDelivery.StatusDefine.outWarehouseDoor); if (findContainerDelivery.Count() > 0) { storeIssueCheck.realMaterialNum = findContainerDelivery.Sum(P => P.quantity); storeIssueCheck.realContainerNum = findContainerDelivery.Select(P => P.containerSn).Distinct().Count(); } } //设置产线 storeIssueCheck.productionLine = string.Join("、", ig2.Where(P => !string.IsNullOrEmpty(P.jobProductionLine)).Select(P => P.jobProductionLine).Distinct().OrderBy(P => P)); //设置发料状态 storeIssueCheck.status = IssueStatus.prepared; //获取校验的最后时间 string lastCheckTime = ig2.Where(P => !string.IsNullOrEmpty(P.checkTime)).Max(P => P.checkTime); if (!string.IsNullOrEmpty(lastCheckTime)) { //暂定最后校验时间与当前时间间隔1分钟以内的设置为“正在出仓” DateTime checkTime; if (DateTime.TryParse(lastCheckTime, out checkTime) && DateTime.Now.Subtract(checkTime).TotalMinutes < 1) { storeIssueCheck.status = IssueStatus.outingOfWarehouse; } } if (storeIssueCheck.waitContainerNum == 0 && storeIssueCheck.status != IssueStatus.outingOfWarehouse) { storeIssueCheck.status = IssueStatus.outedOfWarehouse; } } } return(listStoreIssueCheck); }
public static AscmWmsContainerDeliveryService GetInstance() { if (ascmWmsContainerDeliveryServices == null) ascmWmsContainerDeliveryServices = new AscmWmsContainerDeliveryService(); return ascmWmsContainerDeliveryServices; }