using AutoMapper; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.MaterielEnum; using WIDESEA_Common.OrderEnum; using WIDESEA_Core; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; using WIDESEA_DTO.MES; using WIDESEA_IBasicRepository; using WIDESEA_IInboundRepository; using WIDESEA_IInboundService; using WIDESEA_Model.Models; namespace WIDESEA_InboundService { public class MESProInOrderInfoService : ServiceBase, IMESProInOrderInfoService { public IMESProInOrderInfoRepository Repository => BaseDal; private readonly IBasicRepository _basicRepository; private readonly IAGVStationInfoRepository _agvStationInfoRepository; private readonly IMapper _mapper; public MESProInOrderInfoService(IMESProInOrderInfoRepository BaseDal,IBasicRepository basicRepository,IMapper mapper, IAGVStationInfoRepository agvStationInfoRepository) : base(BaseDal) { _basicRepository = basicRepository; _mapper = mapper; _agvStationInfoRepository = agvStationInfoRepository; } public class TEMp { public int ID { get; set; } public string Name { get; set; } } /// /// 成品/半成品信息同步接口 /// public WebResponseContent ReceiveProCodeInfo(List proInDTOs) { WebResponseContent content = new WebResponseContent(); try { if (proInDTOs==null || proInDTOs.Count<=0) { return content.Error("传入信息为空"); } //获取所有成品,半成品信息 List proInOrderInfos = BaseDal.QueryData(); List temp = BaseDal.QueryData().Select(x => new TEMp() { ID=x.Id,Name=x.BarCode}).Where(x => x.Name.Split("-")[1].StartsWith("U1")).ToList(); //获取所有物料信息 List materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.MaterielInvOrgId == MaterielInvOrgEnum.新厂.ObjToInt()); //获取所有领料计划 MESProInDTO? CheckMaterialCode = proInDTOs.FirstOrDefault(x => !materielInfos.Select(x => x.MaterielCode).Contains(x.MaterialCode)); if (CheckMaterialCode != null) { return content.Error($"物料编码{nameof(MESProInDTO.MaterialCode)}:{CheckMaterialCode.MaterialCode}信息不存在"); } //获取所有AGV点位 List aGVStationInfos = _agvStationInfoRepository.QueryData(x => !string.IsNullOrEmpty(x.MESPointCode)); MESProInDTO? CheckPointCode = proInDTOs.FirstOrDefault(x => !aGVStationInfos.Select(x => x.MESPointCode).Contains(x.PointCode)); if (CheckPointCode != null) { return content.Error($"周转位{nameof(MESReturnIssueDTO.PointCode)}{CheckPointCode.PointCode}不存在"); } //判断是否存在重复 MESProInDTO? proInDTO = proInDTOs.FirstOrDefault(x=>x.IsMantissa==false && proInOrderInfos.Select(x=>x.BarCode).Contains(x.BarCode)); if (proInDTO!=null) { return content.Error($"{proInDTO.ProductOrderNo}生产工单{proInDTO.BarCode}条码已存在"); } Dt_MESProInOrderInfo? proInOrderInfo = proInOrderInfos.FirstOrDefault(x=>x.MESProInStatus==InOrderStatusEnum.关闭.ObjToInt() && proInDTOs.Select(x=>x.ProductOrderNo).Distinct().Contains(x.ProductOrderNo)); if (proInOrderInfo != null) { return content.Error($"{proInOrderInfo.ProductOrderNo}生产工单已关闭"); } List AddMESProInOrders = new List(); foreach (var item in proInDTOs) { Dt_MaterielInfo materielInfo = materielInfos.FirstOrDefault(x=>x.MaterielCode== item.MaterialCode); Dt_MESProInOrderInfo AddproInOrderInfo = _mapper.Map(item); AddproInOrderInfo.WarehouseId = materielInfo.WarehouseId; AddproInOrderInfo.MESProOrderType = materielInfo.MaterielSourceType; AddMESProInOrders.Add(AddproInOrderInfo); } BaseDal.AddData(AddMESProInOrders); content.OK("接收成功"); } catch (Exception ex) { content.Error(ex.Message); } return content; } /// /// MES工单停止接口 /// /// public WebResponseContent ReceiveProOrderStop(MESOrderStopDTO orderStopDTO) { WebResponseContent content = new WebResponseContent(); try { if (orderStopDTO == null) { return content.Error("传入信息不能为空"); } //获取对应单据 List? mESProInOrderInfos = BaseDal.QueryData(x => x.ProductOrderNo == orderStopDTO.ProductOrderNo && x.MESProInStatus != OutOrderStatusEnum.关闭.ObjToInt()); if (mESProInOrderInfos == null || mESProInOrderInfos.Count <= 0) { return content.Error($"成品或半成品工单{nameof(MESOrderStopDTO.ProductOrderNo)}{orderStopDTO.ProductOrderNo}不存在或已关闭"); } mESProInOrderInfos.ForEach(x => { x.MESProInStatus = OutOrderStatusEnum.关闭.ObjToInt(); }); BaseDal.UpdateData(mESProInOrderInfos); content.OK($"工单{nameof(MESOrderStopDTO.ProductOrderNo)}{orderStopDTO.ProductOrderNo}停止成功"); } catch (Exception ex) { content.Error(ex.Message); } return content; } } }