From 695571c6009ecbc12e7d4a4fb147df7967a1260e Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 07 七月 2025 20:21:19 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/HuaiAn
---
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs | 236 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 208 insertions(+), 28 deletions(-)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs"
index ab94fc4..a5ebece 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs"
@@ -1,7 +1,9 @@
锘�
using AutoMapper;
+using Newtonsoft.Json;
using System;
using System.Collections.Generic;
+using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -12,11 +14,16 @@
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.CodeConfigEnum;
using WIDESEA_Core.Helper;
+using WIDESEA_DTO;
using WIDESEA_DTO.Basic;
+using WIDESEA_DTO.QMS;
+using WIDESEA_External.Model;
+using WIDESEA_External.QMSService;
using WIDESEA_IBasicRepository;
using WIDESEA_ICheckRepository;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
+using WIDESEA_IStockRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_InboundService
@@ -28,14 +35,20 @@
private readonly IInboundRepository _inboundRepository;
private readonly IBasicRepository _basicRepository;
private readonly ICheckOrderRepository _checkOrderRepository;
+ private readonly IStockRepository _stockRepository;
+ private readonly ISupplierInfoRepository _supplierInfoRepository;
+ private readonly IInvokeQMSService _invokeQMSService;
- public ReceiveOrderDetailService(IReceiveOrderDetailRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IInboundRepository inboundRepository, IBasicRepository basicRepository, ICheckOrderRepository checkOrderRepository) : base(BaseDal)
+ public ReceiveOrderDetailService(IReceiveOrderDetailRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IInboundRepository inboundRepository, IBasicRepository basicRepository, ICheckOrderRepository checkOrderRepository, IStockRepository stockRepository,ISupplierInfoRepository supplierInfoRepository,IInvokeQMSService invokeQMSService) : base(BaseDal)
{
_mapper = mapper;
_unitOfWorkManage = unitOfWorkManage;
_inboundRepository = inboundRepository;
_basicRepository = basicRepository;
_checkOrderRepository = checkOrderRepository;
+ _stockRepository = stockRepository;
+ _supplierInfoRepository = supplierInfoRepository;
+ _invokeQMSService = invokeQMSService;
}
private static object _rowNoLocker = new object();
@@ -59,9 +72,56 @@
{
return WebResponseContent.Instance.Error($"璇ュ崟鎹凡鏀惰揣瀹屾垚");
}
-
+ Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == receiveOrder.WarehouseId);
MatSerNumAnalysisModel model = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNum);
+ Dt_SupplierInfo supplierInfo = _supplierInfoRepository.QueryFirst(x => x.SupplierCode == receiveOrder.SuppliersId);
+ //鏀惰揣澧炲姞鎵规鍗℃帶,鏌ヨ鏀惰揣鏄庣粏鏄惁鏈夊瓨鍦ㄥ悓涓�涓壒娆�
+ Dt_ReceiveOrderDetail receiveOrderDetailOld = _inboundRepository.ReceiveOrderDetailRepository.QueryFirst(x => x.LotNo == model.LotNo && x.MaterielCode == model.MaterielCode);
+ Dt_ReceiveOrder? receiveOrderOld = null;
+ if (receiveOrderDetailOld!=null)
+ {
+ receiveOrderOld = _inboundRepository.ReceiveOrderRepository.QueryFirst(x => x.ReceiveOrderId == receiveOrderDetailOld.ReceiveOrderId);
+ }
+ if (receiveOrderDetailOld!=null && receiveOrderOld?.WarehouseId== receiveOrder.WarehouseId)
+ {
+ return WebResponseContent.Instance.Error($"鏀惰揣鍗曞彿{receiveOrderOld.ReceiveOrderNo}涓壒娆model.LotNo}宸插瓨鍦�");
+ }
+ //鏌ヨ搴撳瓨鎵规鏄惁鏈夊瓨鍦ㄥ悓涓�涓壒娆�
+ Dt_StockInfoDetail stockInfoDetail = _stockRepository.StockInfoDetailRepository.QueryFirst(x => x.BatchNo == model.LotNo && x.MaterielCode == model.MaterielCode);
+ Dt_StockInfo? stockInfo = null;
+ if (stockInfoDetail!=null)
+ {
+ stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.Id == stockInfoDetail.Id);
+ }
+ if (stockInfoDetail!=null && stockInfo?.WarehouseId==receiveOrder.WarehouseId)
+ {
+ return WebResponseContent.Instance.Error($"搴撳瓨{stockInfo.PalletCode}涓壒娆model.LotNo}宸插瓨鍦�");
+ }
+ if (model!=null)
+ {
+ string format = "yyyy-MM-dd"; // 鐩爣鏍煎紡
+ DateTime parsedDate;
+ // 瑙f瀽楠岃瘉鏍煎紡
+ bool isValidEffDate = DateTime.TryParseExact(
+ model.EffectiveDate,
+ format,
+ CultureInfo.InvariantCulture,
+ DateTimeStyles.None,
+ out parsedDate
+ );
+ bool isValidProDate = DateTime.TryParseExact(
+ model.ProductionDate,
+ format,
+ CultureInfo.InvariantCulture,
+ DateTimeStyles.None,
+ out parsedDate
+ );
+ if (!isValidEffDate || !isValidProDate)
+ {
+ return WebResponseContent.Instance.Error("鏍煎紡鏃犳晥鎴栨棩鏈熶笉鍚堟硶");
+ }
+ }
Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == model.MaterielCode);
if (materielInfo == null)
{
@@ -71,6 +131,71 @@
if (materielInfo.WarehouseId != receiveOrder.WarehouseId)
{
return WebResponseContent.Instance.Error($"璇ョ墿鏂欎笉灞炰簬璇ヤ粨搴�");
+ }
+ //鏃犻噰璐崟杩涜鏀惰揣
+ if (receiveOrder.ReceiveOrderType != ReceiveOrderTypeEnum.PO.ObjToInt())
+ {
+ //鑾峰彇鍏蜂綋鎵规鍙婄墿鏂�
+ Dt_ReceiveOrderDetail? detailNoPo = receiveOrder.Details.FirstOrDefault(x => x.LotNo == model.LotNo && x.MaterielCode == model.MaterielCode);
+ lock (_rowNoLocker)
+ {
+ if (detailNoPo != null)
+ {
+ //鍘熸湁鏀惰揣鏄庣粏澧炲姞鏀惰揣鏁伴噺
+ detailNoPo.ReceivedQuantity += model.Quantity;
+ _unitOfWorkManage.BeginTran();
+ BaseDal.UpdateData(detailNoPo);
+ _unitOfWorkManage.CommitTran();
+ }
+ else
+ {
+ 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,
+ MaterielName = materielInfo.MaterielName,
+ MaterielSpec = materielInfo.MaterielSpec,
+ ReceiveOrderId = receiveOrder.ReceiveOrderId,
+ PurchaseOrderDetailRowNo = rowNo + 1,
+ IfInspection = materielInfo.IsCheck.ObjToInt(),
+ CurrCode = "",
+ PriceInTax = 0,
+ TaxRate = "",
+ RowNo = rowNo + 1,
+ Unit = materielInfo.MaterielUnit
+ };
+ if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt())
+ {
+ receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt();
+ }
+ _unitOfWorkManage.BeginTran();
+ _inboundRepository.ReceiveOrderDetailRepository.AddData(receiveOrderDetail);
+ _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder);
+ #region 娉ㄩ噴
+ if (materielInfo.IsCheck == WhetherEnum.True)
+ {
+ Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
+ checkOrder.OrderType = CheckTypeEnum.ReceiveCheck.ObjToInt();
+ checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
+ checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity;
+ checkOrder.ReceiveDetailRowNo = receiveOrderDetail.RowNo;
+ checkOrder.ScrappedQuantity = 0;
+ checkOrder.ReturnQuantity = 0;
+ checkOrder.DefectedQuantity = 0;
+ _checkOrderRepository.AddData(checkOrder);
+ }
+ #endregion
+ _unitOfWorkManage.CommitTran();
+ }
+ return WebResponseContent.Instance.OK();
+ }
}
Dt_PurchaseOrder purchaseOrder = _inboundRepository.PurchaseOrderRepository.Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.PurchaseOrderNo).Includes(x => x.Details).First();
if (purchaseOrder == null)
@@ -89,40 +214,49 @@
{
return WebResponseContent.Instance.Error($"璇ラ噰璐崟鏀惰揣宸插畬鎴�");
}
- Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrder.Details.FirstOrDefault(x => x.MaterielCode == model.MaterielCode && (x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt() || x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.Receiving.ObjToInt()));
+ Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrder.Details.Where(x => x.MaterielCode == model.MaterielCode && (x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt() || x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.Receiving.ObjToInt())).OrderBy(x=>x.Id).FirstOrDefault();
if (purchaseOrderDetail == null)
{
- return WebResponseContent.Instance.Error($"璇ユ槑缁嗘敹璐у凡瀹屾垚");
+ return WebResponseContent.Instance.Error($"璇ラ噰璐崟鏄庣粏鏀惰揣宸插畬鎴�");
}
- //鍒ゆ柇鏄惁瀛樺湪瀵瑰簲閲囪喘鏄庣粏鐨勬敹璐ф槑缁�
- Dt_ReceiveOrderDetail? detail = receiveOrder.Details.FirstOrDefault(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo);
- if (detail != null && detail.ReceivedQuantity == purchaseOrderDetail.PurchaseDetailQuantity)
+ //鍒ゆ柇璇ラ噰璐崟鏄庣粏鏄惁宸插瓨鍦ㄦ槑缁�
+ List<Dt_ReceiveOrderDetail> details = receiveOrder.Details.Where(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo && x.MaterielCode == model.MaterielCode).ToList();
+ if (details.Count >0 && details.Sum(x=>x.ReceivedQuantity) == purchaseOrderDetail.PurchaseDetailQuantity)
{
- return WebResponseContent.Instance.Error($"璇ユ槑缁嗗凡鏀惰揣");
+ return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏄庣粏宸叉敹璐�");
}
-
+ //鑾峰彇鍏蜂綋鎵规鍙婄墿鏂�
+ Dt_ReceiveOrderDetail? detail = details.FirstOrDefault(x => x.LotNo == model.LotNo && x.MaterielCode==model.MaterielCode);
lock (_rowNoLocker)
{
if (detail != null)
{
//鍘熸湁鏀惰揣鏄庣粏澧炲姞鏀惰揣鏁伴噺
detail.ReceivedQuantity += model.Quantity;
- purchaseOrderDetail.PurchaseDetailReceiveQty = detail.ReceivedQuantity;
+ purchaseOrderDetail.PurchaseDetailReceiveQty += model.Quantity;
if (purchaseOrderDetail.PurchaseDetailReceiveQty > purchaseOrderDetail.PurchaseDetailQuantity)
{
- return WebResponseContent.Instance.Error($"閲囪喘鍗曡鐗╂枡鏁伴噺鍜屾敹璐ф暟閲忎笉涓�鑷�");
+ return WebResponseContent.Instance.Error($"閲囪喘鍗曡鍙穥purchaseOrderDetail.RowNo}鐗╂枡{purchaseOrderDetail.MaterielCode}鏁伴噺婧㈠嚭:{purchaseOrderDetail.PurchaseDetailReceiveQty - purchaseOrderDetail.PurchaseDetailQuantity}");
}
if (purchaseOrderDetail.PurchaseDetailReceiveQty == purchaseOrderDetail.PurchaseDetailQuantity)
{
purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt();
}
- float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty) + model.Quantity;
- _unitOfWorkManage.BeginTran();
+ else
+ {
+ purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Receiving.ObjToInt();
+ }
+ float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty);
if (purchaseOrder.OrderQuantity == sumQty)
{
purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt();
- _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder);
}
+ else
+ {
+ purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Receiving.ObjToInt();
+ }
+ _unitOfWorkManage.BeginTran();
+ _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder);
BaseDal.UpdateData(detail);
_inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail);
_unitOfWorkManage.CommitTran();
@@ -140,6 +274,8 @@
ReceivedQuantity = model.Quantity,
MaterielCode = model.MaterielCode,
LotNo = model.LotNo,
+ MaterielName=materielInfo.MaterielName,
+ MaterielSpec=materielInfo.MaterielSpec,
ReceiveOrderId = receiveOrder.ReceiveOrderId,
PurchaseOrderDetailRowNo = purchaseOrderDetail.RowNo,
IfInspection = materielInfo.IsCheck.ObjToInt(),
@@ -168,13 +304,17 @@
}
if (purchaseOrderDetail.PurchaseDetailReceiveQty > purchaseOrderDetail.PurchaseDetailQuantity)
{
- return WebResponseContent.Instance.Error($"閲囪喘鍗曡鐗╂枡鏁伴噺鍜屾敹璐ф暟閲忎笉涓�鑷�");
+ return WebResponseContent.Instance.Error($"閲囪喘鍗曡鍙穥purchaseOrderDetail.RowNo}鐗╂枡{purchaseOrderDetail.MaterielCode}鏁伴噺婧㈠嚭:{purchaseOrderDetail.PurchaseDetailReceiveQty - purchaseOrderDetail.PurchaseDetailQuantity}");
}
if (purchaseOrderDetail.PurchaseDetailQuantity == purchaseOrderDetail.PurchaseDetailReceiveQty)
{
purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt();
}
- float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty) + model.Quantity;
+ else
+ {
+ purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Receiving.ObjToInt();
+ }
+ float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty); //+ model.Quantity
_unitOfWorkManage.BeginTran();
BaseDal.AddData(receiveOrderDetail);
if (purchaseOrder.OrderQuantity == sumQty)
@@ -182,20 +322,60 @@
purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt();
_inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder);
}
+ if(purchaseOrder.PurchaseOrderStatus== PurchaseOrderStatusEnum.NotReceived.ObjToInt())
+ {
+ purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Receiving.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
+ if (materielInfo.IsCheck == WhetherEnum.True)
+ {
+ Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
+ checkOrder.OrderType = CheckTypeEnum.ReceiveCheck.ObjToInt();
+ checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
+ checkOrder.Result = CheckAcceptEnum.NotCheckAccept.ToString();
+ checkOrder.QualifiedQuantity = 0;
+ checkOrder.ReceiveDetailRowNo = receiveOrderDetail.RowNo;
+ checkOrder.WarehouseId = receiveOrder.WarehouseId;
+ checkOrder.ScrappedQuantity = 0;
+ checkOrder.MaterielSpec = materielInfo.MaterielSpec;
+ checkOrder.ReturnQuantity = 0;
+ checkOrder.DefectedQuantity = 0;
+ int id = _checkOrderRepository.AddData(checkOrder);
+ QMSReceiveCheckModel qMSReceiveCheck = new QMSReceiveCheckModel()
+ {
+ UniqueTag = id.ToString(),
+ EntryNumber = receiveOrder.ReceiveOrderNo,
+ MaterialCode = receiveOrderDetail.MaterielCode,
+ MaterialName = receiveOrderDetail.MaterielName,
+ Quantity = (decimal)receiveOrderDetail.ReceivedQuantity,
+ SupplierCode = receiveOrder.SuppliersId,
+ SupplierName = supplierInfo.SupplierName,
+ BatchNumber = receiveOrderDetail.LotNo,
+ DeliveryNumber = receiveOrder.DeliveryCode,
+ PurchaseNumber = receiveOrderDetail.PurchaseOrderNo,
+ RowNumber = receiveOrderDetail.RowNo,
+ WarehouseCode = warehouse.WarehouseCode,
+ ReceiptDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+ Remark = " "
+ };
+ //璋冪敤QMS鏉ユ枡妫�楠屾帴鍙�
+ string response = _invokeQMSService.InvokeReceiveCheckApi(qMSReceiveCheck);
+ MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>();
+ if (!mesResponseContent.BSucc)
+ {
+ throw new Exception(mesResponseContent.StrMsg);
+ }
+ ReceiveResultDTO? receiveResult = JsonConvert.DeserializeObject<ReceiveResultDTO>(mesResponseContent.Content.ToString());
+ if (receiveResult == null)
+ {
+ throw new Exception("鎺ユ敹QMS缁撴灉澶辫触");
+ }
+ Dt_CheckOrder _CheckOrder = _checkOrderRepository.QueryFirst(x => x.CheckOrderId == id);
+ _CheckOrder.CheckOrderNo = receiveResult.InspectionNumber;
+ _checkOrderRepository.UpdateData(_CheckOrder);
+ }
_unitOfWorkManage.CommitTran();
}
--
Gitblit v1.9.3