예제 #1
0
        public JsonResult Scan([FromUri] long id, [FromBody] TInPutawayD d)
        {
            var result = putAwayService.Scan(id, d);

            return(new JsonResult(new VScanResponse {
                IsAllFinished = result.Item1,
                IsFinished = result.Item1,
                Message = result.Item2
            }));
        }
예제 #2
0
        public Tuple<bool, string> Scan(long id, TInPutawayD detail)
        {
            //校验商品
            var prodSku = skuService.GetSkuByBarcode(detail.Barcode);
            if (prodSku == null)
                return new Tuple<bool, string>(false, "barcode is not exist.");

            var pt = wmsinbound.TInPutaways.Where(x => x.Id == id).FirstOrDefault();
            //校验货位
            var bin = binService.GetBinByCode(pt.WhId, detail.BinCode);
            if (bin == null)
                return new Tuple<bool, string>(false, "binCode is not exist.");

            var zone = zoneService.GetZoneByCode(pt.WhId, bin.ZoneCode);

            //校验数量
            var skuQty = wmsinbound.TInPutawayDs.Where(x => x.HId == pt.Id && x.SkuId == prodSku.Id).Sum(x => x.Qty);

            var inboundSkuQty = wmsinbound.TInInboundDs.Where(x => x.HId == pt.InboundId && x.SkuId == prodSku.Id)
            .Select(x => x.Qty).FirstOrDefault();

            var inbound = wmsinbound.TInInbounds.Where(x => x.Id == pt.InboundId).FirstOrDefault();

            if (skuQty + 1 <= inboundSkuQty)
            {
                if (pt.FirstScanAt == null)
                    pt.FirstScanAt = DateTime.UtcNow;
                pt.LastScanAt = DateTime.UtcNow;

                pt.Qty += skuQty + 1;

                pt.Status = Enum.GetName(typeof(EnumOperateStatus), EnumOperateStatus.Doing);
                detail.SkuId = prodSku.Id;
                detail.ZoneId = zone.Id;
                detail.ZoneCode = zone.Code;
                detail.BinId = bin.Id;
                detail.BinCode = bin.Code;
                detail.HId = id;
                detail.CreatedBy = DefaultUser.UserName;
                detail.CreatedTime = DateTime.UtcNow;
                detail.Qty = 1;

                inbound.PStatus = pt.Status;

                wmsinbound.TInPutawayDs.Add(detail);
                var r = wmsinbound.SaveChanges() > 0;
                return new Tuple<bool, string>(false, string.Format("{0}/{1}", skuQty + 1, inboundSkuQty));
            }
            else
            {
                return new Tuple<bool, string>(true, string.Format("{0}/{1}", inboundSkuQty, inboundSkuQty));
            }
        }