feat:电商代销协议管理

main
tianhao 2026-06-01 09:27:58 +08:00
parent 3c5d499867
commit 51dc7961da
15 changed files with 1020 additions and 2 deletions

View File

@ -0,0 +1,108 @@
package com.czcb.scfs.api.service.handle.model;
import com.czcb.scfs.api.core.ApiRequest;
import com.czcb.scfs.api.core.agrs.TransType;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
* 230911-线
*
* @author H.T
* @since 2026-05-06
*/
@Data
@Accessors(chain = true)
@ToString(callSuper = true)
@TransType("310407")
public class CoreDepositNotifyRequest implements ApiRequest {
/**
*
*/
@SerializedName("channel_no")
private String channelNo;
/**
*
*/
@SerializedName("app_no")
private String appNo;
/**
*
*/
@SerializedName("serial_no")
private String serialNo;
/**
*
*/
@SerializedName("trans_date")
private String transDate;
/**
*
*/
@SerializedName("trans_tradetime")
private String transTradeTime;
/**
*
*/
@SerializedName("seq_no")
private String seqNo;
/**
*
*/
@SerializedName("account_no")
private String accountNo;
/**
*
*/
@SerializedName("account_name")
private String accountName;
/**
*
*/
@SerializedName("trans_amount")
private BigDecimal transAmount;
/**
* 00 03 06 09
*/
@SerializedName("pay_path")
private String payPath;
/**
*
*/
@SerializedName("opp_account_no")
private String oppAccountNo;
/**
*
*/
@SerializedName("opp_account_name")
private String oppAccountName;
/**
*
*/
@SerializedName("opp_bank_no")
private String oppBankNo;
/**
*
*/
@SerializedName("opp_bank_name")
private String oppBankName;
/**
* 1 2
*/
@SerializedName("trans_result")
private String transResult;
/**
*
*/
@SerializedName("failure_msg")
private String failureMsg;
/**
*
*/
@SerializedName("remark")
private String remark;
}

View File

@ -0,0 +1,42 @@
package com.czcb.scfs.api.service.v2.base.model;
import com.czcb.scfs.api.core.ApiRequest;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.experimental.Accessors;
/**
*
*
* @author H.T
* @since 2026-05-28
*/
@Data
@Accessors(chain = true)
public class BaseRequest implements ApiRequest {
/**
*
*/
@SerializedName("channel_no")
private String channelNo;
/**
*
*/
@SerializedName("app_no")
private String appNo;
/**
*
*/
@SerializedName("serial_no")
private String serialNo;
/**
*
*/
@SerializedName("trans_date")
private String transDate;
/**
*
*/
@SerializedName("trans_tradetime")
private String transTradeTime;
}

View File

@ -0,0 +1,42 @@
package com.czcb.scfs.api.service.v2.base.model;
import com.czcb.scfs.api.core.ApiResponse;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.experimental.Accessors;
/**
*
*
* @author H.T
* @since 2026-05-28
*/
@Data
@Accessors(chain = true)
public class BaseResponse implements ApiResponse {
/**
* 000000
*/
@SerializedName("recode")
private String recode;
/**
*
*/
@SerializedName("recode_info")
private String recodeInfo;
/**
*
*/
@SerializedName("sys_serial_no")
private String sysSerialNo;
/**
* YYYY-MM-DD
*/
@SerializedName("sys_date")
private String sysDate;
/**
* YYYY-MM-DD hh:mm:ss
*/
@SerializedName("sys_time")
private String sysTime;
}

View File

