| | |
| | | using Mapster; |
| | | using Masuit.Tools; |
| | | using Masuit.Tools.Models; |
| | | using SqlSugar; |
| | | using System.ComponentModel.DataAnnotations; |
| | | using System.Linq.Expressions; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Common; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_DTO.Basic; |
| | | using WIDESEA_IOrderRepository; |
| | | using WIDESEA_Model.Models; |
| | | using WIDESEA_OrderRepository; |
| | | |
| | | namespace WIDESEA_StorageBasicService; |
| | | |
| | | public class BoxingInfoService : ServiceBase<DtBoxingInfo, IBoxingInfoRepository>, IBoxingInfoService |
| | | { |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | public BoxingInfoService(IBoxingInfoRepository BaseDal,IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) |
| | | private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository; |
| | | private readonly IDt_InboundOrderRepository _inboundOrderRepository; |
| | | private readonly IBoxingInfoDetailRepository _boxingInfoDetailRepository; |
| | | public BoxingInfoService(IBoxingInfoRepository BaseDal,IUnitOfWorkManage unitOfWorkManage, ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository, IDt_InboundOrderRepository inboundOrderRepository,IBoxingInfoDetailRepository boxingInfoDetailRepository) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _locationStatusChangeRecordRepository = locationStatusChangeRecordRepository; |
| | | _inboundOrderRepository = inboundOrderRepository; |
| | | _boxingInfoDetailRepository = boxingInfoDetailRepository; |
| | | } |
| | | public override PageGridData<DtBoxingInfo> GetPageData(PageDataOptions options) |
| | | { |
| | |
| | | new PageGridData<DtBoxingInfo>(totalCount, data); |
| | | return new PageGridData<DtBoxingInfo>(totalCount, data); |
| | | } |
| | | |
| | | #region ç»ç |
| | | |
| | | public async Task<WebResponseContent> GetPalletCodeInfo(string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var boxinginfo = await BaseDal.QueryFirstNavAsync(x => x.PalletCode == palletCode); |
| | | if(boxinginfo != null) |
| | | { |
| | | List<PalletCodeInfo> obj = new List<PalletCodeInfo>(); |
| | | boxinginfo.BoxingInfoDetails.ForEach(x => |
| | | { |
| | | obj.Add(new PalletCodeInfo |
| | | { |
| | | orderNo=x.OrderNo, |
| | | warehouseName=x.Warehouse, |
| | | materialNo = x.MaterielCode, |
| | | quantity = x.Quantity, |
| | | }); |
| | | }); |
| | | |
| | | return content.OK(data: obj); |
| | | } |
| | | return content.Error(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | public async Task<WebResponseContent> AddGroupPlateAsync(GroupPlate groupPlate) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (groupPlate == null || groupPlate.groups.IsNullOrEmpty() || groupPlate.palletCode.IsNullOrEmpty()) |
| | | { |
| | | return content.Error("åæ°é误"); |
| | | } |
| | | var infos = await BaseDal.QueryFirstNavAsync(x => x.PalletCode == groupPlate.palletCode); |
| | | List<DtBoxingInfoDetail> details = new List<DtBoxingInfoDetail>(); |
| | | if (infos != null) |
| | | { |
| | | foreach (var item in groupPlate.groups) |
| | | { |
| | | if (infos.BoxingInfoDetails.Count > 0) |
| | | { |
| | | var detail = _boxingInfoDetailRepository.QueryFirst(x => x.OrderNo == item.orderNo); |
| | | if (detail != null) |
| | | { |
| | | DtBoxingInfoDetail boxdetail = new DtBoxingInfoDetail() |
| | | { |
| | | MaterielCode = detail.MaterielCode, |
| | | MaterielName = detail.MaterielName, |
| | | DemandClassification = detail.DemandClassification, |
| | | Warehouse = detail.Warehouse, |
| | | OrderNo = detail.OrderNo, |
| | | Unit = detail.Unit, |
| | | Specs = detail.Specs, |
| | | Weight = detail.Weight, |
| | | WareHouseId = detail.WareHouseId, |
| | | Quantity = item.quantity, |
| | | DrawingNumber = detail.DrawingNumber, |
| | | Date = detail.Date, |
| | | }; |
| | | details.Add(boxdetail); |
| | | } |
| | | else |
| | | { |
| | | details = GetDtBoxingInfoDetails(item, details); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | details = GetDtBoxingInfoDetails(item, details); |
| | | } |
| | | } |
| | | infos.StockStatus = (int)StockStateEmun.ç»çæ¤é; |
| | | DtBoxingInfo_Hty stockhty = infos.Adapt<DtBoxingInfo_Hty>(); |
| | | stockhty.ModifyDate = DateTime.Now; |
| | | DtBoxingInfo boxing = new DtBoxingInfo() |
| | | { |
| | | PalletCode = groupPlate.palletCode, |
| | | StockStatus = (int)StockStateEmun.ç»çæå, |
| | | BoxingInfoDetails = details |
| | | }; |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await BaseDal.Db.DeleteNav<DtBoxingInfo>(x => x.Id == infos.Id) |
| | | .Include(x => x.BoxingInfoDetails) |
| | | .ExecuteCommandAsync(); |
| | | await AddStockHtyAsync(stockhty); |
| | | |
| | | await BaseDal.AddDataNavAsync(boxing); |
| | | }); |
| | | return content.OK("ç»çæå"); |
| | | } |
| | | else |
| | | { |
| | | foreach (var item in groupPlate.groups) |
| | | { |
| | | #region |
| | | //var InboundOrder = _inboundOrderRepository.QueryFirst(x => x.OrderNo == item.orderNo); |
| | | |
| | | //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.OrderNo; |
| | | // x.Unit = InboundOrder.Unit; |
| | | // x.WareHouseId = InboundOrder.WareHouseId; |
| | | // x.Specs = InboundOrder.Specs; |
| | | // x.Weight = InboundOrder.Weight; |
| | | // x.Quantity = x.Quantity + item.quantity; |
| | | // x.DrawingNumber = InboundOrder.ProductDrawingNumber; |
| | | // x.Date = InboundOrder.Datetime; |
| | | // details.Add(x); |
| | | // } |
| | | // else |
| | | // { |
| | | // DtBoxingInfoDetail detail = new DtBoxingInfoDetail() |
| | | // { |
| | | // MaterielCode = InboundOrder.MaterialNo, |
| | | // MaterielName = InboundOrder.MaterialName, |
| | | // DemandClassification = InboundOrder.DemandClassification, |
| | | // Warehouse = InboundOrder.WarehouseName, |
| | | // OrderNo = InboundOrder.OrderNo, |
| | | // Unit = InboundOrder.Unit, |
| | | // Specs = InboundOrder.Specs, |
| | | // Weight = InboundOrder.Weight, |
| | | // WareHouseId = InboundOrder.WareHouseId, |
| | | // Quantity = item.quantity, |
| | | // DrawingNumber = InboundOrder.ProductDrawingNumber, |
| | | // Date = InboundOrder.Datetime, |
| | | // }; |
| | | // details.Add(detail); |
| | | // } |
| | | //} |
| | | //else |
| | | //{ |
| | | // return content.Error("æªæ¾å°å
¥åºåæ®ä¿¡æ¯"); |
| | | //} |
| | | #endregion |
| | | details = GetDtBoxingInfoDetails(item,details); |
| | | } |
| | | DtBoxingInfo boxing = new DtBoxingInfo() |
| | | { |
| | | PalletCode = groupPlate.palletCode, |
| | | StockStatus = (int)StockStateEmun.ç»çæå, |
| | | BoxingInfoDetails = details |
| | | }; |
| | | await BaseDal.AddDataNavAsync(boxing); |
| | | return content.OK("ç»çæå"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | public List<DtBoxingInfoDetail> GetDtBoxingInfoDetails(GroupPlateInfo info, List<DtBoxingInfoDetail> details) |
| | | { |
| | | var InboundOrder = _inboundOrderRepository.QueryFirst(x => x.OrderNo == info.orderNo); |
| | | 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.OrderNo; |
| | | x.Unit = InboundOrder.Unit; |
| | | x.WareHouseId = InboundOrder.WareHouseId; |
| | | x.Specs = InboundOrder.Specs; |
| | | x.Weight = InboundOrder.Weight; |
| | | x.Quantity = x.Quantity + info.quantity; |
| | | x.DrawingNumber = InboundOrder.ProductDrawingNumber; |
| | | x.Date = InboundOrder.Datetime; |
| | | details.Add(x); |
| | | } |
| | | else |
| | | { |
| | | DtBoxingInfoDetail boxdetail = new DtBoxingInfoDetail() |
| | | { |
| | | MaterielCode = InboundOrder.MaterialNo, |
| | | MaterielName = InboundOrder.MaterialName, |
| | | DemandClassification = InboundOrder.DemandClassification, |
| | | Warehouse = InboundOrder.WarehouseName, |
| | | OrderNo = InboundOrder.OrderNo, |
| | | Unit = InboundOrder.Unit, |
| | | Specs = InboundOrder.Specs, |
| | | Weight = InboundOrder.Weight, |
| | | WareHouseId = InboundOrder.WareHouseId, |
| | | Quantity = info.quantity, |
| | | DrawingNumber = InboundOrder.ProductDrawingNumber, |
| | | Date = InboundOrder.Datetime, |
| | | }; |
| | | details.Add(boxdetail); |
| | | } |
| | | return details; |
| | | } |
| | | else |
| | | { |
| | | throw new Exception($"æªæ¾å°å
¥åºåæ®{info.orderNo}"); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region è§£ç |
| | | public async Task<WebResponseContent> DeleteGroupPlateAsync(GroupPlate groupPlate) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (groupPlate == null || groupPlate.palletCode.IsNullOrEmpty()) |
| | | { |
| | | return content.Error("åæ°é误"); |
| | | } |
| | | var boxingInfo = await BaseDal.QueryFirstNavAsync(x => x.PalletCode == groupPlate.palletCode); |
| | | if (!boxingInfo.IsNullOrEmpty()) |
| | | { |
| | | boxingInfo.StockStatus = (int)StockStateEmun.ç»çæ¤é; |
| | | DtBoxingInfo_Hty stockhty = boxingInfo.Adapt<DtBoxingInfo_Hty>(); |
| | | stockhty.ModifyDate = DateTime.Now; |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await BaseDal.Db.DeleteNav<DtBoxingInfo>(x => x.Id == boxingInfo.Id) |
| | | .Include(x => x.BoxingInfoDetails) |
| | | .ExecuteCommandAsync(); |
| | | await AddStockHtyAsync(stockhty); |
| | | }); |
| | | content.OK("è§£çæå"); |
| | | } |
| | | else |
| | | { |
| | | content.Error("æªæ¾å°ç»çæ°æ®"); |
| | | } |
| | | return content; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | private async Task AddStockHtyAsync(DtBoxingInfo_Hty stockhty) |
| | | { |
| | | var isStockAdd = await SqlSugarHelper.DbWMS.InsertNav(stockhty).Include(x=>x.BoxingInfoDetails).ExecuteCommandAsync(); |
| | | if (!isStockAdd) |
| | | { |
| | | throw new Exception("åºååå²ä¿¡æ¯æ·»å 失败"); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¹éå é¤ |
| | | /// </summary> |
| | | /// <param name="keys"></param> |
| | | /// <returns></returns> |
| | | public override WebResponseContent DeleteData(object[] keys) |
| | | { |
| | | try |
| | | { |
| | | List<DtStockInfo_Hty> stockInfos = new List<DtStockInfo_Hty>(); |
| | | List<DtLocationInfo> locationInfos = new List<DtLocationInfo>(); |
| | | |
| | | foreach (var item in keys) |
| | | { |
| | | var stock = BaseDal.QueryFirstNavAsync(x => x.Id == item.ObjToInt()).Result; |
| | | var stockHty = stock.Adapt<DtStockInfo_Hty>(); |
| | | stockInfos.Add(stockHty); |
| | | |
| | | var location = SqlSugarHelper.DbWMS.Queryable<DtLocationInfo>().FirstAsync(x => x.LocationCode == stock.LocationCode).Result; |
| | | var lastStatus = location.LocationStatus; |
| | | location.LocationStatus = (int)LocationEnum.Free; |
| | | locationInfos.Add(location); |
| | | _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(location, lastStatus, (int)StatusChangeTypeEnum.ManualOperation, 0); |
| | | } |
| | | //var hty = BaseDal.Db.InsertNav(stockInfos) |
| | | // .Include(x => x.StockInfoDetails) |
| | | // .ExecuteCommand(); |
| | | var isStockAdd = SqlSugarHelper.DbWMS.InsertNav(stockInfos).IncludesAllFirstLayer().ExecuteCommandAsync(); |
| | | |
| | | var locationd = SqlSugarHelper.DbWMS.Updateable(locationInfos).ExecuteCommandHasChange(); |
| | | return base.DeleteData(keys); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | #endregion |
| | | } |