내 웹 사이트의 2 명의 다른 사용자가 동시에 제품 판매를 생성했을 때이 문제가 발생했습니다. 이것은 서버에 2 개의 다른 요청을 생성하고 2 개의 다른 판매 티켓을 인쇄해야합니다. 문제는 서버 요청이 동시에 올 때 (또는 서로 매우 가까이에있을 때) 두 분기가 모두 자체 티켓을 인쇄하는 대신 동일한 티켓을 인쇄한다는 것입니다.두 명의 사용자가 동일한 방법으로 액세스 할 때 결과가 공유 됨
여기 내 코드입니다 :
Branch Total CreatedAt ProductSaleId
EBQ Centro Maya 35.00 2016-06-13 15:35:54.743 3263825d-bca3-4d18-bbca-3eebe4c3398a
EBQ PA Chetumal 30.00 2016-06-13 15:35:54.647 01f52d7d-5745-426b-a973-4a701a18b8e4
이이 DB 항목이며, 2 개 개의 다른 지점은 15시 35분 54초에서 판매 각을했다. 매각이 이루어지면
그래서, PrintReceipt 방법은 다음과 같이 호출됩니다
HelperObjects.ThermalPOS58.PrinterController.PrintReceipt(new InvoiceReceipt()
{
Discount = discount,
InvoiceNumber = "TEST",
SubTotal = decimal.Parse(createProductSale.Total),
Total = total,
Change = createProductSale.Change ?? "0",
ClientAmount = createProductSale.ClientAmount,
InvoiceDateFormatted =
DateTime.UtcNow.ConvertUtcTimeToTimeZone("", User.Identity.GetUserId())
.ToString("dd/MM/yyyy HH:mm:ss"),
BranchName = _unitOfWork.BranchRepository.GetById(branchId).Name,
InvoiceItems = invoiceReceipts,
PrinterName = _unitOfWork.BranchRepository.GetById(branchId).PrinterName,
IsTpv = createProductSale.IsTpv
});
PrintReceipt 방법은 다음과 같습니다
private static InvoiceReceipt _mappedInvoice ;
public static void PrintReceipt(InvoiceReceipt invoiceReceipt)
{
_mappedInvoice = invoiceReceipt;
var printNodeIntegration = new PrintNodeIntegration();
printNodeIntegration.Print(GetDocument(), invoiceReceipt.PrinterName);
}
각 호출이 PrintReceipt 방법으로 자신의 청구서를 보내는 판매가 동시에 이루어지는 경우를 제외하고는 잘 작동합니다. 이 경우 두 지점에서 동일한 영수증을 인쇄합니다. 일반적으로 처음에 온 것입니다.
아이디어가 있으십니까?
'static '회원은 모든 세션에서 공유됩니다. 'Session'을 사용하거나 다른 방법으로 인보이스를 상태로 유지하십시오. –
다른 곳에서'_mappedInvoice'를 사용하고 있습니까? 왜 정적 멤버가 필요합니까? –
정적은 의심 스럽지만, GetDocument()에서 사용하지 않는 한 제공된 코드에서 이에 영향을 주어서는 안됩니다 (여기서 큰 붉은 깃발, 나는 의심 스럽다); 그래서 GetDocument()는 실제로 무엇을 하는가? GetDocument()에 대한 코드를 보여줍니다. GetDocument()에서 정적 변수 _mappedInvoice를 사용하는 경우 GetDocument()에 invoiceReceipt를 전달하는 대신 정적 변수를 사용하는 이유는 무엇입니까? –