Browse Source

发票申请

skyline 2 years ago
parent
commit
9db64dbc80

+ 12 - 6
entity/src/main/java/com/kym/entity/miniapp/Invoice.java

@@ -1,13 +1,15 @@
 package com.kym.entity.miniapp;
 
-import com.alibaba.fastjson2.JSONObject;
+import com.alibaba.fastjson2.JSONArray;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.kym.entity.BaseEntity;
-import java.io.Serializable;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.util.List;
 
 /**
  * <p>
@@ -20,19 +22,18 @@ import lombok.Setter;
 @Getter
 @Setter
 @TableName("t_invoice")
+@Accessors(chain = true)
 public class Invoice extends BaseEntity {
-    private static final long serialVersionUID = 1L;
-
     public static final String TYPE_个人 = "INDIVIDUAL";
     public static final String TYPE_企业 = "ORGANIZATION";
-
+    private static final long serialVersionUID = 1L;
     private Long userId;
 
     /**
      * 发票关联订单详情
      */
     @TableField(typeHandler = JacksonTypeHandler.class)
-    private JSONObject orderDetails;
+    private List orderDetails;
 
     /**
      * 累积充电量(度)
@@ -59,6 +60,11 @@ public class Invoice extends BaseEntity {
      */
     private String email;
 
+    /**
+     * 电话
+     */
+    private String phone;
+
     /**
      * 发票类型:INDIVIDUAL-个人 ORGANIZATION-企业
      */

+ 60 - 0
entity/src/main/java/com/kym/entity/miniapp/params/ApplyInvoiceParams.java

@@ -0,0 +1,60 @@
+package com.kym.entity.miniapp.params;
+
+import lombok.Data;
+
+/**
+ * @author skyline
+ * @description
+ * @date 2023-09-21 17:12
+ */
+@Data
+public class ApplyInvoiceParams {
+    /**
+     * 订单号
+     */
+    private String[] startChargeSeqs;
+    /**
+     * 接收发票邮箱
+     */
+    private String email;
+    /**
+     * 公司电话
+     */
+    private String phone;
+
+    /**
+     * 发票类型:INDIVIDUAL-个人 ORGANIZATION-企业
+     */
+    private int invoiceType;
+
+    /**
+     * 发票抬头
+     */
+    private String invoiceTitle;
+
+    /**
+     * 公司税号
+     */
+    private String taxId;
+
+    /**
+     * 公司地址
+     */
+    private String address;
+
+    /**
+     * 开户银行
+     */
+    private String bankName;
+
+    /**
+     * 银行账户
+     */
+    private String bankAccount;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 1 - 1
entity/src/main/java/com/kym/entity/miniapp/WxPhoneNum.java → entity/src/main/java/com/kym/entity/wechat/WxPhoneNum.java

@@ -1,4 +1,4 @@
-package com.kym.entity.miniapp;
+package com.kym.entity.wechat;
 
 import lombok.Data;
 

+ 2 - 2
mapper/src/main/resources/mappers/miniapp/InvoiceMapper.xml

@@ -5,7 +5,7 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.kym.entity.miniapp.Invoice">
         <result column="user_id" property="userId" />
-        <result column="orderDetails" property="order_details" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
+        <result column="order_details" property="orderDetails" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
         <result column="total_power" property="totalPower" />
         <result column="total_money" property="totalMoney" />
         <result column="elec_money" property="elecMoney" />
@@ -25,7 +25,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        user_id, order_deatails, total_power, total_money, elec_money, service_money, email, invoice_type, invoice_title, tax_id, address, bank_name, bank_account, invoice_amount, tax_info, biller, remark
+        user_id, order_details, total_power, total_money, elec_money, service_money, email, invoice_type, invoice_title, tax_id, address, bank_name, bank_account, invoice_amount, tax_info, biller, remark
     </sql>
 
 </mapper>

+ 23 - 0
miniapp/src/main/java/com/kym/miniapp/controller/InvoiceController.java

@@ -1,5 +1,10 @@
 package com.kym.miniapp.controller;
 
+import com.kym.common.R;
+import com.kym.entity.miniapp.params.ApplyInvoiceParams;
+import com.kym.service.miniapp.InvoiceService;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -15,4 +20,22 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/invoice")
 public class InvoiceController {
 
+    private final InvoiceService invoiceService;
+
+    public InvoiceController(InvoiceService invoiceService) {
+        this.invoiceService = invoiceService;
+    }
+
+    /**
+     * 申请发票
+     *
+     * @param params
+     * @return
+     */
+    @PostMapping("/applyInvoice")
+    R<?> applyInvoice(@RequestBody ApplyInvoiceParams params) {
+        invoiceService.applyInvoice(params);
+        return R.success();
+    }
+
 }

+ 0 - 18
miniapp/src/main/java/com/kym/miniapp/controller/InvoiceOrderController.java

@@ -1,18 +0,0 @@
-package com.kym.miniapp.controller;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 发票记录表 前端控制器
- * </p>
- *
- * @author skyline
- * @since 2023-09-15
- */
-@RestController
-@RequestMapping("/invoice-order")
-public class InvoiceOrderController {
-
-}

+ 3 - 0
service/src/main/java/com/kym/service/miniapp/ChargeOrderService.java

@@ -8,6 +8,7 @@ import com.kym.entity.admin.vo.StationStatVo;
 import com.kym.entity.common.PageBean;
 import com.kym.entity.miniapp.ChargeOrder;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -33,4 +34,6 @@ public interface ChargeOrderService extends IService<ChargeOrder> {
     PageBean<StationStatVo> stationStat(StatQueryParam params);
 
     Map<String, Object> stationTodayStat();
+
+    List<ChargeOrder> getChargeOrdersBySeqs(String[] startChargeSeqs);
 }

+ 3 - 1
service/src/main/java/com/kym/service/miniapp/InvoiceService.java

@@ -1,7 +1,8 @@
 package com.kym.service.miniapp;
 
-import com.kym.entity.miniapp.Invoice;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.kym.entity.miniapp.Invoice;
+import com.kym.entity.miniapp.params.ApplyInvoiceParams;
 
 /**
  * <p>
@@ -13,4 +14,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface InvoiceService extends IService<Invoice> {
 
+    void applyInvoice(ApplyInvoiceParams params);
 }

+ 13 - 1
service/src/main/java/com/kym/service/miniapp/impl/ChargeOrderServiceImpl.java

@@ -1,7 +1,6 @@
 package com.kym.service.miniapp.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
-import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
@@ -18,6 +17,8 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
@@ -115,5 +116,16 @@ public class ChargeOrderServiceImpl extends ServiceImpl<ChargeOrderMapper, Charg
         return baseMapper.stationTodayStat(stationId);
     }
 
+    /**
+     * 订单号批量查询订单
+     *
+     * @param startChargeSeqs
+     * @return
+     */
+    @Override
+    public List<ChargeOrder> getChargeOrdersBySeqs(String[] startChargeSeqs) {
+        return lambdaQuery().in(ChargeOrder::getStartChargeSeq,Arrays.stream(startChargeSeqs).toList()).list();
+    }
+
 
 }

