xusonglin 5 年之前
父節點
當前提交
64ef24426f
共有 42 個文件被更改,包括 1276 次插入2 次删除
  1. 2 0
      src/main/java/com/jkcredit/invoice/hub/InvoiceHubApplication.java
  2. 17 1
      src/main/java/com/jkcredit/invoice/hub/constant/CommonConstant.java
  3. 80 0
      src/main/java/com/jkcredit/invoice/hub/consumer/ChargeConsumer.java
  4. 2 0
      src/main/java/com/jkcredit/invoice/hub/controller/rest/forward/ForwardResource.java
  5. 8 0
      src/main/java/com/jkcredit/invoice/hub/mapper/CarFreeCarrierBillStartMapper.java
  6. 13 0
      src/main/java/com/jkcredit/invoice/hub/mapper/NeedChargeMapper.java
  7. 13 0
      src/main/java/com/jkcredit/invoice/hub/mapper/RealChargeMapper.java
  8. 14 0
      src/main/java/com/jkcredit/invoice/hub/mapper/SearchInvoiceMapper.java
  9. 13 0
      src/main/java/com/jkcredit/invoice/hub/mapper/SearchInvoiceResultMapper.java
  10. 110 0
      src/main/java/com/jkcredit/invoice/hub/model/dto/apiCarFree/InvoiceResultDto.java
  11. 110 0
      src/main/java/com/jkcredit/invoice/hub/model/dto/apiCarFree/InvoiceResultDtoTest.java
  12. 20 0
      src/main/java/com/jkcredit/invoice/hub/model/dto/apiCarFree/WayBillNumFindInvoiceDto.java
  13. 24 0
      src/main/java/com/jkcredit/invoice/hub/model/dto/needCharge/NeedChargeDto.java
  14. 22 0
      src/main/java/com/jkcredit/invoice/hub/model/dto/realCharge/RealChargeDto.java
  15. 30 0
      src/main/java/com/jkcredit/invoice/hub/model/dto/searchInvoice/SearchInvoiceDto.java
  16. 96 0
      src/main/java/com/jkcredit/invoice/hub/model/dto/searchInvoiceResult/SearchInvoiceResultDto.java
  17. 6 0
      src/main/java/com/jkcredit/invoice/hub/model/dto/userBalance/UserBalanceDto.java
  18. 1 1
      src/main/java/com/jkcredit/invoice/hub/model/po/carFreeCarrierBillStart/CarFreeCarrierBillStartPo.java
  19. 34 0
      src/main/java/com/jkcredit/invoice/hub/model/po/needCharge/NeedChargePo.java
  20. 34 0
      src/main/java/com/jkcredit/invoice/hub/model/po/realCharge/RealChargePo.java
  21. 41 0
      src/main/java/com/jkcredit/invoice/hub/model/po/searchInvoice/SearchInvoicePo.java
  22. 38 0
      src/main/java/com/jkcredit/invoice/hub/puducer/ChargeProducer.java
  23. 3 0
      src/main/java/com/jkcredit/invoice/hub/service/apiCarFree/ApiCarFreeService.java
  24. 36 0
      src/main/java/com/jkcredit/invoice/hub/service/apiCarFree/ApiCarFreeServiceImpl.java
  25. 7 0
      src/main/java/com/jkcredit/invoice/hub/service/carFreeCarrierBillStart/CarFreeCarrierBillStartService.java
  26. 21 0
      src/main/java/com/jkcredit/invoice/hub/service/carFreeCarrierBillStart/CarFreeCarrierBillStartServiceImpl.java
  27. 13 0
      src/main/java/com/jkcredit/invoice/hub/service/needCharge/NeedChargeService.java
  28. 39 0
      src/main/java/com/jkcredit/invoice/hub/service/needCharge/NeedChargeServiceImpl.java
  29. 13 0
      src/main/java/com/jkcredit/invoice/hub/service/realCharge/RealChargeService.java
  30. 39 0
      src/main/java/com/jkcredit/invoice/hub/service/realCharge/RealChargeServiceImpl.java
  31. 16 0
      src/main/java/com/jkcredit/invoice/hub/service/searchInvoice/SearchInvoiceService.java
  32. 59 0
      src/main/java/com/jkcredit/invoice/hub/service/searchInvoice/SearchInvoiceServiceImpl.java
  33. 13 0
      src/main/java/com/jkcredit/invoice/hub/service/searchInvoiceResult/SearchInvoiceResultService.java
  34. 39 0
      src/main/java/com/jkcredit/invoice/hub/service/searchInvoiceResult/SearchInvoiceResultServiceImpl.java
  35. 1 0
      src/main/java/com/jkcredit/invoice/hub/service/user/UserService.java
  36. 12 0
      src/main/java/com/jkcredit/invoice/hub/service/user/UserServiceImpl.java
  37. 2 0
      src/main/java/com/jkcredit/invoice/hub/service/userBalance/UserBalanceService.java
  38. 15 0
      src/main/java/com/jkcredit/invoice/hub/service/userBalance/UserBalanceServiceImpl.java
  39. 168 0
      src/main/java/com/jkcredit/invoice/hub/task/WayBillTask.java
  40. 20 0
      src/main/resources/application-dev.yml
  41. 8 0
      src/main/resources/mapper/CarFreeCarrierBillStartMapper.xml
  42. 24 0
      src/main/resources/mapper/SearchInvoiceMapper.xml

+ 2 - 0
src/main/java/com/jkcredit/invoice/hub/InvoiceHubApplication.java

@@ -4,9 +4,11 @@ import com.jkcredit.invoice.hub.config.ApplicationProperties;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 @EnableConfigurationProperties(ApplicationProperties.class)
 @SpringBootApplication
