| | |
| | | using Newtonsoft.Json.Serialization; |
| | | using Newtonsoft.Json; |
| | | using WIDESEA_Common.APIEnum; |
| | | using System.Reflection.Metadata; |
| | | using Microsoft.Extensions.FileSystemGlobbing.Internal; |
| | | using System.Text.RegularExpressions; |
| | | using WIDESEA_Common.CommonEnum; |
| | | using WIDESEA_Core.CodeConfigEnum; |
| | | |
| | | namespace WIDESEA_TaskInfoService |
| | | { |
| | |
| | | { |
| | | return content.Error("æªæ¾å°ä»åºä¿¡æ¯"); |
| | | } |
| | | //éå¶ä»»å¡ |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.SourceAddress == bagInfoModel.WorkCenter && (x.TaskStatus == TaskStatusEnum.New.ObjToInt() || x.TaskStatus == TaskStatusEnum.Line_Execute.ObjToInt() || x.TaskStatus == TaskStatusEnum.Line_Executing.ObjToInt())); |
| | | if (task!=null) |
| | | { |
| | | return content.Error($"线ä½åå¨ä»»å¡ææ§è¡ä¸,è¶æ¡å·{task.PalletCode}"); |
| | | } |
| | | ////éå¶ä»»å¡ |
| | | //Dt_Task task = BaseDal.QueryFirst(x => x.SourceAddress == bagInfoModel.WorkCenter && (x.TaskStatus == TaskStatusEnum.New.ObjToInt() || x.TaskStatus == TaskStatusEnum.Line_Execute.ObjToInt() || x.TaskStatus == TaskStatusEnum.Line_Executing.ObjToInt())); |
| | | //if (task!=null) |
| | | //{ |
| | | // return content.Error($"线ä½åå¨ä»»å¡ææ§è¡ä¸,è¶æ¡å·{task.PalletCode}"); |
| | | //} |
| | | Dt_Warehouse warehouseLocation = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA71.ToString()); |
| | | Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.WarehouseId == warehouseLocation.WarehouseId); |
| | | if (locationInfo == null) |
| | |
| | | List<string> proDetailsExists = _stockRepository.ProStockInfoDetailRepository.QueryData().Select(x=>x.BagNo).ToList(); |
| | | //å
å
ä¿¡æ¯ç»ç |
| | | List<Dt_MesProInOrderDetail> mesProInOrderDetails = new List<Dt_MesProInOrderDetail>(); |
| | | string palletCode = @"^C\d{5}$"; // æ£åè¡¨è¾¾å¼ |
| | | bool isValid = Regex.IsMatch(bagInfoModel.BatchNo, palletCode); |
| | | if (!isValid && bagInfoModel.BatchNo.Substring(0,3).ToUpper()!= "CPK") |
| | | { |
| | | return content.Error($"æ¡ç æ ¼å¼é误{bagInfoModel.BatchNo}"); |
| | | } |
| | | if (bagInfoModel.BatchNo.Substring(0, 3).ToUpper() == "CPK") |
| | | { |
| | | WebResponseContent inProRespone = InPKProStock(bagInfoModel, proDetailsExists, warehouse); |
| | | if (!inProRespone.Status) |
| | | { |
| | | return content.Error(inProRespone.Message); |
| | | } |
| | | return content.OK(inProRespone.Message); |
| | | } |
| | | else if (isValid) |
| | | { |
| | | |
| | | } |
| | | foreach (var item in bagInfoModel.BagDetails) |
| | | { |
| | | if (proDetailsExists.Contains(item.BagNo)) |
| | |
| | | Dt_MesProInOrder mesProInOrder = new Dt_MesProInOrder() |
| | | { |
| | | WarehouseId = warehouse.WarehouseId, |
| | | ProInOrderNo = _outboundService.OutboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProInCodeRule)), |
| | | BatchNo = bagInfoModel.BatchNo, |
| | | WorkCenter = bagInfoModel.WorkCenter, |
| | | MesProStatus = InOrderStatusEnum.å
¥åºä¸.ObjToInt(), |
| | |
| | | _unitOfWorkManage.BeginTran(); |
| | | int taskId = BaseDal.AddData(newTask); |
| | | newTask.TaskId = taskId; |
| | | Db.InsertNav(mesProInOrder).Include(x => x.Details).ExecuteCommand(); |
| | | Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand(); |
| | | |
| | | //ä¸ä¼ ERP |
| | | WebResponseContent responseContent = _inboundOrderService.FeedbackProIn(mesProInOrder); |
| | | if (!responseContent.Status) |
| | | { |
| | | mesProInOrder.UpErpStatus = WhetherEnum.False.ObjToInt(); |
| | | mesProInOrder.Remark = responseContent.Message; |
| | | } |
| | | else |
| | | { |
| | | mesProInOrder.UpErpStatus = WhetherEnum.True.ObjToInt(); |
| | | } |
| | | Db.InsertNav(mesProInOrder).Include(x => x.Details).ExecuteCommand(); |
| | | _unitOfWorkManage.CommitTran(); |
| | | //æ¨éä»»å¡ |
| | | PushTasksToWCS(new List<Dt_Task> { newTask }); |
| | |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | public WebResponseContent InPKProStock(MesBagInfoModel bagInfoModel, List<string> proDetailsExists,Dt_Warehouse wareSource) |
| | | { |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==WarehouseEnum.HA101.ToString()); |
| | | if (warehouse==null) |
| | | { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°å¹³åºä»åºä¿¡æ¯"); |
| | | } |
| | | //å
å
ä¿¡æ¯ç»ç |
| | | List<Dt_MesProInOrderDetail> mesProInOrderDetails = new List<Dt_MesProInOrderDetail>(); |
| | | foreach (var item in bagInfoModel.BagDetails) |
| | | { |
| | | if (proDetailsExists.Contains(item.BagNo)) |
| | | { |
| | | return WebResponseContent.Instance.Error($"å
å
{item.BagNo}å·²åå¨"); |
| | | } |
| | | foreach (var child in item.BagItems) |
| | | { |
| | | Dt_MesProInOrderDetail mesProInOrderDetail = new Dt_MesProInOrderDetail() |
| | | { |
| | | BagNo = item.BagNo, |
| | | ProductCode = item.ProductCode, |
| | | ProductVersion = item.ProductVersion, |
| | | SETQty = child.SETQty, |
| | | OKPCSQTY = child.OKPCSQTY, |
| | | DateCode = item.DateCode, |
| | | XQty = child.XQty, |
| | | XSite = child.XSite, |
| | | Weight = item.Weight, |
| | | PackingDate = item.PackingDate, |
| | | LotNumber = child.LotNumber, |
| | | ERPOrder = child.ERPOrder, |
| | | SaleOrder = child.SaleOrder, |
| | | MoNumber = child.MoNumber, |
| | | OverInQuantity= child.OKPCSQTY |
| | | }; |
| | | mesProInOrderDetails.Add(mesProInOrderDetail); |
| | | } |
| | | } |
| | | List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); |
| | | foreach (var item in mesProInOrderDetails) |
| | | { |
| | | proStockInfoDetails.Add(_mapper.Map<Dt_ProStockInfoDetail>(item)); |
| | | } |
| | | Dt_MesProInOrder mesProInOrder = new Dt_MesProInOrder() |
| | | { |
| | | WarehouseId = warehouse.WarehouseId, |
| | | ProInOrderNo = _outboundService.OutboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProInCodeRule)), |
| | | BatchNo = bagInfoModel.BatchNo, |
| | | WorkCenter = bagInfoModel.WorkCenter, |
| | | MesProStatus = InOrderStatusEnum.å
¥åºå®æ.ObjToInt(), |
| | | UnPackStock = bagInfoModel.UnPackStock, |
| | | CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), |
| | | Details = mesProInOrderDetails |
| | | }; |
| | | ProStockAttributeEnum attributeEnum = new ProStockAttributeEnum(); |
| | | switch (wareSource.WarehouseCode) |
| | | { |
| | | case "HA71": |
| | | attributeEnum = ProStockAttributeEnum.æå; |
| | | break; |
| | | case "HA72": |
| | | attributeEnum = ProStockAttributeEnum.å°¾æ°; |
| | | break; |
| | | case "HA73": |
| | | attributeEnum = ProStockAttributeEnum.ç å; |
| | | break; |
| | | default: |
| | | throw new Exception("æªæ¾å°è¯¥åºå屿§"); |
| | | } |
| | | proStockInfoDetails.ForEach(x => |
| | | { |
| | | x.ProOutDetailStatus = StockStatusEmun.å¹³åºå
¥åºå®æ.ObjToInt(); |
| | | }); |
| | | Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo() |
| | | { |
| | | PalletCode = bagInfoModel.BatchNo, |
| | | PalletType = 1, |
| | | LocationCode= "æåå¾
åè´§åº", |
| | | ProStockAttribute = attributeEnum.ObjToInt(), |
| | | WarehouseId = warehouse.WarehouseId, |
| | | StockStatus = StockStatusEmun.å¹³åºå
¥åºå®æ.ObjToInt(), |
| | | proStockInfoDetails = proStockInfoDetails |
| | | }; |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand(); |
| | | //ä¸ä¼ ERP |
| | | WebResponseContent responseContent = _inboundOrderService.FeedbackProIn(mesProInOrder); |
| | | if (!responseContent.Status) |
| | | { |
| | | mesProInOrder.UpErpStatus = WhetherEnum.False.ObjToInt(); |
| | | mesProInOrder.Remark = responseContent.Message; |
| | | } |
| | | else |
| | | { |
| | | mesProInOrder.UpErpStatus = WhetherEnum.True.ObjToInt(); |
| | | } |
| | | Db.InsertNav(mesProInOrder).Include(x => x.Details).ExecuteCommand(); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK("æ¥æ¶æå"); |
| | | } |
| | | /// <summary> |
| | | /// å¤å
ä¿¡æ¯æ¥æ¶ |
| | |
| | | x.ProOutDetailStatus = StockStatusEmun.å¹³åºå
¥åºå®æ.ObjToInt(); |
| | | }); |
| | | |
| | | Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo() |
| | | { |
| | | PalletCode = boxInfoModel.BoxNo, |
| | | PalletType = 0, |
| | | LocationCode="æåå¾
åè´§åº", |
| | | WarehouseId = warehouse.WarehouseId, |
| | | ShipmentOrder = shipmentOrder, |
| | | StockStatus = StockStatusEmun.å¹³åºå
¥åºå®æ.ObjToInt(), |
| | | proStockInfoDetails = proStockInfoDetails |
| | | }; |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | //æ ¹æ®å¤å
ä¿¡æ¯è§£ç»å
å
ä¸è¶æ¡åºåå
³ç³» |
| | | WebResponseContent UnBindContent = _stockService.ProStockInfoService.UnBindStock(proStockInfoDetails); |
| | | if (!UnBindContent.Status) |
| | | { |
| | | throw new Exception(UnBindContent.Message); |
| | | } |
| | | Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand(); |
| | | if (UnBindContent.Data!=null) |
| | | { |
| | | Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo() |
| | | { |
| | | PalletCode = boxInfoModel.BoxNo, |
| | | PalletType = 0, |
| | | LocationCode = "æåå¾
åè´§åº", |
| | | WarehouseId = warehouse.WarehouseId, |
| | | ShipmentOrder = shipmentOrder, |
| | | StockStatus = StockStatusEmun.å¹³åºå
¥åºå®æ.ObjToInt(), |
| | | proStockInfoDetails = UnBindContent.Data as List<Dt_ProStockInfoDetail>, |
| | | ProStockAttribute = ProStockAttributeEnum.æå.ObjToInt() |
| | | }; |
| | | //æ ¹æ®å¤å
ä¿¡æ¯è§£ç»å
å
ä¸è¶æ¡åºåå
³ç³» |
| | | Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand(); |
| | | } |
| | | _unitOfWorkManage.CommitTran(); |
| | | return content.OK("å¤å
æ¥æ¶æå"); |
| | | } |
| | |
| | | //è·ååºåºå |
| | | Dt_ProOutOrder proOutOrder = _outboundService.ProOutOrderService.Repository.QueryFirst(x => x.Id == proOutOrderDetail.ProOrderId); |
| | | //è·åå®¢æ· |
| | | Dt_CustomerInfo customerInfo = _basicRepository.CustomerInfoRepository.QueryFirst(x => x.Code == proOutOrderDetail.Customer); |
| | | Dt_CustomerInfo customerInfo = _basicRepository.CustomerInfoRepository.QueryFirst(x => x.Code == proOutOrderDetail.EndCustomer); |
| | | List<string> outBags = proStockInfoDetails.Where(x => x.OutboundQuantity > 0).Select(x => x.BagNo).ToList(); |
| | | outBags.ForEach(x => |
| | | { |
| | | x = string.Format($"{0},{1},{2},0,{3}",x,outProStockInfo.PCode,outProStockInfo.DateCode,outProStockInfo.AssignQuantity.ObjToInt()); |
| | | }); |
| | | MesShipOrderDetail orderDetail = new MesShipOrderDetail() |
| | | { |
| | | ProductCode = proOutOrderDetail.PCode, |
| | | ProductVersion = proOutOrderDetail.PVer, |
| | | Qty = outProStockInfo.AssignQuantity, |
| | | DateCode= outProStockInfo.DateCode, |
| | | DateCode = outProStockInfo.DateCode, |
| | | SaleOrder = proOutOrderDetail.SaleOrder, |
| | | Sequence = outProStockInfo.Id, |
| | | WorkCenter = "SPCK_OUTER-001", |
| | | PlasticBox=new List<PlasticBox> { new PlasticBox() { PlasticBoxNumber= outProStockInfo.PalletCode,Insourcings=outBags } } |
| | | PlasticBox = new List<PlasticBox> { new PlasticBox() |
| | | { |
| | | PlasticBoxNumber= outProStockInfo.PalletCode, |
| | | Insourcings = outBags |
| | | } |
| | | } |
| | | }; |
| | | mesShipOrderDetails.Add(orderDetail); |
| | | MesShipmentOrderSync shipmentOrderSync = new MesShipmentOrderSync() |
| | | { |
| | | ShipmentOrder = proOutOrder.ProOutOrderNo+"-"+ outProStockInfo.TaskNum, |
| | | PlantShipDate = proOutOrder.PlantShipDate.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | Customer = proOutOrderDetail.Customer, |
| | | Customer = proOutOrderDetail.EndCustomer, |
| | | FactoryCode = proOutOrderDetail.FactoryCode, |
| | | ShipName = customerInfo.Name, |
| | | ShippingAddress = customerInfo.NickName, |