using Estsh.Core.Model.EnumUtil; using Estsh.Core.Models; using Estsh.Core.Quartz.BaseService; using Estsh.Core.Util; using Estsh.Core.Wms.IRepositories; using System.Diagnostics; namespace Estsh.Core.Wms.Jobs { /// /// 处理成品下线报工业务 /// public class OutPdlineJob : IJobService { private readonly IOutPdlineRepository repository; private readonly IPdlineRepository pdlineRepository; private readonly IBomRepository bomRepository; public OutPdlineJob(IOutPdlineRepository _repository, IPdlineRepository _pdlineRepository, IBomRepository _bomRepository) { this.repository = _repository; this.pdlineRepository = _pdlineRepository; this.bomRepository = _bomRepository; } public string ExecuteService(string parameter) { try { if (string.IsNullOrEmpty(parameter)) { return "需要配置产线代码!"; } List wmsRetrs = repository.GetFinishedLineOffInfo(parameter); if (wmsRetrs.Count > 0) { repository.InsertFinishedLineOffInfo(wmsRetrs); // "没有待处理的成品下线数据!"; } List outPdlines = repository.GetOutPdlineInfo(parameter); if (outPdlines.Count <= 0) { return "没有待报工数据!"; } List pdlines = pdlineRepository.GetPdlineInfo(); //LogHelper.Info("当前操作:开始本次执行《成品下线JOB》,共计"+ outPdlines.Count+ "条下线数据,当前时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); List bomDetails = bomRepository.GetReportBomInfo("");//查BOM信息作为实体查询 foreach (var outPdline in outPdlines) { //LogHelper.Info("当前操作:开始执行第" + (outPdlines.IndexOf(outPdline)+1) + "条," + outPdline.SerialNumber + "条码(判断是否有库位),当前时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); List bomDetail = bomDetails.Where(a => a.PartId == outPdline.PartId).ToList(); if (bomDetail.Count <= 0) { repository.UpdateOutPdlineInfo(outPdline, MesEnumUtil.OutPdlineReportStatus.EXCEPTION, "找不到BOM信息!"); continue; } var pdline = pdlines.Where(a => a.PdlineCode == outPdline.PdlineCode).FirstOrDefault(); if (outPdline.ProductType == (int)MesEnumUtil.OutPdlineProductType.FINISHED_PRODUCT && (pdline == null || string.IsNullOrEmpty(pdline.DestLocateName))) { repository.UpdateOutPdlineInfo(outPdline, MesEnumUtil.OutPdlineReportStatus.EXCEPTION, "成品入库找不到产线默认的入库库位!"); continue; } if (outPdline.ProductType == (int)MesEnumUtil.OutPdlineProductType.WIP && (pdline == null || string.IsNullOrEmpty(pdline.DestLocateName))) { repository.UpdateOutPdlineInfo(outPdline, MesEnumUtil.OutPdlineReportStatus.EXCEPTION, "半成品入库找不到产线默认的入库库位!"); continue; } //LogHelper.Info("当前操作:结束执行第" + (outPdlines.IndexOf(outPdline) + 1) + "条," + outPdline.SerialNumber + "条码(判断是否有库位),当前时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); //LogHelper.Info("当前操作:开始执行第" + (outPdlines.IndexOf(outPdline) + 1) + "条," + outPdline.SerialNumber + "条码(逻辑处理),当前时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); repository.DoOutPdline(outPdline, bomDetail, pdline, bomDetails); //LogHelper.Info("当前操作:结束执行第" + (outPdlines.IndexOf(outPdline) + 1) + "条," + outPdline.SerialNumber + "条码(逻辑处理),当前时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } //LogHelper.Info("当前操作:结束执行《成品下线JOB》,当前时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); return "成品下线报工成功!"; } catch (Exception ex) { LogHelper.Error("成品下线报工错误!" + ex); return "成品下线报工错误!" + ex.Message; } } } }