+@EnableScheduling
 public class InvoiceHubApplication {
 
     public static void main(String[] args) {

+ 17 - 1
src/main/java/com/jkcredit/invoice/hub/constant/CommonConstant.java

@@ -14,7 +14,7 @@ public class CommonConstant {
     public static Integer ACTIVATED_DELETED = 2;
     public static String[] CAR_FREE_API_ARGS = {"COMPANY_QUERY_V1", "COMPANY_ADD_V1", "VEHICLE_REGISTER_QUERY",
             "VEHICLE_REGISTER", "WAY_BILL_START", "WAY_BILL_END", "WAY_BILL_HISTORY_START", "WAY_BILL_HISTORY_END",
-            "WAY_BILL_NUM_FIND_INVOICE", "WAY_BILL_COUNT_QUERY", "BALANCE_QUERY"};
+            "WAY_BILL_NUM_FIND_INVOICE", "WAY_BILL_COUNT_QUERY", "BALANCE_QUERY", "FIND_INVOICE"};
     // companyNum
     public static final String COMPANY_NUMBER = "10004616";
 
@@ -53,4 +53,20 @@ public class CommonConstant {
     public static Integer ERROR_CODE = 2;
     // 运单状态-已结束
     public static Integer STATUS_OVER = 2;
+    // 运单状态-开票中
+    public static Integer STATUS_MAKING_INVOICE = 4;
+    // 运单状态-开票完成
+    public static Integer STATUS_INVOICE_OVER = 3;
+
+    // 发票信息key
+    public static String NUM_FIND_INVOICE_KEY = "num:find:invoice";
+
+    // 发票交易id key
+    public static String TRANSACTION_ID_KEY = "num:transactionId:invoice";
+
+    // 计费交换机
+    public static final String CHARGE_EXCHANGE = "charge_exchange";
+
+    // 计费队列
+    public static final String CHARGE_QUEUE = "charge_queue";
 }

+ 80 - 0
src/main/java/com/jkcredit/invoice/hub/consumer/ChargeConsumer.java

@@ -0,0 +1,80 @@
+package com.jkcredit.invoice.hub.consumer;
+
+import com.jkcredit.invoice.hub.constant.CommonConstant;
+import com.jkcredit.invoice.hub.model.dto.realCharge.RealChargeDto;
+import com.jkcredit.invoice.hub.model.dto.user.UserDto;
+import com.jkcredit.invoice.hub.model.dto.userBalance.UserBalanceDto;
+import com.jkcredit.invoice.hub.service.realCharge.RealChargeService;
+import com.jkcredit.invoice.hub.service.user.UserService;
+import com.jkcredit.invoice.hub.service.userBalance.UserBalanceService;
+import com.jkcredit.invoice.hub.util.CommonUtil;
+import com.rabbitmq.client.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.messaging.handler.annotation.Payload;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/17 23:43
+ * @version: V1.0
+ **/
+@Slf4j
+@Component
+public class ChargeConsumer {
+
+    @Autowired
+    UserBalanceService userBalanceService;
+    @Autowired
+    UserService userService;
+    @Autowired
+    RealChargeService realChargeService;
+
+    @RabbitHandler
+    @RabbitListener(bindings = @QueueBinding(
+            exchange = @Exchange(
+                    name = CommonConstant.CHARGE_EXCHANGE,
+                    type = "topic",
+                    ignoreDeclarationExceptions = "true"
+            ),
+            value = @Queue(
+                    value = CommonConstant.CHARGE_QUEUE
+            ),
+            key = "charge.*"
+    ))
+    public void process(@Payload UserBalanceDto userBalanceDto, Channel channel, Message message) throws IOException {
+        try {
+            synchronized (this) {
+                UserDto user = userService.getUser(userBalanceDto.getUserId());
+                userBalanceDto.setBalance(userBalanceDto.getBalance() - CommonUtil.parseDouble(user.getPrice()));
+                //更新余额
+                userBalanceService.updateUserBalance(userBalanceDto);
+
+                // 实际扣费数据
+                RealChargeDto realChargeDto = new RealChargeDto();
+                realChargeDto.setUserId(userBalanceDto.getUserId());
+                realChargeDto.setPrice(user.getPrice());
+                // todo 运单编号运单transationId
+                realChargeService.saveRealCharge(realChargeDto);
+            }
+            //告诉服务器收到这条消息 已经被我消费了 可以在队列删掉 这样以后就不会再发了 否则消息服务器以为这条消息没处理掉 后续还会在发
+            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+            log.warn("消息队列日志:{},计费用户id:{}", "扣款", userBalanceDto.getUserId());
+        } catch (IOException e) {
+            e.printStackTrace();
+            //丢弃这条消息
+            //channel.basicNack(message.getMessageProperties().getDeliveryTag(), false,false);
+            //ack返回false,并重新回到队列
+            channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
+            log.warn("消息队列失败日志:{},计费用户id:{}", "扣款", userBalanceDto.getUserId());
+            log.error("接受失败");
+        }
+
+    }
+
+}

+ 2 - 0
src/main/java/com/jkcredit/invoice/hub/controller/rest/forward/ForwardResource.java

@@ -73,6 +73,8 @@ public class ForwardResource extends RestResource {
                 return wayBillCountQueryService.wayBillCountQuery(JSON.parseObject(JSON.toJSONString(param.getData())));
             } else if (param.getApi().equals(CommonConstant.BALANCE_QUERY)) {
                 return apiUserService.balanceQuery(JSON.parseObject(JSON.toJSONString(param.getData())));
+            } else if (param.getApi().equals("FIND_INVOICE")) {
+                return apiCarFreeService.waiBillNumFindInvoice(JSON.parseObject(JSON.toJSONString(param.getData())));
             } else {
                 return ApiResponseData.failure(ApiResponseCodeEnum.CODE_1080.getValue(), ApiResponseCodeEnum.CODE_1080.getDesc());
             }

+ 8 - 0
src/main/java/com/jkcredit/invoice/hub/mapper/CarFreeCarrierBillStartMapper.java

@@ -3,6 +3,8 @@ package com.jkcredit.invoice.hub.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jkcredit.invoice.hub.model.po.carFreeCarrierBillStart.CarFreeCarrierBillStartPo;
 
+import java.util.List;
+
 /**
  * @description:
  * @author: xusonglin
@@ -12,4 +14,10 @@ import com.jkcredit.invoice.hub.model.po.carFreeCarrierBillStart.CarFreeCarrierB
 public interface CarFreeCarrierBillStartMapper extends BaseMapper<CarFreeCarrierBillStartPo> {
     // 根据运单编号查询运单开始记录
     CarFreeCarrierBillStartPo getBillStartByNum(String num);
+
+    // 查询状态为已结束和开票中运单的实时运单
+    List<CarFreeCarrierBillStartPo> getRealTimeBills();
+
+    // 查询状态为已结束和开票中运单的历史运单
+    List<CarFreeCarrierBillStartPo> getHistoryBills();
 }

+ 13 - 0
src/main/java/com/jkcredit/invoice/hub/mapper/NeedChargeMapper.java

@@ -0,0 +1,13 @@
+package com.jkcredit.invoice.hub.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jkcredit.invoice.hub.model.po.needCharge.NeedChargePo;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 22:20
+ * @version: V1.0
+ **/
+public interface NeedChargeMapper extends BaseMapper<NeedChargePo> {
+}

+ 13 - 0
src/main/java/com/jkcredit/invoice/hub/mapper/RealChargeMapper.java

@@ -0,0 +1,13 @@
+package com.jkcredit.invoice.hub.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jkcredit.invoice.hub.model.po.realCharge.RealChargePo;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 22:20
+ * @version: V1.0
+ **/
+public interface RealChargeMapper extends BaseMapper<RealChargePo> {
+}

+ 14 - 0
src/main/java/com/jkcredit/invoice/hub/mapper/SearchInvoiceMapper.java

@@ -0,0 +1,14 @@
+package com.jkcredit.invoice.hub.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jkcredit.invoice.hub.model.po.searchInvoice.SearchInvoicePo;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 15:46
+ * @version: V1.0
+ **/
+public interface SearchInvoiceMapper extends BaseMapper<SearchInvoicePo> {
+    SearchInvoicePo getSearchInvoiceByNum(String num);
+}

+ 13 - 0
src/main/java/com/jkcredit/invoice/hub/mapper/SearchInvoiceResultMapper.java

@@ -0,0 +1,13 @@
+package com.jkcredit.invoice.hub.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jkcredit.invoice.hub.model.po.searchInvoiceResult.SearchInvoiceResultPo;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 20:51
+ * @version: V1.0
+ **/
+public interface SearchInvoiceResultMapper extends BaseMapper<SearchInvoiceResultPo> {
+}

+ 110 - 0
src/main/java/com/jkcredit/invoice/hub/model/dto/apiCarFree/InvoiceResultDto.java

@@ -0,0 +1,110 @@
+package com.jkcredit.invoice.hub.model.dto.apiCarFree;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 17:00
+ * @version: V1.0
+ **/
+@Data
+public class InvoiceResultDto implements Serializable {
+    private static final long serialVersionUID = -9058540201622141462L;
+    private String info;
+    private String receiveTime;
+    private String plateNum;
+    private Integer vehicleType;
+    private String waybillNum;
+    private Integer waybillStatus;
+    private String waybillStartTime;
+    private String waybillEndTime;
+    private List<Result> result;
+
+    @Data
+    public class Result implements Serializable {
+        private static final long serialVersionUID = 4254312516969121303L;
+        // 发票号码
+        private String invoiceNum;
+
+        // 发票代码
+        private String invoiceCode;
+
+        // 开票时间
+        private String invoiceMakeTime;
+
+        // 下载地址
+        private String invoiceUrl;
+
+        // 发票模板url
+        private String invoiceHtmlUrl;
+
+        // 入口收费站
+        private String enStation;
+
+        // 出口收费站
+        private String exStation;
+
+        // 交易时间
+        private String exTime;
+
+        // 交易金额
+        private Long fee;
+
+        // 税额
+        private Long totalTaxAmount;
+
+        // 车牌号
+        private String plateNum;
+
+        // 车型
+        private int vehicleType;
+
+        // 运单编号
+        private String waybillNum;
+
+        // 运单状态
+        private int waybillStatus;
+
+        // 运单开始时间
+        private String waybillStartTime;
+
+        // 运单结束时间
+        private String waybillEndTime;
+
+        // 价税合计
+        private Long totalAmount;
+
+        // 税率
+        private double taxRate;
+
+        // 发票种类
+        private String invoiceType;
+
+        // 金额
+        private Long amount;
+
+        // 销方名称
+        private String sellerName;
+
+        // 销方税号
+        private String sellerTaxpayerCode;
+
+        // 交易id
+        private String transactionId;
+
+        // 交易匹配时间
+        private String tradeMatchTime;
+
+        // 购方名称
+        private String buyerName;
+
+        // 购方税号
+        private String buyerTaxpayerCode;
+    }
+
+}

+ 110 - 0
src/main/java/com/jkcredit/invoice/hub/model/dto/apiCarFree/InvoiceResultDtoTest.java

@@ -0,0 +1,110 @@
+package com.jkcredit.invoice.hub.model.dto.apiCarFree;
+
+import com.alibaba.fastjson.JSONArray;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 17:00
+ * @version: V1.0
+ **/
+@Data
+public class InvoiceResultDtoTest implements Serializable {
+    private static final long serialVersionUID = -9058540201622141462L;
+    private String info;
+    private String receiveTime;
+    private String plateNum;
+    private Integer vehicleType;
+    private String waybillNum;
+    private Integer waybillStatus;
+    private String waybillStartTime;
+    private String waybillEndTime;
+    private JSONArray result;
+
+    @Data
+    public class Result implements Serializable {
+        private static final long serialVersionUID = 4254312516969121303L;
+        // 发票号码
+        private String invoiceNum;
+
+        // 发票代码
+        private String invoiceCode;
+
+        // 开票时间
+        private String invoiceMakeTime;
+
+        // 下载地址
+        private String invoiceUrl;
+
+        // 发票模板url
+        private String invoiceHtmlUrl;
+
+        // 入口收费站
+        private String enStation;
+
+        // 出口收费站
+        private String exStation;
+
+        // 交易时间
+        private String exTime;
+
+        // 交易金额
+        private Long fee;
+
+        // 税额
+        private Long totalTaxAmount;
+
+        // 车牌号
+        private String plateNum;
+
+        // 车型
+        private int vehicleType;
+
+        // 运单编号
+        private String waybillNum;
+
+        // 运单状态
+        private int waybillStatus;
+
+        // 运单开始时间
+        private String waybillStartTime;
+
+        // 运单结束时间
+        private String waybillEndTime;
+
+        // 价税合计
+        private Long totalAmount;
+
+        // 税率
+        private double taxRate;
+
+        // 发票种类
+        private String invoiceType;
+
+        // 金额
+        private Long amount;
+
+        // 销方名称
+        private String sellerName;
+
+        // 销方税号
+        private String sellerTaxpayerCode;
+
+        // 交易id
+        private String transactionId;
+
+        // 交易匹配时间
+        private String tradeMatchTime;
+
+        // 购方名称
+        private String buyerName;
+
+        // 购方税号
+        private String buyerTaxpayerCode;
+    }
+
+}

+ 20 - 0
src/main/java/com/jkcredit/invoice/hub/model/dto/apiCarFree/WayBillNumFindInvoiceDto.java

@@ -0,0 +1,20 @@
+package com.jkcredit.invoice.hub.model.dto.apiCarFree;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 14:45
+ * @version: V1.0
+ **/
+@Data
+public class WayBillNumFindInvoiceDto implements Serializable {
+
+    private static final long serialVersionUID = 3680439419548760441L;
+    @NotNull(message = "运单编号不能为空")
+    private String num;
+}

+ 24 - 0
src/main/java/com/jkcredit/invoice/hub/model/dto/needCharge/NeedChargeDto.java

@@ -0,0 +1,24 @@
+package com.jkcredit.invoice.hub.model.dto.needCharge;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 22:17
+ * @version: V1.0
+ **/
+@Data
+public class NeedChargeDto implements Serializable {
+
+    private static final long serialVersionUID = -6330386295066627091L;
+
+    private Long userId;
+    private String num;
+    private BigDecimal price;
+    private String transactionId;
+}

+ 22 - 0
src/main/java/com/jkcredit/invoice/hub/model/dto/realCharge/RealChargeDto.java

@@ -0,0 +1,22 @@
+package com.jkcredit.invoice.hub.model.dto.realCharge;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 22:18
+ * @version: V1.0
+ **/
+@Data
+public class RealChargeDto implements Serializable {
+    private static final long serialVersionUID = -7036364087194402759L;
+    private Long userId;
+    private String num;
+    private BigDecimal price;
+    private String transactionId;
+}

+ 30 - 0
src/main/java/com/jkcredit/invoice/hub/model/dto/searchInvoice/SearchInvoiceDto.java

@@ -0,0 +1,30 @@
+package com.jkcredit.invoice.hub.model.dto.searchInvoice;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 17:46
+ * @version: V1.0
+ **/
+@Data
+public class SearchInvoiceDto implements Serializable {
+    private static final long serialVersionUID = -4884765348590335518L;
+    private Long id;
+    private String info;
+    private String receiveTime;
+    private String plateNum;
+    private Integer vehicleType;
+    private String waybillNum;
+    private Integer waybillStatus;
+    private String waybillStartTime;
+    private String waybillEndTime;
+    private Integer isSearch;
+    private Date createTime;
+    private Date updateTime;
+    private Integer activated;
+}

+ 96 - 0
src/main/java/com/jkcredit/invoice/hub/model/dto/searchInvoiceResult/SearchInvoiceResultDto.java

@@ -0,0 +1,96 @@
+package com.jkcredit.invoice.hub.model.dto.searchInvoiceResult;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 20:50
+ * @version: V1.0
+ **/
+@Data
+public class SearchInvoiceResultDto implements Serializable {
+    // 发票号码
+    private String invoiceNum;
+
+    // 发票代码
+    private String invoiceCode;
+
+    // 开票时间
+    private String invoiceMakeTime;
+
+    // 下载地址
+    private String invoiceUrl;
+
+    // 发票模板url
+    private String invoiceHtmlUrl;
+
+    // 入口收费站
+    private String enStation;
+
+    // 出口收费站
+    private String exStation;
+
+    // 交易时间
+    private String exTime;
+
+    // 交易金额
+    private Long fee;
+
+    // 税额
+    private Long totalTaxAmount;
+
+    // 车牌号
+    private String plateNum;
+
+    // 车型
+    private int vehicleType;
+
+    // 运单编号
+    private String waybillNum;
+
+    // 运单状态
+    private int waybillStatus;
+
+    // 运单开始时间
+    private String waybillStartTime;
+
+    // 运单结束时间
+    private String waybillEndTime;
+
+    // 价税合计
+    private Long totalAmount;
+
+    // 税率
+    private double taxRate;
+
+    // 发票种类
+    private String invoiceType;
+
+    // 金额
+    private Long amount;
+
+    // 销方名称
+    private String sellerName;
+
+    // 销方税号
+    private String sellerTaxpayerCode;
+
+    // 交易id
+    private String transactionId;
+
+    // 用户id
+    private Long userId;
+
+    // 交易匹配时间
+    private String tradeMatchTime;
+
+    // 购方名称
+    private String buyerName;
+
+    // 购方税号
+    private String buyerTaxpayerCode;
+}

+ 6 - 0
src/main/java/com/jkcredit/invoice/hub/model/dto/userBalance/UserBalanceDto.java

@@ -17,6 +17,12 @@ import java.io.Serializable;
 @NoArgsConstructor
 public class UserBalanceDto implements Serializable {
     private static final long serialVersionUID = -1784057925412485786L;
+    private Long userId;
     private Double balance;
     private String lastDeductionTime;
+
+    public UserBalanceDto(Double balance, String lastDeductionTime) {
+        this.balance = balance;
+        this.lastDeductionTime = lastDeductionTime;
+    }
 }

+ 1 - 1
src/main/java/com/jkcredit/invoice/hub/model/po/carFreeCarrierBillStart/CarFreeCarrierBillStartPo.java

@@ -52,7 +52,7 @@ public class CarFreeCarrierBillStartPo implements Serializable {
     // 是否为历史运单
     private Integer isHistory;
     // 用户id
-    private Integer userId;
+    private Long userId;
     // 创建时间
     private Date createTime;
     // 更新时间

+ 34 - 0
src/main/java/com/jkcredit/invoice/hub/model/po/needCharge/NeedChargePo.java

@@ -0,0 +1,34 @@
+package com.jkcredit.invoice.hub.model.po.needCharge;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 22:14
+ * @version: V1.0
+ **/
+@Entity
+@Data
+@ToString
+@TableName("h_need_charge")
+public class NeedChargePo implements Serializable {
+    private static final long serialVersionUID = -9196791950447430517L;
+    @Id
+    @TableId
+    private Long id;
+    private Long userId;
+    private String num;
+    private BigDecimal price;
+    private String transactionId;
+    private Date createTime;
+}

+ 34 - 0
src/main/java/com/jkcredit/invoice/hub/model/po/realCharge/RealChargePo.java

@@ -0,0 +1,34 @@
+package com.jkcredit.invoice.hub.model.po.realCharge;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 22:16
+ * @version: V1.0
+ **/
+@Entity
+@Data
+@ToString
+@TableName("h_real_charge")
+public class RealChargePo implements Serializable {
+    private static final long serialVersionUID = 1426226570003808900L;
+    @Id
+    @TableId
+    private Long id;
+    private Long userId;
+    private String num;
+    private BigDecimal price;
+    private String transactionId;
+    private Date createTime;
+}

+ 41 - 0
src/main/java/com/jkcredit/invoice/hub/model/po/searchInvoice/SearchInvoicePo.java

@@ -0,0 +1,41 @@
+package com.jkcredit.invoice.hub.model.po.searchInvoice;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 15:14
+ * @version: V1.0
+ **/
+@Entity
+@Data
+@ToString
+@TableName("h_search_invoice")
+public class SearchInvoicePo implements Serializable {
+    private static final long serialVersionUID = -3877836713461291240L;
+    @Id
+    @TableId
+    private Long id;
+
+    private String info;
+    private String receiveTime;
+    private String plateNum;
+    private Integer vehicleType;
+    private String waybillNum;
+    private Integer waybillStatus;
+    private String waybillStartTime;
+    private String waybillEndTime;
+    private Integer isSearch;
+    private Date createTime;
+    private Date updateTime;
+    private Integer activated;
+}

+ 38 - 0
src/main/java/com/jkcredit/invoice/hub/puducer/ChargeProducer.java

@@ -0,0 +1,38 @@
+package com.jkcredit.invoice.hub.puducer;
+
+import com.jkcredit.invoice.hub.constant.CommonConstant;
+import com.jkcredit.invoice.hub.model.dto.userBalance.UserBalanceDto;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2019-06-04 13:47
+ * @version: V1.0
+ **/
+@Slf4j
+@Component
+public class ChargeProducer implements RabbitTemplate.ReturnCallback {
+
+    @Autowired
+    private RabbitTemplate rabbitTemplate;
+
+    public void send(UserBalanceDto userBalanceDto) {
+        this.rabbitTemplate.setReturnCallback(this);
+        this.rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
+            if (!ack) {
+                log.info("消息发送失败:{},{}", cause, correlationData.toString());
+            }
+        });
+        this.rabbitTemplate.convertAndSend(CommonConstant.CHARGE_EXCHANGE, "charge.*", userBalanceDto);
+    }
+
+    @Override
+    public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
+//        System.out.println("sender return success" + message.toString() + "===" + replyText + "===" + exchange + "===" + routingKey);
+    }
+}

