fix: deleting single invoices is now safe even when there are invoice number duplicates

pull/6221/head
Gauthier LO 2024-04-30 17:33:56 +02:00
parent 5117a74c22
commit f1ed7ae305
21 changed files with 61 additions and 65 deletions

View File

@ -217,7 +217,7 @@ public class PurchaseOrderController {
List<String> platformOrderIds = new ArrayList<>(Arrays.asList(purchaseOrderPage.getPlatformOrderId().split(",")));
log.info("Editing purchase order and attributing it to orders : {}", platformOrderIds);
log.info("Removing previous attribution to orders");
platformOrderService.removePurchaseInvoiceNumber(purchaseOrder.getInvoiceNumber());
platformOrderService.removePurchaseInvoiceNumber(purchaseOrder.getInvoiceNumber(), purchaseOrder.getClientId());
List<PlatformOrder> platformOrders = platformOrderService.selectByPlatformOrderIds(platformOrderIds);
log.info("Platform orders found for attribution : {}", platformOrders.stream().map(PlatformOrder::getPlatformOrderId).collect(Collectors.toList()));
Map<String, List<String>> platformOrderIdUpdateMap = new HashMap<>();
@ -242,7 +242,7 @@ public class PurchaseOrderController {
/**
* id
*
* not used, use cancelInvoice instead
* @param id
* @return
*/
@ -261,7 +261,7 @@ public class PurchaseOrderController {
/**
*
*
* not used, use cancelBatchInvoice instead
* @param ids
* @return
*/

View File

@ -31,7 +31,7 @@ public class Client implements Serializable {
/**
*
*/
@TableId(type = IdType.ASSIGN_ID)
@TableId(type = IdType.ASSIGN_UUID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**

View File

@ -30,7 +30,7 @@ public class PurchaseOrder implements Serializable {
/**
*
*/
@TableId(type = IdType.ASSIGN_ID)
@TableId(type = IdType.ASSIGN_UUID)
@ApiModelProperty(value = "主键")
private String id;
/**

View File

@ -76,7 +76,7 @@ public interface PlatformOrderContentMapper extends BaseMapper<PlatformOrderCont
List<PlatformOrderContent> findUninvoicedShippedOrderContents();
List<PlatformOrderContent> fetchPlatformOrderContentsToArchive(@Param("orderIDs") List<String> orderIDs);
void insertPlatformOrderContentsArchives(@Param("orderContents") List<PlatformOrderContent> platformOrderContents);
void cancelInvoice(@Param("invoiceNumber") String invoiceNumber);
void cancelInvoice(@Param("invoiceNumber") String invoiceNumber, @Param("clientId") String clientId);
void cancelBatchInvoice(@Param("invoiceNumbers") List<String> invoiceNumbers);
List<SkuPrice> searchSkuPrice(@Param("skuIds") List<String> skuIds);

View File

@ -186,7 +186,7 @@ public interface PlatformOrderMapper extends BaseMapper<PlatformOrder> {
List<PlatformOrder> fetchOrdersToArchiveBetweenDate(@Param("startDate") String startDate, @Param("endDate") String endDate);
List<PlatformOrder> fetchOrdersToArchiveBeforeDate(@Param("endDate") String endDate);
void insertPlatformOrdersArchives(@Param("orders") List<PlatformOrder> platformOrders);
void cancelInvoice(@Param("invoiceNumber") String invoiceNumber);
void cancelInvoice(@Param("invoiceNumber") String invoiceNumber, @Param("clientId") String clientId);
void cancelBatchInvoice(@Param("invoiceNumbers") List<String> invoiceNumbers);
List<PlatformOrder> findUninvoicedShippingOrdersByShopForClient(@Param("shopIds") List<String> shopIds, @Param("erpStatuses") List<Integer> erpStatuses);
@ -206,7 +206,7 @@ public interface PlatformOrderMapper extends BaseMapper<PlatformOrder> {
List<PlatformOrder> selectByPlatformOrderIds(@Param("platformOrderIds") List<String> platformOrderIds);
void removePurchaseInvoiceNumber(@Param("invoiceNumber") String purchaseInvoiceNumber);
void removePurchaseInvoiceNumber(@Param("invoiceNumber") String purchaseInvoiceNumber, @Param("clientId") String clientId);
void removePurchaseInvoiceNumbers(@Param("invoiceNumbers") List<String> invoiceNumbers);

View File

@ -102,7 +102,7 @@ public interface PurchaseOrderMapper extends BaseMapper<PurchaseOrder> {
BigDecimal getPurchaseFeesByInvoiceCode(@Param("invoiceCode") String invoiceCode);
void deleteInvoice(@Param("invoiceNumber") String invoiceNumber);
void deleteInvoice(@Param("invoiceNumber") String invoiceNumber, @Param("clientId") String clientId);
void deleteBatchInvoice(@Param("invoiceNumbers") List<String> invoiceNumbers);

View File

@ -17,6 +17,6 @@ import java.util.List;
@Repository
public interface SavRefundMapper extends BaseMapper<SavRefund> {
List<BigDecimal> fetchRefundAmount(@Param("invoiceNumber") String invoiceNumber);
void cancelInvoice(@Param("invoiceNumber") String invoiceNumber);
void cancelInvoice(@Param("invoiceNumber") String invoiceNumber, @Param("clientId") String clientId);
void cancelBatchInvoice(@Param("invoiceNumbers") List<String> invoiceNumbers);
}

View File

@ -298,6 +298,8 @@
UPDATE platform_order_content poc
JOIN platform_order po ON poc.platform_order_id = po.id
JOIN shipping_invoice si ON po.shipping_invoice_number = si.invoice_number
JOIN shop s ON po.shop_id = s.id
JOIN client c ON s.owner_id = c.id
SET poc.picking_fee = 0.0,
poc.shipping_fee = NULL,
poc.service_fee = NULL,
@ -309,7 +311,8 @@
WHEN poc.erp_status = '2' AND si.create_by = 'system' THEN '1'
ELSE poc.erp_status
END
WHERE po.shipping_invoice_number = #{invoiceNumber};
WHERE po.shipping_invoice_number = #{invoiceNumber}
AND c.id = #{clientId};
</update>
<update id="cancelBatchInvoice">
UPDATE platform_order_content

View File

@ -726,18 +726,21 @@
<update id="cancelInvoice">
UPDATE platform_order po
JOIN shipping_invoice si ON po.shipping_invoice_number = si.invoice_number
SET fret_fee = NULL,
order_service_fee = NULL,
shipping_invoice_number = NULL,
picking_fee = 0.0,
packaging_material_fee = 0.0,
erp_status =
JOIN shop s ON po.shop_id = s.id
JOIN client c ON s.owner_id = c.id
SET po.fret_fee = NULL,
po.order_service_fee = NULL,
po.shipping_invoice_number = NULL,
po.picking_fee = 0.0,
po.packaging_material_fee = 0.0,
po.erp_status =
CASE
WHEN erp_status = '4' THEN '3'
WHEN erp_status = '2' AND si.create_by = 'system' THEN '1'
ELSE erp_status
END
WHERE shipping_invoice_number = #{invoiceNumber};
WHERE shipping_invoice_number = #{invoiceNumber}
AND c.id = #{clientId};
</update>
<update id="cancelBatchInvoice">
UPDATE platform_order
@ -806,8 +809,11 @@
</select>
<update id="removePurchaseInvoiceNumber">
UPDATE platform_order
JOIN shop s ON platform_order.shop_id = s.id
JOIN client c ON s.owner_id = c.id
SET purchase_invoice_number = NULL
WHERE purchase_invoice_number = #{invoiceNumber}
AND c.id = #{clientId};
</update>
<update id="removePurchaseInvoiceNumbers">
UPDATE platform_order

View File

@ -73,6 +73,7 @@
DELETE
FROM purchase_order
WHERE invoice_number = #{invoiceNumber}
AND purchase_order.client_id = #{clientId}
</delete>
<delete id="deleteBatchInvoice">
DELETE

View File

@ -8,10 +8,14 @@
</select>
<update id="cancelInvoice">
UPDATE sav_refund
JOIN platform_order po ON sav_refund.platform_order_id = po.id
JOIN shop s ON po.shop_id = s.id
JOIN client c ON s.owner_id = c.id
SET invoice_number = NULL,
refund_date = NULL,
total_refund_amount = 0.0
WHERE invoice_number = #{invoiceNumber};
WHERE invoice_number = #{invoiceNumber}
AND c.id = #{clientId};
</update>
<update id="cancelBatchInvoice">
UPDATE sav_refund

View File

@ -49,7 +49,7 @@ public interface IPlatformOrderContentService extends IService<PlatformOrderCont
* Cancels an invoice
* @param invoiceNumber
*/
void cancelInvoice(String invoiceNumber);
void cancelInvoice(String invoiceNumber, String clientId);
/**
* Cancels a batch of invoices
* @param invoiceNumbers

View File

@ -177,7 +177,7 @@ public interface IPlatformOrderService extends IService<PlatformOrder> {
* Cancel Invoice
* @param invoiceNumber
*/
void cancelInvoice(String invoiceNumber);
void cancelInvoice(String invoiceNumber, String clientId);
/**
* Cancel Invoice
* @param invoiceNumbers
@ -229,7 +229,7 @@ public interface IPlatformOrderService extends IService<PlatformOrder> {
List<PlatformOrder> selectByPlatformOrderIds(List<String> platformOrderIds);
void removePurchaseInvoiceNumber(String purchaseInvoiceNumber);
void removePurchaseInvoiceNumber(String purchaseInvoiceNumber, String clientId);
void removePurchaseInvoiceNumbers(List<String> invoiceNumbers);
void updatePurchaseInvoiceNumber(List<String> orderIds, String invoiceCode);

View File

@ -112,7 +112,7 @@ public interface IPurchaseOrderService extends IService<PurchaseOrder> {
BigDecimal getPurchaseFeesByInvoiceCode(String invoiceCode);
void cancelInvoice(String invoiceNumber);
void cancelInvoice(String invoiceNumber, String clientId);
void cancelBatchInvoice(List<String> invoiceNumbers);
@ -134,8 +134,6 @@ public interface IPurchaseOrderService extends IService<PurchaseOrder> {
void setPaid(List<String> invoiceNumbers);
void deleteInvoice(String invoiceNumber);
PurchaseOrder getPurchaseByInvoiceNumberAndClientId(String invoiceNumber, String clientId);
List<PurchaseOrder> getPurchasesByInvoices(List<Invoice> invoices);

View File

@ -18,7 +18,7 @@ public interface ISavRefundService extends IService<SavRefund> {
* Cancel Invoice
* @param invoiceNumber
*/
void cancelInvoice(String invoiceNumber);
void cancelInvoice(String invoiceNumber, String clientId);
/**
* Cancel Batch Invoice
* @param invoiceNumbers

View File

@ -31,8 +31,6 @@ public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> impl
@Autowired
private IPlatformOrderService platformOrderService;
@Autowired
private PurchaseOrderContentMapper purchaseOrderContentMapper;
@Autowired
private IPurchaseOrderService purchaseOrderService;
@Autowired
private ISavRefundService savRefundService;
@ -59,18 +57,19 @@ public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> impl
public boolean cancelInvoice(String id, String invoiceNumber, String clientId) {
String invoiceEntity = clientService.getById(clientId).getInvoiceEntity();
savRefundService.cancelInvoice(invoiceNumber, clientId);
if(Invoice.getType(invoiceNumber).equalsIgnoreCase(PURCHASE.name())) {
PurchaseOrder po = purchaseOrderService.getById(id);
if (po.getInventoryDocumentString() != null && !po.getInventoryDocumentString().isEmpty())
shippingInvoiceService.deleteAttachmentFile(po.getInventoryDocumentString());
if (po.getPaymentDocumentString() != null && !po.getPaymentDocumentString().isEmpty())
shippingInvoiceService.deleteAttachmentFile(po.getPaymentDocumentString());
platformOrderService.removePurchaseInvoiceNumber(invoiceNumber);
purchaseOrderService.deleteInvoice(invoiceNumber);
platformOrderService.removePurchaseInvoiceNumber(invoiceNumber, clientId);
purchaseOrderService.delMain(id);
}
if(Invoice.getType(invoiceNumber).equalsIgnoreCase(SHIPPING.name())) {
platformOrderContentService.cancelInvoice(invoiceNumber);
platformOrderService.cancelInvoice(invoiceNumber);
platformOrderContentService.cancelInvoice(invoiceNumber, clientId);
platformOrderService.cancelInvoice(invoiceNumber, clientId);
shippingInvoiceService.delMain(id);
}
if(Invoice.getType(invoiceNumber).equalsIgnoreCase(COMPLETE.name())) {
@ -79,13 +78,12 @@ public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> impl
shippingInvoiceService.deleteAttachmentFile(purchase.getInventoryDocumentString());
if(purchase.getPaymentDocumentString() != null && !purchase.getPaymentDocumentString().isEmpty())
shippingInvoiceService.deleteAttachmentFile(purchase.getPaymentDocumentString());
platformOrderContentService.cancelInvoice(invoiceNumber);
platformOrderService.removePurchaseInvoiceNumber(invoiceNumber);
platformOrderService.cancelInvoice(invoiceNumber);
purchaseOrderService.cancelInvoice(invoiceNumber);
platformOrderContentService.cancelInvoice(invoiceNumber, clientId);
platformOrderService.removePurchaseInvoiceNumber(invoiceNumber, clientId);
platformOrderService.cancelInvoice(invoiceNumber, clientId);
purchaseOrderService.delMain(purchase.getId());
shippingInvoiceService.delMain(id);
}
savRefundService.cancelInvoice(invoiceNumber);
log.info("Updating balance ...");
balanceService.deleteBalance(id, Balance.OperationType.Debit.name());
@ -117,12 +115,10 @@ public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> impl
shippingInvoiceService.deleteAttachmentFile(po.getPaymentDocumentString());
}
platformOrderService.removePurchaseInvoiceNumbers(purchaseInvoiceNumbers);
purchaseOrderService.cancelBatchInvoice(purchaseInvoiceNumbers);
purchaseOrderContentMapper.deleteFromPurchaseIds(ids);
purchaseOrderService.delBatchMain(ids);
savRefundService.cancelBatchInvoice(purchaseInvoiceNumbers);
log.info("Updating balances ...");
balanceService.deleteBatchBalance(ids, Balance.OperationType.Debit.name());
}
if(!shippingInvoiceNumbers.isEmpty()) {
List<String> ids = invoices.stream().filter(invoice -> Invoice.getType(invoice.getInvoiceNumber()).equalsIgnoreCase(SHIPPING.name())).map(Invoice::getId).collect(Collectors.toList());
@ -132,7 +128,6 @@ public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> impl
shippingInvoiceService.delBatchMain(ids);
log.info("Updating balances ...");
balanceService.deleteBatchBalance(ids, Balance.OperationType.Debit.name());
}
if(!completeInvoiceNumbers.isEmpty()) {
List<Invoice> completeInvoices = invoices.stream().filter(invoice -> Invoice.getType(invoice.getInvoiceNumber()).equalsIgnoreCase(COMPLETE.name())).collect(Collectors.toList());
@ -144,7 +139,7 @@ public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> impl
//purchase cancel
List<PurchaseOrder> purchaseOrders = purchaseOrderService.getPurchasesByInvoices(completeInvoices);
List<String> purchaseIds = purchaseOrders.stream().map(PurchaseOrder::getId).collect(Collectors.toList());
for(PurchaseOrder po : purchaseOrders) {
if(po.getInventoryDocumentString() != null && !po.getInventoryDocumentString().isEmpty())
shippingInvoiceService.deleteAttachmentFile(po.getInventoryDocumentString());
@ -152,8 +147,7 @@ public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> impl
shippingInvoiceService.deleteAttachmentFile(po.getPaymentDocumentString());
}
platformOrderService.removePurchaseInvoiceNumbers(completeInvoiceNumbers);
purchaseOrderService.cancelBatchInvoice(completeInvoiceNumbers);
purchaseOrderContentMapper.deleteFromPurchaseIds(ids);
purchaseOrderService.delBatchMain(purchaseIds);
savRefundService.cancelBatchInvoice(completeInvoiceNumbers);
log.info("Updating balances ...");

View File

@ -64,8 +64,8 @@ public class PlatformOrderContentServiceImpl extends ServiceImpl<PlatformOrderCo
platformOrderContentMapper.insertPlatformOrderContentsArchives(platformOrderContents);
}
@Override
public void cancelInvoice(String invoiceNumber) {
platformOrderContentMapper.cancelInvoice(invoiceNumber);
public void cancelInvoice(String invoiceNumber, String clientId) {
platformOrderContentMapper.cancelInvoice(invoiceNumber, clientId);
}
@Override
public void cancelBatchInvoice(List<String> invoiceNumbers) {

View File

@ -410,8 +410,8 @@ public class PlatformOrderServiceImpl extends ServiceImpl<PlatformOrderMapper, P
platformOrderMap.insertPlatformOrdersArchives(platformOrders);
}
@Override
public void cancelInvoice(String invoiceNumber) {
platformOrderMap.cancelInvoice(invoiceNumber);
public void cancelInvoice(String invoiceNumber, String clientId) {
platformOrderMap.cancelInvoice(invoiceNumber, clientId);
}
@Override
public void cancelBatchInvoice(List<String> invoiceNumbers) {
@ -463,8 +463,8 @@ public class PlatformOrderServiceImpl extends ServiceImpl<PlatformOrderMapper, P
}
@Override
public void removePurchaseInvoiceNumber(String purchaseInvoiceNumber) {
platformOrderMap.removePurchaseInvoiceNumber(purchaseInvoiceNumber);
public void removePurchaseInvoiceNumber(String purchaseInvoiceNumber, String clientId) {
platformOrderMap.removePurchaseInvoiceNumber(purchaseInvoiceNumber, clientId);
}
@Override

View File

@ -33,8 +33,8 @@ public class SavRefundServiceImpl extends ServiceImpl<SavRefundMapper, SavRefund
return savRefundMapper.fetchRefundAmount(invoiceNumber);
}
@Override
public void cancelInvoice(String invoiceNumber) {
savRefundMapper.cancelInvoice(invoiceNumber);
public void cancelInvoice(String invoiceNumber, String clientId) {
savRefundMapper.cancelInvoice(invoiceNumber, clientId);
}
@Override
public void cancelBatchInvoice(List<String> invoiceNumbers) {

View File

@ -138,23 +138,18 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<PurchaseOrderMapper, P
@Override
@Transactional
public void delMain(String id) {
String invoiceNumber = purchaseOrderMapper.getInvoiceNumber(id);
purchaseOrderContentMapper.deleteByMainId(id);
skuPromotionHistoryMapper.deleteByMainId(id);
purchaseOrderMapper.deleteById(id);
platformOrderService.removePurchaseInvoiceNumber(invoiceNumber);
}
@Override
@Transactional
public void delBatchMain(Collection<? extends Serializable> idList) {
for (Serializable id : idList) {
String invoiceNumber = purchaseOrderMapper.getInvoiceNumber(id.toString());
purchaseOrderContentMapper.deleteByMainId(id.toString());
skuPromotionHistoryMapper.deleteByMainId(id.toString());
purchaseOrderMapper.deleteById(id);
platformOrderService.removePurchaseInvoiceNumber(invoiceNumber);
}
}
@ -572,8 +567,8 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<PurchaseOrderMapper, P
}
@Override
public void cancelInvoice(String invoiceNumber) {
purchaseOrderMapper.deleteInvoice(invoiceNumber);
public void cancelInvoice(String invoiceNumber, String clientId) {
purchaseOrderMapper.deleteInvoice(invoiceNumber, clientId);
}
@Override
@ -628,11 +623,6 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<PurchaseOrderMapper, P
purchaseOrderMapper.setPaid(invoiceNumber);
}
@Override
public void deleteInvoice(String invoiceNumber) {
purchaseOrderMapper.deleteInvoice(invoiceNumber);
}
@Override
public PurchaseOrder getPurchaseByInvoiceNumberAndClientId(String invoiceNumber, String clientId) {
return purchaseOrderMapper.getPurchaseByInvoiceNumberAndClientId(invoiceNumber, clientId);

View File

@ -37,7 +37,7 @@ public class SysUser implements Serializable {
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
@TableId(type = IdType.ASSIGN_UUID)
private String id;
/**