|
|
@@ -9,6 +9,9 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
|
|
import com.kym.common.exception.BusinessException;
|
|
|
import com.kym.common.utils.CommUtil;
|
|
|
import com.kym.common.utils.OrderUtils;
|
|
|
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
|
|
+import com.kym.common.exception.BusinessException;
|
|
|
import com.kym.entity.admin.InvoiceDetail;
|
|
|
import com.kym.entity.admin.queryParams.InvoiceQueryParam;
|
|
|
import com.kym.entity.common.PageBean;
|
|
|
@@ -17,9 +20,11 @@ import com.kym.entity.miniapp.Invoice;
|
|
|
import com.kym.entity.miniapp.User;
|
|
|
import com.kym.entity.miniapp.queryParams.ApplyInvoiceParams;
|
|
|
import com.kym.entity.miniapp.vo.InvoiceVo;
|
|
|
+import com.kym.entity.wechat.FaPiao;
|
|
|
import com.kym.entity.wechat.InvoiceOrderDetail;
|
|
|
import com.kym.entity.wechat.TitleUrl;
|
|
|
import com.kym.mapper.miniapp.InvoiceMapper;
|
|
|
+import com.kym.service.admin.InvoiceDetailService;
|
|
|
import com.kym.service.miniapp.ChargeOrderService;
|
|
|
import com.kym.service.miniapp.DataDictService;
|
|
|
import com.kym.service.miniapp.InvoiceService;
|
|
|
@@ -29,6 +34,7 @@ import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
|
|
|
@@ -48,11 +54,13 @@ public class InvoiceServiceImpl extends MPJBaseServiceImpl<InvoiceMapper, Invoic
|
|
|
private final ChargeOrderService chargeOrderService;
|
|
|
private final WxPayService wxPayService;
|
|
|
private final DataDictService dataDictService;
|
|
|
+ private final InvoiceDetailService invoiceDetailService;
|
|
|
|
|
|
- public InvoiceServiceImpl(ChargeOrderService chargeOrderService, @Lazy WxPayService wxPayService, @Lazy DataDictService dataDictService) {
|
|
|
+ public InvoiceServiceImpl(ChargeOrderService chargeOrderService, @Lazy WxPayService wxPayService, @Lazy DataDictService dataDictService, InvoiceDetailService invoiceDetailService) {
|
|
|
this.dataDictService = dataDictService;
|
|
|
this.chargeOrderService = chargeOrderService;
|
|
|
this.wxPayService = wxPayService;
|
|
|
+ this.invoiceDetailService = invoiceDetailService;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -162,7 +170,9 @@ public class InvoiceServiceImpl extends MPJBaseServiceImpl<InvoiceMapper, Invoic
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public void cancelApplyInvoice(String invoiceId) {
|
|
|
- var invoice = lambdaQuery().eq(Invoice::getId, invoiceId).eq(Invoice::getStatus, Invoice.STATUS_待开票).orderByDesc(Invoice::getId).one();
|
|
|
+ var invoice = lambdaQuery().eq(Invoice::getId, invoiceId)
|
|
|
+ .in(Invoice::getStatus, List.of(Invoice.STATUS_待开票, Invoice.STATUS_开票中))
|
|
|
+ .orderByDesc(Invoice::getId).one();
|
|
|
if (!CommUtil.isEmptyOrNull(invoice)) {
|
|
|
// 订单发票状态修改为待开票
|
|
|
var startChargeSeqs = invoice.getOrderDetails().stream().map(InvoiceOrderDetail::getStartChargeSeq).toList();
|
|
|
@@ -172,4 +182,49 @@ public class InvoiceServiceImpl extends MPJBaseServiceImpl<InvoiceMapper, Invoic
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @DSTransactional
|
|
|
+ public void confirmManualInvoice(Long invoiceId) {
|
|
|
+ var invoice = lambdaQuery().eq(Invoice::getId, invoiceId).one();
|
|
|
+ if (invoice == null) {
|
|
|
+ throw new BusinessException("发票记录不存在");
|
|
|
+ }
|
|
|
+ if (!Arrays.asList(Invoice.STATUS_开票中, Invoice.STATUS_待开票).contains(invoice.getStatus())) {
|
|
|
+ throw new BusinessException("仅待开票或开票中状态的发票可确认手动开票");
|
|
|
+ }
|
|
|
+
|
|
|
+ var startChargeSeqs = invoice.getOrderDetails().stream().map(InvoiceOrderDetail::getStartChargeSeq).toList();
|
|
|
+
|
|
|
+ // 更新订单开票状态为已开票
|
|
|
+ chargeOrderService.lambdaUpdate()
|
|
|
+ .set(ChargeOrder::getInvoiceStatus, ChargeOrder.INVOICE_STATUS_已开票)
|
|
|
+ .in(ChargeOrder::getStartChargeSeq, startChargeSeqs)
|
|
|
+ .update();
|
|
|
+
|
|
|
+ // 更新发票状态为已开票
|
|
|
+ lambdaUpdate().set(Invoice::getStatus, Invoice.STATUS_已开票).eq(Invoice::getId, invoice.getId()).update();
|
|
|
+
|
|
|
+ // 写入发票详情记录
|
|
|
+ var invoiceDetail = new InvoiceDetail()
|
|
|
+ .setApplyId(invoice.getApplyId())
|
|
|
+ .setFapiaoTime(LocalDateTime.now())
|
|
|
+ .setStatus("ISSUED")
|
|
|
+ .setTotalAmount(invoice.getInvoiceAmount())
|
|
|
+ .setBuyerInformation(new FaPiao.BuyerInformation()
|
|
|
+ .setType(invoice.getInvoiceType())
|
|
|
+ .setName(invoice.getInvoiceTitle())
|
|
|
+ .setTaxpayer_id(invoice.getTaxId())
|
|
|
+ .setAddress(invoice.getAddress())
|
|
|
+ .setTelephone(invoice.getTelephone())
|
|
|
+ .setBank_name(invoice.getBankName())
|
|
|
+ .setBank_account(invoice.getBankAccount())
|
|
|
+ .setPhone(invoice.getPhone())
|
|
|
+ .setEmail(invoice.getEmail()));
|
|
|
+ DynamicDataSourceContextHolder.push("db-admin");
|
|
|
+ invoiceDetailService.createManualInvoiceDetail(invoiceDetail);
|
|
|
+ DynamicDataSourceContextHolder.poll();
|
|
|
+
|
|
|
+ log.info("手动开票确认完成, invoiceId:{}, applyId:{}, 关联订单:{}", invoiceId, invoice.getApplyId(), startChargeSeqs);
|
|
|
+ }
|
|
|
+
|
|
|
}
|