+ 3 - 0
src/main/java/com/jkcredit/invoice/hub/service/apiCarFree/ApiCarFreeService.java

@@ -28,4 +28,7 @@ public interface ApiCarFreeService {
     // 无车历史运单结束指令
     ApiResponseData wayBillHistoryEnd(JSONObject param);
 
+    // 无车运单编号查询发票
+    ApiResponseData waiBillNumFindInvoice(JSONObject param);
+
 }

+ 36 - 0
src/main/java/com/jkcredit/invoice/hub/service/apiCarFree/ApiCarFreeServiceImpl.java

@@ -11,6 +11,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.jkcredit.invoice.hub.constant.CommonConstant;
 import com.jkcredit.invoice.hub.enums.ApiResponseCodeEnum;
+import com.jkcredit.invoice.hub.model.dto.apiCarFree.WayBillNumFindInvoiceDto;
 import com.jkcredit.invoice.hub.model.dto.carFreeCarrierBillEnd.CarFreeCarrierBillEndDto;
 import com.jkcredit.invoice.hub.model.dto.carFreeCarrierBillStart.CarFreeCarrierBillStartDto;
 import com.jkcredit.invoice.hub.model.dto.apiCarFree.VehicleRegisterDto;
@@ -296,4 +297,39 @@ public class ApiCarFreeServiceImpl extends BaseService implements ApiCarFreeServ
         }
         return analyzeApiResultItems(result);
     }
