public async Task <RouteData <Wms_StockOutMaterialDetailDto> > SearchMaterial(long storeId, long stockOutId, string materialNo) { Wms_material material = await _client.Queryable <Wms_material>().FirstAsync(x => x.MaterialNo == materialNo); if (material == null) { return(RouteData <Wms_StockOutMaterialDetailDto> .From(PubMessages.E1005_MATERIALNO_NOTFOUND)); } Wms_stockout stockout = await _client.Queryable <Wms_stockout>().FirstAsync(x => x.StockOutId == stockOutId); if (stockout == null) { return(RouteData <Wms_StockOutMaterialDetailDto> .From(PubMessages.E2115_STOCKOUT_HASNOT_MATERIAL)); } Wms_stockoutdetail detail = await _client.Queryable <Wms_stockoutdetail>().FirstAsync(x => x.StockOutId == stockOutId && x.MaterialId == material.MaterialId); if (detail == null) { return(RouteData <Wms_StockOutMaterialDetailDto> .From(PubMessages.E2115_STOCKOUT_HASNOT_MATERIAL)); } Wms_StockOutMaterialDetailDto detailDto = new Wms_StockOutMaterialDetailDto() { StockOutId = detail.StockOutId.ToString(), StockOutDetailId = detail.StockOutDetailId.ToString(), MaterialId = material.MaterialId.ToString(), MaterialNo = material.MaterialNo, MaterialName = material.MaterialName, OrderNo = stockout.OrderNo, PlanOutQty = (int)detail.PlanOutQty, ActOutQty = (int)detail.ActOutQty, Qty = 0 }; return(RouteData <Wms_StockOutMaterialDetailDto> .From(detailDto)); }
public async Task <RouteData <Wms_StockOutDto> > Get(long storeId, string no) { Wms_stockout model = await _client.Queryable <Wms_stockout>().FirstAsync(c => c.StockOutNo == no && c.WarehouseId == storeId && c.IsDel == 1); if (model == null) { RouteData <Wms_stockin> .From(PubMessages.E2013_STOCKIN_NOTFOUND); } Wms_StockOutDto dto = JsonConvert.DeserializeObject <Wms_StockOutDto>(JsonConvert.SerializeObject(model)); List <Wms_StockMaterialDetailDto> details = await _client.Queryable <Wms_stockoutdetail_box, Wms_inventorybox, Wms_stockoutdetail, Wms_material> ((sidb, ib, sid, m) => new object[] { JoinType.Left, sidb.InventoryBoxId == ib.InventoryBoxId, JoinType.Left, sidb.StockOutDetailId == sid.StockOutDetailId, JoinType.Left, sid.MaterialId == m.MaterialId, }) .Where((sidb, ib, sid, m) => sid.StockOutId == model.StockOutId) .Select((sidb, ib, sid, m) => new Wms_StockMaterialDetailDto() { InventoryBoxNo = ib.InventoryBoxNo, StockId = sid.StockOutId.ToString(), StockDetailId = sid.StockOutDetailId.ToString(), StockInUniqueIndex = sid.UniqueIndex, MaterialId = m.MaterialId.ToString(), MaterialNo = m.MaterialNo, MaterialName = m.MaterialName, PlanQty = sidb.PlanQty * -1, ActQty = sidb.Qty * -1, Qty = 0 }) .ToListAsync(); dto.Details = details.ToArray(); return(RouteData <Wms_StockOutDto> .From(dto)); }
public async Task <string> WorkList(long storeId, long pid) { Wms_stockout stockout = await _client.Queryable <Wms_stockout>().FirstAsync(x => x.StockOutId == pid); if (stockout == null) { return(""); } IWMSOperationApiAccessor wmsAccessor = WMSApiManager.GetOperationApiAccessor(storeId.ToString(), _client, this.UserDto); Wms_StockOutWorkDetailDto[] result = await wmsAccessor.GetStockOutCurrentPlan(pid); return(Bootstrap.GridData(result, result.Length).JilToJson()); }
public IActionResult Add(string id) { var model = new Wms_stockout(); if (id.IsEmpty()) { return(View(model)); } else { model = _stockoutServices.QueryableToEntity(c => c.StockOutId == SqlFunc.ToInt64(id) && c.IsDel == 1); return(View(model)); } }
public IActionResult Add(long id, long storeId) { var model = new Wms_stockout(); if (id == 0) { model.WarehouseId = storeId; return(View(model)); } else { model = _stockoutServices.QueryableToEntity(c => c.StockOutId == SqlFunc.ToInt64(id) && c.IsDel == 1); return(View(model)); } }
public void MaterialQRCode(long storeId, long detailboxId) { Wms_stockoutdetail_box detailBox = _client.Queryable <Wms_stockoutdetail_box>() .First(c => c.DetailBoxId == detailboxId); Wms_stockoutdetail detail = _client.Queryable <Wms_stockoutdetail>() .First(c => c.StockOutDetailId == detailBox.StockOutDetailId); Wms_stockout stockout = _client.Queryable <Wms_stockout>() .First(c => c.StockOutId == detail.StockOutId); string dateStr = DateTime.Now.ToString("yyyyMMddhhmmssfff"); string strQR = $"{detail.UniqueIndex}@@{detailBox.StockInUniqueIndex}@@{dateStr}@@{detailBox.PlanQty} "; QRCodeGenerator qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.CreateQrCode( strQR, QRCodeGenerator.ECCLevel.Q); QRCode qrCode = new QRCode(qrCodeData); Bitmap qrCodeImage = qrCode.GetGraphic(20); qrCodeImage.Save(this.Response.Body, ImageFormat.Png); }
public IActionResult AddOrUpdate([FromForm] Wms_stockout model, [FromForm] string id) { var validator = new StockOutFluent(); var results = validator.Validate(model); var success = results.IsValid; if (!success) { string msg = results.Errors.Aggregate("", (current, item) => (current + item.ErrorMessage + "</br>")); return(BootJsonH((PubEnum.Failed.ToInt32(), msg))); } if (id.IsEmptyZero()) { if (!model.OrderNo.IsEmpty()) { if (_stockoutServices.IsAny(c => c.OrderNo == model.OrderNo)) { return(BootJsonH((false, PubConst.StockOut1))); } } model.StockOutNo = _serialnumServices.GetSerialnum(UserDtoCache.UserId, "Wms_stockout"); model.StockOutId = PubId.SnowflakeId; model.StockOutStatus = StockOutStatus.initial.ToByte(); model.CreateBy = UserDtoCache.UserId; bool flag = _stockoutServices.Insert(model); return(BootJsonH(flag ? (flag, PubConst.Add1) : (flag, PubConst.Add2))); } else { model.StockOutId = id.ToInt64(); model.ModifiedBy = UserDtoCache.UserId; model.ModifiedDate = DateTimeExt.DateTime; var flag = _stockoutServices.Update(model); return(BootJsonH(flag ? (flag, PubConst.Update1) : (flag, PubConst.Update2))); } }
public async Task <RouteData> StockOutReport(long stockOutId, [FromBody] OutsideStockOutReportDto result) { try { _logger.LogInformation($"[出库任务状态变化通知]收到通知,StockOutId={stockOutId},data={JsonConvert.SerializeObject(result)}"); result.StockOutId = stockOutId; Wms_stockout stockOut = await _client.Queryable <Wms_stockout>() .FirstAsync(x => x.StockOutId == result.StockOutId); if (stockOut == null) { _logger.LogError($"[出库任务状态变化通知]E2113-没有找到出库单,StockOutId={stockOutId}"); return(YL.Core.Dto.RouteData.From(PubMessages.E2113_STOCKOUT_NOTFOUND)); } if (stockOut.StockOutStatus == StockOutStatus.task_finish.ToInt32()) { _logger.LogError($"[出库任务状态变化通知]E2114-出库单状态已标记为完成,本次操作中断,StockOutId={stockOutId}, StockOutNo={stockOut.StockOutNo}"); //return YL.Core.Dto.RouteData.From(PubMessages.E2114_STOCKOUT_ALLOW_FINISHED); return(new RouteData()); } Wms_mestask mesTask = await _client.Queryable <Wms_mestask>() .FirstAsync(x => x.MesTaskId == stockOut.MesTaskId); if (mesTask == null) { _logger.LogError($"[出库任务状态变化通知]E3000-没有找到相应的Mes任务,StockOutId={stockOutId}, StockOutNo={stockOut.StockOutNo}, MesTaskId={stockOut.MesTaskId}"); return(YL.Core.Dto.RouteData.From(PubMessages.E3000_MES_STOCKINTASK_NOTFOUND)); } Wms_stockoutdetail[] details = _client.Queryable <Wms_stockoutdetail>() .Where(x => x.StockOutId == result.StockOutId).ToArray(); _client.BeginTran(); foreach (OutsideStockOutReportDetail detail in result.Details) { Wms_stockoutdetail localDetail = details.FirstOrDefault( x => x.UniqueIndex == detail.UniqueIndex); if (localDetail == null) { _client.RollbackTran(); _logger.LogError($"[出库任务状态变化通知]E2115-没有找到相应的物料,StockOutId={stockOutId}, StockOutNo={stockOut.StockOutNo} ,UniqueOutdex ={ detail.UniqueIndex}"); return(YL.Core.Dto.RouteData.From(PubMessages.E2115_STOCKOUT_HASNOT_MATERIAL, $"MaterialId={detail.MaterialId}")); } localDetail.PlanOutQty = detail.PlanOutQty; localDetail.ActOutQty = detail.ActOutQty; localDetail.Status = detail.Status.ToInt32(); localDetail.ModifiedBy = PubConst.InterfaceUserId; localDetail.ModifiedUser = detail.ModifiedBy; localDetail.ModifiedDate = Convert.ToDateTime(detail.ModifiedDate); localDetail.Remark = detail.Remark; } if (_client.Updateable(details).ExecuteCommand() == 0) { _client.RollbackTran(); _logger.LogError($"[出库任务状态变化通知]E0002-任务明细更新失败,StockOutId={stockOutId}, StockOutNo={stockOut.StockOutNo}"); return(YL.Core.Dto.RouteData.From(PubMessages.E0002_UPDATE_COUNT_FAIL)); } stockOut.StockOutStatus = result.StockOutStatus.ToInt32(); stockOut.ModifiedBy = PubConst.InterfaceUserId; stockOut.ModifiedUser = PubConst.InterfaceUserName; if (_client.Updateable(stockOut).ExecuteCommand() == 0) { _client.RollbackTran(); _logger.LogError($"[出库任务状态变化通知]E0002-任务更新失败,StockOutId={stockOutId}, StockOutNo={stockOut.StockOutNo}"); return(YL.Core.Dto.RouteData.From(PubMessages.E0002_UPDATE_COUNT_FAIL)); } bool anyWorking = await _client.Queryable <Wms_stockout>() .AnyAsync(x => x.MesTaskId == mesTask.MesTaskId && x.StockOutStatus != (int)StockOutStatus.task_finish && x.StockOutStatus != (int)StockOutStatus.task_canceled); if (!anyWorking) { _logger.LogInformation($"[出库任务状态变化通知]所有相关任务已完成,尝试通知MES MesTaskId={stockOut.MesTaskId}"); await _client.NofityStockOut(mesTask); } else { _logger.LogInformation($"[出库任务状态变化通知]尚有未完成任务,等待其余任务完成通知 MesTaskId={stockOut.MesTaskId}"); } _logger.LogInformation($"[出库任务状态变化通知]通知处理正常完成,StockOutId={stockOutId}"); _client.CommitTran(); return(new RouteData()); } catch (Exception ex) { _client.RollbackTran(); _logger.LogError($"[出库任务状态变化通知]E-1-发生异常,处理结束 ex={ex.ToString()}"); return(new RouteData() { Code = -1, Message = ex.Message }); } }
public static async Task <RouteData> ConfirmRelationStockOut( this ISqlSugarClient client, long inventoryBoxTaskId, SysUserDto user) { List <Wms_stockoutdetail_box> stockOutDeltailBoxs = await client.Queryable <Wms_stockoutdetail_box>().Where(x => x.InventoryBoxTaskId == inventoryBoxTaskId).ToListAsync(); if (stockOutDeltailBoxs.Count == 0) { return(new RouteData()); //如果没有相关任务则不做处理 } List <long> confiredStockOutIds = new List <long>(); foreach (Wms_stockoutdetail_box detailbox in stockOutDeltailBoxs) { Wms_stockoutdetail stockOutDetail = await client.Queryable <Wms_stockoutdetail>().Where(x => x.StockOutDetailId == detailbox.StockOutDetailId).FirstAsync(); if (stockOutDetail == null) { continue; } if (stockOutDetail.Status == (int)StockOutStatus.task_finish) { continue; } if (stockOutDetail.ActOutQty < stockOutDetail.PlanOutQty) { continue; } stockOutDetail.Status = (int)StockOutStatus.task_finish; stockOutDetail.ModifiedBy = user.UserId; stockOutDetail.ModifiedUser = user.UserName; stockOutDetail.ModifiedDate = DateTime.Now; if (client.Updateable(stockOutDetail).ExecuteCommand() == 0) { continue; } if (!confiredStockOutIds.Contains(stockOutDetail.StockOutId.Value)) { confiredStockOutIds.Add(stockOutDetail.StockOutId.Value); } } foreach (long stockOutId in confiredStockOutIds) { bool hasWorking = await client.Queryable <Wms_stockoutdetail>().AnyAsync(x => x.StockOutId == stockOutId && x.Status != (int)StockInStatus.task_finish); if (!hasWorking) { Wms_stockout stockout = await client.Queryable <Wms_stockout>().FirstAsync(x => x.StockOutId == stockOutId); if (stockout == null) { continue; } stockout.StockOutStatus = (int)StockOutStatus.task_finish; stockout.ModifiedBy = user.UserId; stockout.ModifiedUser = user.UserName; stockout.ModifiedDate = DateTime.Now; if (client.Updateable(stockout).ExecuteCommand() == 0) { //LOG } bool anyWorking = await client.Queryable <Wms_stockout>() .AnyAsync(x => x.MesTaskId == stockout.MesTaskId && x.StockOutStatus != (int)StockOutStatus.task_finish && x.StockOutStatus != (int)StockOutStatus.task_canceled); if (!anyWorking) { Wms_mestask mesTask = await client.Queryable <Wms_mestask>() .FirstAsync(x => x.MesTaskId == stockout.MesTaskId); if (mesTask == null) { //正常不可能 return(YL.Core.Dto.RouteData.From(PubMessages.E3100_MES_STOCKOUTTASK_NOTFOUND)); } try { //通知处理无论成功失败不影响后续处理 await client.NofityStockOut(mesTask); } catch { } } } } return(new RouteData()); }