+ 54 - 1
service/src/main/java/com/kym/service/miniapp/impl/InvoiceServiceImpl.java

@@ -1,11 +1,22 @@
 package com.kym.service.miniapp.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson2.JSONArray;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kym.entity.miniapp.ChargeOrder;
 import com.kym.entity.miniapp.Invoice;
+import com.kym.entity.miniapp.params.ApplyInvoiceParams;
 import com.kym.mapper.miniapp.InvoiceMapper;
+import com.kym.service.miniapp.ChargeOrderService;
 import com.kym.service.miniapp.InvoiceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 /**
  * <p>
  * 发票记录表 服务实现类
@@ -15,6 +26,48 @@ import org.springframework.stereotype.Service;
  * @since 2023-09-15
  */
 @Service
+@DS("db-miniapp")
 public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> implements InvoiceService {
 
+    private final ChargeOrderService chargeOrderService;
+
+    public InvoiceServiceImpl(ChargeOrderService chargeOrderService) {
+        this.chargeOrderService = chargeOrderService;
+    }
+
+    @Override
+    public void applyInvoice(ApplyInvoiceParams params) {
+        // orderDetails 获取申请开票的订单
+        // TODO: 2023-09-21 校验订单是未开票且为该用户的订单
+        var userId = StpUtil.getLoginIdAsLong();
+        var orders = chargeOrderService.getChargeOrdersBySeqs(params.getStartChargeSeqs());
+        var orderDetails = orders.stream().collect(Collectors.toMap(ChargeOrder::getStartChargeSeq, chargeOrder -> Map.of(
+                "totalPower", chargeOrder.getTotalPower(),
+                "totalMoney", chargeOrder.getTotalMoney(),
+                "elecMoney", chargeOrder.getElecMoney(),
+                "serviceMoney", chargeOrder.getServiceMoney()
+        )));
+
+        // 组装invoice
+        var invoice = new Invoice()
+                .setUserId(userId)
+                .setOrderDetails(List.of(orderDetails)) // 订单信息
+                .setInvoiceAmount(orders.stream().mapToInt(ChargeOrder::getTotalMoney).sum())   // 总金额
+                .setElecMoney(orders.stream().mapToInt(ChargeOrder::getElecMoney).sum())    // 电费
+                .setElecMoney(orders.stream().mapToInt(ChargeOrder::getServiceMoney).sum())    // 服务费
+                .setTotalPower(orders.stream().mapToDouble(ChargeOrder::getTotalPower).sum())   // 总电量
+                .setInvoiceType(params.getInvoiceType())    // 类型
+                .setInvoiceTitle(params.getInvoiceTitle())  //抬头
+                .setTaxId(params.getTaxId())    // 税号
+                .setAddress(params.getAddress())    // 公司地址
+                .setBankName(params.getBankName())  // 开户银行
+                .setBankAccount(params.getBankAccount())  // 银行账户
+                .setPhone(params.getPhone())    // 公司电话
+                .setRemark(params.getRemark())  // 备注
+                .setEmail(params.getEmail());    // 邮箱
+        baseMapper.insert(invoice);
+
+    }
+
+
 }

+ 1 - 1
service/src/main/java/com/kym/service/miniapp/impl/UserServiceImpl.java

@@ -18,7 +18,7 @@ import com.kym.entity.common.PageBean;
 import com.kym.entity.miniapp.Account;
 import com.kym.entity.miniapp.Cars;
 import com.kym.entity.miniapp.User;
-import com.kym.entity.miniapp.WxPhoneNum;
+import com.kym.entity.wechat.WxPhoneNum;
 import com.kym.entity.miniapp.params.WxLoginParams;
 import com.kym.entity.miniapp.vo.UserVo;
 import com.kym.mapper.miniapp.UserMapper;