+
+    @Override
+    public ApiResponseData waiBillNumFindInvoice(JSONObject param) {
+        long costTimeStart = System.currentTimeMillis();
+        String result;
+
+        try {
+            WayBillNumFindInvoiceDto dto = JSONObject.toJavaObject(param, WayBillNumFindInvoiceDto.class);
+            validate(dto);
+
+            WaybillNumFindInvoiceRequest request = new WaybillNumFindInvoiceRequest();
+            request.setCompanyNum(CommonConstant.COMPANY_NUMBER);
+            request.setWaybillNum(dto.getNum());
+            String fileName = request.getFilename();
+
+            // 调用upload 发送数据
+            WaybillNumFindInvoiceResponse response = ETCCommHelper.upload(fileName, request, WaybillNumFindInvoiceResponse.class);
+
+            result = response.toJson();
+            long costTimeEnd = System.currentTimeMillis();
+            log.info("[-waiBillNumFindInvoice-] result is " + result.replaceAll("\r|\n", "") + " , request is "
+                    + param + ",costtime=" + (costTimeEnd - costTimeStart) + ",startTime=" + costTimeStart
+                    + ",endTime=" + costTimeEnd);
+        } catch (IOException e) {
+            log.error("[-waiBillNumFindInvoice-] 网络异常 " + e);
+            throw new ServiceException(CommonConstant.QUERY_FAILED);
+        } catch (ApiRequestException apie) {
+            log.error("[-waiBillNumFindInvoice-] 错误信息:" + apie.getMessage());
+            throw new ApiRequestException(apie.getMessage(), ApiResponseCodeEnum.CODE_200.getValue());
+        } catch (ServiceException se) {
+            log.error("[-waiBillNumFindInvoice-] 错误信息:" + se.getMessage());
+            throw new ServiceException(se.getMessage());
+        }
+        return ApiResponseData.success(ApiResponseCodeEnum.CODE_200.getValue(), result);
+    }
 }

