Selaa lähdekoodia

新增接口:根据交易id查询订单流水号

gao 13 tuntia sitten
vanhempi
commit
4d620921fc

+ 11 - 0
crm-model/src/main/java/com/crm/rely/backend/model/dto/settlement/vaultody/VaultodyOrderSerialDto.java

@@ -0,0 +1,11 @@
+package com.crm.rely.backend.model.dto.settlement.vaultody;
+
+import lombok.Data;
+
+@Data
+public class VaultodyOrderSerialDto {
+
+    private String transactionId;
+
+    private String serial;
+}

+ 25 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/settlement/vaultody/VaultodyOrderSerialQueryEntity.java

@@ -0,0 +1,25 @@
+package com.crm.rely.backend.model.entity.settlement.vaultody;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class VaultodyOrderSerialQueryEntity {
+
+    @NotNull
+    @NotBlank
+    private String merchantId;
+
+    private List<String> transactionIds;
+
+    @NotBlank
+    @NotNull
+    private Long requestTime;
+
+    @NotNull
+    private String sign;
+
+}

+ 13 - 0
crm-settlement/src/main/java/com/crm/settlement/controller/VaultodyController.java

@@ -1,6 +1,7 @@
 package com.crm.settlement.controller;
 
 import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.rely.backend.model.entity.settlement.vaultody.VaultodyOrderSerialQueryEntity;
 import com.crm.settlement.service.VaultodyService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -30,4 +31,16 @@ public class VaultodyController {
         }
     }
 
+    /**
+     * 根据交易id查询订单流水号
+     */
+    @PostMapping("/get/order/serial")
+    public BaseResultDto getOrderSerialByTransactionIds(@RequestBody VaultodyOrderSerialQueryEntity entity) throws Exception {
+        try {
+            return vaultodyService.getOrderSerialByTransactionIds(entity);
+        } catch (Exception e) {
+            return BaseResultDto.error("system error");
+        }
+    }
+
 }

+ 4 - 0
crm-settlement/src/main/java/com/crm/settlement/dao/mapper/SettlementDepositRecordMapper.java

@@ -1,7 +1,9 @@
 package com.crm.settlement.dao.mapper;
 
 import com.crm.rely.backend.model.entity.settlement.SettlementDepositListSearchEntity;
+import com.crm.rely.backend.model.dto.settlement.vaultody.VaultodyOrderSerialDto;
 import com.crm.rely.backend.model.pojo.table.SettlementDepositRecordTable;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -19,4 +21,6 @@ public interface SettlementDepositRecordMapper {
      */
     List<SettlementDepositRecordTable> getAllCallback();
 
+    List<VaultodyOrderSerialDto> getOrderSerialByTransactionIds(@Param("transactionIds") List<String> transactionIds);
+
 }

+ 2 - 0
crm-settlement/src/main/java/com/crm/settlement/service/VaultodyService.java

@@ -2,6 +2,7 @@ package com.crm.settlement.service;
 
 import com.crm.rely.backend.core.dto.base.BaseResultDto;
 import com.crm.rely.backend.model.entity.settlement.vaultody.VaultodyDepositRequestEntity;
+import com.crm.rely.backend.model.entity.settlement.vaultody.VaultodyOrderSerialQueryEntity;
 import com.crm.rely.backend.model.entity.settlement.vaultody.VaultodyWithdrawRequestEntity;
 
 public interface VaultodyService {
@@ -14,5 +15,6 @@ public interface VaultodyService {
 
     BaseResultDto withdrawCallback(String content, String signature) throws Exception;
 
+    BaseResultDto getOrderSerialByTransactionIds(VaultodyOrderSerialQueryEntity entity) throws Exception;
 
 }

+ 59 - 0
crm-settlement/src/main/java/com/crm/settlement/service/impl/VaultodyServiceImpl.java

@@ -17,14 +17,17 @@ import com.crm.rely.backend.util.HttpUtil;
 import com.crm.rely.backend.util.MapUtil;
 import com.crm.rely.backend.model.constant.ConfigConstants;
 import com.crm.rely.backend.model.constant.SettlementConstant;
+import com.crm.rely.backend.model.dto.settlement.vaultody.VaultodyOrderSerialDto;
 import com.crm.rely.backend.model.dto.vaultody.TxResult;
 import com.crm.rely.backend.model.entity.property.vaultody.VaultodyPayPropertyEntity;
 import com.crm.rely.backend.model.entity.property.vaultody.VaultodyPayWithdrawAddressPropertyEntity;
 import com.crm.rely.backend.model.entity.property.vaultody.VaultodyPayWithdrawPropertyEntity;
 import com.crm.rely.backend.model.entity.settlement.vaultody.VaultodyDepositRequestEntity;
+import com.crm.rely.backend.model.entity.settlement.vaultody.VaultodyOrderSerialQueryEntity;
 import com.crm.rely.backend.model.entity.settlement.vaultody.VaultodyWithdrawRequestEntity;
 import com.crm.rely.backend.model.util.EncryptionHashQueryUtil;
 import com.crm.settlement.dao.mapper.FinanceDepositAddressMapper;
+import com.crm.settlement.dao.mapper.SettlementDepositRecordMapper;
 import com.crm.settlement.dao.repository.FinanceDepositAddressRepository;
 import com.crm.settlement.dao.repository.SettlementDepositRecordRepository;
 import com.crm.settlement.dao.repository.SettlementWithdrawRecordRepository;
@@ -67,6 +70,8 @@ public class VaultodyServiceImpl extends BaseSettlementServiceImpl implements Va
     @Autowired
     private SettlementWithdrawRecordRepository settlementWithdrawRecordRepository;
     @Autowired
+    private SettlementDepositRecordMapper settlementDepositRecordMapper;
+    @Autowired
     private MqSendService mqSendService;
 
     @Override
@@ -320,6 +325,60 @@ public class VaultodyServiceImpl extends BaseSettlementServiceImpl implements Va
         return BaseResultDto.success();
     }
 
