| | |
| | | using AutoMapper; |
| | | using AutoMapper; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | |
| | | using WIDESEA_Common.WareHouseEnum; |
| | | using WIDESEA_Core.Helper; |
| | | using System.Reflection; |
| | | using System.Text.RegularExpressions; |
| | | using Microsoft.AspNetCore.Http; |
| | | using HslCommunication; |
| | | using SqlSugar; |
| | | using WIDESEA_Core.Enums; |
| | | |
| | | namespace WIDESEA_OutboundService |
| | | { |
| | |
| | | _mapper = mapper; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | } |
| | | |
| | | public override PageGridData<Dt_OutSGOrder> GetPageData(PageDataOptions options) |
| | | { |
| | | // 1. è°ç¨åºç±»æ¹æ³è·ååé¡µæ°æ® |
| | | PageGridData<Dt_OutSGOrder> pageData = base.GetPageData(options); |
| | | |
| | | // 2. å¦æææ°æ®ï¼å¤çæ¯ä¸ªè®¢åçç©æç¼å·åå¹
宽 |
| | | if (pageData.Rows != null && pageData.Rows.Count > 0) |
| | | { |
| | | // è·åææè®¢åID |
| | | var orderIds = pageData.Rows.Select(o => o.Id).ToList(); |
| | | |
| | | // æ¹éæ¥è¯¢ææå
³èçæç»ï¼æOutSGOrderIdååºãIdéåºæåºï¼ä¸è®¢åæç»é¡µé¢ä¿æä¸è´ |
| | | var allDetails = BaseDal.Db.Queryable<Dt_OutSGOrderDetail>() |
| | | .Where(d => orderIds.Contains(d.OutSGOrderId)) |
| | | .OrderBy(d => d.OutSGOrderId) |
| | | .OrderByDescending(d => d.Id) |
| | | .ToList(); |
| | | |
| | | // æè®¢åIDåç»ï¼æ¯ç»æç»æIdéåºæåºï¼ä¸è®¢åæç»é¡µé¢ä¿æä¸è´ |
| | | var detailsByOrderId = allDetails.GroupBy(d => d.OutSGOrderId) |
| | | .ToDictionary(g => g.Key, g => g.OrderByDescending(d => d.Id).ToList()); |
| | | |
| | | // å¤çæ¯ä¸ªè®¢å |
| | | foreach (var order in pageData.Rows) |
| | | { |
| | | if (detailsByOrderId.TryGetValue(order.Id, out var details)) |
| | | { |
| | | // è·åææç©æç¼å·ï¼å
æ¬éå¤ç |
| | | var allMaterialNos = details |
| | | .Select(d => d.MaterialNo) |
| | | .ToList(); |
| | | |
| | | // è·åææå¯ä¸çå¹
宽 |
| | | var uniqueWidths = details |
| | | .Select(d => d.Width.ToString()) |
| | | .Distinct() |
| | | .ToList(); |
| | | |
| | | // è®¾ç½®ç©æç¼å·ï¼ææç©æç¼å·ç¨ææ åéï¼å
æ¬éå¤ç |
| | | order.MaterialNos = string.Join("/", allMaterialNos); |
| | | |
| | | // 设置å¹
宽ï¼å¦æå¹
宽æå¤ä¸ªä¸ä¸è´çæ°å¼å°±æ¾ç¤ºå¤ä¸ªï¼å¦æä¸æ ·å°±æ¾ç¤ºä¸ä¸ª |
| | | order.MaterialWides = uniqueWidths.Count == 1 |
| | | ? uniqueWidths[0] |
| | | : string.Join("/", uniqueWidths); |
| | | |
| | | // 设置æ¥å«ï¼åªæ¾ç¤ºä¸ä¸ªï¼å ä¸ºæææ¥å«ç¸åï¼ |
| | | order.BoardFluteNos = details.FirstOrDefault()?.BoardFluteNo ?? ""; |
| | | |
| | | // 设置æ¯å¦ç¼ºæï¼å¦ææä»»ä½ä¸ä¸ªæç»æ¯ç¼ºæç¶æï¼å°±è®¾ç½®ä¸ºtrue |
| | | // å¼ç¨WIDESEA_Common.OrderEnumå½åç©ºé´æ¥ä½¿ç¨OutOrderStatusEnumæä¸¾ |
| | | order.IsLackMaterial = details.Any(d => d.OutSGOrderDetailStatus == 3); // 3æ¯ç¼ºæç¶æçæä¸¾å¼ |
| | | |
| | | // çæç©æç¼ºæç¶æå符串ï¼ç©æç¼å·:ç¶æ,ç©æç¼å·:ç¶æ |
| | | var materialLackStatus = new List<string>(); |
| | | foreach (var detail in details) |
| | | { |
| | | var isLack = detail.OutSGOrderDetailStatus == 3; |
| | | materialLackStatus.Add($"{detail.MaterialNo}:{isLack.ToString().ToLower()}"); |
| | | } |
| | | order.MaterialLackStatus = string.Join(",", materialLackStatus); |
| | | } |
| | | else |
| | | { |
| | | order.MaterialNos = ""; |
| | | order.MaterialWides = ""; |
| | | order.IsLackMaterial = false; |
| | | order.MaterialLackStatus = ""; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return pageData; |
| | | } |
| | | |
| | | public WebResponseContent AddOutSGOrder(List<SGOutOrderDTO> outOrderDTOs) |
| | | { |
| | | |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | //è·åæææç¨å |
| | | //List<Dt_OutSGOrder> outSGOrders = BaseDal.Db.Queryable<Dt_OutSGOrder>().Includes(x => x.Details).ToList(); |
| | | //List<Dt_OutSGOrderDetail> outSGOrderDetails= outSGOrders.SelectMany(x=>x.Details).ToList(); |
| | | ////夿忮 |
| | | //Dt_OutSGOrderDetail? ExistAddOutOrderDetail = outSGOrderDetails.FirstOrDefault(x => outOrderDTOs.Select(t => t.BoardMpsDetailId).Distinct().Contains(x.BoardMpsDetailId)); |
| | | //if (ExistAddOutOrderDetail != null) |
| | | //{ |
| | | // return content.Error($"åºåºæç¨æç»{nameof(SGOutOrderDTO.BoardMpsDetailId)}:{ExistAddOutOrderDetail.BoardMpsDetailId}å·²åå¨"); |
| | | //} |
| | | //è·åææç©æ |
| | | List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.èå.ObjToInt() && x.MaterialSourceId != 0); |
| | | SGOutOrderDTO? sGOutOrderDTO = outOrderDTOs.FirstOrDefault(x => !materielInfos.Select(x => x.MaterielCode).Contains(x.MaterialNo)); |
| | | //SGOutOrderDTO? sGOutOrderDTO = outOrderDTOs.FirstOrDefault(x => materielInfos.FirstOrDefault(t=>t.MaterielCode.StartsWith(x.MaterialNo))==null); |
| | | if (sGOutOrderDTO != null) |
| | | { |
| | | //è·åæææç¨å |
| | | List<Dt_OutSGOrder> outSGOrders = BaseDal.Db.Queryable<Dt_OutSGOrder>().Includes(x => x.Details).ToList(); |
| | | //夿忮 |
| | | Dt_OutSGOrder? ExistAddOutOrder = outSGOrders.FirstOrDefault(x => outOrderDTOs.Select(x => x.OrderId).Distinct().Contains(x.OrderId)); |
| | | if (ExistAddOutOrder != null) |
| | | return content.Error($"ç产æç¨{sGOutOrderDTO.OrderId}ç©æ:{sGOutOrderDTO.MaterialNo}ä¸åå¨"); |
| | | } |
| | | List<Dt_OutSGOrder> AddOutSGOrders = new List<Dt_OutSGOrder>(); |
| | | foreach (var item in outOrderDTOs.OrderBy(x=>x.Number)) |
| | | { |
| | | //è·åå·¥å |
| | | Dt_OutSGOrder? ExistOutSGOrder = AddOutSGOrders.FirstOrDefault(x => x.OrderId == item.OrderId); |
| | | |
| | | //æç»æåè½¬æ¢ |
| | | Dt_OutSGOrderDetail outSGOrderDetail = _mapper.Map<Dt_OutSGOrderDetail>(item); |
| | | //è·åç©æ |
| | | Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterialNo); |
| | | string code = ExtractFirstPercentContent(outSGOrderDetail.Remark); |
| | | //å¤çç¹æ®æå®æç¨å¤æ |
| | | if (!code.IsNullOrEmpty() && code.StartsWith(outSGOrderDetail.MaterialNo)) |
| | | { |
| | | return content.Error($"åºåºæç¨åå·{nameof(SGOutOrderDTO.OrderId)}:{ExistAddOutOrder.OrderId}å·²åå¨"); |
| | | } |
| | | //è·åææç©æ |
| | | List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.èå.ObjToInt() && x.MaterialSourceId != 0); |
| | | SGOutOrderDTO? sGOutOrderDTO = outOrderDTOs.FirstOrDefault(x => !materielInfos.Select(x => x.MaterielCode).Contains(x.MaterialNo)); |
| | | if (sGOutOrderDTO != null) |
| | | { |
| | | return content.Error($"ç产æç¨{sGOutOrderDTO.OrderId}ç©æ:{sGOutOrderDTO.MaterialNo}ä¸åå¨"); |
| | | } |
| | | List<Dt_OutSGOrder> AddOutSGOrders = new List<Dt_OutSGOrder>(); |
| | | foreach (var item in outOrderDTOs) |
| | | { |
| | | //è·åå·¥å |
| | | Dt_OutSGOrder? ExistOutSGOrder = AddOutSGOrders.FirstOrDefault(x => x.OrderId == item.OrderId); |
| | | //è·åç©æ |
| | | Dt_MaterielInfo materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterialNo); |
| | | //æç»æåè½¬æ¢ |
| | | Dt_OutSGOrderDetail outSGOrderDetail = _mapper.Map<Dt_OutSGOrderDetail>(item); |
| | | outSGOrderDetail.MaterialName = materielInfo.MaterielName; |
| | | //夿工忝å¦å·²ç»åå¨ |
| | | if (ExistOutSGOrder != null) |
| | | materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == code); |
| | | if (materielInfo==null) |
| | | { |
| | | ExistOutSGOrder.Details.Add(outSGOrderDetail); |
| | | return content.Error($"ç产æç¨{item.OrderId}æå®æç¨ç©æ:{code}ä¸åå¨"); |
| | | } |
| | | else |
| | | { |
| | | outSGOrderDetail.MaterialNo = code; |
| | | } |
| | | outSGOrderDetail.MaterialName = materielInfo.MaterielName; |
| | | |
| | | //夿工忝å¦å·²ç»åå¨ |
| | | if (ExistOutSGOrder != null) |
| | | { |
| | | outSGOrderDetail.Number = ExistOutSGOrder.Number; |
| | | ExistOutSGOrder.Details.Add(outSGOrderDetail); |
| | | } |
| | | else |
| | | { |
| | | Dt_OutSGOrder outSGOrder = _mapper.Map<Dt_OutSGOrder>(item); |
| | | outSGOrderDetail.Number = outSGOrder.Number; |
| | | outSGOrder.Details = new List<Dt_OutSGOrderDetail>() { outSGOrderDetail }; |
| | | AddOutSGOrders.Add(outSGOrder); |
| | | } |
| | | } |
| | | BaseDal.Db.InsertNav(AddOutSGOrders).Include(x => x.Details).ExecuteCommand(); |
| | | content.OK("æ¥æ¶æç¨æå"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | public static string ExtractFirstPercentContent(string input) |
| | | { |
| | | if (string.IsNullOrEmpty(input)) |
| | | return null; |
| | | |
| | | Dt_OutSGOrder outSGOrder = _mapper.Map<Dt_OutSGOrder>(item); |
| | | outSGOrder.Details = new List<Dt_OutSGOrderDetail>() { outSGOrderDetail }; |
| | | AddOutSGOrders.Add(outSGOrder); |
| | | } |
| | | } |
| | | BaseDal.Db.InsertNav(AddOutSGOrders).Include(x => x.Details).ExecuteCommand(); |
| | | content.OK("æ¥æ¶æç¨æå"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | Regex regex = new Regex(@"%(.*?)%"); |
| | | Match match = regex.Match(input); |
| | | |
| | | if (match.Success && match.Groups[1].Success) |
| | | { |
| | | return match.Groups[1].Value.Trim(); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | } |
| | | } |