+ 7 - 0
src/main/java/com/jkcredit/invoice/hub/service/carFreeCarrierBillStart/CarFreeCarrierBillStartService.java

@@ -1,6 +1,9 @@
 package com.jkcredit.invoice.hub.service.carFreeCarrierBillStart;
 
 import com.jkcredit.invoice.hub.model.dto.carFreeCarrierBillStart.CarFreeCarrierBillStartDto;
+import com.jkcredit.invoice.hub.model.po.carFreeCarrierBillStart.CarFreeCarrierBillStartPo;
+
+import java.util.List;
 
 /**
  * @description:
@@ -12,4 +15,8 @@ public interface CarFreeCarrierBillStartService {
     void saveBillStart(CarFreeCarrierBillStartDto dto);
 
     void updateBillStartStatus(String num, Integer status);
+
+    List<CarFreeCarrierBillStartPo> getRealTimeBills();
+
+    List<CarFreeCarrierBillStartPo> getHistoryBills();
 }

+ 21 - 0
src/main/java/com/jkcredit/invoice/hub/service/carFreeCarrierBillStart/CarFreeCarrierBillStartServiceImpl.java

@@ -11,6 +11,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @description:
@@ -54,7 +55,27 @@ public class CarFreeCarrierBillStartServiceImpl extends BaseService implements C
             log.error("运单开始指令更新状态失败,运单编号为:{},状态为:{}", num, status);
             throw new ServiceException(num + "运单开始指令更新状态失败");
         }
+    }
 
+    @Override
+    public List<CarFreeCarrierBillStartPo> getRealTimeBills() {
+        try {
+            List<CarFreeCarrierBillStartPo> billStartPoList = mapper.getRealTimeBills();
+            return billStartPoList;
+        } catch (Exception e) {
+            log.error("实时运单查询失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("实时运单查询失败");
+        }
+    }
 
+    @Override
+    public List<CarFreeCarrierBillStartPo> getHistoryBills() {
+        try {
+            List<CarFreeCarrierBillStartPo> billStartPoList = mapper.getHistoryBills();
+            return billStartPoList;
+        } catch (Exception e) {
+            log.error("历史运单查询失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("历史运单查询失败");
+        }
     }
 }

+ 13 - 0
src/main/java/com/jkcredit/invoice/hub/service/needCharge/NeedChargeService.java

@@ -0,0 +1,13 @@
+package com.jkcredit.invoice.hub.service.needCharge;
+
+import com.jkcredit.invoice.hub.model.dto.needCharge.NeedChargeDto;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 22:21
+ * @version: V1.0
+ **/
+public interface NeedChargeService {
+    void saveNeedCharge(NeedChargeDto dto);
+}

+ 39 - 0
src/main/java/com/jkcredit/invoice/hub/service/needCharge/NeedChargeServiceImpl.java

