diff --git a/pom.xml b/pom.xml index bbce3e9..69c03ab 100644 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,11 @@ scfs-api-service-cat 2.0.4-snapshot + + com.czcb.scfs + scfs-api-service-equity + 2.0.4-snapshot + com.czcb.scfs scfs-api-sm diff --git a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/validation/NotBlank.java b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/validation/NotBlank.java new file mode 100644 index 0000000..5a91857 --- /dev/null +++ b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/validation/NotBlank.java @@ -0,0 +1,22 @@ +package com.czcb.scfs.api.core.validation; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * CharSequence + * + * @author wangwei + * @since 2024/7/9 + */ +@Documented +@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE}) +@Retention(RUNTIME) +public @interface NotBlank { + + String message() default "字段值不能为空"; +} diff --git a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/validation/NotEmpty.java b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/validation/NotEmpty.java new file mode 100644 index 0000000..c6c0500 --- /dev/null +++ b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/validation/NotEmpty.java @@ -0,0 +1,22 @@ +package com.czcb.scfs.api.core.validation; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * CharSequence、Collection、Map、Array + * + * @author wangwei + * @since 2024/7/9 + */ +@Documented +@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE}) +@Retention(RUNTIME) +public @interface NotEmpty { + + String message() default "字段值不能为空"; +} \ No newline at end of file diff --git a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/validation/NotNull.java b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/validation/NotNull.java new file mode 100644 index 0000000..2159f63 --- /dev/null +++ b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/validation/NotNull.java @@ -0,0 +1,20 @@ +package com.czcb.scfs.api.core.validation; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * @author wangwei + * @since 2024/7/9 + */ +@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE}) +@Retention(RUNTIME) +@Documented +public @interface NotNull { + + String message() default "字段值不能为NULL"; +} diff --git a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/validation/Size.java b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/validation/Size.java new file mode 100644 index 0000000..5b6e7c8 --- /dev/null +++ b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/validation/Size.java @@ -0,0 +1,24 @@ +package com.czcb.scfs.api.core.validation; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * @author wangwei + * @since 2024/7/9 + */ +@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE}) +@Retention(RUNTIME) +@Documented +public @interface Size { + String message() default ""; + + int min() default 0; + + int max() default 100; +} + diff --git a/scfs-api-service-equity/src/main/java/com/czcb/scfs/service/equity/configuration/ScfsApiServiceEquityAutoConfiguration.java b/scfs-api-service-equity/src/main/java/com/czcb/scfs/service/equity/configuration/ScfsApiServiceEquityAutoConfiguration.java index ad85eac..77109be 100644 --- a/scfs-api-service-equity/src/main/java/com/czcb/scfs/service/equity/configuration/ScfsApiServiceEquityAutoConfiguration.java +++ b/scfs-api-service-equity/src/main/java/com/czcb/scfs/service/equity/configuration/ScfsApiServiceEquityAutoConfiguration.java @@ -1,5 +1,9 @@ package com.czcb.scfs.service.equity.configuration; +import com.czcb.scfs.api.core.ApiClient; +import com.czcb.scfs.service.equity.invoice.InvoiceService; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -10,4 +14,10 @@ import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan("com.czcb.scfs.service.equity") public class ScfsApiServiceEquityAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public InvoiceService invoiceService(ApiClient apiClient) { + return new InvoiceService(apiClient); + } } diff --git a/scfs-api-service-equity/src/main/java/com/czcb/scfs/service/equity/invoice/InvoiceService.java b/scfs-api-service-equity/src/main/java/com/czcb/scfs/service/equity/invoice/InvoiceService.java index c1bad2f..08d2fda 100644 --- a/scfs-api-service-equity/src/main/java/com/czcb/scfs/service/equity/invoice/InvoiceService.java +++ b/scfs-api-service-equity/src/main/java/com/czcb/scfs/service/equity/invoice/InvoiceService.java @@ -3,10 +3,7 @@ package com.czcb.scfs.service.equity.invoice; 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.service.equity.invoice.model.InvoiceAddRequest; -import com.czcb.scfs.service.equity.invoice.model.InvoiceAddResponse; -import com.czcb.scfs.service.equity.invoice.model.InvoiceQueryRequest; -import com.czcb.scfs.service.equity.invoice.model.InvoiceQueryResponse; +import com.czcb.scfs.service.equity.invoice.model.*; import static com.czcb.scfs.api.core.Constants.API_VERSION; import static com.czcb.scfs.api.core.Constants.V_2; @@ -36,11 +33,11 @@ public class InvoiceService { /** * 删除发票 */ - public InvoiceAddResponse delete(InvoiceAddRequest request) { - String url = "/invoice/delete"; + public InvoiceDelResponse del(InvoiceDelRequest request) { + String url = "/invoice/del"; HttpHeaders headers = new HttpHeaders(); headers.addHeader(API_VERSION, V_2); - HttpResponse httpResponse = apiClient.post(url, headers, request.toJsonRequest(), InvoiceAddResponse.class); + HttpResponse httpResponse = apiClient.post(url, headers, request.toJsonRequest(), InvoiceDelResponse.class); return httpResponse.getServiceResponse(); } diff --git a/scfs-api-service-equity/src/main/java/com/czcb/scfs/service/equity/invoice/model/InvoiceDelRequest.java b/scfs-api-service-equity/src/main/java/com/czcb/scfs/service/equity/invoice/model/InvoiceDelRequest.java new file mode 100644 index 0000000..64c477b --- /dev/null +++ b/scfs-api-service-equity/src/main/java/com/czcb/scfs/service/equity/invoice/model/InvoiceDelRequest.java @@ -0,0 +1,67 @@ +package com.czcb.scfs.service.equity.invoice.model; + +import com.czcb.scfs.api.core.ApiRequest; +import com.czcb.scfs.api.core.util.DateTimes; +import com.czcb.scfs.api.core.validation.Size; +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Arrays; +import java.util.List; + +/** + * @author wangwei + * @since 2024/7/8 + */ +@Data +@Accessors(chain = true) +public class InvoiceDelRequest 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; + + /** + * 发票编号 + */ + @Size(min = 1, max = 50, message = "数据条数1-50") + @SerializedName("invoice_nos") + private List invoiceNos; + + public static InvoiceDelRequest of(String channelNo, String appNo, String serialNo, String... invoiceNos) { + InvoiceDelRequest request = new InvoiceDelRequest(); + request.setChannelNo(channelNo); + request.setAppNo(appNo); + request.setSerialNo(serialNo); + request.setTransDate(DateTimes.ofNowDate()); + request.setTransTradeTime(DateTimes.ofNow()); + request.setInvoiceNos(Arrays.asList(invoiceNos)); + return request; + } +} diff --git a/scfs-api-service-equity/src/main/java/com/czcb/scfs/service/equity/invoice/model/InvoiceDelResponse.java b/scfs-api-service-equity/src/main/java/com/czcb/scfs/service/equity/invoice/model/InvoiceDelResponse.java new file mode 100644 index 0000000..0d3d290 --- /dev/null +++ b/scfs-api-service-equity/src/main/java/com/czcb/scfs/service/equity/invoice/model/InvoiceDelResponse.java @@ -0,0 +1,43 @@ +package com.czcb.scfs.service.equity.invoice.model; + +import com.czcb.scfs.api.core.PageApiResponse; +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author wangwei + * @since 2024/7/8 + */ +@Data +@Accessors(chain = true) +public class InvoiceDelResponse implements PageApiResponse { + /** + * 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; +} diff --git a/scfs-api-test/pom.xml b/scfs-api-test/pom.xml index e519711..2839775 100644 --- a/scfs-api-test/pom.xml +++ b/scfs-api-test/pom.xml @@ -28,6 +28,11 @@ scfs-api-service-cat + + com.czcb.scfs + scfs-api-service-equity + + org.springframework.boot spring-boot-starter-web diff --git a/scfs-api-test/src/test/java/com/czcb/scfs/api/test/equity/invoice/InvoiceServiceTest.java b/scfs-api-test/src/test/java/com/czcb/scfs/api/test/equity/invoice/InvoiceServiceTest.java new file mode 100644 index 0000000..fcbcad7 --- /dev/null +++ b/scfs-api-test/src/test/java/com/czcb/scfs/api/test/equity/invoice/InvoiceServiceTest.java @@ -0,0 +1,35 @@ +package com.czcb.scfs.api.test.equity.invoice; + +import com.czcb.scfs.api.core.util.DateTimes; +import com.czcb.scfs.api.core.util.Nonce; +import com.czcb.scfs.service.equity.invoice.InvoiceService; +import com.czcb.scfs.service.equity.invoice.model.InvoiceDelRequest; +import com.czcb.scfs.service.equity.invoice.model.InvoiceDelResponse; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.annotation.Resource; +import java.util.Arrays; + +@SpringBootTest +class InvoiceServiceTest { + + @Resource + private InvoiceService invoiceService; + + @Test + void del() { + InvoiceDelRequest request = new InvoiceDelRequest(); + request.setChannelNo("0000"); + request.setAppNo("1000"); + request.setSerialNo(Nonce.ofNonce()); + request.setTransDate(DateTimes.ofNowDate()); + request.setTransTradeTime(DateTimes.ofNow()); +// request.setInvoiceNos(Arrays.asList("2200000909090990")); + + InvoiceDelResponse response = invoiceService.del(request); + if ("000000".equals(response.getRecode())) { + + } + } +} \ No newline at end of file