|
|
@@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
|
|
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
|
|
import com.kym.common.config.HuapiaoerProperties;
|
|
|
+import com.kym.common.utils.wx.WxPbUtil;
|
|
|
import com.kym.entity.admin.InvoiceDetail;
|
|
|
import com.kym.entity.miniapp.Invoice;
|
|
|
import com.kym.entity.wechat.FaPiao;
|
|
|
@@ -27,6 +28,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
@@ -95,6 +97,73 @@ public class HuapiaoerInvoiceService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 将已开具的电子发票插入用户微信卡包
|
|
|
+ */
|
|
|
+ public void insertToCardPackage(Invoice invoice, InvoiceInfo result) {
|
|
|
+ if (invoice.getOpenid() == null || invoice.getOpenid().isBlank()) {
|
|
|
+ log.info("用户无 openid,跳过卡包插入, applyId:{}", invoice.getApplyId());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var orderDetails = invoice.getOrderDetails();
|
|
|
+ int elecMoney = orderDetails.stream().mapToInt(InvoiceOrderDetail::getElecMoney).sum();
|
|
|
+ int serviceMoney = orderDetails.stream().mapToInt(InvoiceOrderDetail::getServiceMoney).sum();
|
|
|
+ int discount = orderDetails.stream().mapToInt(InvoiceOrderDetail::getServiceMoneyDiscount).sum();
|
|
|
+ int netServiceMoney = serviceMoney - discount;
|
|
|
+
|
|
|
+ var items = new ArrayList<Map<String, Object>>();
|
|
|
+ if (elecMoney > 0) {
|
|
|
+ var item = new HashMap<String, Object>();
|
|
|
+ item.put("name", "充电电费");
|
|
|
+ item.put("price", elecMoney);
|
|
|
+ item.put("unit", "");
|
|
|
+ item.put("num", 1);
|
|
|
+ items.add(item);
|
|
|
+ }
|
|
|
+ if (netServiceMoney > 0) {
|
|
|
+ var item = new HashMap<String, Object>();
|
|
|
+ item.put("name", "充电服务费");
|
|
|
+ item.put("price", netServiceMoney);
|
|
|
+ item.put("unit", "");
|
|
|
+ item.put("num", 1);
|
|
|
+ items.add(item);
|
|
|
+ }
|
|
|
+
|
|
|
+ String cardCode = WxPbUtil.insertInvoiceToCard(
|
|
|
+ invoice.getOpenid(),
|
|
|
+ invoice.getInvoiceTitle(),
|
|
|
+ result.getInvoicenumber(),
|
|
|
+ result.getInvoicecode(),
|
|
|
+ invoice.getInvoiceAmount(),
|
|
|
+ invoice.getTaxId(),
|
|
|
+ properties.getNsrsbh(),
|
|
|
+ result.getInvoiceurl(),
|
|
|
+ items
|
|
|
+ );
|
|
|
+
|
|
|
+ if (cardCode != null) {
|
|
|
+ try {
|
|
|
+ DynamicDataSourceContextHolder.push("db-admin");
|
|
|
+ var cardInfo = new FapiaoApplications.CardInfo();
|
|
|
+ cardInfo.setCard_appid(WxPbUtil.getAppId());
|
|
|
+ cardInfo.setCard_openid(invoice.getOpenid());
|
|
|
+ cardInfo.setCard_code(cardCode);
|
|
|
+ cardInfo.setCard_status("INSERTED");
|
|
|
+
|
|
|
+ invoiceDetailService.lambdaUpdate()
|
|
|
+ .set(InvoiceDetail::getCardInformation, cardInfo)
|
|
|
+ .eq(InvoiceDetail::getApplyId, invoice.getApplyId())
|
|
|
+ .update();
|
|
|
+ log.info("卡包插入成功, applyId:{}, cardCode:{}", invoice.getApplyId(), cardCode);
|
|
|
+ } finally {
|
|
|
+ DynamicDataSourceContextHolder.poll();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.warn("卡包插入失败, applyId:{}", invoice.getApplyId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 根据航信查询结果更新开票详情
|
|
|
*/
|