diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/FranchiseFeeCallBackRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/FranchiseFeeCallBackRequest.java index d6cedea48..edff429c9 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/FranchiseFeeCallBackRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/FranchiseFeeCallBackRequest.java @@ -20,6 +20,8 @@ public class FranchiseFeeCallBackRequest { @NotNull private BigDecimal payableFee; @NotNull + private BigDecimal paidFees; + @NotNull private BigDecimal remainingFee; @NotNull private Integer paymentStatus; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java index 4ddf3d244..fb150b4e1 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java @@ -56,6 +56,7 @@ public class PushFranchiseFeeRequest { this.setFirstYearFee(new BigDecimal(franchiseFeeDO.getFirstYearFee())); this.setDesignFee(new BigDecimal(franchiseFeeDO.getPerformanceBond())); this.setTotalFee(this.getBond() + .add(this.getFranchiseFee()) .add(this.getFirstYearManageFee()) .add(this.getFirstYearFee()) .add(this.getDesignFee())); diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/XgjAccessTokenDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/response/XgjAccessTokenDTO.java new file mode 100644 index 000000000..67d0421d7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/XgjAccessTokenDTO.java @@ -0,0 +1,20 @@ +package com.cool.store.response; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/6/4 19:06 + * @Version 1.0 + */ +@Data +public class XgjAccessTokenDTO { + + private String access_token; + + private String scope; + + private String token_type; + + private Long expires_in; +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/PushService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/PushService.java index 31b80a6a7..342ac8405 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/PushService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/PushService.java @@ -7,6 +7,7 @@ import com.cool.store.request.AuditRequest; import com.cool.store.request.ZxjpApiRequest; import com.cool.store.request.xgj.PushFranchiseFeeRequest; import com.cool.store.request.xgj.ReceiptRequest; +import com.cool.store.response.XgjAccessTokenDTO; import java.util.List; @@ -78,6 +79,12 @@ public interface PushService { List getXgjOrganization(String parentId); + /** + * 获取新管家token + * @return + */ + XgjAccessTokenDTO getXgjAccessToken(); + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java index 548ebc484..3df7ca544 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java @@ -205,7 +205,7 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { } franchiseFeeDO.setXgjCollectionStatus(request.getPaymentStatus()); franchiseFeeDO.setXgjRemainderPayableAmount(request.getRemainingFee()); - franchiseFeeDO.setXgjFeesPaid(request.getPayableFee()); + franchiseFeeDO.setXgjFeesPaid(request.getPaidFees()); franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); if (XGJCollectionStatusEnum.COMPLETED.getCode().equals(request.getPaymentStatus())){ shopStageInfoDAO.updateShopStageInfo(request.getShopId(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_73); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PushServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PushServiceImpl.java index 567b0ee7a..6600ebd5d 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PushServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PushServiceImpl.java @@ -9,6 +9,7 @@ import com.cool.store.exception.ServiceException; import com.cool.store.request.ZxjpApiRequest; import com.cool.store.request.xgj.PushFranchiseFeeRequest; import com.cool.store.request.xgj.ReceiptRequest; +import com.cool.store.response.XgjAccessTokenDTO; import com.cool.store.response.XgjBaseResponse; import com.cool.store.response.XgjOrganizationResponse; import com.cool.store.response.huoma.ShopBaseInfoResponse; @@ -28,12 +29,11 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.nio.charset.StandardCharsets; +import java.util.*; import java.util.stream.Collectors; /** @@ -101,13 +101,13 @@ public class PushServiceImpl implements PushService { @Override public Boolean pushFranchiseFeeToXGJ(PushFranchiseFeeRequest request) { String apiUrl = xgjUrl + "/dmp/dmp-join/open/franchiseeBill"; - return executeApiCall(apiUrl, request, Boolean.class, xgjUsername, xgjSecret); + return executePostApiCall(apiUrl, request, Boolean.class, xgjUsername, xgjSecret,getXgjAccessToken().getAccess_token()); } @Override public Boolean pushReceiptToXGJ(ReceiptRequest request) { String apiUrl = xgjUrl + "/dmp/dmp-join/open/franchiseeReceipts"; - return executeApiCall(apiUrl, request, Boolean.class, xgjUsername, xgjSecret); + return executePostApiCall(apiUrl, request, Boolean.class, xgjUsername, xgjSecret,getXgjAccessToken().getAccess_token()); } @Override @@ -183,13 +183,46 @@ public class PushServiceImpl implements PushService { } + @Override + public XgjAccessTokenDTO getXgjAccessToken() { + String apiUrl = "http://117.139.13.24:29000/oauth2/token?grant_type=client_credentials&scope=server"; + String clientId = "dmp-join"; + String clientSecret = "dmp20250528"; + String auth = clientId + ":" + clientSecret; + String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.UTF_8)); + byte[] bytes = new byte[0]; + Request request = new Request.Builder() + .url(apiUrl) + .post(RequestBody.create(MediaType.parse("application/json; charset=UTF-8"),bytes)) + .header("Authorization", "Basic " + encodedAuth) + .build(); + try (Response response = okHttpClient.newCall(request).execute()) { + if (!response.isSuccessful()) { + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, + "HTTP请求失败,状态码: " + response.code()); + } + String responseBody = response.body().string(); + XgjAccessTokenDTO xgjAccessTokenDTO = objectMapper.readValue(responseBody, XgjAccessTokenDTO.class); + return xgjAccessTokenDTO; + } catch (ServiceException e) { + throw e; + } catch (Exception e) { + log.error("API调用异常 - URL: {}, 错误: {}", url, e.getMessage(), e); + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "接口调用异常: " + e.getMessage()); + } + } - private T executeApiCall(String url, Object requestBody, Class responseType, String username, String secret) { + private T executeApiCall(String url, Object requestBody, Class responseType, String username, String secret){ + return executePostApiCall(url,requestBody,responseType,username,secret,null); + } + + + private T executePostApiCall(String url, Object requestBody, Class responseType, String username, String secret,String accessToken) { // 1. 打印请求前日志 logRequest(url, requestBody); try { - Request request = buildRequest(requestBody, url, username, secret); + Request request = buildRequest(requestBody, url, username, secret,accessToken); request.headers().names().forEach(x->{ log.info(x+": {}",request.header(x)); @@ -276,7 +309,7 @@ public class PushServiceImpl implements PushService { } - private Request buildRequest(Object requestBody, String url, String username, String secret) { + private Request buildRequest(Object requestBody, String url, String username, String secret,String accessToken) { try { Map authHeaders = HmacSigner.generateHeaders( @@ -294,9 +327,13 @@ public class PushServiceImpl implements PushService { .addHeader("Accept", "application/json") .addHeader("x-Date", authHeaders.get("x-Date")) .addHeader("Digest", authHeaders.get("Digest")); - if (!url.contains("get-token-byshopcode")){ + if (!url.contains("get-token-byshopcode")&&StringUtils.isEmpty(accessToken)){ builder.addHeader("Authorization", authHeaders.get("Authorization")); } + //新管家特定接口 + if (StringUtils.isNotEmpty(accessToken)){ + builder.addHeader("Authorization", "Bearer "+accessToken); + } return builder.build(); } catch (Exception e) { throw new ServiceException(ErrorCodeEnum.THIRD_API_SIGN_ERROR); diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java index d10dbba64..ba9cbfe23 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java @@ -280,6 +280,12 @@ public class PCTestController { return ResponseResult.success(pushService.getXgjOrganization(partnerId)); } + @GetMapping("/getXgjAccessToken") + @ApiOperation("获取新管家token") + public ResponseResult getXgjAccessToken() { + return ResponseResult.success(pushService.getXgjAccessToken()); + } + @Resource ShopAccountService accountService;