+    @Override
+    public BaseResultDto getOrderSerialByTransactionIds(VaultodyOrderSerialQueryEntity entity) throws Exception {
+        if (entity == null || StringUtils.isBlank(entity.getMerchantId())
+                || entity.getRequestTime() == null || StringUtils.isBlank(entity.getSign())) {
+            return BaseResultDto.error("params error");
+        }
+
+        long serverTimestamp = System.currentTimeMillis();
+        long timeDiff = Math.abs(serverTimestamp - entity.getRequestTime());
+        if (timeDiff > 60000) {
+            log.error("getOrderSerialByTransactionIds time out:{},serverTime:{},requestTime:{},diff:{}",
+                    JSON.toJSONString(entity), serverTimestamp, entity.getRequestTime(), timeDiff);
+            return BaseResultDto.error("Time out");
+        }
+        if (CollectionUtils.isEmpty(entity.getTransactionIds())) {
+            return BaseResultDto.error("transaction serials is empty");
+        }
+        verifySign(entity.getSign(), getOrderSerialSignString(entity), entity.getMerchantId());
+        List<VaultodyOrderSerialDto> dtos = settlementDepositRecordMapper.getOrderSerialByTransactionIds(
+                entity.getTransactionIds());
+        Map<String, String> data = new TreeMap<>();
+        if (!CollectionUtils.isEmpty(dtos)) {
+            for (VaultodyOrderSerialDto dto : dtos) {
+                data.put(dto.getTransactionId(), dto.getSerial());
+            }
+        }
+        return BaseResultDto.success(getOrderSerialResponseMap(entity.getMerchantId(), data));
+    }
+
+    private Map<String, Object> getOrderSerialResponseMap(String merchantId, Map<String, String> data) throws ServiceException {
+        Long requestTime = System.currentTimeMillis();
+        Map<String, Object> responseMap = new LinkedHashMap<>();
+        responseMap.put("data", data);
+        responseMap.put("requestTime", requestTime);
+        responseMap.put("sign", getSign(getOrderSerialResponseSignMap(merchantId, requestTime, data), merchantId));
+        return responseMap;
+    }
+
+    private Map<String, String> getOrderSerialResponseSignMap(String merchantId, Long requestTime, Map<String, String> data) {
+        Map<String, String> map = new HashMap<>();
+        map.put("merchantId", merchantId);
+        map.put("requestTime", String.valueOf(requestTime));
+        map.put("data", data == null ? "" :JSON.toJSONString(data));
+        return map;
+    }
+
+    private String getOrderSerialSignString(VaultodyOrderSerialQueryEntity entity) {
+        Map<String, String> map = new HashMap<>();
+        map.put("merchantId", entity.getMerchantId());
+        map.put("requestTime", String.valueOf(entity.getRequestTime()));
+        map.put("transactionIds", StringUtils.join(entity.getTransactionIds(), ","));
+        return MapUtil.getStringSortByKey(map);
+    }
+
 
     /**
      * 分配地址

+ 1 - 1
crm-settlement/src/main/resources/application-dev.yml

@@ -1,7 +1,7 @@
 spring:
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://103.214.175.29:28571/cwg_settlement?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false
+    url: jdbc:mysql://103.158.191.66:28571/cwg_settlement?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false
     username: root
     password: NSH01Y0GTmUNjgg6xw80qg==
   jpa:

+ 18 - 1
crm-settlement/src/main/resources/mapper/SettlementDepositRecordMapper.xml

@@ -80,4 +80,21 @@
           AND callback_merchant_time IS NOT NULL
           AND callback_merchant_time <![CDATA[ < ]]> DATE_SUB(NOW(), INTERVAL 1 DAY)
     </select>
-</mapper>
+
+    <select id="getOrderSerialByTransactionIds"
+            resultType="com.crm.rely.backend.model.dto.settlement.vaultody.VaultodyOrderSerialDto">
+        SELECT callback_serial AS transactionId, serial
+        FROM settlement_deposit_record
+        WHERE callback_serial IN
+        <foreach collection="transactionIds" item="transactionId" open="(" separator="," close=")">
+            #{transactionId}
+        </foreach>
+        UNION ALL
+        SELECT callback_serial AS transactionId, serial
+        FROM settlement_withdraw_record
+        WHERE callback_serial IN
+        <foreach collection="transactionIds" item="transactionId" open="(" separator="," close=")">
+            #{transactionId}
+        </foreach>
+    </select>
+</mapper>