public JsonResult Scan([FromUri] long id, [FromBody] VRcvScan vRcv) { //新增扫描记录,同时增加收货明细 try { var result = rcvService.CreateRcv(id, vRcv); return(new JsonResult(new VScanResponse { IsAllFinished = result.Item1, IsFinished = result.Item2, Message = result.Item3 })); } catch (Exception ex) { var r = new ErrorResponse { ApiPath = "", Message = ex.Message }; return(new JsonResult(r)); } }
//创建收货记录 public Tuple <bool, bool, string> CreateRcv(long id, VRcvScan rcv) { //由于有超收的情况存在,无法判断是否全部收货完毕 if (string.IsNullOrEmpty(rcv.Barcode)) { return(new Tuple <bool, bool, string>(false, false, "barcode not allow null.")); } //从product获取skuid的信息 var prodSku = skuService.GetSkuByBarcode(rcv.Barcode); if (prodSku == null) { throw new Exception("barcode is not exists."); } var sku = prodSku.Code; var skuid = prodSku.Id; var skuTotalQty = 0; //查询入库单 var inbound = wmsinbound.TInInbounds.Where(x => x.Id == id).FirstOrDefault(); //生成收货记录 var inboundRcv = new TInInboundRcv { HId = inbound.Id, Carton = rcv.Carton, Barcode = rcv.Barcode, QcCode = rcv.QcCode }; if (inbound.TransCode == "ReturnIn") { //对preQcDetail进行匹配 var qcIds = wmsinbound.TInPreQcs .Where(x => x.InBatchCode == inbound.Code) .Select(x => new { x.Id, x.Code }) .ToList(); var qcDetail = wmsinbound.TInPreQcDs .Where(x => x.Barcode == rcv.Barcode && x.QcCode == x.QcCode && qcIds.Any(y => y.Id == x.HId)) .FirstOrDefault(); var qc = qcIds.Where(x => x.Id == qcDetail.HId).FirstOrDefault(); inboundRcv.NoticeId = qcDetail.HId; inboundRcv.NoticeDId = qcDetail.Id; inboundRcv.NoticeCode = qc.Code; } var asnId = inbound.AsnId; var totalQty = inbound.Qty; TInInboundD inboundDetail = null; if (string.IsNullOrEmpty(rcv.Carton)) { inboundDetail = wmsinbound.TInInboundDs.Where(x => x.HId == id && x.Barcode == rcv.Barcode).FirstOrDefault(); } else { inboundDetail = wmsinbound.TInInboundDs.Where(x => x.HId == id && x.Carton == rcv.Carton && x.Barcode == rcv.Barcode).FirstOrDefault(); } if (asnId > 0) { //查询到货明细 var asnDetail = wmsinbound.TInAsnDs.Where(x => x.HId == asnId && x.Barcode == rcv.Barcode) .FirstOrDefault(); if (asnDetail == null) { throw new Exception("barcode" + rcv.Barcode + "not exists."); } skuTotalQty = asnDetail.Qty; // 核对扫描内容是否完整 DoCheckList(inbound.WhId, inbound.CustId, inbound.BrandId, asnDetail, prodSku); //校验数量 if (inboundDetail != null) { //超收校验 skuTotalQty = DoCheckQty(asnDetail.Qty, inbound.WhId, inbound.CustId, inbound.BrandId, inboundDetail.Qty); totalQty = totalQty - asnDetail.Qty + skuTotalQty; } } else { //盲收校验 DoCheckBlind(inbound.WhId, inbound.CustId, inbound.BrandId); } //新增操作 inbound.RStatus = Enum.GetName(typeof(EnumOperateStatus), EnumOperateStatus.Doing); var r = SaveSku(prodSku.Id, prodSku.Code, skuTotalQty, inbound.Id, inboundDetail, inboundRcv); return(new Tuple <bool, bool, string>(false, r.Item1, r.Item2)); }