瀏覽代碼

fix bug 发票状态和订单发票状态

skyline 2 年之前
父節點
當前提交
4d686c29cd

+ 4 - 3
entity/src/main/java/com/kym/entity/miniapp/ChargeOrder.java

@@ -40,9 +40,10 @@ public class ChargeOrder extends BaseEntity implements Serializable {
     public static int CHARGE_STATUS_未知 = 5;
 
 
-    public static int INVOICE_STATUS_未开票 = 0;
-    public static int INVOICE_STATUS_开票中 = 1;
-    public static int INVOICE_STATUS_已开票 = 2;
+    public static int INVOICE_STATUS_待开票 = 0;
+    public static int INVOICE_STATUS_已开票 = 1;
+    public static int INVOICE_STATUS_已作废 = 2;
+    public static int INVOICE_STATUS_开票中 = 3;
 
 
     public static int IS_BOOKING_否 = 0;

+ 9 - 4
service/src/main/java/com/kym/service/miniapp/impl/InvoiceServiceImpl.java

@@ -23,6 +23,7 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -67,11 +68,11 @@ public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> impl
         var userId = StpUtil.getLoginIdAsLong();
         var orders = chargeOrderService.getChargeOrdersBySeqs(params.getStartChargeSeqs());
 
-        // 校验订单是开票或者开票中
+        // 校验订单是开票或者开票中
         var invoiced = orders.stream().filter(o -> o.getInvoiceStatus().equals(ChargeOrder.INVOICE_STATUS_开票中) || o.getInvoiceStatus().equals(ChargeOrder.INVOICE_STATUS_已开票)).toList();
         if (!invoiced.isEmpty()) {
-            log.error("存在已开票的订单:{}", invoiced.stream().map(ChargeOrder::getStartChargeSeq).toArray());
-            throw new BusinessException("存在已开票的订单");
+            log.error("存在已开票或者开票中的订单:{}", invoiced.stream().map(ChargeOrder::getStartChargeSeq).toArray());
+            throw new BusinessException("存在已开票或开票中的订单");
         }
 
         var orderDetails = orders.stream().map(item -> new InvoiceOrderDetail()
@@ -92,8 +93,12 @@ public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> impl
                 .setElecMoney(orders.stream().mapToInt(ChargeOrder::getServiceMoney).sum())    // 服务费
                 .setTotalPower(orders.stream().mapToDouble(ChargeOrder::getTotalPower).sum())   // 总电量
                 .setServiceMoneyDiscount(orders.stream().mapToInt(ChargeOrder::getServiceMoneyDiscount).sum()); //总优惠服务费
-
         baseMapper.insert(invoice);
+
+        // 更新订单开票状态为开票中
+        chargeOrderService.lambdaUpdate().set(ChargeOrder::getInvoiceStatus, ChargeOrder.INVOICE_STATUS_开票中)
+                .in(ChargeOrder::getStartChargeSeq, Arrays.stream(params.getStartChargeSeqs()).toList()).update();
+
         return wxPayService.titleUrl(invoice);
 
     }

+ 7 - 0
service/src/main/java/com/kym/service/wechat/impl/WxPayServiceImpl.java

@@ -838,6 +838,12 @@ public class WxPayServiceImpl implements WxPayService {
             if (invoiceNotification.getFapiaoInformation().get(0).getFapiaoStatus().equals(InvoiceNotification.FapiaoStatus.ISSUED.name())) {
                 // 更新发票状态
                 invoiceService.lambdaUpdate().set(Invoice::getStatus, Invoice.STATUS_已开票).eq(Invoice::getApplyId, invoiceNotification.getFapiaoApplyId()).update();
+                var invoice = invoiceService.lambdaQuery().eq(Invoice::getApplyId, invoiceNotification.getFapiaoApplyId()).one();
+                // 更新订单开票状态为已开票
+                var chargeOrderSeqs = invoice.getOrderDetails().stream().map(InvoiceOrderDetail::getStartChargeSeq).toList();
+                if (!CommUtil.isEmptyOrNull(chargeOrderSeqs)) {
+                    chargeOrderService.lambdaUpdate().set(ChargeOrder::getInvoiceStatus, ChargeOrder.INVOICE_STATUS_已开票).in(ChargeOrder::getStartChargeSeq, chargeOrderSeqs).update();
+                }
             } else {
                 LOGGER.error("微信开具发票失败:{}", invoiceNotification);
             }
@@ -854,6 +860,7 @@ public class WxPayServiceImpl implements WxPayService {
      * @param request
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void invoiceNotify(HttpServletRequest request) {
         var notifyRes = handleWxNotify(request);
         var requestParam = (RequestParam) notifyRes[0];