| | |
| | | /// <summary> |
| | | /// æªæ¶è´§ |
| | | /// </summary> |
| | | [Description("æªæ¶è´§")] |
| | | [Description("æ¶è´§")] |
| | | NotReceived = 0, |
| | | |
| | | /// <summary> |
| | | /// æ¶è´§ä¸ |
| | | /// </summary> |
| | | [Description("æ¶è´§ä¸")] |
| | | Receiving = 1, |
| | | /// <summary> |
| | | /// æ¶è´§å®æ |
| | | /// </summary> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using System.Net.Http.Headers; |
| | | using WIDESEA_Core.LogHelper; |
| | | using System.Security.Cryptography; |
| | | |
| | | namespace WIDESEA_Core.Helper |
| | | { |
| | | public class HttpMesHelper |
| | | { |
| | | public static string Post(string serviceAddress, string requestJson = null, string contentType = "application/json", Dictionary<string, string>? headers = null) |
| | | { |
| | | string result = string.Empty; |
| | | DateTime beginDate = DateTime.Now; |
| | | try |
| | | { |
| | | using (HttpContent httpContent = new StringContent(requestJson)) |
| | | { |
| | | httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); |
| | | |
| | | using HttpClient httpClient = new HttpClient(); |
| | | httpClient.Timeout = new TimeSpan(0, 0, 60); |
| | | long currentTimestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); |
| | | string key = $"appkey=1830415116987195392×tamp={currentTimestamp}"; |
| | | string authorization = "Open " + GetStr(key); |
| | | headers = new Dictionary<string, string> |
| | | { |
| | | { "Appkey", "1830415116987195392" }, |
| | | { "Authorization", authorization }, |
| | | { "site_tenant_id", "ced19269-2b83-4577-be43-8cc2f700251e" } |
| | | }; |
| | | if (headers != null) |
| | | { |
| | | foreach (var header in headers) |
| | | httpClient.DefaultRequestHeaders.Add(header.Key, header.Value); |
| | | } |
| | | HttpResponseMessage responseMessage = httpClient.PostAsync(serviceAddress, httpContent).Result; |
| | | result = responseMessage.Content.ReadAsStringAsync().Result; |
| | | } |
| | | return result; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | finally |
| | | { |
| | | Logger.Add(serviceAddress, requestJson == null ? "" : requestJson, result, beginDate); |
| | | } |
| | | } |
| | | public static string GetStr(string textToEncrypt) |
| | | { |
| | | string publicKey; |
| | | string privateKey; |
| | | GenerateRSAKeyPair(out publicKey, out privateKey); |
| | | byte[] encryptedBytes = RSAEncrypt(textToEncrypt, publicKey); |
| | | // å¯ä»¥å°å å¯åçåèæ°ç»è½¬æ¢ä¸ºBase64å符串æ¹ä¾¿åç»å¤çï¼ä¾å¦ä¼ è¾ç |
| | | string encryptedBase64 = Convert.ToBase64String(encryptedBytes); |
| | | return encryptedBase64; |
| | | } |
| | | public static void GenerateRSAKeyPair(out string publicKey, out string privateKey) |
| | | { |
| | | using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048)) |
| | | { |
| | | publicKey = rsa.ToXmlString(false); |
| | | privateKey = rsa.ToXmlString(true); |
| | | } |
| | | } |
| | | public static byte[] RSAEncrypt(string plainText, string publicKey) |
| | | { |
| | | byte[] encryptedData; |
| | | using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) |
| | | { |
| | | rsa.FromXmlString(publicKey); |
| | | // å°ææ¬è½¬æ¢ä¸ºUTF8ç¼ç çåèæ°ç» |
| | | byte[] plainBytes = Encoding.UTF8.GetBytes(plainText); |
| | | // 使ç¨SHA1åå¸ç®æ³ä»¥åPkcs1å¡«å
è§åè¿è¡å å¯ |
| | | encryptedData = rsa.Encrypt(plainBytes, true); |
| | | } |
| | | return encryptedData; |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.Attributes; |
| | | |
| | | namespace WIDESEA_DTO.MES |
| | | { |
| | | public class MESRoot<T> |
| | | { |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public string From { get; set; } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public string DateTime { get; set; } |
| | | |
| | | public T Content { get; set; } |
| | | } |
| | | /// <summary> |
| | | ///æµè¯æ¶åæ¥ |
| | | /// </summary> |
| | | public class TestToolSynInfo |
| | | { |
| | | /// <summary> |
| | | /// æµè¯æ¶æ¹æ¬¡å· |
| | | /// </summary> |
| | | public string ToolCode { get; set; } |
| | | /// <summary> |
| | | /// åå§å¯¿å½ |
| | | /// </summary> |
| | | public int Life { get; set; } |
| | | |
| | | } |
| | | } |
| | |
| | | [PropertyValidate("æµè¯æ¶æ¹æ¬¡å·", NotNullAndEmpty = true)] |
| | | public string TestToolCode { get; set; } |
| | | } |
| | | /// <summary> |
| | | ///æµè¯æ¶åæ¥ |
| | | /// </summary> |
| | | public class TestToolSynInfo |
| | | { |
| | | /// <summary> |
| | | /// æµè¯æ¶æ¹æ¬¡å· |
| | | /// </summary> |
| | | public string ToolCode { get; set; } |
| | | /// <summary> |
| | | /// åå§å¯¿å½ |
| | | /// </summary> |
| | | public int Life { get; set; } |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | WebResponseContent FeedbackInboundOrder(int id); |
| | | |
| | | WebResponseContent MaterielGroup(SaveModel saveModel); |
| | | //å
¥åºå®æä¸æ¥ |
| | | WebResponseContent FeedbackInboundOrder(Dt_StockInfo stockInfo); |
| | | } |
| | | } |
| | |
| | | /// <returns></returns> |
| | | MesResponseContent TestScrap(TestToolScrap toolScrap); |
| | | WebResponseContent IsRelocation(int taskNum, string locationCode); |
| | | WebResponseContent TestSynStock(TestToolSynInfo toolSynInfo); |
| | | } |
| | | } |
| | |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// åä¸ªç©æç ç»ç |
| | | /// åä¸ªç©æç ç»ç éç¨æµè¯æ¶ |
| | | /// </summary> |
| | | /// <param name="inboundOrderId"></param> |
| | | /// <param name="palletCode"></param> |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å
¥åºåä¿¡æ¯"); |
| | | } |
| | | if (inboundOrder.Details == null || inboundOrder.Details.Count <= 0) |
| | | if (inboundOrder.OrderStatus>=InOrderStatusEnum.å
¥åºå®æ.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"å
¥åºåå·²ç»æ"); |
| | | } |
| | | if (inboundOrder.Details.Count <= 0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å
¥åºåæç»ä¿¡æ¯"); |
| | | } |
| | | |
| | | Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First(); |
| | | if (receiveOrder == null) |
| | | MatSerNumAnalysisModel model = new MatSerNumAnalysisModel() |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºçæ¶è´§å"); |
| | | } |
| | | if (receiveOrder.Details == null || receiveOrder.Details.Count <= 0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºçæ¶è´§åæç»"); |
| | | } |
| | | |
| | | List<string> purchaseOrderNos = receiveOrder.Details.Select(x => x.PurchaseOrderNo).ToList(); |
| | | |
| | | MatSerNumAnalysisModel model = new MatSerNumAnalysisModel() |
| | | { |
| | | MaterielCode= "307000309", |
| | | LotNo= "20241216001", |
| | | ProductionDate= "2024-12-16", |
| | | EffectiveDate= "2025-12-16", |
| | | PurchaseOrderNo= "POHA02241216275", |
| | | Quantity=1, |
| | | SerialNumber= "M:307000309,BS:20241216001,DM:2024-12-16,DE:2025-12-16,Q:4,PO:POHA02241216275" |
| | | MaterielCode = "504907335", |
| | | LotNo = "20241217001", |
| | | ProductionDate = "2024-12-17", |
| | | EffectiveDate = "2025-12-17", |
| | | PurchaseOrderNo = "POHA02241227285", |
| | | Quantity = 1, |
| | | SerialNumber = "M:504907335,BS:20241217001,DM:2024-12-17,DE:2025-12-17,Q:1,PO:POHA02241227285" |
| | | };//æµè¯ |
| | | |
| | | //CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNum); |
| | | |
| | | |
| | | Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == model.MaterielCode); |
| | | if (materielInfo == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ç©æçä¿¡æ¯"); |
| | | } |
| | | |
| | | List<Dt_InboundOrderDetail> inboundOrderDetails = inboundOrder.Details.Where(x => x.MaterielCode == model.MaterielCode).ToList(); |
| | | |
| | | if (inboundOrderDetails == null || inboundOrderDetails.Count <= 0) |
| | | if (materielInfo.WarehouseId != inboundOrder.WarehouseId) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªå¨å
¥åºåæç»ä¸æ¾å°è¯¥ç©æä¿¡æ¯"); |
| | | return WebResponseContent.Instance.Error($"è¯¥ç©æä¸å±äºæ¬ä»"); |
| | | } |
| | | if (receiveOrder.Details.FirstOrDefault(x => x.MaterielCode == model.MaterielCode) == null) |
| | | Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First(); |
| | | if (receiveOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºçæ¶è´§å"); |
| | | } |
| | | if (receiveOrder.Details.Count <= 0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºçæ¶è´§åæç»"); |
| | | } |
| | | List<string> purchaseOrderNos = receiveOrder.Details.Select(x => x.PurchaseOrderNo).ToList(); |
| | | if (!purchaseOrderNos.Contains(model.PurchaseOrderNo)) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºæ¶è´§åæç»ä¸éè´å"); |
| | | } |
| | | Dt_ReceiveOrderDetail? receiveOrderDetail = receiveOrder.Details.FirstOrDefault(x => x.MaterielCode == model.MaterielCode); |
| | | if (receiveOrderDetail == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªå¨æ¶è´§åæç»ä¸æ¾å°è¯¥ç©æä¿¡æ¯"); |
| | | } |
| | | if (purchaseOrderNos.FirstOrDefault(x => x == model.PurchaseOrderNo) == null) |
| | | Dt_InboundOrderDetail? inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.MaterielCode == model.MaterielCode); |
| | | if (inboundOrderDetail == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªå¨æ¶è´§åæç»ä¸æ¾å°è¯¥éè´å"); |
| | | return WebResponseContent.Instance.Error($"æªå¨å
¥åºåæç»ä¸æ¾å°è¯¥ç©æä¿¡æ¯"); |
| | | } |
| | | |
| | | Dt_InboundOrderDetail? notGroupDetail = inboundOrderDetails.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt() && x.OrderQuantity == model.Quantity).FirstOrDefault(); |
| | | |
| | | if (notGroupDetail == null) |
| | | if (inboundOrderDetail.OrderDetailStatus>OrderDetailStatusEnum.GroupAndInbound.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è¯¥ç©æå¨è¯¥å
¥åºåä¸å·²å
¨é¨ç»ç宿"); |
| | | return WebResponseContent.Instance.Error($"对åºå
¥åºåæç»å·²ç»æ"); |
| | | } |
| | | |
| | | float inboundDetailSum = inboundOrderDetail.OverInQuantity + inboundOrderDetail.ReceiptQuantity ; |
| | | if (inboundDetailSum == inboundOrderDetail.OrderQuantity) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è¯¥ç©æå
¥åºåæç»å·²å
¨é¨ç»ç宿"); |
| | | } |
| | | if (model.Quantity > receiveOrderDetail.ReceivedQuantity || (inboundDetailSum + model.Quantity) > receiveOrderDetail.ReceivedQuantity) |
| | | { |
| | | return WebResponseContent.Instance.Error($"ä¸è¯¥æ¶è´§åæç»æ¶è´§æ°éä¸ä¸è´"); |
| | | } |
| | | Dt_StockInfo oldStockinfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode); |
| | | if(oldStockinfo!=null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æçéå¤"); |
| | | } |
| | | Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail() |
| | | { |
| | | BatchNo = model.LotNo, |
| | |
| | | Status = StockStatusEmun.ç»çæå.ObjToInt(), |
| | | ProductionDate = model.ProductionDate, |
| | | EffectiveDate = model.EffectiveDate, |
| | | InboundOrderRowNo = notGroupDetail.RowNo, |
| | | InboundOrderRowNo = inboundOrderDetail.RowNo, |
| | | }; |
| | | |
| | | Dt_StockInfo stockInfo = new Dt_StockInfo() |
| | |
| | | WarehouseId = inboundOrder.WarehouseId, |
| | | Details=new List<Dt_StockInfoDetail> { stockInfoDetail } |
| | | }; |
| | | |
| | | inboundOrderDetail.ReceiptQuantity += model.Quantity; |
| | | _unitOfWorkManage.BeginTran(); |
| | | if (inboundOrderDetail.OrderDetailStatus==OrderDetailStatusEnum.New.ObjToInt()) |
| | | { |
| | | inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt(); |
| | | } |
| | | _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetail); |
| | | if (inboundOrder.OrderStatus == InOrderStatusEnum.æªå¼å§.ObjToInt()) |
| | | { |
| | | inboundOrder.OrderStatus = InOrderStatusEnum.å
¥åºä¸.ObjToInt(); |
| | | BaseDal.UpdateData(inboundOrder); |
| | | } |
| | | _stockRepository.StockInfoRepository.Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand(); |
| | | _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetails); |
| | | |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | public WebResponseContent FeedbackInboundOrder(Dt_StockInfo stockInfo) |
| | | { |
| | | WebResponseContent content=new WebResponseContent(); |
| | | try |
| | | { |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å
¥åºå®æåä¼ å°ERP |
| | | /// å
¥åºå®æåä¼ å°ERP æµè¯ |
| | | /// </summary> |
| | | /// <param name="id"></param> |
| | | /// <returns></returns> |
| | |
| | | { |
| | | try |
| | | { |
| | | Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.QueryFirst(x => x.ReceiveOrderNo == orderNo); |
| | | Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == orderNo).Includes(x=>x.Details).First(); |
| | | if (receiveOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥æ¶è´§å"); |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ç©æçä¿¡æ¯"); |
| | | } |
| | | |
| | | Dt_PurchaseOrder purchaseOrder = _inboundRepository.PurchaseOrderRepository.QueryFirst(x => x.PurchaseOrderNo == model.PurchaseOrderNo); |
| | | //该æ¶è´§åä»åºæ¯å¦æè¯¥ç©æ |
| | | if (materielInfo.WarehouseId!= receiveOrder.WarehouseId) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è¯¥ç©æä¸å±äºè¯¥ä»åº"); |
| | | } |
| | | Dt_PurchaseOrder purchaseOrder = _inboundRepository.PurchaseOrderRepository.Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.PurchaseOrderNo).Includes(x=>x.Details).First(); |
| | | if (purchaseOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥éè´å"); |
| | | } |
| | | |
| | | if (purchaseOrder.Details.Count == 0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥éè´åæç»æ°æ®"); |
| | | } |
| | | if (purchaseOrder.SupplierCode != receiveOrder.SuppliersId) |
| | | { |
| | | return WebResponseContent.Instance.Error($"ä¾åºåä¸ä¸è´,请æ°å»ºæ¶è´§å"); |
| | | } |
| | | |
| | | if (purchaseOrder.PurchaseOrderStatus == PurchaseOrderStatusEnum.Received.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该éè´åæ¶è´§å·²å®æ"); |
| | | } |
| | | |
| | | List<Dt_PurchaseOrderDetail> purchaseOrderDetails = _inboundRepository.PurchaseOrderDetailRepository.QueryData(x => x.PurchaseOrderId == purchaseOrder.Id); |
| | | if (purchaseOrderDetails == null || purchaseOrderDetails.Count == 0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥éè´åæç»æ°æ®"); |
| | | } |
| | | |
| | | Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrderDetails.FirstOrDefault(x => x.PurchaseDetailQuantity == model.Quantity && x.MaterielCode == model.MaterielCode && x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt()); |
| | | Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrder.Details.FirstOrDefault(x => x.MaterielCode == model.MaterielCode && (x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt() || x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.Receiving.ObjToInt())); |
| | | if (purchaseOrderDetail == null) |
| | | { |
| | | if (purchaseOrderDetails.Count > 0) |
| | | if (purchaseOrder.Details.Count > 0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æç»æ¶è´§å·²å®æ"); |
| | | } |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºçéè´åæç»æ°æ®"); |
| | | } |
| | | Dt_ReceiveOrderDetail detail = BaseDal.QueryFirst(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo); |
| | | if (detail != null) |
| | | //夿æ¯å¦åå¨å¯¹åºéè´æç»çæ¶è´§æç» |
| | | Dt_ReceiveOrderDetail? detail = receiveOrder.Details.FirstOrDefault(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo); |
| | | if (detail != null && detail.ReceivedQuantity == purchaseOrderDetail.PurchaseDetailQuantity) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æç»æ¶è´§å·²å®æ"); |
| | | return WebResponseContent.Instance.Error($"该æç»å·²æ¶è´§"); |
| | | } |
| | | |
| | | lock (_rowNoLocker) |
| | | { |
| | | int rowNo = 0; |
| | | List<Dt_ReceiveOrderDetail> receiveOrderDetails = BaseDal.QueryData(x => x.ReceiveOrderId == receiveOrder.ReceiveOrderId); |
| | | if (receiveOrderDetails != null && receiveOrderDetails.Count > 0) |
| | | if (detail!=null) |
| | | { |
| | | rowNo = receiveOrderDetails.Max(x => x.RowNo); |
| | | //åææ¶è´§æç»å¢å æ¶è´§æ°é |
| | | detail.ReceivedQuantity += model.Quantity; |
| | | purchaseOrderDetail.PurchaseDetailReceiveQty = detail.ReceivedQuantity; |
| | | if (purchaseOrderDetail.PurchaseDetailReceiveQty > purchaseOrderDetail.PurchaseDetailQuantity) |
| | | { |
| | | return WebResponseContent.Instance.Error($"éè´åè¯¥ç©ææ°éåæ¶è´§æ°éä¸ä¸è´"); |
| | | } |
| | | if(purchaseOrderDetail.PurchaseDetailReceiveQty ==purchaseOrderDetail.PurchaseDetailQuantity) |
| | | { |
| | | purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt(); |
| | | } |
| | | float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty) + model.Quantity; |
| | | _unitOfWorkManage.BeginTran(); |
| | | if (purchaseOrder.OrderQuantity == sumQty) |
| | | { |
| | | purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt(); |
| | | _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder); |
| | | } |
| | | BaseDal.UpdateData(detail); |
| | | _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail); |
| | | _unitOfWorkManage.CommitTran(); |
| | | } |
| | | |
| | | Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail() |
| | | else |
| | | { |
| | | PurchaseOrderNo = model.PurchaseOrderNo, |
| | | ReceivedQuantity = model.Quantity, |
| | | MaterielCode = model.MaterielCode, |
| | | LotNo = model.LotNo, |
| | | ReceiveOrderId = receiveOrder.ReceiveOrderId, |
| | | PurchaseOrderDetailRowNo = purchaseOrderDetail.RowNo, |
| | | IfInspection = materielInfo.IsCheck.ObjToInt(), |
| | | CurrCode = "", |
| | | PriceInTax = 0, |
| | | TaxRate = "", |
| | | RowNo = rowNo + 1, |
| | | Unit = purchaseOrderDetail.Unit |
| | | }; |
| | | |
| | | if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt()) |
| | | { |
| | | receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt(); |
| | | int rowNo = 0; |
| | | if (receiveOrder.Details.Count > 0) |
| | | { |
| | | rowNo = receiveOrder.Details.Max(x => x.RowNo); |
| | | } |
| | | Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail() |
| | | { |
| | | PurchaseOrderNo = model.PurchaseOrderNo, |
| | | ReceivedQuantity = model.Quantity, |
| | | MaterielCode = model.MaterielCode, |
| | | LotNo = model.LotNo, |
| | | ReceiveOrderId = receiveOrder.ReceiveOrderId, |
| | | PurchaseOrderDetailRowNo = purchaseOrderDetail.RowNo, |
| | | IfInspection = materielInfo.IsCheck.ObjToInt(), |
| | | CurrCode = "", |
| | | PriceInTax = 0, |
| | | TaxRate = "", |
| | | RowNo = rowNo + 1, |
| | | Unit = purchaseOrderDetail.Unit |
| | | }; |
| | | if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt()) |
| | | { |
| | | receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt(); |
| | | } |
| | | //夿éè´æç»æ°é |
| | | if (purchaseOrderDetail.PurchaseDetailQuantity<model.Quantity) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è¯·æ ¸å¯¹éè´åè¯¥ç©ææ°é"); |
| | | } |
| | | if (purchaseOrderDetail.PurchaseDetailReceiveQty>0) |
| | | { |
| | | purchaseOrderDetail.PurchaseDetailReceiveQty += model.Quantity; |
| | | } |
| | | else |
| | | { |
| | | purchaseOrderDetail.PurchaseDetailReceiveQty = model.Quantity; |
| | | } |
| | | if (purchaseOrderDetail.PurchaseDetailReceiveQty> purchaseOrderDetail.PurchaseDetailQuantity) |
| | | { |
| | | return WebResponseContent.Instance.Error($"éè´åè¯¥ç©ææ°éåæ¶è´§æ°éä¸ä¸è´"); |
| | | } |
| | | if (purchaseOrderDetail.PurchaseDetailQuantity == purchaseOrderDetail.PurchaseDetailReceiveQty) |
| | | { |
| | | purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt(); |
| | | } |
| | | float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty) + model.Quantity; |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.AddData(receiveOrderDetail); |
| | | if (purchaseOrder.OrderQuantity == sumQty) |
| | | { |
| | | purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt(); |
| | | _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder); |
| | | } |
| | | _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder); |
| | | _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail); |
| | | #region 注é |
| | | //if (materielInfo.IsCheck == WhetherEnum.True) |
| | | //{ |
| | | // Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); |
| | | // checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo; |
| | | // checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; |
| | | // checkOrder.ScrappedQuantity = 0; |
| | | // checkOrder.ReturnQuantity = 0; |
| | | // checkOrder.DefectedQuantity = 0; |
| | | // _checkOrderRepository.AddData(checkOrder); |
| | | //} |
| | | #endregion |
| | | _unitOfWorkManage.CommitTran(); |
| | | } |
| | | purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt(); |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.AddData(receiveOrderDetail); |
| | | _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder); |
| | | _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail); |
| | | |
| | | if (materielInfo.IsCheck == WhetherEnum.True) |
| | | { |
| | | Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); |
| | | checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo; |
| | | checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; |
| | | checkOrder.ScrappedQuantity = 0; |
| | | checkOrder.ReturnQuantity = 0; |
| | | checkOrder.DefectedQuantity = 0; |
| | | _checkOrderRepository.AddData(checkOrder); |
| | | } |
| | | |
| | | _unitOfWorkManage.CommitTran(); |
| | | |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | } |
| | |
| | | CustomerId = receiveOrder.CustomerId, |
| | | CreatorId = "TC20082",//æµè¯ receiveOrder.Creater |
| | | EntDate = receiveOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | ReceiveDate = receiveOrder.ReceiveDate.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | ReceiveDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | PlantsId = "HA02", |
| | | SuppliersId = receiveOrder.SuppliersId, |
| | | Type = Enum.GetName(typeof(ReceiveOrderTypeEnum),receiveOrder.ReceiveOrderType), |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error(erpRequest.Data); |
| | | } |
| | | //æ´æ°æ¶è´§åä¿¡æ¯ |
| | | receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Completed.ObjToInt(); |
| | | receiveOrder.UploadStatus = WhetherEnum.True.ObjToInt(); |
| | | //æ´æ°æ¶è´§åä¿¡æ¯ |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.UpdateData(receiveOrder); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æ¶è´§åæªå®æ"); |
| | | } |
| | | #region 注é |
| | | //List<Dt_CheckOrder> checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo); |
| | | //if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null) |
| | | //{ |
| | | // return WebResponseContent.Instance.Error($"该æ¶è´§åæªè´¨æ£å®æ"); |
| | | //} |
| | | |
| | | List<Dt_CheckOrder> checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo); |
| | | if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æ¶è´§åæªè´¨æ£å®æ"); |
| | | } |
| | | |
| | | if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æ¶è´§åè´¨æ£ç»æå®¡æ¹æªå®æ"); |
| | | } |
| | | //if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null) |
| | | //{ |
| | | // return WebResponseContent.Instance.Error($"该æ¶è´§åè´¨æ£ç»æå®¡æ¹æªå®æ"); |
| | | //} |
| | | #endregion |
| | | |
| | | Dt_InboundOrder inboundOrder = new Dt_InboundOrder() |
| | | { |
| | | InboundOrderNo="TestInboundNo1",//æµè¯ |
| | | InboundOrderNo="TestInboundNo21",//æµè¯ |
| | | UpperOrderNo = receiveOrder.ReceiveOrderNo, |
| | | CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), |
| | | OrderStatus = InOrderStatusEnum.æªå¼å§.ObjToInt(), |
| | |
| | | foreach (var item in receiveOrder.Details) |
| | | { |
| | | float quantity = item.ReceivedQuantity; |
| | | if (item.IfInspection == WhetherEnum.True.ObjToInt()) |
| | | { |
| | | Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo); |
| | | if (checkOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è´¨æ£åæ°æ®é误"); |
| | | } |
| | | quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault(); |
| | | } |
| | | #region 注é |
| | | //if (item.IfInspection == WhetherEnum.True.ObjToInt()) |
| | | //{ |
| | | // Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo); |
| | | // if (checkOrder == null) |
| | | // { |
| | | // return WebResponseContent.Instance.Error($"è´¨æ£åæ°æ®é误"); |
| | | // } |
| | | // quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault(); |
| | | //} |
| | | #endregion |
| | | Dt_InboundOrderDetail detail = new Dt_InboundOrderDetail() |
| | | { |
| | | MaterielCode = item.MaterielCode, |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥éè´å"); |
| | | } |
| | | if (purchaseOrder.Details == null || purchaseOrder.Details.Count == 0) |
| | | if (purchaseOrder.Details.Count == 0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°éè´åæç»ä¿¡æ¯"); |
| | | } |
| | |
| | | }; |
| | | rowNo += 1; |
| | | receiveOrderDetails.Add(receiveOrderDetail); |
| | | |
| | | if (materielInfo.IsCheck == WhetherEnum.True) |
| | | { |
| | | Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); |
| | | checkOrder.CheckOrderNo = "TestCheckNo11";//æµè¯ |
| | | checkOrder.ReceiveOrderNo = ""; |
| | | checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; |
| | | checkOrder.ScrappedQuantity = 0; |
| | | checkOrder.ReturnQuantity = 0; |
| | | checkOrder.DefectedQuantity = 0; |
| | | checkOrder.ReceiveDetailRowNo = rowNo; |
| | | checkOrder.UploadStatus = CheckUploadEnum.UploadNo.ObjToInt(); |
| | | checkOrders.Add(checkOrder); |
| | | } |
| | | #region 注é |
| | | //if (materielInfo.IsCheck == WhetherEnum.True) |
| | | //{ |
| | | // Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); |
| | | // checkOrder.CheckOrderNo = "TestCheckNo21";//æµè¯ |
| | | // checkOrder.ReceiveOrderNo = ""; |
| | | // checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; |
| | | // checkOrder.ScrappedQuantity = 0; |
| | | // checkOrder.ReturnQuantity = 0; |
| | | // checkOrder.DefectedQuantity = 0; |
| | | // checkOrder.ReceiveDetailRowNo = rowNo; |
| | | // checkOrder.UploadStatus = CheckUploadEnum.UploadNo.ObjToInt(); |
| | | // checkOrders.Add(checkOrder); |
| | | //} |
| | | #endregion |
| | | } |
| | | receiveOrder = new Dt_ReceiveOrder() |
| | | { |
| | | ReceiveOrderNo= "TestReceiveOrderNo11",//æµè¯ |
| | | ReceiveOrderNo= "TestReceiveOrderNo21",//æµè¯ |
| | | ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt(), |
| | | CustomerId = "", |
| | | DeliveryCode = "/", |
| | |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "å建æ¹å¼", IsOnlyIgnoreUpdate = true)] |
| | | public int CreateType { get; set; } |
| | | |
| | | /// <summary> |
| | | /// é¨é¨ç¼å· |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "é¨é¨ç¼å·")] |
| | | public string DepartmentCode { get; set; } |
| | | /// <summary> |
| | | /// é¨é¨åç§° |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "é¨é¨åç§°")] |
| | | public string DepartmentName { get; set; } |
| | | /// <summary> |
| | | /// 夿³¨ |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "夿³¨")] |
| | | public string Remark { get; set; } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// åºåºåæç» |
| | | /// </summary> |
| | |
| | | /// <summary> |
| | | /// æ¹æ¬¡å· |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "æ¹æ¬¡å·")] |
| | | [SugarColumn(IsNullable = true, Length = 100, ColumnDescription = "æ¹æ¬¡å·")] |
| | | public string BatchNo { get; set; } |
| | | |
| | | /// <summary> |
| | |
| | | OrderQuantity = model.Qty, |
| | | OrderId = oldOutboundOrder.Id |
| | | }; |
| | | List<Dt_StockInfo>? stockInfos = new List<Dt_StockInfo>(); |
| | | //ERPä¸ä¼ æµè¯ä»é¢æåæ´æ°å¯¹åºåºåç¶æ |
| | | if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString()) |
| | | { |
| | | WebResponseContent responseContent = TestOutStocksUpdate(warehouse, model); |
| | | if (!responseContent.Status) |
| | | { |
| | | return responseContent; |
| | | } |
| | | stockInfos = responseContent.Data as List<Dt_StockInfo>; |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | if (stockInfos.Count>0) |
| | | { |
| | | _stockInfoRepository.UpdateData(stockInfos); |
| | | //æµè¯æ¶åºç»ERP䏿¥åºåºå®æ |
| | | if (!TestOutBack(stockInfos, warehouse, model).Status) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error($"æµè¯æ¶åºåºä¸æ¥å¤±è´¥"); |
| | | } |
| | | } |
| | | _outboundOrderDetailRepository.AddData(outboundOrderDetail); |
| | | _unitOfWorkManage.CommitTran(); |
| | | } |
| | | } |
| | | else |
| | |
| | | OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), |
| | | OrderQuantity = model.Qty, |
| | | }; |
| | | |
| | | Dt_OutboundOrder outboundOrder = new Dt_OutboundOrder() |
| | | { |
| | | OrderNo=model.OrderNo, |
| | |
| | | OrderType = OutOrderTypeEnum.Issue.ObjToInt(), |
| | | CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), |
| | | WarehouseId = warehouse.WarehouseId, |
| | | DepartmentCode = model.DepartmentCode, |
| | | DepartmentName = model.DepartmentName, |
| | | Details = new List<Dt_OutboundOrderDetail> { outboundOrderDetail } |
| | | }; |
| | | List<Dt_StockInfo>? stockInfos = new List<Dt_StockInfo>(); |
| | | //ERPä¸ä¼ æµè¯ä»é¢æåæ´æ°å¯¹åºåºåç¶æ |
| | | if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString()) |
| | | { |
| | | WebResponseContent responseContent = TestOutStocksUpdate(warehouse, model); |
| | | if (!responseContent.Status) |
| | | { |
| | | return responseContent; |
| | | } |
| | | stockInfos = responseContent.Data as List<Dt_StockInfo>; |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | if (stockInfos.Count > 0) |
| | | { |
| | | _stockInfoRepository.UpdateData(stockInfos); |
| | | //æµè¯æ¶åºç»ERP䏿¥åºåºå®æ |
| | | if (!TestOutBack(stockInfos, warehouse, model).Status) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error($"æµè¯æ¶åºåºä¸æ¥å¤±è´¥"); |
| | | } |
| | | } |
| | | Db.InsertNav(outboundOrder).Include(x => x.Details).ExecuteCommand(); |
| | | _unitOfWorkManage.CommitTran(); |
| | | |
| | | } |
| | | } |
| | | else if (model.Way == 2) |
| | |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | //䏿¥åºåºå®æ |
| | | //䏿¥åºåºå®æ æµè¯æ¶ |
| | | public WebResponseContent TestOutUpload(int id) |
| | | { |
| | | try |
| | |
| | | //æµè¯æ¶åºç»ERP䏿¥åºåºå®æ |
| | | ERPPickItemModel eRPOutPick = new ERPPickItemModel() |
| | | { |
| | | Lotno = "20241226001", |
| | | Qty = "5", |
| | | Lotno = "20241227001", |
| | | Qty = "1", |
| | | Location = warehouse.WarehouseCode |
| | | }; |
| | | ERPPickModel pickModel = new ERPPickModel() |
| | |
| | | ERPIssueModel issueModel = new ERPIssueModel() |
| | | { |
| | | UniqueTag = id.ToString(), |
| | | Code = "FL20241226001", |
| | | Code = "FL20241227001",//æµè¯ |
| | | WarehouseCode = warehouse.WarehouseCode, |
| | | Docremark = "", |
| | | Deptno = "F2HAECZSQZ", |
| | | Deptname = "æ·®å®äºåå¶ä¸åºé»ç", |
| | | Deptno = outboundOrder.DepartmentCode, |
| | | Deptname = outboundOrder.DepartmentName, |
| | | Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | Createuser = "TC20082", |
| | | Issitem = new List<ERPIssueItemModel>() { issueItemModel }, |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | /// <summary> |
| | | /// æ´æ¹åºåºååºåç¶æ |
| | |
| | | try |
| | | { |
| | | //è·ååºåºååºå |
| | | List<Dt_StockInfo> stockInfos = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId).OrderBy(x => x.CreateDate).Includes(x => x.Details).Where(x => x.Details.Any(x => x.MaterielCode == model.MCode)).Take((int)(model.Qty)).ToList(); |
| | | List<Dt_StockInfo> stockInfos = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId).Includes(x => x.Details).ToList(); |
| | | if (model.Qty > stockInfos.Count) |
| | | { |
| | | return WebResponseContent.Instance.Error($"ç©æ:{model.MCode}åºåä¸è¶³"); |
| | |
| | | } |
| | | } |
| | | ///æ¨éæµè¯æ¶åºåº |
| | | public WebResponseContent TestOutBack(List<Dt_StockInfo> stockInfos,Dt_Warehouse warehouse, ErpOutOrderDTO model) |
| | | { |
| | | try |
| | | { |
| | | //æµè¯æ¶åºç»ERP䏿¥åºåºå®æ |
| | | List<ERPOutPickDetail> pickDetails = stockInfos.Select(x => new ERPOutPickDetail() |
| | | { |
| | | Lotno = x.Details[0].BatchNo, |
| | | Qty = x.Details[0].StockQuantity.ObjToInt() |
| | | }).ToList(); |
| | | ERPOutPick outPick = new ERPOutPick() |
| | | { |
| | | Rowindex = model.RowNo, |
| | | Material = model.MCode, |
| | | Qty = model.Qty.ObjToInt(), |
| | | Dataitem = pickDetails |
| | | }; |
| | | ERPOutboundModel inboundModel = new ERPOutboundModel() |
| | | { |
| | | Way = 1, |
| | | UniqueTag = model.OrderNo, |
| | | Code = model.OrderNo, |
| | | WarehouseCode = warehouse.WarehouseCode, |
| | | Docremark = "", |
| | | Deptno = model.DepartmentCode, |
| | | DeptName = model.DepartmentName, |
| | | Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | Createuser = "WMS", |
| | | Picklist = new List<ERPOutPick>() { outPick }, |
| | | }; |
| | | string response = _invokeERPService.InvokeOutboundOrderApi(inboundModel); |
| | | ErpRequestContent requestContent=response.DeserializeObject<ErpRequestContent>(); |
| | | if (requestContent.res==1) |
| | | { |
| | | |
| | | return WebResponseContent.Instance.OK(requestContent.Data); |
| | | } |
| | | else |
| | | { |
| | | return WebResponseContent.Instance.Error(requestContent.Data); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | //public WebResponseContent TestOutBack(int id,List<string> locationIds) |
| | | //{ |
| | | // try |
| | | // { |
| | | |
| | | // string response = _invokeERPService.InvokeOutStandardsApi(issueModel); |
| | | // ErpRequestContent requestContent = response.DeserializeObject<ErpRequestContent>(); |
| | | // if (requestContent.res == 1) |
| | | // { |
| | | |
| | | // return WebResponseContent.Instance.OK(requestContent.Data); |
| | | // } |
| | | // else |
| | | // { |
| | | // return WebResponseContent.Instance.Error(requestContent.Data); |
| | | // } |
| | | // } |
| | | // catch (Exception ex) |
| | | // { |
| | | // return WebResponseContent.Instance.Error(ex.Message); |
| | | // } |
| | | //} |
| | | |
| | | //public WebResponseContent FeedbackOutbondIssue(List<Dt_OutStockLockInfo> outStockLockInfos) |
| | | //{ |
| | |
| | | using SqlSugar.Extensions; |
| | |  |
| | | using Newtonsoft.Json.Serialization; |
| | | using Newtonsoft.Json; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_DTO; |
| | | using WIDESEA_DTO.ERP; |
| | | using WIDESEA_DTO.MES; |
| | |
| | | { |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==WarehouseEnum.HA64.ToString()); |
| | | //è·ååºåè®°å½ |
| | | Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => |
| | | List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => |
| | | x.WarehouseId == warehouse.WarehouseId && |
| | | x.StockStatus==(int)StockStatusEmun.å
¥åºå®æ) |
| | | .Includes(x => x.Details).Where(x => x.Details.Any(x => x.BatchNo == model.ToolCode)).First(); |
| | | if (stockInfo==null) |
| | | x.StockStatus==(int)StockStatusEmun.å
¥åºå®æ).Includes(x=>x.Details).ToList(); |
| | | Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x=>x.Details.Any(x=>x.BatchNo==model.ToolCode)); |
| | | if (stockInfo == null) |
| | | { |
| | | return responseContent.Error($"æµè¯æ¶:{model.ToolCode}æ å¯ç¨åºå"); |
| | | } |
| | |
| | | NextAddress = "", |
| | | Roadway = locationInfo.RoadwayNo, |
| | | SourceAddress = stockInfo.LocationCode, |
| | | TargetAddress = "", |
| | | TargetAddress = model.TargetAddressCode, |
| | | TaskStatus = (int)TaskStatusEnum.New, |
| | | TaskType = (int)TaskTypeEnum.Outbound, |
| | | TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), |
| | |
| | | //_recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.StockLock); |
| | | _unitOfWorkManage.CommitTran(); |
| | | //å°ä»»å¡æ¨éå°WCS |
| | | PushTasksToWCS(new List<Dt_Task>() { taskOut },"AGV"); |
| | | PushTasksToWCS(new List<Dt_Task>() { taskOut }, "AGV"); |
| | | responseContent.OK(); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | //è·åæµè¯æ¶ååºåä¿¡æ¯ |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA64.ToString()); |
| | | //è·ååºåè®°å½ |
| | | Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => |
| | | List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => |
| | | x.WarehouseId == warehouse.WarehouseId && |
| | | x.StockStatus == (int)StockStatusEmun.åºåºå®æ) |
| | | .Includes(x => x.Details).Where(x => x.Details.Any(x => x.BatchNo == backModel.TestToolCode)).First(); |
| | | x.StockStatus == (int)StockStatusEmun.åºåºå®æ).Includes(x => x.Details).ToList(); |
| | | Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == backModel.TestToolCode)); |
| | | if (stockInfo==null) |
| | | { |
| | | return responseContent.Error($"{backModel.TestToolCode}åºåä¿¡æ¯ä¸åå¨"); |
| | |
| | | }; |
| | | //æ´æ¹åºåç¶æ |
| | | stockInfo.StockStatus = StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt(); |
| | | _unitOfWorkManage.BeginTran(); |
| | | //å°ä»»å¡æ¨éå°WCS |
| | | PushTasksToWCS(new List<Dt_Task>() { taskIn }, "AGV"); |
| | | _stockRepository.StockInfoRepository.UpdateData(stockInfo); |
| | | _unitOfWorkManage.CommitTran(); |
| | | |
| | | responseContent.OK(); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | //è·åæµè¯æ¶æ¹æ¬¡å·åºå |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA64.ToString()); |
| | | //è·ååºåè®°å½ |
| | | Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => |
| | | x.WarehouseId == warehouse.WarehouseId && x.StockStatus==StockStatusEmun.åºåºå®æ.ObjToInt()) |
| | | .Includes(x => x.Details).Where(x => x.Details.Any(x => x.BatchNo == toolScrap.ToolCode)).First(); |
| | | //è·ååºåè®°å½ |
| | | List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => |
| | | x.WarehouseId == warehouse.WarehouseId && |
| | | x.StockStatus == (int)StockStatusEmun.åºåºå®æ).Includes(x => x.Details).ToList(); |
| | | Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == toolScrap.ToolCode)); |
| | | |
| | | if (stockInfo == null) |
| | | { |
| | | return responseContent.Error($"{toolScrap.ToolCode}åºåä¿¡æ¯ä¸åå¨"); |
| | | } |
| | | //æ¸
é¤åºåä¿¡æ¯ |
| | | _unitOfWorkManage.BeginTran(); |
| | | _stockRepository.StockInfoRepository.DeleteData(stockInfo); |
| | | _stockRepository.StockInfoDetailRepository.DeleteData(stockInfo.Details); |
| | | _stockRepository.StockInfoRepository.DeleteAndMoveIntoHty(stockInfo,OperateTypeEnum.èªå¨å é¤); |
| | | _stockRepository.StockInfoDetailRepository.DeleteAndMoveIntoHty(stockInfo.Details, OperateTypeEnum.èªå¨å é¤); |
| | | _unitOfWorkManage.CommitTran(); |
| | |
| | | try |
| | | { |
| | | Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x=>x.ApiCode==APIEnum.WMS_MES_TestToolSync.ToString()); |
| | | Root<TestToolSynInfo> root = new Root<TestToolSynInfo>() |
| | | MESRoot<TestToolSynInfo> root = new MESRoot<TestToolSynInfo>() |
| | | { |
| | | From = "WMS", |
| | | DateTime = DateTime.Now.ToString(), |
| | | DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | Content=toolSynInfo |
| | | }; |
| | | JsonSerializerSettings settings = new JsonSerializerSettings |
| | | { |
| | | ContractResolver = new CamelCasePropertyNamesContractResolver() |
| | | }; |
| | | string request = JsonConvert.SerializeObject(root, settings); |
| | | string response = HttpMesHelper.Post(apiInfo.ApiAddress, request); |
| | | MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>(); |
| | | //è°ç¨æ¥å£ |
| | | if (mesResponseContent.BSucc==true) |
| | | { |
| | | content.OK(mesResponseContent.StrMsg); |
| | | } |
| | | else |
| | | { |
| | | content.Error(mesResponseContent.StrMsg); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | using WIDESEA_Common.OrderEnum; |
| | | using WIDESEA_Common.StockEnum; |
| | | using WIDESEA_Common.TaskEnum; |
| | | using WIDESEA_Common.WareHouseEnum; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Core.BaseServices; |
| | |
| | | using WIDESEA_External.ERPService; |
| | | using WIDESEA_IBasicRepository; |
| | | using WIDESEA_IBasicService; |
| | | using WIDESEA_IInboundRepository; |
| | | using WIDESEA_IInboundService; |
| | | using WIDESEA_IOutboundRepository; |
| | | using WIDESEA_IOutboundService; |
| | |
| | | private readonly IBasicRepository _basicRepository; |
| | | private readonly IApiInfoRepository _apiInfoRepository; |
| | | private readonly IInvokeERPService _invokeERPService; |
| | | private readonly IInboundRepository _inboundRepository; |
| | | |
| | | public ITaskRepository Repository => BaseDal; |
| | | |
| | |
| | | |
| | | public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList(); |
| | | |
| | | public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService) : base(BaseDal) |
| | | public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IInboundRepository inboundRepository) : base(BaseDal) |
| | | { |
| | | _mapper = mapper; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | |
| | | _basicRepository = basicRepository; |
| | | _apiInfoRepository = apiInfoRepository; |
| | | _invokeERPService = invokeERPService; |
| | | _inboundRepository = inboundRepository; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | return WebResponseContent.Instance.Error($"ä»»å¡ç±»åé误"); |
| | | } |
| | | |
| | | Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.Details).First(); |
| | | Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId==task.WarehouseId).Includes(x => x.Details).First(); |
| | | if (stockInfo == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°æç对åºçç»çä¿¡æ¯"); |
| | |
| | | return WebResponseContent.Instance.Error($"该æçå·²ç»å®è´§ä½"); |
| | | } |
| | | |
| | | if (stockInfo.Details == null || stockInfo.Details.Count == 0) |
| | | if (stockInfo.Details.Count == 0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥æçåºåæç»ä¿¡æ¯"); |
| | | } |
| | |
| | | |
| | | LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; |
| | | locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); |
| | | |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseId== task.WarehouseId); |
| | | //æµè¯æ¶å
¥åºåºåç¶æ |
| | | if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt()) |
| | | if (task.TaskType == TaskTypeEnum.Inbound.ObjToInt() && warehouse.WarehouseCode==WarehouseEnum.HA64.ToString()) |
| | | { |
| | | stockInfo.StockStatus = StockStatusEmun.å
¥åºå®ææªå»ºåºåºå.ObjToInt(); |
| | | stockInfo.Details.ForEach(x => |
| | | { |
| | | x.Status = StockStatusEmun.å
¥åºå®æ.ObjToInt(); |
| | | }); |
| | | } |
| | | else |
| | | { |
| | | stockInfo.StockStatus = StockStatusEmun.å
¥åºå®æ.ObjToInt(); |
| | | |
| | | } |
| | | stockInfo.Details.ForEach(x => |
| | | { |
| | | x.Status = StockStatusEmun.å
¥åºå®æ.ObjToInt(); |
| | | }); |
| | | stockInfo.LocationCode = locationInfo.LocationCode; |
| | | //æ¨éå
¥åºå®æç»Erp |
| | | //è·åå
¥åºåæ´æ°å
¥åºå |
| | | //Dt_InboundOrder inboundOrder = _inboundRepository.InboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x=>x.InboundOrderNo); |
| | | if (true) |
| | | { |
| | | |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.äººå·¥å®æ : OperateTypeEnum.èªå¨å®æ); |
| | | |
| | | _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, (PalletTypeEnum)stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId); |
| | | |
| | | _stockRepository.StockInfoRepository.UpdateData(stockInfo); |
| | | _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details); |
| | | _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationChangeType.InboundCompleted); |
| | |
| | | using WIDESEA_TaskInfoService; |
| | | using WIDESEA_DTO.ERP; |
| | | using WIDESEA_DTO.MES; |
| | | using WIDESEA_Core.Helper; |
| | | |
| | | namespace WIDESEA_WMSServer.Controllers.MES |
| | | { |
| | |
| | | { |
| | | return _taskService.TestScrap(model.Content); |
| | | } |
| | | [HttpPost, Route("TestSynStock"), AllowAnonymous] |
| | | public WebResponseContent TestSynStock([FromBody]TestToolSynInfo toolSynInfo) |
| | | { |
| | | return _taskService.TestSynStock(toolSynInfo); |
| | | } |
| | | [HttpPost, Route("testHttp"), AllowAnonymous, MethodParamsValidate] |
| | | public string TestScrap(string str) |
| | | { |
| | | return HttpMesHelper.GetStr(str); |
| | | } |
| | | } |
| | | } |
| | |
| | | "MainDB": "DB_WIDESEA", //å½å项ç®ç主åºï¼æå¯¹åºçè¿æ¥å符串çEnabledå¿
须为true |
| | | //è¿æ¥å符串 |
| | | //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=", |
| | | "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | //è·¨å |
| | | "Cors": { |
| | | "PolicyName": "CorsIpAccess", //çç¥åç§° |