| | |
| | | using AngleSharp.Dom; |
| | | using Dm; |
| | | using Mapster; |
| | | using Masuit.Tools; |
| | | using NewLife.Reflection; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; |
| | | using SqlSugar; |
| | | using System.Collections; |
| | |
| | | using WIDESEA_Cache; |
| | | using WIDESEA_Common; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_DTO; |
| | | using WIDESEA_DTO.Basic; |
| | | using WIDESEA_DTO.Stock; |
| | | using WIDESEA_DTO.WMS; |
| | | using WIDESEA_IOrderRepository; |
| | | using WIDESEA_Model.Models; |
| | | using WIDESEA_Model.Models.Order; |
| | | using WIDESEA_OrderRepository; |
| | | using WIDESEA_StorageTaskRepository; |
| | | |
| | | namespace WIDESEA_StorageBasicService; |
| | | |
| | | public class StockInfoService : ServiceBase<DtStockInfo, IStockInfoRepository>, IStockInfoService |
| | | { |
| | | private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository; |
| | | public StockInfoService(IStockInfoRepository BaseDal, ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository) : base(BaseDal) |
| | | private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository; |
| | | private readonly IDt_InboundOrderRepository _inboundOrderRepository; |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IDt_OtherOutboundOrderRepository _OtheroutorderRepository; |
| | | private readonly IDt_OtherOutboundOrderDetailRepository _OtheroutorderdetailRepository; |
| | | private readonly IStockInfoDetailRepository _stockInfoDetailRepository; |
| | | private readonly IDt_TaskService _taskService; |
| | | private readonly ILocationInfoRepository _locationRepository; |
| | | private readonly IDt_TaskRepository _taskRepository; |
| | | |
| | | public StockInfoService(IStockInfoRepository BaseDal, |
| | | ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository, |
| | | IDt_InboundOrderRepository inboundOrderRepository, |
| | | IUnitOfWorkManage unitOfWorkManage, |
| | | IDt_OtherOutboundOrderRepository OtheroutorderRepository, |
| | | IDt_OtherOutboundOrderDetailRepository OtheroutorderdetailRepository, |
| | | IStockInfoDetailRepository stockInfoDetailRepository, |
| | | IDt_TaskService taskService, |
| | | ILocationInfoRepository locationRepository, |
| | | IDt_TaskRepository taskRepository) : base(BaseDal) |
| | | { |
| | | _locationStatusChangeRecordRepository = locationStatusChangeRecordRepository; |
| | | _inboundOrderRepository = inboundOrderRepository; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _OtheroutorderRepository = OtheroutorderRepository; |
| | | _OtheroutorderdetailRepository = OtheroutorderdetailRepository; |
| | | _stockInfoDetailRepository = stockInfoDetailRepository; |
| | | _taskService = taskService; |
| | | _locationRepository = locationRepository; |
| | | _taskRepository = taskRepository; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | |
| | | Expression<Func<DtStockInfo, bool>> locationStatus = null; |
| | | Expression<Func<DtStockInfo, bool>> floor = null; |
| | | Expression<Func<DtStockInfo, bool>> areaId = null; |
| | | Expression<Func<DtStockInfo, bool>> materielCode = null; |
| | | foreach (var item in searchParametersList) |
| | | { |
| | | if (item.Name.Contains("locationStatus")) |
| | |
| | | { |
| | | floor = x => x.LocationInfo.Floor.Contains(item.Value); |
| | | } |
| | | else if (item.Name.Contains("areaId")) |
| | | { |
| | | areaId = x => x.LocationInfo.AreaId== Convert.ToInt32(item.Value); |
| | | } |
| | | else if (item.Name.Contains("materielCode")) |
| | | { |
| | | materielCode = x => x.StockInfoDetails.Any(d => d.MaterielCode == item.Value); |
| | | } |
| | | } |
| | | //.IncludesAllFirstLayer() |
| | | var data = BaseDal.Db.Queryable<DtStockInfo>() |
| | |
| | | .WhereIF(!wheres.IsNullOrEmpty(), wheres) |
| | | .WhereIF(locationStatus != null, locationStatus) |
| | | .WhereIF(floor != null, floor) |
| | | .WhereIF(areaId != null, areaId) |
| | | .WhereIF(materielCode != null, materielCode) |
| | | .OrderBy(orderByModels) |
| | | .ToPageList(options.Page, options.Rows, ref totalCount); |
| | | new PageGridData<DtStockInfo>(totalCount, data); |
| | | return new PageGridData<DtStockInfo>(totalCount, data); |
| | | } |
| | | |
| | | |
| | | #region åºåè§å¾ |
| | | public List<StockSelectViewDTO> GetStockSelectViews(GetStockSelectViewDto viewDto) |
| | | { |
| | | var stocks = BaseDal.Db.Queryable<DtStockInfo>() |
| | | .Includes(x => x.StockInfoDetails) |
| | | .Includes(x => x.LocationInfo) |
| | | .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) |
| | | .Where(x => x.StockInfoDetails.Any(d => d.MaterielCode == viewDto.materielCode && d.Quantity > 0 && d.Quantity > d.OutboundQuantity)).ToList().OrderBy(x => x.CreateDate); |
| | | |
| | | List<DtLocationInfo> locationInfos = new List<DtLocationInfo>(); |
| | | List<DtStockInfo> stockNew = new List<DtStockInfo>(); |
| | | if (stocks != null || stocks.Count() > 0) |
| | | { |
| | | var locations = stocks.Select(s => s.LocationInfo).ToList(); |
| | | locationInfos = GetStockLocations(locations).Distinct().ToList(); |
| | | stockNew = stocks.Where(s => s.LocationInfo != null && locationInfos.Contains(s.LocationInfo)).ToList(); |
| | | } |
| | | |
| | | var result = stockNew.Select(s => new StockSelectViewDTO |
| | | { |
| | | MaterielCode = s.StockInfoDetails |
| | | .FirstOrDefault(d => d.MaterielCode == viewDto.materielCode)?.MaterielCode ?? string.Empty, |
| | | |
| | | MaterielName = s.StockInfoDetails |
| | | .FirstOrDefault(d => d.MaterielCode == viewDto.materielCode)?.MaterielName ?? string.Empty, |
| | | |
| | | UseableQuantity = s.StockInfoDetails |
| | | .Where(d => d.MaterielCode == viewDto.materielCode && d.Quantity > 0 && d.Quantity > d.OutboundQuantity) |
| | | .Sum(d => (decimal?)d.Quantity - d.OutboundQuantity) ?? 0, // å¤çç©ºå¼æ
åµ |
| | | |
| | | PalletCode = s.PalletCode ?? string.Empty, |
| | | LocationCode = s.LocationInfo?.LocationCode ?? string.Empty |
| | | }).ToList(); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | public List<DtLocationInfo> GetStockLocations(List<DtLocationInfo>? locations) |
| | | { |
| | | List<DtLocationInfo> locationsNew = new List<DtLocationInfo>(); |
| | | foreach (var item in locations) |
| | | { |
| | | if (item.AreaId == 1) |
| | | { |
| | | if (item.Depth == 2) |
| | | { |
| | | var locationLateral = _locationRepository.QueryFirst(x => x.Row == 1 && x.Column == item.Column && x.Layer == item.Layer); |
| | | |
| | | if (locationLateral.LocationStatus == (int)LocationEnum.Lock && locationLateral.EnalbeStatus == 1) |
| | | { |
| | | locationsNew.Remove(item); |
| | | continue; |
| | | } |
| | | locationsNew.Add(item); |
| | | } |
| | | } |
| | | else if (item.AreaId == 2) |
| | | { |
| | | var locationLateral = _locationRepository.QueryData(x => x.Row == item.Row && x.Column > item.Column && x.Remark == item.Remark); |
| | | |
| | | foreach (var Lateral in locationLateral) |
| | | { |
| | | if (Lateral.LocationStatus == (int)LocationEnum.Lock && Lateral.EnalbeStatus == 1) |
| | | { |
| | | locationsNew.Remove(item); |
| | | continue; |
| | | } |
| | | locationsNew.Add(item); |
| | | } |
| | | } |
| | | |
| | | else if (item.AreaId == 5 || item.AreaId == 6) |
| | | { |
| | | var locationLateral = _locationRepository.QueryData(x => x.Row == item.Row && x.Column < item.Column && x.Remark == item.Remark); |
| | | |
| | | foreach (var lateral in locationLateral) |
| | | { |
| | | if (lateral.LocationStatus == (int)LocationEnum.Lock && lateral.EnalbeStatus == 1) |
| | | { |
| | | locationsNew.Remove(item); |
| | | continue; |
| | | } |
| | | locationsNew.Add(item); |
| | | } |
| | | } |
| | | } |
| | | return locationsNew; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region æ ¹æ®åæ®æç»çæåºåºä»»å¡ |
| | | |
| | | public async Task<WebResponseContent> GenerateOutboundTask(GenerateOutTaskDto requestOut) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | foreach (var orderId in requestOut.orderIds) |
| | | { |
| | | List<RequestTaskDto> taskDtos = new List<RequestTaskDto>(); |
| | | Dt_OtherOutboundOrderDetail outboundOrderdetail = _OtheroutorderdetailRepository.QueryFirst(x => x.Id == orderId); |
| | | Dt_OtherOutboundOrder outboundOrder = _OtheroutorderRepository.QueryFirst(x => x.Id == outboundOrderdetail.OrderId); |
| | | |
| | | (bool, string) checkResult = CheckSelectStockDeital(outboundOrderdetail, requestOut.stockViews, requestOut); |
| | | if (!checkResult.Item1) throw new Exception(checkResult.Item2); |
| | | |
| | | else |
| | | { |
| | | var result = AssignStockOutbound(outboundOrderdetail, requestOut.stockViews); |
| | | |
| | | if (result.Item1.Count <= 0) |
| | | { |
| | | return content.Error("æªæ¾å°åºååé
ï¼è¯·ç¡®è®¤æ¯å¦åå¨åºåæåæ®æ°éå·²åºå®"); |
| | | } |
| | | |
| | | result.Item1.Distinct().ForEach(item => |
| | | { |
| | | RequestTaskDto task = new RequestTaskDto |
| | | { |
| | | TaskType = outboundOrder.OrderType, |
| | | OrderNo = outboundOrder.OrderNo, |
| | | MaterielCode = outboundOrderdetail.MaterielCode, |
| | | Position = item.LocationCode, |
| | | PalletCode = item.PalletCode, |
| | | AreaId = Convert.ToInt32(requestOut.AreaId), |
| | | }; |
| | | taskDtos.Add(task); |
| | | item.StockInfoDetails.Where(x => x.MaterielCode == outboundOrderdetail.MaterielCode).FirstOrDefault().Status = (int)StockStateEmun.åºåºéå®; |
| | | item.StockStatus = (int)StockStateEmun.åºåºéå®; |
| | | }); |
| | | List<Dt_Task> taskNews = new List<Dt_Task>(); |
| | | List<WMSTaskDTO> taskDTOs = new List<WMSTaskDTO>(); |
| | | foreach (var item in taskDtos) |
| | | { |
| | | taskNews.Add(await _taskService.RequestOutboundTaskAsync(item)); |
| | | |
| | | } |
| | | List<DtLocationStatusChangeRecord> locationStatusChangeRecords = new List<DtLocationStatusChangeRecord>(); |
| | | List<DtLocationInfo> locations = new List<DtLocationInfo>(); |
| | | foreach (var item in taskNews) |
| | | { |
| | | taskDTOs.Add(CreateTaskDTO(item)); |
| | | var result1 = _taskService.UpdateLocationStatus(item.SourceAddress, LocationEnum.InStockDisable, item.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | var result2 = _taskService.UpdateLocationStatus(item.TargetAddress, LocationEnum.Lock, item.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | locationStatusChangeRecords.AddRange(result1.Item1); |
| | | locationStatusChangeRecords.AddRange(result2.Item1); |
| | | locations.AddRange(result1.Item2); |
| | | locations.AddRange(result2.Item2); |
| | | } |
| | | |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | _taskRepository.AddData(taskNews); |
| | | BaseDal.UpdateDataNav(result.Item1); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(locationStatusChangeRecords); |
| | | await _locationRepository.UpdateDataAsync(locations); |
| | | _OtheroutorderdetailRepository.UpdateData(result.Item2); |
| | | }); |
| | | content = await _taskService.SendWCSTask(taskDTOs); |
| | | } |
| | | } |
| | | return content; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | |
| | | } |
| | | private WMSTaskDTO CreateTaskDTO(Dt_Task task) |
| | | { |
| | | return new WMSTaskDTO |
| | | { |
| | | TaskNum = task.TaskNum.Value, |
| | | Grade = task.Grade.Value, |
| | | PalletCode = task.PalletCode, |
| | | RoadWay = task.Roadway, |
| | | SourceAddress = task.SourceAddress, |
| | | TargetAddress = task.TargetAddress, |
| | | TaskState = task.TaskState, |
| | | Id = 0, |
| | | TaskType = task.TaskType, |
| | | AGVTaskNum = task.AGVTaskNum, |
| | | Remark = task.Remark |
| | | }; |
| | | } |
| | | public (List<DtStockInfo>, Dt_OtherOutboundOrderDetail) AssignStockOutbound(Dt_OtherOutboundOrderDetail outboundOrderdetail, List<StockSelectViewDTO> stockSelectViews) |
| | | { |
| | | decimal originalNeedQuantity = outboundOrderdetail.OrderQuantity - outboundOrderdetail.OverOutQuantity; |
| | | |
| | | decimal needQuantity = originalNeedQuantity; |
| | | |
| | | List<DtStockInfo> outStocks = new List<DtStockInfo>(); |
| | | if (stockSelectViews != null && stockSelectViews.Count > 0) |
| | | { |
| | | outStocks = BaseDal.Db.Queryable<DtStockInfo>().Where(x => stockSelectViews.Select(x => x.PalletCode).ToList().Contains(x.PalletCode)).Includes(x => x.StockInfoDetails).ToList(); |
| | | } |
| | | else |
| | | { |
| | | outStocks = GetStockInfos(outboundOrderdetail.MaterielCode); |
| | | } |
| | | |
| | | List<DtStockInfo> outStockNews=new List<DtStockInfo>(); |
| | | |
| | | foreach (var item in outStocks) |
| | | { |
| | | var stockDetail = item.StockInfoDetails |
| | | .Where(d => d.MaterielCode == outboundOrderdetail.MaterielCode && d.Quantity > 0); |
| | | if (needQuantity <= 0) |
| | | { |
| | | continue; |
| | | } |
| | | foreach (var detail in stockDetail) |
| | | { |
| | | if (detail != null) |
| | | { |
| | | if (needQuantity >= detail.Quantity) |
| | | { |
| | | if (detail.Quantity <= detail.OutboundQuantity) |
| | | { |
| | | continue; |
| | | } |
| | | needQuantity -= detail.Quantity; |
| | | detail.OutboundQuantity = detail.Quantity; |
| | | } |
| | | else |
| | | { |
| | | if (detail.Quantity <= detail.OutboundQuantity) |
| | | { |
| | | continue; |
| | | } |
| | | detail.OutboundQuantity = needQuantity; |
| | | needQuantity = 0; |
| | | } |
| | | outStockNews.Add(item); |
| | | } |
| | | } |
| | | |
| | | } |
| | | outboundOrderdetail.OverOutQuantity = outboundOrderdetail.OrderQuantity - needQuantity; |
| | | |
| | | if (outboundOrderdetail.OverOutQuantity != 0) |
| | | { |
| | | outboundOrderdetail.OrderDetailStatus = (int)OrderStateEmun.å¼å§; |
| | | } |
| | | return (outStockNews, outboundOrderdetail); |
| | | } |
| | | |
| | | private (bool, string) CheckSelectStockDeital(Dt_OtherOutboundOrderDetail outboundOrderdetail, List<StockSelectViewDTO> stockSelectViews, GenerateOutTaskDto requestOut) |
| | | { |
| | | if (outboundOrderdetail == null) |
| | | { |
| | | return (false, "æªæ¾å°åºåºåä¿¡æ¯"); |
| | | } |
| | | if (outboundOrderdetail.OrderDetailStatus == (int)OrderStateEmun.已宿) |
| | | { |
| | | return (false, "该æç»ä¸å¯æä½"); |
| | | } |
| | | if (stockSelectViews != null && stockSelectViews.Sum(x => x.UseableQuantity) > outboundOrderdetail.OrderQuantity - outboundOrderdetail.OverOutQuantity) |
| | | { |
| | | return (false, "éæ©æ°éè¶
åºåæ®æ°é"); |
| | | } |
| | | if (outboundOrderdetail.OrderQuantity <= outboundOrderdetail.OverOutQuantity) |
| | | { |
| | | return (false, "åæ®æ°éå·²åºåºå®æ"); |
| | | } |
| | | return (true, "æå"); |
| | | } |
| | | |
| | | public List<DtStockInfo> GetStockInfos(string materielCode) |
| | | { |
| | | var stocks = BaseDal.Db.Queryable<DtStockInfo>() |
| | | .Includes(x => x.StockInfoDetails) |
| | | .Includes(x => x.LocationInfo) |
| | | .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) |
| | | .Where(x => x.StockInfoDetails.Any(d => d.MaterielCode == materielCode && d.Quantity > 0)).ToList().OrderBy(x => x.CreateDate).ToList(); |
| | | |
| | | if (stocks == null || stocks.Count() <= 0) |
| | | { |
| | | return stocks; |
| | | } |
| | | |
| | | var locations = stocks.Select(s => s.LocationInfo).ToList(); |
| | | List<DtLocationInfo> locationInfos = GetStockLocations(locations).Distinct().ToList(); |
| | | stocks = stocks.Where(s => s.LocationInfo != null && locationInfos.Contains(s.LocationInfo)).ToList(); |
| | | return stocks; |
| | | } |
| | | #endregion æ ¹æ®åæ®æç»çæåºåºä»»å¡ |
| | | |
| | | #region ç»ç |
| | | public async Task<WebResponseContent> AddGroupPlateAsync(GroupPlate groupPlate) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (groupPlate == null || groupPlate.OrderNos.IsNullOrEmpty() || groupPlate.palletCode.IsNullOrEmpty()) |
| | | { |
| | | return content.Error("åæ°é误"); |
| | | } |
| | | var info = await BaseDal.QueryFirstAsync(x => x.PalletCode == groupPlate.palletCode); |
| | | if (!info.IsNullOrEmpty()) |
| | | { |
| | | content.Error("该æçå·²åå¨ç»ç"); |
| | | } |
| | | else |
| | | { |
| | | List<DtStockInfoDetail> details = new List<DtStockInfoDetail>(); |
| | | foreach (var item in groupPlate.OrderNos) |
| | | { |
| | | var InboundOrder = _inboundOrderRepository.QueryFirst(x => x.OrderNo == item); |
| | | |
| | | if (InboundOrder != null) |
| | | { |
| | | var x = details.Where(x => x.MaterielCode == InboundOrder.MaterialNo && x.Warehouse == InboundOrder.WarehouseName && x.DrawingNumber == InboundOrder.ProductDrawingNumber && x.DemandClassification == InboundOrder.DemandClassification).FirstOrDefault(); |
| | | if (x != null) |
| | | { |
| | | details.Remove(x); |
| | | x.MaterielCode = InboundOrder.MaterialNo; |
| | | x.MaterielName = InboundOrder.MaterialName; |
| | | x.DemandClassification = InboundOrder.DemandClassification; |
| | | x.Warehouse = InboundOrder.WarehouseName; |
| | | x.OrderNo = InboundOrder.UpperOrderNo; |
| | | x.Unit = InboundOrder.Unit; |
| | | x.Specs = InboundOrder.Specs; |
| | | x.Weight = InboundOrder.Weight; |
| | | x.Quantity = x.Quantity + InboundOrder.Quantity; |
| | | x.DrawingNumber = InboundOrder.ProductDrawingNumber; |
| | | x.Date = InboundOrder.Datetime; |
| | | details.Add(x); |
| | | } |
| | | else |
| | | { |
| | | DtStockInfoDetail detail = new DtStockInfoDetail() |
| | | { |
| | | MaterielCode = InboundOrder.MaterialNo, |
| | | MaterielName = InboundOrder.MaterialName, |
| | | DemandClassification = InboundOrder.DemandClassification, |
| | | Warehouse = InboundOrder.WarehouseName, |
| | | OrderNo = InboundOrder.UpperOrderNo, |
| | | Unit = InboundOrder.Unit, |
| | | Specs = InboundOrder.Specs, |
| | | Weight = InboundOrder.Weight, |
| | | Quantity = InboundOrder.Quantity, |
| | | DrawingNumber = InboundOrder.ProductDrawingNumber, |
| | | Date = InboundOrder.Datetime, |
| | | }; |
| | | details.Add(detail); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | return content.Error("æªæ¾å°å
¥åºåæ®ä¿¡æ¯"); |
| | | } |
| | | } |
| | | DtStockInfo boxing = new DtStockInfo() |
| | | { |
| | | PalletCode = groupPlate.palletCode, |
| | | StockStatus = (int)StockStateEmun.ç»çæå, |
| | | StockInfoDetails = details |
| | | }; |
| | | await BaseDal.AddDataNavAsync(boxing); |
| | | content.OK("ç»çæå"); |
| | | } |
| | | return content; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region è§£ç |
| | | public async Task<WebResponseContent> DeleteGroupPlateAsync(GroupPlate groupPlate) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (groupPlate == null || groupPlate.palletCode.IsNullOrEmpty()) |
| | | { |
| | | return content.Error("åæ°é误"); |
| | | } |
| | | var stock = await BaseDal.QueryFirstNavAsync(x => x.PalletCode == groupPlate.palletCode && x.StockStatus == (int)StockStateEmun.ç»çæå); |
| | | if (!stock.IsNullOrEmpty()) |
| | | { |
| | | stock.StockStatus = (int)StockStateEmun.ç»çæ¤é; |
| | | DtStockInfo_Hty stockhty = stock.Adapt<DtStockInfo_Hty>(); |
| | | stockhty.ModifyDate = DateTime.Now; |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await BaseDal.Db.DeleteNav<DtStockInfo>(x => x.Id == stock.Id) |
| | | .Include(x => x.StockInfoDetails) |
| | | .ExecuteCommandAsync(); |
| | | await AddStockHtyAsync(stockhty); |
| | | }); |
| | | content.OK("è§£çæå"); |
| | | } |
| | | else |
| | | { |
| | | content.Error("æªæ¾å°ç»çæ°æ®"); |
| | | } |
| | | return content; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | private async Task AddStockHtyAsync(DtStockInfo_Hty stockhty) |
| | | { |
| | | var isStockAdd = await SqlSugarHelper.DbWMS.InsertNav(stockhty).IncludesAllFirstLayer().ExecuteCommandAsync(); |
| | | if (!isStockAdd) |
| | | { |
| | | throw new Exception("åºååå²ä¿¡æ¯æ·»å 失败"); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | #endregion |
| | | } |