@ -0,0 +1,82 @@
package com.czcb.scfs.api.service.v2.contract;
import com.czcb.scfs.api.core.ApiClient;
import com.czcb.scfs.api.core.http.HttpHeaders;
import com.czcb.scfs.api.core.http.HttpResponse;
import com.czcb.scfs.api.service.v2.base.model.BaseResponse;
import com.czcb.scfs.api.service.v2.contract.model.*;
import static com.czcb.scfs.api.core.Constants.API_VERSION;
import static com.czcb.scfs.api.core.Constants.V_2;
/**
*
*
* @author H.T
* @date 20260528
*/
public class MchConsignContractService {
private final ApiClient apiClient;
public MchConsignContractService(ApiClient apiClient) {
this.apiClient = apiClient;
}
/**
* 310807-
*
* @author H.T
* @since 2026/5/28
*/
public BaseResponse add(MchConsignContractAddRequest request) {
String url = "/t-mch-consign-contract/add";
HttpHeaders headers = new HttpHeaders();
headers.addHeader(API_VERSION, V_2);
HttpResponse<BaseResponse> httpResponse = apiClient.post(url, headers, request.toJsonRequest(), BaseResponse.class);
return httpResponse.getServiceResponse();
}
/**
* 310808-
*
* @author H.T
* @since 2026/5/28
*/
public BaseResponse del(MchConsignContractDelRequest request) {
String url = "/t-mch-consign-contract/del";
HttpHeaders headers = new HttpHeaders();
headers.addHeader(API_VERSION, V_2);
HttpResponse<BaseResponse> httpResponse = apiClient.post(url, headers, request.toJsonRequest(), BaseResponse.class);
return httpResponse.getServiceResponse();
}
/**
* 310809-
*
* @author H.T
* @since 2026/5/28
*/
public MchConsignContractQueryPageResponse queryPage(MchConsignContractQueryPageRequest request) {
String url = "/t-mch-consign-contract/query-page";
HttpHeaders headers = new HttpHeaders();
headers.addHeader(API_VERSION, V_2);
HttpResponse<MchConsignContractQueryPageResponse> httpResponse = apiClient.post(url, headers, request.toJsonRequest(), MchConsignContractQueryPageResponse.class);
return httpResponse.getServiceResponse();
}
/**
* 310807-
*
* @author H.T
* @since 2026/5/28
*/
public MchConsignContractQueryDetailResponse queryDetail(MchConsignContractQueryDetailRequest request) {
String url = "/t-mch-consign-contract/query-detail";
HttpHeaders headers = new HttpHeaders();
headers.addHeader(API_VERSION, V_2);
HttpResponse<MchConsignContractQueryDetailResponse> httpResponse = apiClient.post(url, headers, request.toJsonRequest(), MchConsignContractQueryDetailResponse.class);
return httpResponse.getServiceResponse();
}
}

View File

