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