feat:加盟费

This commit is contained in:
苏竹红
2025-06-05 11:30:28 +08:00
parent 88865224cc
commit 8dad6016ec
7 changed files with 84 additions and 11 deletions

View File

@@ -20,6 +20,8 @@ public class FranchiseFeeCallBackRequest {
@NotNull @NotNull
private BigDecimal payableFee; private BigDecimal payableFee;
@NotNull @NotNull
private BigDecimal paidFees;
@NotNull
private BigDecimal remainingFee; private BigDecimal remainingFee;
@NotNull @NotNull
private Integer paymentStatus; private Integer paymentStatus;

View File

@@ -56,6 +56,7 @@ public class PushFranchiseFeeRequest {
this.setFirstYearFee(new BigDecimal(franchiseFeeDO.getFirstYearFee())); this.setFirstYearFee(new BigDecimal(franchiseFeeDO.getFirstYearFee()));
this.setDesignFee(new BigDecimal(franchiseFeeDO.getPerformanceBond())); this.setDesignFee(new BigDecimal(franchiseFeeDO.getPerformanceBond()));
this.setTotalFee(this.getBond() this.setTotalFee(this.getBond()
.add(this.getFranchiseFee())
.add(this.getFirstYearManageFee()) .add(this.getFirstYearManageFee())
.add(this.getFirstYearFee()) .add(this.getFirstYearFee())
.add(this.getDesignFee())); .add(this.getDesignFee()));

View File

@@ -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;
}

View File

@@ -7,6 +7,7 @@ import com.cool.store.request.AuditRequest;
import com.cool.store.request.ZxjpApiRequest; import com.cool.store.request.ZxjpApiRequest;
import com.cool.store.request.xgj.PushFranchiseFeeRequest; import com.cool.store.request.xgj.PushFranchiseFeeRequest;
import com.cool.store.request.xgj.ReceiptRequest; import com.cool.store.request.xgj.ReceiptRequest;
import com.cool.store.response.XgjAccessTokenDTO;
import java.util.List; import java.util.List;
@@ -78,6 +79,12 @@ public interface PushService {
List<XgjOrganizationDTO> getXgjOrganization(String parentId); List<XgjOrganizationDTO> getXgjOrganization(String parentId);
/**
* 获取新管家token
* @return
*/
XgjAccessTokenDTO getXgjAccessToken();

View File

@@ -205,7 +205,7 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService {
} }
franchiseFeeDO.setXgjCollectionStatus(request.getPaymentStatus()); franchiseFeeDO.setXgjCollectionStatus(request.getPaymentStatus());
franchiseFeeDO.setXgjRemainderPayableAmount(request.getRemainingFee()); franchiseFeeDO.setXgjRemainderPayableAmount(request.getRemainingFee());
franchiseFeeDO.setXgjFeesPaid(request.getPayableFee()); franchiseFeeDO.setXgjFeesPaid(request.getPaidFees());
franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO);
if (XGJCollectionStatusEnum.COMPLETED.getCode().equals(request.getPaymentStatus())){ if (XGJCollectionStatusEnum.COMPLETED.getCode().equals(request.getPaymentStatus())){
shopStageInfoDAO.updateShopStageInfo(request.getShopId(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_73); shopStageInfoDAO.updateShopStageInfo(request.getShopId(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_73);

View File

@@ -9,6 +9,7 @@ import com.cool.store.exception.ServiceException;
import com.cool.store.request.ZxjpApiRequest; import com.cool.store.request.ZxjpApiRequest;
import com.cool.store.request.xgj.PushFranchiseFeeRequest; import com.cool.store.request.xgj.PushFranchiseFeeRequest;
import com.cool.store.request.xgj.ReceiptRequest; import com.cool.store.request.xgj.ReceiptRequest;
import com.cool.store.response.XgjAccessTokenDTO;
import com.cool.store.response.XgjBaseResponse; import com.cool.store.response.XgjBaseResponse;
import com.cool.store.response.XgjOrganizationResponse; import com.cool.store.response.XgjOrganizationResponse;
import com.cool.store.response.huoma.ShopBaseInfoResponse; import com.cool.store.response.huoma.ShopBaseInfoResponse;
@@ -28,12 +29,11 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.ArrayList; import java.nio.charset.StandardCharsets;
import java.util.HashMap; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -101,13 +101,13 @@ public class PushServiceImpl implements PushService {
@Override @Override
public Boolean pushFranchiseFeeToXGJ(PushFranchiseFeeRequest request) { public Boolean pushFranchiseFeeToXGJ(PushFranchiseFeeRequest request) {
String apiUrl = xgjUrl + "/dmp/dmp-join/open/franchiseeBill"; 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 @Override
public Boolean pushReceiptToXGJ(ReceiptRequest request) { public Boolean pushReceiptToXGJ(ReceiptRequest request) {
String apiUrl = xgjUrl + "/dmp/dmp-join/open/franchiseeReceipts"; 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 @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> T executeApiCall(String url, Object requestBody, Class<T> responseType, String username, String secret) { private <T> T executeApiCall(String url, Object requestBody, Class<T> responseType, String username, String secret){
return executePostApiCall(url,requestBody,responseType,username,secret,null);
}
private <T> T executePostApiCall(String url, Object requestBody, Class<T> responseType, String username, String secret,String accessToken) {
// 1. 打印请求前日志 // 1. 打印请求前日志
logRequest(url, requestBody); logRequest(url, requestBody);
try { try {
Request request = buildRequest(requestBody, url, username, secret); Request request = buildRequest(requestBody, url, username, secret,accessToken);
request.headers().names().forEach(x->{ request.headers().names().forEach(x->{
log.info(x+": {}",request.header(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 { try {
Map<String, String> authHeaders = HmacSigner.generateHeaders( Map<String, String> authHeaders = HmacSigner.generateHeaders(
@@ -294,9 +327,13 @@ public class PushServiceImpl implements PushService {
.addHeader("Accept", "application/json") .addHeader("Accept", "application/json")
.addHeader("x-Date", authHeaders.get("x-Date")) .addHeader("x-Date", authHeaders.get("x-Date"))
.addHeader("Digest", authHeaders.get("Digest")); .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")); builder.addHeader("Authorization", authHeaders.get("Authorization"));
} }
//新管家特定接口
if (StringUtils.isNotEmpty(accessToken)){
builder.addHeader("Authorization", "Bearer "+accessToken);
}
return builder.build(); return builder.build();
} catch (Exception e) { } catch (Exception e) {
throw new ServiceException(ErrorCodeEnum.THIRD_API_SIGN_ERROR); throw new ServiceException(ErrorCodeEnum.THIRD_API_SIGN_ERROR);

View File

@@ -280,6 +280,12 @@ public class PCTestController {
return ResponseResult.success(pushService.getXgjOrganization(partnerId)); return ResponseResult.success(pushService.getXgjOrganization(partnerId));
} }
@GetMapping("/getXgjAccessToken")
@ApiOperation("获取新管家token")
public ResponseResult<Object> getXgjAccessToken() {
return ResponseResult.success(pushService.getXgjAccessToken());
}
@Resource @Resource
ShopAccountService accountService; ShopAccountService accountService;