using Estsh.Core.Model.EnumUtil; using Estsh.Core.Models; using Estsh.Core.Quartz.BaseService; using Estsh.Core.Util; using Estsh.Core.Wms.IRepositories; namespace Estsh.Core.Wms.Jobs { /// /// 针对MES发送过来的成品发运信息,WMS自动触发成品发运处理 /// public class JisShipJob : IJobService { private readonly IJisShippingRepository repository; private readonly IStockRepository stockRepository; public JisShipJob(IJisShippingRepository _repository, IStockRepository _stockRepository) { this.repository = _repository; this.stockRepository = _stockRepository; } public string ExecuteService(string parameter) { try { List mesWmsJis = repository.GetFinishedShippedInfo(); if (mesWmsJis.Count > 0) { repository.InsertFinishedShippedInfo(mesWmsJis);// "待处理的成品发运JIS!"; } List jisShips = repository.GetJisShippingInfo(); if (jisShips.Count <= 0) { return "没有待JIS发运的数据!"; } var OrderNos = jisShips.Select(a => a.OrderNo).Distinct().ToList(); foreach (var OrderNo in OrderNos) { List jisShipList = jisShips.Where(a => a.OrderNo == OrderNo).ToList(); List hz = new List(); List hzStock = new List(); foreach (var jisShip in jisShipList) { var cartonInfo = stockRepository.GetCartonInfo(jisShip.SerialNumber); if (cartonInfo == null) { repository.UpdateJisShippingInfo(jisShip, MesEnumUtil.JisShipStatus.EXCEPTION, "此成品还未入库!"); continue; } if (cartonInfo.Status == (int)WmsEnumUtil.StockStatus.SHIPPED) { repository.UpdateJisShippingInfo(jisShip, MesEnumUtil.JisShipStatus.EXCEPTION, "此成品已发运,不能重复发运!"); continue; } if (cartonInfo.Status != (int)WmsEnumUtil.StockStatus.INSTOCKED) { repository.UpdateJisShippingInfo(jisShip, MesEnumUtil.JisShipStatus.EXCEPTION, "此成品库存状态不是在库状态!"); continue; } if (hz.Exists(a => a.PartNo == jisShip.PartNo)) { hz.Where(a => a.PartNo == jisShip.PartNo).FirstOrDefault().Qty += jisShip.Qty; } else { hz.Add(jisShip); } hzStock.Add(cartonInfo); } repository.DoJisShip(hz, hzStock); } return "JIS发运成功!"; } catch (Exception ex) { LogHelper.Error("JIS发运错误!" + ex); return "JIS发运错误!" + ex.Message; } } } }