xusonglin пре 5 година
родитељ
комит
4645322434

+ 16 - 15
src/main/java/com/jkcredit/invoice/hub/consumer/ChargeConsumer.java

@@ -51,21 +51,22 @@ public class ChargeConsumer {
     public void process(@Payload UserBalanceInvoiceDto userBalanceInvoiceDto, Channel channel, Message message) throws IOException {
         try {
             synchronized (this) {
-                UserDto user = userService.getUser(userBalanceInvoiceDto.getUserId());
-                UserBalanceDto dto = new UserBalanceDto();
-                dto.setUserId(userBalanceInvoiceDto.getUserId());
-                dto.setBalance(userBalanceInvoiceDto.getBalance().subtract(user.getPrice()));
-
-                //更新余额
-                userBalanceService.updateUserBalance(dto);
-
-                // 实际扣费数据
-                RealChargeDto realChargeDto = new RealChargeDto();
-                realChargeDto.setUserId(userBalanceInvoiceDto.getUserId());
-                realChargeDto.setPrice(user.getPrice());
-                realChargeDto.setNum(userBalanceInvoiceDto.getNum());
-                realChargeDto.setTransactionId(userBalanceInvoiceDto.getTransactionId());
-                realChargeService.saveRealCharge(realChargeDto);
+                // todo
+//                UserDto user = userService.getUser(userBalanceInvoiceDto.getUserId());
+//                UserBalanceDto dto = new UserBalanceDto();
+//                dto.setUserId(userBalanceInvoiceDto.getUserId());
+//                dto.setBalance(userBalanceInvoiceDto.getBalance().subtract(user.getPrice()));
+//
+//                //更新余额
+//                userBalanceService.updateUserBalance(dto);
+//
+//                // 实际扣费数据
+//                RealChargeDto realChargeDto = new RealChargeDto();
+//                realChargeDto.setUserId(userBalanceInvoiceDto.getUserId());
+//                realChargeDto.setPrice(user.getPrice());
+//                realChargeDto.setNum(userBalanceInvoiceDto.getNum());
+//                realChargeDto.setTransactionId(userBalanceInvoiceDto.getTransactionId());
+//                realChargeService.saveRealCharge(realChargeDto);
             }
             //告诉服务器收到这条消息 已经被我消费了 可以在队列删掉 这样以后就不会再发了 否则消息服务器以为这条消息没处理掉 后续还会在发
             channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);

+ 27 - 13
src/main/java/com/jkcredit/invoice/hub/service/apiCarFree/ApiCarFreeChargeServiceImpl.java

@@ -7,6 +7,7 @@ import com.jkcredit.invoice.hub.enums.ApiResponseCodeEnum;
 import com.jkcredit.invoice.hub.model.dto.apiCarFree.InvoiceResult;
 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.realCharge.RealChargeDto;
 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;
@@ -28,6 +29,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -63,6 +65,7 @@ public class ApiCarFreeChargeServiceImpl implements ApiCarFreeChargeService {
     UserService userService;
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void charge(List<CarFreeCarrierBillStartPo> startPoList) {
         for (CarFreeCarrierBillStartPo po : startPoList) {
             // 封装查询参数
@@ -101,18 +104,17 @@ public class ApiCarFreeChargeServiceImpl implements ApiCarFreeChargeService {
                                         Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(InvoiceResult::getFee))), ArrayList::new));
                         //计费
                         newSearchInvoiceResultList.stream().forEach(t -> {
-                            // todo 上线后删除
-                            t.setTransactionId(t.getTransactionId() + System.currentTimeMillis());
-                            log.info("计费t + System.currentTimeMillis() = {}", t.getTransactionId());
+                            t.setTransactionId(t.getTransactionId());
                             if (!redisTemplate.hasKey(CommonConstant.TRANSACTION_ID_KEY + t.getTransactionId())) {
-                                UserBalanceDto userBalanceDto = userBalanceService.getUserBalance(po.getUserId());
-                                UserBalanceInvoiceDto userBalanceInvoiceDto = new UserBalanceInvoiceDto();
-                                BeanUtil.copyProperties(userBalanceInvoiceDto, userBalanceDto);
-                                userBalanceInvoiceDto.setNum(t.getWaybillNum());
-                                userBalanceInvoiceDto.setTransactionId(t.getTransactionId());
-                                //发送到消息队列
-                                log.info("发送到消息队列");
-                                chargeProducer.send(userBalanceInvoiceDto);
+                                // todo 此处计费需要使用消息实现
+//                                UserBalanceDto userBalanceDto = userBalanceService.getUserBalance(po.getUserId());
+//                                UserBalanceInvoiceDto userBalanceInvoiceDto = new UserBalanceInvoiceDto();
+//                                BeanUtil.copyProperties(userBalanceInvoiceDto, userBalanceDto);
+//                                userBalanceInvoiceDto.setNum(t.getWaybillNum());
+//                                userBalanceInvoiceDto.setTransactionId(t.getTransactionId());
+//                                //发送到消息队列
+//                                log.info("发送到消息队列");
+//                                chargeProducer.send(userBalanceInvoiceDto);
                                 // 将需要计费数据插入数据库
                                 UserDto userDto = userService.getUser(po.getUserId());
                                 NeedChargeDto needChargeDto = new NeedChargeDto();
@@ -121,14 +123,26 @@ public class ApiCarFreeChargeServiceImpl implements ApiCarFreeChargeService {
                                 needChargeDto.setPrice(userDto.getPrice());
                                 needChargeDto.setTransactionId(t.getTransactionId());
                                 needChargeService.saveNeedCharge(needChargeDto);
+
+                                // 计费
+                                UserBalanceDto userBalanceDto = userBalanceService.getUserBalance(po.getUserId());
+                                userBalanceDto.setBalance(userBalanceDto.getBalance().subtract(userDto.getPrice()));
+                                userBalanceService.updateUserBalance(userBalanceDto);
+
+                                // 实际扣费数据
+                                RealChargeDto realChargeDto = new RealChargeDto();
+                                realChargeDto.setUserId(userBalanceDto.getUserId());
+                                realChargeDto.setPrice(userDto.getPrice());
+                                realChargeDto.setNum(po.getNum());
+                                realChargeDto.setTransactionId(t.getTransactionId());
+                                realChargeService.saveRealCharge(realChargeDto);
                                 log.warn("计费日志:{},计费用户id:{}", JSON.toJSONString(t), po.getUserId());
                             }
                         });
                     }
                     // 遍历发票集合
                     invoiceResultDto.getResult().stream().forEach(t -> {
-                        t.setTransactionId(t.getTransactionId() + System.currentTimeMillis());
-                        log.info("遍历发票集合t + System.currentTimeMillis() = {}", t.getTransactionId());
+                        t.setTransactionId(t.getTransactionId());
                         if (!redisTemplate.hasKey(CommonConstant.NUM_FIND_INVOICE_KEY + t.getInvoiceNum() + "_" + t.getInvoiceCode())) {
                             SearchInvoiceResultDto dto = new SearchInvoiceResultDto();
                             BeanUtil.copyProperties(dto, t);

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

@@ -24,7 +24,7 @@ public class WayBillTask {
     @Autowired
     ApiCarFreeChargeService chargeService;
 
-    //    @Scheduled(cron = "0 1/3 * * * ?", zone = "Asia/Shanghai")
+    @Scheduled(cron = "0 0 23 * * ?", zone = "Asia/Shanghai")
     public void realTimeWayBill() {
         // 查询实时订单,且状态为已结束和开票中
         // 调用运单查询发票接口
@@ -36,7 +36,7 @@ public class WayBillTask {
         chargeService.charge(startPoList);
     }
 
-    //    @Scheduled(cron = "0 1/5 * * * ?", zone = "Asia/Shanghai")
+    @Scheduled(cron = "0 0 * * * ?", zone = "Asia/Shanghai")
     public void historyWayBill() {
         // 查询实时订单,且状态为已结束和开票中
         // 调用运单查询发票接口

+ 1 - 5
src/main/resources/mapper/UserMapper.xml

@@ -57,13 +57,9 @@
         user.price,
         user.status,
         user.create_time,
-        role.role_name,
         balance.balance
         from
-        h_user user
-        left join h_user_role_permission userRolePermission on user.id = userRolePermission.user_id
-        left join h_role role on userRolePermission.role_id = role.id
-        left join h_user_balance balance on user.id = balance.user_id
+        h_user user left join h_user_balance balance on user.id = balance.user_id
         <where>
             and user.activated = 1
             <if test="query.username != null and query.username != ''">