@@ -0,0 +1,39 @@
+package com.jkcredit.invoice.hub.service.needCharge;
+
+import com.jkcredit.invoice.hub.mapper.NeedChargeMapper;
+import com.jkcredit.invoice.hub.model.dto.needCharge.NeedChargeDto;
+import com.jkcredit.invoice.hub.model.po.needCharge.NeedChargePo;
+import com.jkcredit.invoice.hub.service.base.BaseService;
+import com.jkcredit.invoice.hub.spi.lang.exception.ServiceException;
+import com.jkcredit.invoice.hub.util.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 22:21
+ * @version: V1.0
+ **/
+@Slf4j
+@Service
+public class NeedChargeServiceImpl extends BaseService implements NeedChargeService {
+    @Resource
+    NeedChargeMapper mapper;
+
+    @Override
+    public void saveNeedCharge(NeedChargeDto dto) {
+        try {
+            NeedChargePo po = new NeedChargePo();
+            BeanUtil.copyProperties(po, dto);
+            po.setCreateTime(new Date());
+            mapper.insert(po);
+        } catch (Exception e) {
+            log.error("新增需要计费数据失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("新增需要计费数据失败");
+        }
+    }
+}

+ 13 - 0
src/main/java/com/jkcredit/invoice/hub/service/realCharge/RealChargeService.java

@@ -0,0 +1,13 @@
+package com.jkcredit.invoice.hub.service.realCharge;
+
+import com.jkcredit.invoice.hub.model.dto.realCharge.RealChargeDto;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 22:25
+ * @version: V1.0
+ **/
+public interface RealChargeService {
+    void saveRealCharge(RealChargeDto dto);
+}

+ 39 - 0
src/main/java/com/jkcredit/invoice/hub/service/realCharge/RealChargeServiceImpl.java

@@ -0,0 +1,39 @@
+package com.jkcredit.invoice.hub.service.realCharge;
+
+import com.jkcredit.invoice.hub.mapper.RealChargeMapper;
+import com.jkcredit.invoice.hub.model.dto.realCharge.RealChargeDto;
+import com.jkcredit.invoice.hub.model.po.realCharge.RealChargePo;
+import com.jkcredit.invoice.hub.service.base.BaseService;
+import com.jkcredit.invoice.hub.spi.lang.exception.ServiceException;
+import com.jkcredit.invoice.hub.util.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 22:25
+ * @version: V1.0
+ **/
+@Slf4j
+@Service
+public class RealChargeServiceImpl extends BaseService implements RealChargeService {
+    @Resource
+    RealChargeMapper mapper;
+
+    @Override
+    public void saveRealCharge(RealChargeDto dto) {
+        try {
+            RealChargePo po = new RealChargePo();
+            BeanUtil.copyProperties(po, dto);
+            po.setCreateTime(new Date());
+            mapper.insert(po);
+        } catch (Exception e) {
+            log.error("新增实际计费数据失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("新增实际计费数据失败");
+        }
+    }
+}

+ 16 - 0
src/main/java/com/jkcredit/invoice/hub/service/searchInvoice/SearchInvoiceService.java

@@ -0,0 +1,16 @@
+package com.jkcredit.invoice.hub.service.searchInvoice;
+
+import com.jkcredit.invoice.hub.model.dto.apiCarFree.InvoiceResultDto;
+import com.jkcredit.invoice.hub.model.dto.searchInvoice.SearchInvoiceDto;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 15:45
+ * @version: V1.0
+ **/
+public interface SearchInvoiceService {
+    void saveSearchInvoice(InvoiceResultDto dto);
+
+    SearchInvoiceDto getSearchInvoiceByNum(String num);
+}

+ 59 - 0
src/main/java/com/jkcredit/invoice/hub/service/searchInvoice/SearchInvoiceServiceImpl.java

@@ -0,0 +1,59 @@
+package com.jkcredit.invoice.hub.service.searchInvoice;
+
+import com.jkcredit.invoice.hub.constant.CommonConstant;
+import com.jkcredit.invoice.hub.constant.ExceptionMessage;
+import com.jkcredit.invoice.hub.mapper.SearchInvoiceMapper;
+import com.jkcredit.invoice.hub.model.dto.apiCarFree.InvoiceResultDto;
+import com.jkcredit.invoice.hub.model.dto.searchInvoice.SearchInvoiceDto;
+import com.jkcredit.invoice.hub.model.po.searchInvoice.SearchInvoicePo;
+import com.jkcredit.invoice.hub.service.base.BaseService;
+import com.jkcredit.invoice.hub.spi.lang.exception.ServiceException;
+import com.jkcredit.invoice.hub.util.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 15:45
+ * @version: V1.0
+ **/
+@Slf4j
+@Service
+public class SearchInvoiceServiceImpl extends BaseService implements SearchInvoiceService {
+    @Resource
+    SearchInvoiceMapper mapper;
+
+    @Override
+    public void saveSearchInvoice(InvoiceResultDto dto) {
+        SearchInvoicePo po = new SearchInvoicePo();
+        BeanUtil.copyProperties(po, dto);
+        po.setCreateTime(new Date());
+        try {
+            mapper.insert(po);
+        } catch (Exception e) {
+            log.error("新增运单查询发票外层数据失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("新增运单查询发票外层数据失败");
+        }
+    }
+
+    @Override
+    public SearchInvoiceDto getSearchInvoiceByNum(String num) {
+        try {
+            SearchInvoicePo po = mapper.getSearchInvoiceByNum(num);
+            if (po != null) {
+                SearchInvoiceDto dto = new SearchInvoiceDto();
+                BeanUtil.copyProperties(dto, po);
+                return dto;
+            } else {
+                return null;
+            }
+        } catch (Exception e) {
+            log.error("运单发票查询失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("运单发票查询失败");
+        }
+    }
+}

+ 13 - 0
src/main/java/com/jkcredit/invoice/hub/service/searchInvoiceResult/SearchInvoiceResultService.java

@@ -0,0 +1,13 @@
+package com.jkcredit.invoice.hub.service.searchInvoiceResult;
+
+import com.jkcredit.invoice.hub.model.dto.searchInvoiceResult.SearchInvoiceResultDto;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 20:52
+ * @version: V1.0
+ **/
+public interface SearchInvoiceResultService {
+    void saveSearchInvoiceResult(SearchInvoiceResultDto dto);
+}

+ 39 - 0
src/main/java/com/jkcredit/invoice/hub/service/searchInvoiceResult/SearchInvoiceResultServiceImpl.java

@@ -0,0 +1,39 @@
+package com.jkcredit.invoice.hub.service.searchInvoiceResult;
+
+import com.jkcredit.invoice.hub.mapper.SearchInvoiceResultMapper;
+import com.jkcredit.invoice.hub.model.dto.searchInvoiceResult.SearchInvoiceResultDto;
+import com.jkcredit.invoice.hub.model.po.searchInvoiceResult.SearchInvoiceResultPo;
+import com.jkcredit.invoice.hub.service.base.BaseService;
+import com.jkcredit.invoice.hub.spi.lang.exception.ServiceException;
+import com.jkcredit.invoice.hub.util.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 20:52
+ * @version: V1.0
+ **/
+@Slf4j
+@Service
+public class SearchInvoiceResultServiceImpl extends BaseService implements SearchInvoiceResultService {
+    @Resource
+    SearchInvoiceResultMapper mapper;
+
+    @Override
+    public void saveSearchInvoiceResult(SearchInvoiceResultDto dto) {
+        SearchInvoiceResultPo po = new SearchInvoiceResultPo();
+        BeanUtil.copyProperties(po, dto);
+        po.setCreateTime(new Date());
+        try {
+            mapper.insert(po);
+        } catch (Exception e) {
+            log.error("插入发票数据失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("插入发票数据失败");
+        }
+    }
+}

+ 1 - 0
src/main/java/com/jkcredit/invoice/hub/service/user/UserService.java

@@ -23,4 +23,5 @@ public interface UserService {
 
     UserPo getUserByAppKey(String appKey);
 
+    UserDto getUser(Long id);
 }

+ 12 - 0
src/main/java/com/jkcredit/invoice/hub/service/user/UserServiceImpl.java

@@ -152,4 +152,16 @@ public class UserServiceImpl extends BaseService implements UserService {
         }
         return userPo;
     }
+
+    @Override
+    public UserDto getUser(Long id) {
+        UserDto userDto = new UserDto();
+        UserPo userPo = userMapper.selectById(id);
+        if (userPo != null) {
+            BeanUtils.copyProperties(userPo, userDto);
+        } else {
+            throw new ServiceException(ExceptionMessage.USER_NOT_EXIST);
+        }
+        return userDto;
+    }
 }

+ 2 - 0
src/main/java/com/jkcredit/invoice/hub/service/userBalance/UserBalanceService.java

@@ -10,4 +10,6 @@ import com.jkcredit.invoice.hub.model.dto.userBalance.UserBalanceDto;
  **/
 public interface UserBalanceService {
     UserBalanceDto getUserBalance(Long userId);
+
+    void updateUserBalance(UserBalanceDto dto);
 }

+ 15 - 0
src/main/java/com/jkcredit/invoice/hub/service/userBalance/UserBalanceServiceImpl.java

@@ -6,11 +6,13 @@ import com.jkcredit.invoice.hub.model.dto.userBalance.UserBalanceDto;
 import com.jkcredit.invoice.hub.model.po.userBalance.UserBalancePo;
 import com.jkcredit.invoice.hub.service.base.BaseService;
 import com.jkcredit.invoice.hub.spi.lang.exception.ServiceException;
+import com.jkcredit.invoice.hub.util.BeanUtil;
 import com.jkcredit.invoice.hub.util.CommonUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.Date;
 
 /**
  * @description:
@@ -32,4 +34,17 @@ public class UserBalanceServiceImpl extends BaseService implements UserBalanceSe
         }
         return new UserBalanceDto(CommonUtil.parseDouble(userBalancePo.getBalance()), CommonUtil.dateFormat(userBalancePo.getUpdateTime()));
     }
+
+    @Override
+    public void updateUserBalance(UserBalanceDto dto) {
+        UserBalancePo po = new UserBalancePo();
+        BeanUtil.copyProperties(po, dto);
+        po.setUpdateTime(new Date());
+        try {
+            userBalanceMapper.updateById(po);
+        } catch (Exception e) {
+            log.error("更新余额表失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("更新余额表失败");
+        }
+    }
 }

+ 168 - 0
src/main/java/com/jkcredit/invoice/hub/task/WayBillTask.java

@@ -0,0 +1,168 @@
+package com.jkcredit.invoice.hub.task;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.jkcredit.invoice.hub.constant.CommonConstant;
+import com.jkcredit.invoice.hub.enums.ApiResponseCodeEnum;
+import com.jkcredit.invoice.hub.model.dto.apiCarFree.InvoiceResultDto;
+import com.jkcredit.invoice.hub.model.dto.needCharge.NeedChargeDto;
+import com.jkcredit.invoice.hub.model.dto.searchInvoice.SearchInvoiceDto;
+import com.jkcredit.invoice.hub.model.dto.searchInvoiceResult.SearchInvoiceResultDto;
+import com.jkcredit.invoice.hub.model.dto.user.UserDto;
+import com.jkcredit.invoice.hub.model.dto.userBalance.UserBalanceDto;
+import com.jkcredit.invoice.hub.model.po.carFreeCarrierBillStart.CarFreeCarrierBillStartPo;
+import com.jkcredit.invoice.hub.model.po.searchInvoiceResult.SearchInvoiceResultPo;
+import com.jkcredit.invoice.hub.puducer.ChargeProducer;
+import com.jkcredit.invoice.hub.service.apiCarFree.ApiCarFreeService;
+import com.jkcredit.invoice.hub.service.carFreeCarrierBillStart.CarFreeCarrierBillStartService;
+import com.jkcredit.invoice.hub.service.needCharge.NeedChargeService;
+import com.jkcredit.invoice.hub.service.realCharge.RealChargeService;
+import com.jkcredit.invoice.hub.service.searchInvoice.SearchInvoiceService;
+import com.jkcredit.invoice.hub.service.searchInvoiceResult.SearchInvoiceResultService;
+import com.jkcredit.invoice.hub.service.user.UserService;
+import com.jkcredit.invoice.hub.service.userBalance.UserBalanceService;
+import com.jkcredit.invoice.hub.spi.rest.data.ApiResponseData;
+import com.jkcredit.invoice.hub.util.BeanUtil;
+import com.jkcredit.invoice.hub.util.CommonUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/1/18 15:49
+ * @version: V1.0
+ **/
+@Component
+@Slf4j
+public class WayBillTask {
+    @Autowired
+    CarFreeCarrierBillStartService startService;
+    @Autowired
+    ApiCarFreeService carFreeService;
+    @Autowired
+    SearchInvoiceService searchInvoiceService;
+    @Autowired
+    private RedisTemplate redisTemplate;
+    @Autowired
+    private ChargeProducer chargeProducer;
+    @Autowired
+    UserBalanceService userBalanceService;
+    @Autowired
+    SearchInvoiceResultService searchInvoiceResultService;
+    @Autowired
+    NeedChargeService needChargeService;
+    @Autowired
+    RealChargeService realChargeService;
+    @Autowired
+    UserService userService;
+
+    @Scheduled(cron = "0 1/1 * * * ?", zone = "Asia/Shanghai")
+    public void realTimeWayBill() {
+        // 查询实时订单,且状态为已结束和开票中
+        // 调用运单查询发票接口
+        // 解析结果
+        // 如果result不为[],则将结果入库
+        // 根据返回transationID去重
+        // 每一条放入消息队列,计费
+        List<CarFreeCarrierBillStartPo> startPoList = startService.getRealTimeBills();
+        charge(startPoList);
+
+    }
+
+    @Scheduled(cron = "0 1/1 * * * ?", zone = "Asia/Shanghai")
+    public void historyWayBill() {
+        // 查询实时订单,且状态为已结束和开票中
+        // 调用运单查询发票接口
+        // 解析结果
+        // 如果result不为[],则将结果入库
+        // 根据返回transationID去重
+        // 每一条放入消息队列,计费
+        List<CarFreeCarrierBillStartPo> startPoList = startService.getHistoryBills();
+        charge(startPoList);
+
+    }
+
+    private void charge(List<CarFreeCarrierBillStartPo> startPoList) {
+        for (CarFreeCarrierBillStartPo po : startPoList) {
+            // 封装查询参数
+            JSONObject param = new JSONObject();
+            param.put("num", po.getNum());
+
+            // 接口调用
+            ApiResponseData apiResponseData = carFreeService.waiBillNumFindInvoice(param);
+
+            // 判断接口是否调用成功
+            if (apiResponseData.getData().equals(CommonConstant.SUCCESS_CODE)
+                    && apiResponseData.getCode().equals(ApiResponseCodeEnum.CODE_200.getValue())) {
+                // 接口调用成功
+                InvoiceResultDto invoiceResultDto = JSON.toJavaObject(JSON.parseObject(apiResponseData.getMsg()), InvoiceResultDto.class);
+                List<InvoiceResultDto.Result> newSearchInvoiceResultList;
+
+                // 根据运单发票状态更新运单状态
+                if (invoiceResultDto.getWaybillStatus().equals("3")) {
+                    // 开票完成
+                    startService.updateBillStartStatus(invoiceResultDto.getWaybillNum(), CommonConstant.STATUS_INVOICE_OVER);
+                } else {
+                    // 开票中
+                    startService.updateBillStartStatus(invoiceResultDto.getWaybillNum(), CommonConstant.STATUS_MAKING_INVOICE);
+                }
+                if (invoiceResultDto.getResult() != null) {
+                    // 判断运单查询发票返回共用信息在数据库中是否存在,不存在则存入
+                    SearchInvoiceDto searchInvoiceDto = searchInvoiceService.getSearchInvoiceByNum(invoiceResultDto.getWaybillNum());
+                    if (searchInvoiceDto == null) {
+                        searchInvoiceService.saveSearchInvoice(invoiceResultDto);
+                    }
+
+                    if (invoiceResultDto.getResult().size() > 0) {
+                        //去重列表
+                        newSearchInvoiceResultList = invoiceResultDto.getResult().stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
+                                () -> new TreeSet<>(Comparator.comparing(InvoiceResultDto.Result::getTransactionId))),
+                                ArrayList::new));
+                        //计费
+                        newSearchInvoiceResultList.stream().forEach(t -> {
+                            if (!redisTemplate.hasKey(CommonConstant.TRANSACTION_ID_KEY + t.getTransactionId())) {
+                                UserBalanceDto userBalanceDto = userBalanceService.getUserBalance(po.getUserId());
+                                //发送到消息队列
+                                chargeProducer.send(userBalanceDto);
+                                // 将需要计费数据插入数据库
+                                UserDto userDto = userService.getUser(po.getUserId());
+                                NeedChargeDto needChargeDto = new NeedChargeDto();
+                                needChargeDto.setUserId(po.getUserId());
+                                needChargeDto.setNum(t.getWaybillNum());
+                                needChargeDto.setPrice(userDto.getPrice());
+                                needChargeDto.setTransactionId(t.getTransactionId());
+                                needChargeService.saveNeedCharge(needChargeDto);
+                                log.warn("计费日志:{},计费用户id:{}", JSON.toJSONString(t), po.getUserId());
+                            }
+                        });
+                    }
+                    // 遍历发票集合
+                    invoiceResultDto.getResult().stream().forEach(t -> {
+                        if (!redisTemplate.hasKey(CommonConstant.NUM_FIND_INVOICE_KEY + t.getInvoiceNum() + "_" + t.getInvoiceCode())) {
+                            SearchInvoiceResultDto dto = new SearchInvoiceResultDto();
+                            BeanUtil.copyProperties(dto, t);
+                            dto.setUserId(po.getUserId());
+                            //插入发票信息
+                            searchInvoiceResultService.saveSearchInvoiceResult(dto);
+                            log.info("插入的发票信息:{}", JSON.toJSONString(t));
+                            //存入redis发票信息
+                            redisTemplate.opsForValue().set(CommonConstant.NUM_FIND_INVOICE_KEY + t.getInvoiceNum() + "_" + t.getInvoiceCode(), JSON.toJSONString(t));
+                            //存入redis交易id
+                            redisTemplate.opsForValue().set(CommonConstant.TRANSACTION_ID_KEY + t.getTransactionId(), t.getTransactionId());
+                        }
+                    });
+                }
+            } else {
+                log.error("定时任务处理运单失败;失败原因:调用接口失败;时间:{};运单编号:{}", CommonUtil.dateFormat(new Date()), po.getNum());
+            }
+
+        }
+    }
+}

