| | |
| | | using WIDESEA_Common.CommonEnum; |
| | | using WIDESEA_Core.Helper; |
| | | using Microsoft.AspNetCore.Mvc.RazorPages; |
| | | using WIDESEA_External.ERPService; |
| | | using WIDESEA_InboundRepository; |
| | | using WIDESEA_IStockRepository; |
| | | using WIDESEA_Common.StockEnum; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_External.Model; |
| | | using SqlSugar; |
| | | |
| | | namespace WIDESEA_InboundService |
| | | { |
| | |
| | | public ITakeStockOrderRepository Repository => BaseDal; |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IBasicRepository _basicRepository; |
| | | public TakeStockOrderService(ITakeStockOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository) : base(BaseDal) |
| | | private readonly IInvokeERPService _invokeERPService; |
| | | private readonly ITakeStockOrderDetailRepository _takeStockOrderDetailRepository; |
| | | private readonly IStockInfoRepository _stockInfoRepository; |
| | | private readonly IStockInfoDetailRepository _stockInfoDetailRepository; |
| | | public TakeStockOrderService(ITakeStockOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository,IInvokeERPService invokeERPService,ITakeStockOrderDetailRepository takeStockOrderDetailRepository,IStockInfoRepository stockInfoRepository,IStockInfoDetailRepository stockInfoDetailRepository) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _basicRepository = basicRepository; |
| | | _invokeERPService = invokeERPService; |
| | | _takeStockOrderDetailRepository= takeStockOrderDetailRepository; |
| | | _stockInfoRepository= stockInfoRepository; |
| | | _stockInfoDetailRepository= stockInfoDetailRepository; |
| | | } |
| | | /// <summary> |
| | | /// æ°å¢ |
| | |
| | | } |
| | | 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 = (float)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 = (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 = (float)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 ? OperateTypeEnum.èªå¨å®æ : OperateTypeEnum.äººå·¥å®æ); |
| | | } |
| | | 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 ? OperateTypeEnum.èªå¨å®æ : OperateTypeEnum.äººå·¥å®æ); |
| | | } |
| | | 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); |
| | | //æäº¤ERPé»è¾ |
| | | //if (takeStockOrder.TakeStockStatus== TakeStockStatusEnum.çç¹å®æ.ObjToInt()) |
| | | //{ |
| | | // ERPTakeStockModel eRPTakeStock = new ERPTakeStockModel() |
| | | // { |
| | | // Way = 1, |
| | | // UniqueTag = takeStockOrder.Id.ToString(), |
| | | // Code = takeStockOrder.OrderNo, |
| | | // FiscalPeriotime = takeStockOrder.CreateDate.ToString("yyyy-MM-dd"), |
| | | // Name=takeStockOrder.OrderNo, |
| | | // WarehouseCode= warehouse.WarehouseCode, |
| | | // Createuser=takeStockOrder.Creater, |
| | | // Createtime= takeStockOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | // Details=new List<TakeDetailsItem>() |
| | | // }; |
| | | // foreach (var item in takeStockOrderDetails) |
| | | // { |
| | | // TakeDetailsItem takeDetailsItem = new TakeDetailsItem() |
| | | // { |
| | | // MaterialsCode=item.MaterielCode, |
| | | // LocationCode=item.LocationCode, |
| | | // Lotno=item.BatchNo, |
| | | // Sysqty=item.SysQty.ObjToDecimal(), |
| | | // Qty=item.Qty.ObjToDecimal() |
| | | // }; |
| | | // eRPTakeStock.Details.Add(takeDetailsItem); |
| | | // } |
| | | // string response = _invokeERPService.InvokeTakeStockApi(eRPTakeStock); |
| | | // ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>(); |
| | | // if (erpRequestContent.res != 1) |
| | | // { |
| | | // throw new Exception("忥ERP失败,é误信æ¯:" + erpRequestContent.Data); |
| | | // } |
| | | //} |
| | | _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) |
| | | { |