Exemplo n.º 1
0
        public bool Scan(long waveId, VScanBinRequest detail)
        {
            var pick = wmsoutbound.TOutPicks.Where(x => x.WaveId == waveId).FirstOrDefault();

            if (pick == null)
            {
                throw new Exception("pick is not exist.");
            }

            //获取SKU信息
            var prodSku = skuService.GetSkuByBarcode(detail.Barcode);

            if (prodSku == null)
            {
                throw new Exception("barcode is not exist.");
            }

            //新增拣货明细
            var pickDetail = wmsoutbound.TOutPickDs.Where(x => x.HId == pick.Id && x.Barcode == detail.Barcode).FirstOrDefault();

            if (pickDetail == null)
            {
                pickDetail = new TOutPickD
                {
                    HId = pick.Id,
                };
            }

            if (pick.FirstScanAt == null)
            {
                pick.FirstScanAt = DateTime.UtcNow;
            }

            pick.LastScanAt = DateTime.UtcNow;

            pick.Qty += 1;

            pick.Status = Enum.GetName(typeof(EnumOperateStatus), EnumOperateStatus.Doing);

            //获取货区货位信息
            var zoneBin = binService.GetBinByCode(pick.WhId, detail.BinCode);

            pickDetail.ActBinId         = zoneBin.Id;
            pickDetail.ActBinCode       = detail.BinCode;
            pickDetail.Qty              = 1;
            pickDetail.ActZoneCode      = zoneBin.ZoneCode;
            pickDetail.ActZoneId        = zoneBin.ZoneId;
            pickDetail.IsPicked         = true;
            pickDetail.LastModifiedBy   = DefaultUser.UserName;
            pickDetail.LastModifiedTime = DateTime.UtcNow;

            if (pickDetail.Id == 0)
            {
                wmsoutbound.TOutPickDs.Add(pickDetail);
            }

            return(wmsoutbound.SaveChanges() > 0);
        }
Exemplo n.º 2
0
 public VPickScanResponse Scan(long id, string TypeCode, VScanBinRequest detail)
 {
     if (TypeCode == "Pick")
     {
         var result = pickService.Scan(id, detail);
         return(result);
     }
     else
     {
         var result = waveService.Scan(id, detail);
         return(new VPickScanResponse());
     }
 }
Exemplo n.º 3
0
        public VPickScanResponse Scan(long pickId, VScanBinRequest detail)
        {
            VPickScanResponse response = new VPickScanResponse
            {
                AllFinished = false,
                BinFinished = false,
                Message     = ""
            };

            var pick = wmsoutbound.TOutPicks.Where(x => x.Id == pickId).FirstOrDefault();

            if (pick == null)
            {
                throw new Exception("pick is not exist.");
            }

            //获取SKU信息
            var prodSku = skuService.GetSkuByBarcode(detail.Barcode);

            if (prodSku == null)
            {
                throw new Exception("barcode is not exist.");
            }

            //获取货区货位信息
            var zoneBin = binService.GetBinByCode(pick.WhId, detail.BinCode);

            if (zoneBin == null)
            {
                throw new Exception("zoneBin is not exist.");
            }

            //更新拣货明细
            var pickDetail = wmsoutbound.TOutPickDs.Where(x => x.HId == pickId && x.Barcode == detail.Barcode && !x.IsPicked).FirstOrDefault();

            if (pickDetail == null)
            {
                throw new Exception("pickDetail is not exist.");
            }

            //计算每个条码的需要扫描的总数量和货位数量
            var skuAllQty  = wmsoutbound.TOutPickDs.Where(x => x.HId == pick.Id && x.Barcode == detail.Barcode).Count();
            var pickAllQty = wmsoutbound.TOutPickDs.Where(x => x.HId == pick.Id && x.Barcode == detail.Barcode && x.IsPicked).Count();

            //计算每个条码的当前货位需要扫描的数量
            var skuBinQty = wmsoutbound.TOutPickDs.Where(x => x.HId == pickId && x.Barcode == detail.Barcode && x.BinCode == detail.AdvBinCode).Count();

            //计算每个条码的当前货位已扫描的数量
            var pickBinQty = wmsoutbound.TOutPickDs.Where(x => x.HId == pickId && x.Barcode == detail.Barcode &&
                                                          x.BinCode == detail.AdvBinCode && x.IsPicked).Count();

            //计算当前货位是否已经都扫描完毕了,如果是的话,需要跳转到下一个货位的
            if (skuAllQty == pickAllQty)
            {
                response.AllFinished = true;
                response.Message     = string.Format("{0}/{1}/{2}", skuBinQty, skuBinQty, skuAllQty);
            }
            else if (pickBinQty + 1 <= skuBinQty)
            {
                response.BinFinished = true;
                UpdatePickDetail(zoneBin, pick, pickDetail);
                response.Message = string.Format("{0}/{1}/{2}", pickBinQty + 1, skuBinQty, skuAllQty);
            }

            return(response);
        }
Exemplo n.º 4
0
        public JsonResult Scan([FromUri] long id, [FromBody] VScanBinRequest detail)
        {
            var result = pickService.Scan(id, detail);

            return(new JsonResult(result));
        }