@ -0,0 +1,137 @@
package com.czcb.scfs.api.service.v2.contract.model;
import com.czcb.scfs.api.core.agrs.TransType;
import com.czcb.scfs.api.service.v2.base.model.BaseRequest;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
* 310807-
*
* @author H.T
* @since 2026-05-28
*/
@Data
@Accessors(chain = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@TransType("310807")
public class MchConsignContractAddRequest extends BaseRequest implements Serializable {
/**
*
*/
@SerializedName("mch_no")
private String mchNo;
/**
*
*/
@SerializedName("contract_no")
private String contractNo;
/**
*
*/
@SerializedName("text_contract_no")
private String textContractNo;
/**
*
*/
@SerializedName("consign_account_no")
private String consignAccountNo;
/**
*
*/
@SerializedName("consign_account_name")
private String consignAccountName;
/**
*
*/
@SerializedName("entrust_account_no")
private String entrustAccountNo;
/**
*
*/
@SerializedName("entrust_account_name")
private String entrustAccountName;
/**
* yyyy-MM-dd
*/
@SerializedName("contract_date_start")
private String contractDateStart;
/**
* yyyy-MM-dd
*/
@SerializedName("contract_date_end")
private String contractDateEnd;
/**
* 0
*/
@SerializedName("consign_year_limit")
private BigDecimal consignYearLimit;
/**
*
*/
@SerializedName("remark")
private String remark;
/**
*
*/
@SerializedName("detail_list")
private List<ContractDetail> detailList;
@Data
public static class ContractDetail implements Serializable {
/**
* 11-12-13-
*/
@SerializedName("contract_type")
private String contractType;
/**
*
*/
@SerializedName("opp_account_no")
private String oppAccountNo;
/**
*
*/
@SerializedName("opp_account_name")
private String oppAccountName;
/**
*
*/
@SerializedName("fee_no")
private String feeNo;
/**
*
*/
@SerializedName("fee_name")
private String feeName;
/**
*
*/
@SerializedName("fee_remark")
private String feeRemark;
}
}

View File

@ -0,0 +1,30 @@
package com.czcb.scfs.api.service.v2.contract.model;
import com.czcb.scfs.api.core.agrs.TransType;
import com.czcb.scfs.api.service.v2.base.model.BaseRequest;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 310808-
*
* @author H.T
* @since 2026-05-28
*/
@Data
@Accessors(chain = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@TransType("310808")
public class MchConsignContractDelRequest extends BaseRequest implements Serializable {
/**
*
*/
@SerializedName("contract_no")
private String contractNo;
}

View File

@ -0,0 +1,30 @@
package com.czcb.scfs.api.service.v2.contract.model;
import com.czcb.scfs.api.core.agrs.TransType;
import com.czcb.scfs.api.service.v2.base.model.BaseRequest;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 310810-
*
* @author H.T
* @since 2026-05-28
*/
@Data
@Accessors(chain = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@TransType("310810")
public class MchConsignContractQueryDetailRequest extends BaseRequest implements Serializable {
/**
*
*/
@SerializedName("contract_no")
private String contractNo;
}

View File

@ -0,0 +1,178 @@
package com.czcb.scfs.api.service.v2.contract.model;
import com.czcb.scfs.api.service.v2.base.model.BaseResponse;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
* 310810-
*
* @author H.T
* @since 2026-05-28
*/
@Data
@Accessors(chain = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class MchConsignContractQueryDetailResponse extends BaseResponse implements Serializable {
/**
*
*/
@SerializedName("req_serial_no")
private String reqSerialNo;
/**
*
*/
@SerializedName("con_sys_serial_no")
private String conSysSerialNo;
/**
*
*/
@SerializedName("mch_no")
private String mchNo;
/**
*
*/
@SerializedName("contract_no")
private String contractNo;
/**
* 0-1-
*/
@SerializedName("contract_status")
private String contractStatus;
/**
* yyyy-MM-dd
*/
@SerializedName("contract_date_start")
private String contractDateStart;
/**
* yyyy-MM-dd
*/
@SerializedName("contract_date_end")
private String contractDateEnd;
/**
*
*/
@SerializedName("text_contract_no")
private String textContractNo;
/**
*
*/
@SerializedName("consign_account_no")
private String consignAccountNo;
/**
*
*/
@SerializedName("consign_account_name")
private String consignAccountName;
/**
*
*/
@SerializedName("entrust_account_no")
private String entrustAccountNo;
/**
*
*/
@SerializedName("entrust_account_name")
private String entrustAccountName;
/**
* 0
*/
@SerializedName("consign_year_limit")
private BigDecimal consignYearLimit;
/**
*
*/
@SerializedName("remark")
private String remark;
/**
* yyyy-MM-dd hh:mm:ss
*/
@SerializedName("create_time")
private String createTime;
/**
* yyyy-MM-dd hh:mm:ss
*/
@SerializedName("update_time")
private String updateTime;
/**
*
*/
@SerializedName("data")
private List<ContractDetailData> data;
@Data
public static class ContractDetailData implements Serializable {
/**
* 11-12-13-
*/
@SerializedName("contract_type")
private String contractType;
/**
*
*/
@SerializedName("opp_account_no")
private String oppAccountNo;
/**
*
*/
@SerializedName("opp_account_name")
private String oppAccountName;
/**
*
*/
@SerializedName("fee_no")
private String feeNo;
/**
*
*/
@SerializedName("fee_name")
private String feeName;
/**
*
*/
@SerializedName("fee_remark")
private String feeRemark;
/**
* yyyy-MM-dd hh:mm:ss
*/
@SerializedName("create_time")
private String createTime;
/**
* yyyy-MM-dd hh:mm:ss
*/
@SerializedName("update_time")
private String updateTime;
}
}

View File

@ -0,0 +1,77 @@
package com.czcb.scfs.api.service.v2.contract.model;
import com.czcb.scfs.api.core.PageApiRequest;
import com.czcb.scfs.api.core.agrs.TransType;
import com.czcb.scfs.api.service.v2.base.model.BaseRequest;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
/**
* 310809-
*
* @author H.T
* @since 2026-05-28
*/
@Data
@Accessors(chain = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@TransType("310809")
public class MchConsignContractQueryPageRequest extends BaseRequest implements PageApiRequest {
/**
*
*/
@SerializedName("mch_no")
private String mchNo;
/**
*
*/
@SerializedName("contract_no")
private String contractNo;
/**
*
*/
@SerializedName("text_contract_no")
private String textContractNo;
/**
*
*/
@SerializedName("consign_account_no")
private String consignAccountNo;
/**
*
*/
@SerializedName("consign_account_name")
private String consignAccountName;
/**
*
*/
@SerializedName("entrust_account_no")
private String entrustAccountNo;
/**
*
*/
@SerializedName("entrust_account_name")
private String entrustAccountName;
/**
* 0
*/
@SerializedName("current_page")
private Long currentPage;
/**
* 5050
*/
@SerializedName("current_rows")
private Long currentRows;
}

View File

@ -0,0 +1,148 @@
package com.czcb.scfs.api.service.v2.contract.model;
import com.czcb.scfs.api.core.PageApiResponse;
import com.czcb.scfs.api.service.v2.base.model.BaseResponse;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
* 310809-
*
* @author H.T
* @since 2026-05-28
*/
@Data
@Accessors(chain = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class MchConsignContractQueryPageResponse extends BaseResponse implements PageApiResponse {
/**
*
*/
@SerializedName("current_page")
private Long currentPage;
/**
*
*/
@SerializedName("total_page")
private Long totalPage;
/**
*
*/
@SerializedName("total_rows")
private Long totalRows;
/**
*
*/
@SerializedName("data")
private List<ContractData> data;
@Data
public static class ContractData implements Serializable {
/**
*
*/
@SerializedName("req_serial_no")
private String reqSerialNo;
/**
*
*/
@SerializedName("data_sys_serial_no")
private String dataSysSerialNo;
/**
*
*/
@SerializedName("mch_no")
private String mchNo;
/**
*
*/
@SerializedName("contract_no")
private String contractNo;
/**
* 0-1-
*/
@SerializedName("contract_status")
private String contractStatus;
/**
* yyyy-MM-dd
*/
@SerializedName("contract_date_start")
private String contractDateStart;
/**
* yyyy-MM-dd
*/
@SerializedName("contract_date_end")
private String contractDateEnd;
/**
*
*/
@SerializedName("text_contract_no")
private String textContractNo;
/**
*
*/
@SerializedName("consign_account_no")
private String consignAccountNo;
/**
*
*/
@SerializedName("consign_account_name")
private String consignAccountName;
/**
*
*/
@SerializedName("entrust_account_no")
private String entrustAccountNo;
/**
*
*/
@SerializedName("entrust_account_name")
private String entrustAccountName;
/**
* 0
*/
@SerializedName("consign_year_limit")
private BigDecimal consignYearLimit;
/**
*
*/
@SerializedName("remark")
private String remark;
/**
* yyyy-MM-dd hh:mm:ss
*/
@SerializedName("create_time")
private String createTime;
/**
* yyyy-MM-dd hh:mm:ss
*/
@SerializedName("update_time")
private String updateTime;
}
}

View File

@ -79,4 +79,14 @@ public class SummaryOrderQueryPageRequest implements PageApiRequest {
*/ */
@SerializedName("order_date_end") @SerializedName("order_date_end")
private String orderDateEnd; private String orderDateEnd;
/**
*
*/
@SerializedName("current_page")
private Long currentPage;
/**
*
*/
@SerializedName("current_rows")
private Long currentRows;
} }

View File

@ -27,6 +27,22 @@ public class SummaryOrderQueryPageResponse implements PageApiResponse {
@SerializedName("data") @SerializedName("data")
private List<OrderLiveInfoData> data; private List<OrderLiveInfoData> data;
/**
*
*/
@SerializedName("current_page")
private Long currentPage;
/**
*
*/
@SerializedName("total_page")
private Long totalPage;
/**
*
*/
@SerializedName("total_rows")
private Long totalRows;
@Data @Data
public static class OrderLiveInfoData implements Serializable { public static class OrderLiveInfoData implements Serializable {
/** /**

View File

@ -12,6 +12,7 @@ import com.czcb.scfs.api.service.v2.bmd.BmdService;
import com.czcb.scfs.api.service.v2.cat.order.OrderService; import com.czcb.scfs.api.service.v2.cat.order.OrderService;
import com.czcb.scfs.api.service.v2.cat.project.ProjectService; import com.czcb.scfs.api.service.v2.cat.project.ProjectService;
import com.czcb.scfs.api.service.v2.communal.CommunalDataService; import com.czcb.scfs.api.service.v2.communal.CommunalDataService;
import com.czcb.scfs.api.service.v2.contract.MchConsignContractService;
import com.czcb.scfs.api.service.v2.contract.SettleContractService; import com.czcb.scfs.api.service.v2.contract.SettleContractService;
import com.czcb.scfs.api.service.v2.entpay.EntPayService; import com.czcb.scfs.api.service.v2.entpay.EntPayService;
import com.czcb.scfs.api.service.v2.loan.CreditPayService; import com.czcb.scfs.api.service.v2.loan.CreditPayService;
@ -359,4 +360,14 @@ public class ScfsAutoConfiguration {
public NotifyHandler notifyHandler(ApiClient apiClient) { public NotifyHandler notifyHandler(ApiClient apiClient) {
return new NotifyHandler(apiClient); return new NotifyHandler(apiClient);
} }
/**
*
*/
@Bean
@ConditionalOnMissingBean
@ConditionalOnClass(MchConsignContractService.class)
public MchConsignContractService mhConsignContractService(ApiClient apiClient) {
return new MchConsignContractService(apiClient);
}
} }

View File

@ -3,8 +3,10 @@ scfs.api-gateway.online=false
#scfs.api-gateway.host=http://124.160.111.105:29080/api-gateway #scfs.api-gateway.host=http://124.160.111.105:29080/api-gateway
# \u5185\u7F51\u5730\u5740 # \u5185\u7F51\u5730\u5740
#scfs.api-gateway.host=http://10.133.91.109:9080/api-gateway-kylin #scfs.api-gateway.host=http://10.133.91.109:9080/api-gateway-kylin
scfs.api-gateway.host=http://127.0.0.1:8088/api-gateway #scfs.api-gateway.host=http://10.133.91.109:9080/api-gateway-uat
scfs.api-gateway.channel.channel-no=1021 scfs.api-gateway.host=http://117.72.32.166:8099/api-gateway-uat
#scfs.api-gateway.host=http://127.0.0.1:8088/api-gateway
scfs.api-gateway.channel.channel-no=1038
scfs.api-gateway.channel.app-no=42 scfs.api-gateway.channel.app-no=42
scfs.api-gateway.cipher.store-type=resources scfs.api-gateway.cipher.store-type=resources
#scfs.api-gateway.cipher.channel-private-key=invalid_rsa_private_key.pem #scfs.api-gateway.cipher.channel-private-key=invalid_rsa_private_key.pem

View File

@ -0,0 +1,105 @@
package com.czcb.scfs.api.test.service;
import com.czcb.scfs.api.service.v2.contract.MchConsignContractService;
import com.czcb.scfs.api.service.v2.contract.model.MchConsignContractAddRequest;
import com.czcb.scfs.api.service.v2.contract.model.MchConsignContractDelRequest;
import com.czcb.scfs.api.service.v2.contract.model.MchConsignContractQueryDetailRequest;
import com.czcb.scfs.api.service.v2.contract.model.MchConsignContractQueryPageRequest;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* Test
*
* @author H.T
* @since 2026-03-24
*/
@SpringBootTest
class MchConsignContractServiceTest {
@Resource
private MchConsignContractService contractService;
@Test
void add() {
MchConsignContractAddRequest request = new MchConsignContractAddRequest();
request.setMchNo("TEST-004");
request.setContractNo("th202605140429"); // 协议编号
request.setConsignAccountNo("1038250711000013");
request.setConsignAccountName("日林建设集团有限公司");
request.setEntrustAccountNo("1038250714010020");
request.setEntrustAccountName("中铁电气工业有限公司");
request.setContractDateStart("2026-05-15");
request.setContractDateEnd("2026-05-15");
List<MchConsignContractAddRequest.ContractDetail> detailList = new ArrayList<>();
MchConsignContractAddRequest.ContractDetail detailItem = new MchConsignContractAddRequest.ContractDetail();
detailItem.setContractType("11");
detailItem.setFeeNo("0023");
detailItem.setFeeName("直播电商测试还款80%");
detailItem.setOppAccountNo("1038250711000017");
detailItem.setOppAccountName("王晓芹");
detailList.add(detailItem);
request.setDetailList(detailList);
request.setChannelNo("1038");
request.setAppNo("10");
request.setSerialNo(UUID.randomUUID().toString().replace("-", ""));
request.setTransDate("2024-03-20");
request.setTransTradeTime("2024-01-02 09:11:53");
System.out.println(contractService.add(request));
}
@Test
void del() {
MchConsignContractDelRequest request = new MchConsignContractDelRequest();
request.setChannelNo("1038");
request.setAppNo("12");
request.setSerialNo("1111112323");
request.setTransDate("2024-07-24");
request.setTransTradeTime("2024-07-24 13:55:29");
request.setContractNo("th202605140428"); // 注意如果要用图3的报文这里改为 "th202605140427"
System.out.println(contractService.del(request));
}
@Test
void queryDetail() {
MchConsignContractQueryDetailRequest request = new MchConsignContractQueryDetailRequest();
request.setChannelNo("1038");
request.setAppNo("12");
request.setSerialNo("1111112323");
request.setTransDate("2024-07-24");
request.setTransTradeTime("2024-07-24 13:55:29");
request.setContractNo("th202605140428");
System.out.println(contractService.queryDetail(request));
}
@Test
void queryPage() {
MchConsignContractQueryPageRequest request = new MchConsignContractQueryPageRequest();
request.setChannelNo("1038");
request.setAppNo("12");
request.setSerialNo("1111112323");
request.setTransDate("2024-07-24");
request.setTransTradeTime("2024-07-24 13:55:29");
request.setMchNo("TEST-004");
request.setContractNo("th202605140428");
request.setConsignAccountNo("1038250711000013");
request.setCurrentPage(0L); // 默认从0开始
request.setCurrentRows(50L); // 默认每页50条
System.out.println(contractService.queryPage(request));
}
}