+ 20 - 0
src/main/resources/application-dev.yml

@@ -15,3 +15,23 @@ mybatis-plus:
   global-config:
     db-config:
       table-prefix: h_
+redis:
+  host: 127.0.0.1
+  port: 6379
+  password:
+  rabbitmq:
+    host: 127.0.0.1
+    port: 5672
+    username: guest
+    password: guest
+    publisher-confirms: true
+    publisher-returns: true
+    listener:
+      simple:
+        acknowledge-mode: manual
+        retry:
+          enabled: true
+        concurrency: 10
+        max-concurrency: 10
+      direct:
+        acknowledge-mode: manual

+ 8 - 0
src/main/resources/mapper/CarFreeCarrierBillStartMapper.xml

@@ -25,4 +25,12 @@
     <select id="getBillStartByNum" resultMap="baseResultMap">
         select * from h_car_free_carrier_bill_start where activated = 1 and num = #{num}
     </select>
+
+    <select id="getRealTimeBills" resultMap="baseResultMap">
+        select * from h_car_free_carrier_bill_start where activated = 1 and is_history = 1 and (status = 2 or status = 4)
+    </select>
+
+    <select id="getHistoryBills" resultMap="baseResultMap">
+        select * from h_car_free_carrier_bill_start where activated = 1 and is_history = 2 and (status = 2 or status = 4)
+    </select>
 </mapper>

+ 24 - 0
src/main/resources/mapper/SearchInvoiceMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jkcredit.invoice.hub.mapper.SearchInvoiceMapper">
+    <resultMap id="baseResultMap"
+               type="com.jkcredit.invoice.hub.model.po.searchInvoice.SearchInvoicePo">
+        <id column="id" property="id"/>
+        <result column="info" property="info"/>
+        <result column="receive_time" property="receiveTime"/>
+        <result column="plate_num" property="plateNum"/>
+        <result column="vehicle_type" property="vehicleType"/>
+        <result column="waybill_num" property="waybillNum"/>
+        <result column="waybill_status" property="waybillStatus"/>
+        <result column="waybill_start_time" property="waybillStartTime"/>
+        <result column="waybill_end_time" property="waybillEndTime"/>
+        <result column="is_search" property="isSearch"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="activated" property="activated"/>
+    </resultMap>
+
+    <select id="getSearchInvoiceByNum" resultMap="baseResultMap">
+        select * from h_search_invoice where num = #{num}
+    </select>
+</mapper>