| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_IInboundRepository; |
| | | using WIDESEA_IInboundService; |
| | | using WIDESEA_Model.Models; |
| | | using WIDESEA_DTO.ERP; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_IBasicRepository; |
| | | using WIDESEA_Common.OrderEnum; |
| | | using WIDESEA_Core.Helper; |
| | | using Microsoft.AspNetCore.Mvc.RazorPages; |
| | | using WIDESEA_InboundRepository; |
| | | using WIDESEA_IStockRepository; |
| | | using WIDESEA_Core.Enums; |
| | | using SqlSugar; |
| | | |
| | | namespace WIDESEA_InboundService |
| | | { |
| | | public class TakeStockOrderService : ServiceBase<Dt_TakeStockOrder, ITakeStockOrderRepository>, ITakeStockOrderService |
| | | { |
| | | public ITakeStockOrderRepository Repository => BaseDal; |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IBasicRepository _basicRepository; |
| | | private readonly ITakeStockOrderDetailRepository _takeStockOrderDetailRepository; |
| | | private readonly IStockInfoRepository _stockInfoRepository; |
| | | private readonly IStockInfoDetailRepository _stockInfoDetailRepository; |
| | | public TakeStockOrderService(ITakeStockOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository,ITakeStockOrderDetailRepository takeStockOrderDetailRepository,IStockInfoRepository stockInfoRepository,IStockInfoDetailRepository stockInfoDetailRepository) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _basicRepository = basicRepository; |
| | | _takeStockOrderDetailRepository= takeStockOrderDetailRepository; |
| | | _stockInfoRepository= stockInfoRepository; |
| | | _stockInfoDetailRepository= stockInfoDetailRepository; |
| | | } |
| | | /// <summary> |
| | | /// æ°å¢ |
| | | /// </summary> |
| | | public override WebResponseContent AddData(SaveModel saveModel) |
| | | { |
| | | Dt_Warehouse? warehouse = null; |
| | | if (saveModel.MainData.TryGetValue(nameof(Dt_TakeStockOrder.WarehouseId).FirstLetterToLower(), out object? warehouseId) && warehouseId != null && !string.IsNullOrEmpty(warehouseId.ToString())) |
| | | { |
| | | warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == warehouseId.ObjToInt()); |
| | | if (warehouse == null) |
| | | return WebResponseContent.Instance.Error("æªæ¾å°ä»åºä¿¡æ¯"); |
| | | } |
| | | |
| | | if (saveModel.DetailData.Count>0) |
| | | { |
| | | for (int i = 0; i < saveModel.DetailData.Count; i++) |
| | | { |
| | | if (saveModel.DetailData[i].TryGetValue(nameof(Dt_TakeStockOrderDetail.MaterielCode).FirstLetterToLower(), out object? materielCode) && materielCode != null && !string.IsNullOrEmpty(materielCode.ToString())) |
| | | { |
| | | Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode.ToString() && x.WarehouseId == warehouse.WarehouseId); |
| | | if (materielInfo == null) return WebResponseContent.Instance.Error($"æªæ¾å°æ¬ä»åºç©æ{materielCode}ä¿¡æ¯"); |
| | | saveModel.DetailData[i].Add(nameof(Dt_TakeStockOrderDetail.MaterielName).FirstLetterToLower(),materielInfo.MaterielName); |
| | | saveModel.DetailData[i].Add(nameof(Dt_TakeStockOrderDetail.MaterielSpec).FirstLetterToLower(), materielInfo.MaterielSpec); |
| | | saveModel.DetailData[i].Add(nameof(Dt_TakeStockOrderDetail.Unit).FirstLetterToLower(), materielInfo.MaterielUnit); |
| | | } |
| | | } |
| | | } |
| | | saveModel.MainData.Add(nameof(Dt_TakeStockOrder.TakeStockStatus).FirstLetterToLower(), TakeStockStatusEnum.æªçç¹.ObjToInt()); |
| | | return base.AddData(saveModel); |
| | | } |
| | | /// <summary> |
| | | /// è·å对åºä»åºçç¹å |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent GetTakeStockOrders(SaveModel saveModel) |
| | | { |
| | | WebResponseContent content =new WebResponseContent(); |
| | | try |
| | | { |
| | | int pageNo = saveModel.MainData["pageNo"].ObjToInt(); |
| | | string? orderNo = saveModel.MainData["orderNo"].ToString(); |
| | | int warehouseId = saveModel.MainData["warehouseId"].ObjToInt(); |
| | | List<Dt_TakeStockOrder> takeStockOrders = new List<Dt_TakeStockOrder>(); |
| | | if (string.IsNullOrEmpty(orderNo)) |
| | | { |
| | | takeStockOrders = Db.Queryable<Dt_TakeStockOrder>().Where(x => x.TakeStockStatus < TakeStockStatusEnum.çç¹å®æ.ObjToInt() && x.WarehouseId == warehouseId).Includes(x=>x.Details).ToPageList(pageNo, 5); |
| | | } |
| | | else |
| | | { |
| | | takeStockOrders = Db.Queryable<Dt_TakeStockOrder>().Where(x => (x.OrderNo.Contains(orderNo) && x.TakeStockStatus < TakeStockStatusEnum.çç¹å®æ.ObjToInt() && x.WarehouseId == warehouseId)).Includes(x=>x.Details).ToPageList(pageNo, 5); |
| | | } |
| | | content.OK(data: takeStockOrders); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// éè¿çç¹åå·+æ¡å·è·åçç¹ä¿¡æ¯è¯¦æ
|
| | | /// </summary> |
| | | /// <param name="saveModel"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent GetTakeDetailInfo(SaveModel saveModel) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | string? orderNo = saveModel.MainData["orderNo"].ToString(); |
| | | string? takePalletCode = saveModel.MainData["takePalletCode"].ToString(); |
| | | Dt_TakeStockOrderDetail takeStockOrderDetail=new Dt_TakeStockOrderDetail(); |
| | | if (!string.IsNullOrEmpty(orderNo) && !string.IsNullOrEmpty(takePalletCode)) |
| | | { |
| | | //è·åçç¹æç» |
| | | takeStockOrderDetail = BaseDal.Db.Queryable<Dt_TakeStockOrder, Dt_TakeStockOrderDetail>((master, detail) => master.Id == detail.TakeStockId) |
| | | .Where((master, detail) => master.OrderNo == orderNo && detail.TakePalletCode== takePalletCode) |
| | | .Select((master, detail) => detail).First(); |
| | | if (takeStockOrderDetail==null) |
| | | { |
| | | return content.Error($"çç¹å{orderNo}䏿ªæ¾å°{takePalletCode}çç¹æç»"); |
| | | } |
| | | if (takeStockOrderDetail.TakeDetalStatus != TakeStockDetailStatusEnum.çç¹åºåºå®æ.ObjToInt()) |
| | | { |
| | | return content.Error($"çç¹å{orderNo}䏿ªæ¾å°{takePalletCode}å¯çç¶æ"); |
| | | } |
| | | Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x=>x.PalletCode== takePalletCode && x.StockStatus==StockStatusEmun.çç¹åºåºå®æ.ObjToInt()).Includes(x=>x.Details).First(); |
| | | if (stockInfo == null) |
| | | { |
| | | return content.Error($"æªæ¾å°{takePalletCode}çç¹åºåç¶æ"); |
| | | } |
| | | content.OK(data: takeStockOrderDetail); |
| | | } |
| | | else |
| | | { |
| | | return content.Error("请æ±ä¿¡æ¯ä¸ºç©º"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// çç¹æä½ |
| | | /// </summary> |
| | | /// <param name="saveModel"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent MatPicking(SaveModel saveModel) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | int id = saveModel.MainData["id"].ObjToInt(); |
| | | decimal stockNum =saveModel.MainData["num"].ObjToDecimal(); |
| | | if (stockNum<0) |
| | | { |
| | | return content.Error("çäºä¸è½ä¸ºè´"); |
| | | } |
| | | if (id>0) |
| | | { |
| | | //è·åçç¹è¯¦æ
|
| | | Dt_TakeStockOrderDetail takeStockOrderDetail = _takeStockOrderDetailRepository.QueryFirst(x=>x.Id== id); |
| | | if (takeStockOrderDetail.TakeDetalStatus != TakeStockDetailStatusEnum.çç¹åºåºå®æ.ObjToInt()) |
| | | { |
| | | return content.Error("éå¯çç¹ç¶æ"); |
| | | } |
| | | Dt_TakeStockOrder takeStockOrder = BaseDal.Db.Queryable<Dt_TakeStockOrder>().Where(x => x.Id == takeStockOrderDetail.TakeStockId).Includes(x => x.Details).First(); |
| | | if (takeStockOrder.TakeStockStatus != TakeStockStatusEnum.çç¹ä¸.ObjToInt()) |
| | | { |
| | | return content.Error("éå¯çç¹ç¶æ"); |
| | | } |
| | | //è·ååºå |
| | | Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == takeStockOrderDetail.TakePalletCode && x.StockStatus == StockStatusEmun.çç¹åºåºå®æ.ObjToInt()).Includes(x => x.Details).First(); |
| | | List<Dt_StockInfoDetail> addStockDetails = new List<Dt_StockInfoDetail>(); |
| | | List<Dt_StockInfoDetail> delStockDetails = new List<Dt_StockInfoDetail>(); |
| | | List<Dt_StockInfoDetail> updateStockDetails = new List<Dt_StockInfoDetail>(); |
| | | if (stockInfo == null || stockInfo.Details.Count<=0 || stockInfo.Details==null) |
| | | { |
| | | return content.Error("æªæ¾å°åºå"); |
| | | } |
| | | takeStockOrderDetail.Qty = stockNum; |
| | | takeStockOrderDetail.TakeDetalStatus = TakeStockDetailStatusEnum.çç¹å®æ.ObjToInt(); |
| | | int stockCount=stockInfo.Details.Count; |
| | | //夿æ¯å¦çèµ¢è¿æ¯çäº |
| | | if (takeStockOrderDetail.SysQty< takeStockOrderDetail.Qty) //çèµ¢ |
| | | { |
| | | //float stockMaxQty = stockInfo.Details.Max(x => x.StockQuantity); |
| | | //float stockMinQty = stockInfo.Details.Min(x => x.StockQuantity); |
| | | Dt_StockInfoDetail? addstockInfoDetail = stockInfo.Details?.FirstOrDefault(); |
| | | addstockInfoDetail.Id = 0; |
| | | addstockInfoDetail.StockQuantity = (decimal)(takeStockOrderDetail.Qty - takeStockOrderDetail.SysQty); |
| | | addStockDetails.Add(addstockInfoDetail); |
| | | } |
| | | else if (takeStockOrderDetail.Qty==0) //çäº |
| | | { |
| | | delStockDetails.AddRange(stockInfo.Details); |
| | | } |
| | | else if(takeStockOrderDetail.SysQty > takeStockOrderDetail.Qty) //çäº |
| | | { |
| | | decimal totalQty = (takeStockOrderDetail.SysQty - takeStockOrderDetail.Qty).ObjToDecimal(); |
| | | while (totalQty>0) |
| | | { |
| | | Dt_StockInfoDetail addstockInfoDetail=stockInfo.Details.OrderByDescending(x => x.Id).FirstOrDefault(); |
| | | decimal stockQty = addstockInfoDetail.StockQuantity.ObjToDecimal(); |
| | | if (stockQty < totalQty) |
| | | { |
| | | delStockDetails.Add(addstockInfoDetail); |
| | | stockInfo.Details.Remove(addstockInfoDetail); |
| | | totalQty -= stockQty; |
| | | } |
| | | else if (stockQty >= totalQty) |
| | | { |
| | | stockQty-=totalQty; |
| | | if (stockQty==0) |
| | | { |
| | | delStockDetails.Add(addstockInfoDetail); |
| | | stockInfo.Details.Remove(addstockInfoDetail); |
| | | } |
| | | else |
| | | { |
| | | addstockInfoDetail.StockQuantity = stockQty; |
| | | updateStockDetails.Add(addstockInfoDetail); |
| | | stockInfo.Details.Remove(addstockInfoDetail); |
| | | } |
| | | totalQty = 0; |
| | | } |
| | | |
| | | } |
| | | } |
| | | List<Dt_TakeStockOrderDetail> takeStockOrderDetails=new List<Dt_TakeStockOrderDetail>(); |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseId==takeStockOrder.WarehouseId); |
| | | List<Dt_TakeStockOrderDetail> overTakeStockOrderDetails = takeStockOrder.Details.Where(x => x.TakeDetalStatus == TakeStockDetailStatusEnum.çç¹å®æ.ObjToInt()).ToList(); |
| | | if ((overTakeStockOrderDetails.Count + 1) == takeStockOrder.Details.Count) |
| | | { |
| | | takeStockOrder.TakeStockStatus = TakeStockStatusEnum.çç¹å®æ.ObjToInt(); |
| | | takeStockOrderDetails.AddRange(overTakeStockOrderDetails); |
| | | takeStockOrderDetails.Add(takeStockOrderDetail); |
| | | } |
| | | //æ°æ®æä½ |
| | | _unitOfWorkManage.BeginTran(); |
| | | if (stockCount== delStockDetails.Count) |
| | | { |
| | | _stockInfoRepository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateType.èªå¨å®æ : OperateType.äººå·¥å®æ); |
| | | } |
| | | else |
| | | { |
| | | stockInfo.StockStatus = StockStatusEmun.çç¹åºå宿.ObjToInt(); |
| | | _stockInfoRepository.UpdateData(stockInfo); |
| | | if (stockInfo.Details!=null && stockInfo.Details.Count>0) |
| | | { |
| | | stockInfo.Details.ForEach(x => |
| | | { |
| | | x.Status = StockStatusEmun.çç¹åºå宿.ObjToInt(); |
| | | }); |
| | | } |
| | | } |
| | | if (delStockDetails.Count>0) |
| | | { |
| | | _stockInfoDetailRepository.DeleteAndMoveIntoHty(delStockDetails, App.User.UserId == 0 ? OperateType.èªå¨å®æ : OperateType.äººå·¥å®æ); |
| | | } |
| | | if (addStockDetails.Count>0) |
| | | { |
| | | addStockDetails.ForEach(x => |
| | | { |
| | | x.Status = StockStatusEmun.çç¹åºå宿.ObjToInt(); |
| | | }); |
| | | _stockInfoDetailRepository.AddData(addStockDetails); |
| | | } |
| | | if (updateStockDetails.Count>0) |
| | | { |
| | | updateStockDetails.ForEach(x => |
| | | { |
| | | x.Status = StockStatusEmun.çç¹åºå宿.ObjToInt(); |
| | | }); |
| | | _stockInfoDetailRepository.UpdateData(updateStockDetails); |
| | | } |
| | | _takeStockOrderDetailRepository.UpdateData(takeStockOrderDetail); |
| | | BaseDal.UpdateData(takeStockOrder); |
| | | |
| | | _unitOfWorkManage.CommitTran(); |
| | | content.OK("çç¹æå"); |
| | | } |
| | | else |
| | | { |
| | | return content.Error("请æ±ä¿¡æ¯ä¸ºç©º"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | public WebResponseContent DisEnableTakeOrder(int id) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | //è·åçç¹å |
| | | Dt_TakeStockOrder takeStockOrder = BaseDal.QueryFirst(x=>x.Id==id); |
| | | if (takeStockOrder!=null) |
| | | { |
| | | takeStockOrder.TakeStockStatus = TakeStockStatusEnum.çç¹å
³é.ObjToInt(); |
| | | BaseDal.UpdateData(takeStockOrder); |
| | | content.OK("å
³éçç¹æå!"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | } |
| | | } |