feat:加盟费
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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()));
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user