Commit 577de999 by ddx

init

parents
.idea/
*.iml
*/target
/target/sonar
/logs/
data/hanlp/**/*.bin
data/hanlp/**/*.dat
data/index/
data/model/
/ai-server/src/test/
init project on 2024-04-17
\ No newline at end of file
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>etax-income-api</artifactId>
<groupId>com.sxc.etaxincome</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>etax-income-common</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>etax-income-common</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.sxc.framework</groupId>
<artifactId>framework-common</artifactId>
</dependency>
<dependency>
<groupId>com.sxc.framework</groupId>
<artifactId>model-token</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>com.github.rholder</groupId>
<artifactId>guava-retrying</artifactId>
</dependency>
<!-- unit test start -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>mockito-core</artifactId>
<groupId>org.mockito</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.17.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<!-- unit test end -->
</dependencies>
</project>
package com.sxc.etaxincome.common.enums;
import lombok.Getter;
@Getter
public enum CountTypeCode {
HOUR("hour", "时"),
DAY("day", "天"),
WEEK("week", "周"),
MONTH("month", "月"),
YEAR("year", "年");
private final String code;
private final String desc;
CountTypeCode(String code, String desc) {
this.code = code;
this.desc = desc;
}
public static CountTypeCode as(String code) {
for (CountTypeCode countTypeCode : CountTypeCode.values()) {
if (countTypeCode.code.equals(code)) {
return countTypeCode;
}
}
return null;
}
}
package com.sxc.etaxincome.common.model.report;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @ProjectName: etax-income-api
* @Package: com.sxc.etaxincome.common.model.report
* @ClassName: IncomeExceptionStatResult
* @Author: ddx
* @Description:
* @Date: 2024-06-20 16:48
* @Version: 1.0
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class IncomeExceptionStatResult {
private String resCode;
private String resMsg;
private Integer resNum;
}
package com.sxc.etaxincome.common.model.report;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class IncomeInvoiceStatResult {
/**
* 用户名
*/
private String userName;
/**
* 统计日期(yyyy-MM-dd)
*/
private String statDate;
/**
* 地区数量
*/
private Integer zoneTotalNum;
/**
* 接口请求成功数量
*/
private Integer successTotalNum;
/**
* 接口请求失败数量
*/
private Integer failTotalNum;
/**
* 税号数量
*/
private Integer taxnoTotalNum;
/**
* 接口请求数量合计
*/
private Integer sumTotalNum;
/**
* 地区最大请求接口数量
*/
private Integer faceMaxNum;
}
package com.sxc.etaxincome.common.util;
import lombok.extern.slf4j.Slf4j;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;
import java.util.Enumeration;
/**
* @author caosongqing
* @date 2022/11/3
* @description
*/
@Slf4j
public class IPUtils {
private IPUtils() {
}
public static String getIP() {
try {
InetAddress inetAddress = getLocalHostExactAddress();
if (inetAddress != null) {
InetAddress addr = InetAddress.getLocalHost();
return addr.getHostAddress();
}
} catch (UnknownHostException e) {
log.error("get ip error:", e);
}
return "";
}
public static InetAddress getLocalHostExactAddress() {
try {
InetAddress candidateAddress = null;
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()) {
NetworkInterface iface = networkInterfaces.nextElement();
// 该网卡接口下的ip会有多个,也需要一个个的遍历,找到自己所需要的
for (Enumeration<InetAddress> inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); ) {
InetAddress inetAddr = inetAddrs.nextElement();
// 排除loopback回环类型地址(不管是IPv4还是IPv6 只要是回环地址都会返回true)
if (inetAddr.isLoopbackAddress()) {
continue;
}
if (inetAddr.isSiteLocalAddress()) {
// 如果是site-local地址,就是它了 就是我们要找的
// ~~~~~~~~~~~~~绝大部分情况下都会在此处返回你的ip地址值~~~~~~~~~~~~~
return inetAddr;
}
// 若不是site-local地址 那就记录下该地址当作候选
if (candidateAddress == null) {
candidateAddress = inetAddr;
}
}
}
// 如果出去loopback回环地之外无其它地址了,那就回退到原始方案吧
return candidateAddress == null ? InetAddress.getLocalHost() : candidateAddress;
} catch (Exception e) {
log.error("获取IP失败", e);
}
return null;
}
}
package com.sxc.etaxincome.common.util;
import ch.qos.logback.core.PropertyDefinerBase;
import cn.hutool.http.HttpUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
/**
* @author caosongqing
* @date 2022/10/31
* @description
*/
@Slf4j
public class LogIpConfig extends PropertyDefinerBase {
private String getIpUrl = "http://ocr.taxservices.cn/opserver/myip.do";
@Override
public String getPropertyValue() {
String ip;
ip = IPUtils.getIP();
if (StringUtils.isBlank(ip) || "127.0.0.1".equals(ip)) {
try {
ip = HttpUtil.get(getIpUrl);
log.info("get ip:{} with url:{}", ip, getIpUrl);
} catch (Exception ex) {
log.error("get ip error:", ex);
}
}
log.info("log with ip: {}", ip);
return ip;
}
}
package com.sxc.etaxincome.common.util;
import com.sxc.framework.common.exception.HttpClientException;
import com.sxc.framework.common.httpclient.HttpHelper;
import com.sxc.framework.common.httpclient.ResponseContent;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.NoHttpResponseException;
import org.apache.http.conn.ConnectTimeoutException;
import java.nio.charset.StandardCharsets;
import java.util.Map;
@Slf4j
public class RetryHttpHelper {
private RetryHttpHelper() {
}
public static final int COLLECTION_REQUEST_TIMEOUT_MILLIS = 5000;
public static final int CONNECTION_TIMEOUT_MILLS = 5000;
public static final int SOCKET_TIMEOUT_MILLIS = 90000;
/**
* retry times
*/
public static final int RETRY_TIMES = 3;
public static final int WAIT_SECONDS = 2;
public static ResponseContent retryPostUrl(String url, Map<String, Object> paramsMap) {
return retryPostUrl(url, paramsMap, CONNECTION_TIMEOUT_MILLS, SOCKET_TIMEOUT_MILLIS);
}
public static ResponseContent retryPostUrl(String url, Map<String, Object> paramsMap, Integer connectTimeoutMilliSeconds, Integer socketTimeoutMilliSeconds) {
RetryUtil<ResponseContent> retryUtil = RetryUtil.<ResponseContent>builder().times(RETRY_TIMES).waitSeconds(WAIT_SECONDS).build();
try {
return retryUtil.retry(() -> postUrl(url, paramsMap, connectTimeoutMilliSeconds, socketTimeoutMilliSeconds));
} catch (Exception e) {
throw new HttpClientException(e.getCause().getMessage());
}
}
private static ResponseContent postUrl(String url, Map<String, Object> paramsMap, Integer connectTimeoutMilliSeconds, Integer socketTimeoutMilliSeconds) {
return postUrl(() -> HttpHelper.postUrl(url, paramsMap, connectTimeoutMilliSeconds, socketTimeoutMilliSeconds));
}
public static ResponseContent retryPostJsonEntity(String url, String jsonBody) {
return retryPostJsonEntity(url, jsonBody, COLLECTION_REQUEST_TIMEOUT_MILLIS, CONNECTION_TIMEOUT_MILLS, SOCKET_TIMEOUT_MILLIS);
}
public static ResponseContent retryPostJsonEntity(String url, String jsonBody, int connectionRequestTimeout, int connectTimeout, int socketTimeout) {
RetryUtil<ResponseContent> retryUtil = RetryUtil.<ResponseContent>builder().times(RETRY_TIMES).waitSeconds(WAIT_SECONDS).build();
try {
return retryUtil.retry(() -> postJsonEntity(url, jsonBody, connectionRequestTimeout, connectTimeout, socketTimeout));
} catch (Exception e) {
throw new HttpClientException(e.getCause().getMessage());
}
}
private static ResponseContent postJsonEntity(String url, String jsonBody, int connectionRequestTimeout, int connectTimeout, int socketTimeout) {
return postUrl(() -> HttpHelper.postJsonEntity(url, jsonBody, connectionRequestTimeout, connectTimeout, socketTimeout));
}
private static ResponseContent postUrl(ExecuteRequestCallback executeRequestCallback) {
try {
return executeRequestCallback.execute();
} catch (HttpClientException e) {
/*
HttpClientException是HttpHelper工具封装的异常
*/
log.error("execute makeout invoice http request error:", e);
/*
NoHttpResponseException 重试
ConnectTimeoutException 连接超时重试
SocketTimeoutException 响应超时不重试,避免造成业务数据不一致
*/
Throwable causeException = e.getCause();
/*
NoHttpResponseException说明
httpclient之前与服务端建立的链接已经失效(例如:tomcat 默认的keep-alive timeout :20s),
再次从连接池拿该失效链接进行请求时,就会报错。
*/
String causeExceptionMessage = causeException.getMessage();
if (causeException instanceof NoHttpResponseException
|| causeException instanceof ConnectTimeoutException) {
log.error("retry exception");
throw new HttpClientException(causeExceptionMessage);
} else {
log.error("cause exception message:{}", causeExceptionMessage);
ResponseContent responseContent = new ResponseContent();
responseContent.setContentBytes(causeExceptionMessage.getBytes(StandardCharsets.UTF_8));
return responseContent;
}
}
}
interface ExecuteRequestCallback {
ResponseContent execute();
}
}
package com.sxc.etaxincome.common.util;
import com.github.rholder.retry.*;
import com.google.common.base.Predicates;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
/**
* @author caosongqing
* @date 2023/1/16
* @description retry util.
*/
@Slf4j
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class RetryUtil<T> {
private int times = 2;
private int waitSeconds = 10;
public T retry(Callable<T> callable) throws ExecutionException, RetryException {
//定义重试机制
Retryer<T> retryer = RetryerBuilder.<T>newBuilder()
//retryIf 重试条件
.retryIfException()
.retryIfRuntimeException()
.retryIfExceptionOfType(Exception.class)
.retryIfException(Predicates.equalTo(new Exception()))
//等待策略:每次请求间隔1s
//fixedWait 固定X秒后重试
//noWait不等时间直接重试
//incrementingWait 第一个参数为第一次重试时间,后面会通过设置间隔递增秒数重试
//randomWait 随机等待设置范围内的时间重试
.withWaitStrategy(WaitStrategies.fixedWait(waitSeconds, TimeUnit.SECONDS))
//停止策略 : 尝试请求n次
.withStopStrategy(StopStrategies.stopAfterAttempt(times))
.withRetryListener(new TimesRetryListener())
.withRetryListener(new ExceptionRetryListener())
.build();
//利用重试器调用请求
return retryer.call(callable);
}
private class TimesRetryListener implements RetryListener {
@Override
public <V> void onRetry(Attempt<V> attempt) {
log.info("try {} times", attempt.getAttemptNumber());
}
}
private class ExceptionRetryListener implements RetryListener {
@Override
public <V> void onRetry(Attempt<V> attempt) {
if (attempt.hasException()) {
log.error("error:", attempt.getExceptionCause());
}
}
}
}
package com.sxc.etaxincome.common.generator.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-25 16:15:59
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class EtaxReportResultConfig implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 自增主键
*/
private Long id;
/**
* 接口编号
*/
private String apiCode;
/**
* 报表名
*/
private String tableName;
/**
* 报表编码
*/
private String tableCode;
/**
* 行位置
*/
private String locationRow;
/**
* 列位置
*/
private String locationCol;
/**
* 电子税局参数名
*/
private String etaxParamName;
/**
* 映射关系参数名
*/
private String etaxExportName;
/**
* 电子税局value
*/
private String etaxParamValue;
/**
* 是否显示 0-否 1-是
*/
private String showFlag;
/**
* 是否校验 0-否 1-是
*/
private String checkFlag;
/**
* 校验适配类
*/
private String checkClass;
/**
* 说明
*/
private String remark;
/**
* 创建日期
*/
private LocalDateTime createTime;
/**
* 最后更新日期
*/
private LocalDateTime updateTime;
}
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>etax-income-api</artifactId>
<groupId>com.sxc.etaxincome</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>etax-income-controller</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>etax-income-controller</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-domain</artifactId>
</dependency>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-service</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-servlet</artifactId>
</dependency>
<!-- unit test start -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test-autoconfigure</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.skyscreamer</groupId>
<artifactId>jsonassert</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>mockito-core</artifactId>
<groupId>org.mockito</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<scope>test</scope>
</dependency>
<!-- unit test end -->
</dependencies>
</project>
package com.sxc.etaxincome.controller;
import com.sxc.etaxincome.common.enums.CountTypeCode;
import com.sxc.etaxincome.domain.command.analysis.IAnalysisCommand;
import com.sxc.etaxincome.domain.model.report.AnalysisCriteria;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/analysis")
public class AnalysisController {
@Autowired
@Qualifier(value = "analysisCommand")
private IAnalysisCommand analysisCommand;
@Autowired
@Qualifier(value = "areaGroupCommand")
private IAnalysisCommand areaGroupCommand;
@Autowired
@Qualifier(value = "queryIncomeSuccessAnalysisCommand")
private IAnalysisCommand queryIncomeSuccessAnalysisCommand;
@Autowired
@Qualifier(value = "groupAnalysisCommand")
private IAnalysisCommand groupAnalysisCommand;
@Autowired
@Qualifier(value = "sellerGrowthCommand")
private IAnalysisCommand sellerGrowthCommand;
@GetMapping("/hourly")
public String analysisHourly(AnalysisCriteria analysisCriteria) {
analysisCriteria.setCountType(CountTypeCode.HOUR.getCode());
return analysisCommand.handle(analysisCriteria);
}
@GetMapping("/daily")
public String analysisDaily(AnalysisCriteria analysisCriteria) {
analysisCriteria.setCountType(CountTypeCode.DAY.getCode());
return analysisCommand.handle(analysisCriteria);
}
@GetMapping("/monthly")
public String analysisMonthly(AnalysisCriteria analysisCriteria) {
analysisCriteria.setCountType(CountTypeCode.MONTH.getCode());
return analysisCommand.handle(analysisCriteria);
}
@GetMapping("/weekly")
public String analysisWeekly(AnalysisCriteria analysisCriteria) {
analysisCriteria.setCountType(CountTypeCode.WEEK.getCode());
return analysisCommand.handle(analysisCriteria);
}
@GetMapping("/area-group")
public String analysisAreaGroup(AnalysisCriteria analysisCriteria) {
return areaGroupCommand.handle(analysisCriteria);
}
@GetMapping("/query-income-success")
public String queryIncomeSuccessList(AnalysisCriteria analysisCriteria) {
return queryIncomeSuccessAnalysisCommand.handle(analysisCriteria);
}
@GetMapping("/daily-group")
public String analysisDailyGroup(AnalysisCriteria analysisCriteria) {
analysisCriteria.setCountType(CountTypeCode.DAY.getCode());
return groupAnalysisCommand.handle(analysisCriteria);
}
@GetMapping("/seller-growth")
public String analysisSellerGrowth(AnalysisCriteria analysisCriteria) {
return sellerGrowthCommand.handle(analysisCriteria);
}
}
package com.sxc.etaxincome.controller;
import com.sxc.etaxincome.domain.business.IExceptionManager;
import com.sxc.etaxincome.domain.model.report.AnalysisCriteria;
import com.sxc.framework.common.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/exception")
public class ExceptionController {
@Autowired
private IExceptionManager exceptionManager;
@GetMapping("/stat")
public String exceptionStat(AnalysisCriteria analysisCriteria) {
return JSONUtil.toString(exceptionManager.getExceptionStatList(analysisCriteria));
}
}
package com.sxc.etaxincome.controller;
import cn.hutool.core.convert.impl.UUIDConverter;
import com.alibaba.fastjson2.util.UUIDUtils;
import com.sxc.etaxincome.domain.command.report.IReportCommand;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
import com.sxc.etaxincome.domain.model.common.CommonResponse;
import com.sxc.etaxincome.domain.model.report.IReportResponse;
import com.sxc.framework.common.identity.UUIDGenerator;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.httpclient.util.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.UUID;
/**
* @author caosongqing
* @date 2024/4/24
* @description
*/
@Slf4j
@RestController
@RequestMapping("/manage")
public class ManageController {
@Autowired
@Qualifier(value = "cancelReportCommand")
private IReportCommand cancelReportCommand;
@Autowired
@Qualifier(value = "forceReportCommand")
private IReportCommand forceReportCommand;
@PostMapping("/cancel")
public CommonResponse<IReportResponse> cancelReport(@Validated CommonRequestWrapper commonRequestWrapper) {
return cancelReportCommand.execute(commonRequestWrapper);
}
@PostMapping("/cancel/json")
public CommonResponse<IReportResponse> cancelReportJson(@Validated @RequestBody CommonRequestWrapper requestCommonWrapper) {
return cancelReportCommand.execute(requestCommonWrapper);
}
@PostMapping("/force")
public CommonResponse<IReportResponse> forceReport(@Validated CommonRequestWrapper commonRequestWrapper) {
return forceReportCommand.execute(commonRequestWrapper);
}
@PostMapping("/force/json")
public CommonResponse<IReportResponse> forceReportJson(@Validated @RequestBody CommonRequestWrapper requestCommonWrapper) {
return forceReportCommand.execute(requestCommonWrapper);
}
@PostMapping("/force/test")
public String forceReportTest() throws Exception {
String abc = UUIDGenerator.generate() + "helloword";
Thread.sleep(40000);
System.out.println(abc);
return abc;
}
}
package com.sxc.etaxincome.controller;
import com.sxc.etaxincome.criteria.IncomeQueryCriteria;
import com.sxc.etaxincome.domain.business.IQueryManager;
import com.sxc.etaxincome.domain.command.query.IQueryCommand;
import com.sxc.etaxincome.domain.command.query.IQueryPageListCommand;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
import com.sxc.etaxincome.domain.model.common.CommonResponse;
import com.sxc.etaxincome.domain.model.common.PageList;
import com.sxc.etaxincome.domain.model.report.IReportResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author caosongqing
* @date 2024/4/24
* @description
*/
@Slf4j
@RestController
@RequestMapping("/query")
public class QueryController {
@Autowired
@Qualifier(value = "queryCancelListQueryPageListCommand")
private IQueryPageListCommand queryCancelListQueryPageListCommand;
@Autowired
@Qualifier(value = "queryReportListQueryPageListCommand")
private IQueryPageListCommand queryReportListQueryPageListCommand;
@Autowired
@Qualifier(value = "queryReportItemQueryCommand")
private IQueryCommand queryReportItemQueryCommand;
@Autowired
@Qualifier(value = "queryManager")
private IQueryManager queryManager;
@PostMapping("/cancel-list")
public CommonResponse<PageList<IReportResponse>> queryCancelList(@Validated CommonRequestWrapper commonRequestWrapper) {
return queryCancelListQueryPageListCommand.execute(commonRequestWrapper);
}
@PostMapping("/cancel-list/json")
public CommonResponse<PageList<IReportResponse>> queryCancelListJson(@Validated @RequestBody CommonRequestWrapper requestCommonWrapper) {
return queryCancelListQueryPageListCommand.execute(requestCommonWrapper);
}
@PostMapping("/report-list")
public CommonResponse<PageList<IReportResponse>> queryReportList(@Validated CommonRequestWrapper commonRequestWrapper) {
return queryReportListQueryPageListCommand.execute(commonRequestWrapper);
}
@PostMapping("/report-list/json")
public CommonResponse<PageList<IReportResponse>> queryReportListJson(@Validated @RequestBody CommonRequestWrapper requestCommonWrapper) {
return queryReportListQueryPageListCommand.execute(requestCommonWrapper);
}
@PostMapping("/report-item")
public CommonResponse<IReportResponse> queryReportItem(@Validated CommonRequestWrapper commonRequestWrapper) {
return queryReportItemQueryCommand.execute(commonRequestWrapper);
}
@PostMapping("/report-item/json")
public CommonResponse<IReportResponse> queryReportItemJson(@Validated @RequestBody CommonRequestWrapper requestCommonWrapper) {
return queryReportItemQueryCommand.execute(requestCommonWrapper);
}
@PostMapping("/page-list/order-by-updateTime-desc")
public String queryPageListOrderByUpdateTimeDesc(@RequestBody IncomeQueryCriteria incomeQueryCriteria) {
return queryManager.queryPageListOrderByUpdateTimeDesc(incomeQueryCriteria);
}
@GetMapping("/complete-period/apply-id")
public String completePeriodWithApplyId(Long applyId) {
return queryManager.completePeriod(applyId);
}
}
package com.sxc.etaxincome.controller;
import com.sxc.etaxincome.domain.command.report.IReportCommand;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
import com.sxc.etaxincome.domain.model.common.CommonResponse;
import com.sxc.etaxincome.domain.model.report.IReportResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author caosongqing
* @date 2024/4/24
* @description
*/
@Slf4j
@RestController
@RequestMapping("/report")
public class ReportController {
@Autowired
@Qualifier(value = "generalTaxpayerReportCommand")
private IReportCommand generalTaxpayerReportCommand;
@PostMapping("/general-taxpayer")
public CommonResponse<IReportResponse> reportGeneralTaxpayer(@Validated CommonRequestWrapper commonRequestWrapper) {
return generalTaxpayerReportCommand.execute(commonRequestWrapper);
}
@PostMapping("/general-taxpayer/json")
public CommonResponse<IReportResponse> reportGeneralTaxpayerJson(@Validated @RequestBody CommonRequestWrapper requestCommonWrapper) {
return generalTaxpayerReportCommand.execute(requestCommonWrapper);
}
}
package com.sxc.etaxincome.controller;
import com.sxc.etaxincome.domain.business.ISysManageManager;
import com.sxc.etaxincome.domain.exception.EtaxIncomeException;
import com.sxc.etaxincome.domain.model.common.CommonResponse;
import com.sxc.etaxincome.domain.model.sysManage.SysAppUserSummary;
import com.sxc.etaxincome.entity.FinSysDict;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @ProjectName: etax-income-api
* @Package: com.sxc.etaxincome.controller
* @ClassName: SysManageController
* @Author: ddx
* @Description: system manager controller
* @Date: 2024-05-28 10:32
* @Version: 1.0
*/
@Slf4j
@RestController
@RequestMapping("/sysManage")
public class SysManageController {
@Autowired
private ISysManageManager sysManageManager;
@GetMapping("/sys-app-user-query")
public CommonResponse<List<SysAppUserSummary>> sysAppUserQuery() {
try {
List<SysAppUserSummary> sysAppUserList = sysManageManager.queryListByCriteria();
return CommonResponse.success(sysAppUserList);
} catch (Exception e) {
log.error("query sys app user result error:", e);
throw new EtaxIncomeException("fail query sys app user result");
}
}
@GetMapping("/sys-app-dict-query")
public List<FinSysDict> sysAppDictQuery(String dictGroup) {
try {
return sysManageManager.queryDictListByDictGroup(dictGroup);
} catch (Exception e) {
log.error("query sys dict result error:", e);
throw new EtaxIncomeException("fail query sys dict result");
}
}
}
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>etax-income-api</artifactId>
<groupId>com.sxc.etaxincome</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>etax-income-domain</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>etax-income-domain</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<buildnumber-maven-plugin.version>1.4</buildnumber-maven-plugin.version>
<templating-maven-plugin.version>1.0.0</templating-maven-plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-common</artifactId>
</dependency>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-mapper</artifactId>
</dependency>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-service</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>com.esotericsoftware</groupId>
<artifactId>kryo</artifactId>
</dependency>
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis-lettuce</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>mockito-core</artifactId>
<groupId>org.mockito</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<scm>
<connection>scm:git:http://git.taxservices.cn/e-tax/etax-income-api.git</connection>
<developerConnection>scm:git:http://git.taxservices.cn/e-tax/etax-income-api.git</developerConnection>
<url>http://git.taxservices.cn/e-tax/etax-income-api.git</url>
</scm>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>${buildnumber-maven-plugin.version}</version>
<executions>
<execution>
<id>bn1</id>
<goals>
<!-- 创建${buildNumber} -->
<goal>create</goal>
</goals>
</execution>
<execution>
<id>bn2</id>
<goals>
<!-- 创建时间戳${buildtimestamp} -->
<goal>create-timestamp</goal>
</goals>
<configuration>
<!-- 指定时间戳变量名 -->
<timestampPropertyName>buildtimestamp</timestampPropertyName>
<!-- 指定日期格式 -->
<timestampFormat>yyyy-MM-dd HH:mm:ss</timestampFormat>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>templating-maven-plugin</artifactId>
<version>${templating-maven-plugin.version}</version>
<executions>
<execution>
<id>filter-src</id>
<goals>
<goal>filter-sources</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
package com.sxc.etaxincome.domain;
public final class Version {
private Version() {
}
/**
* project version
*/
public static final String PROJECT_VERSION = "${project.version}";
/**
* SCM(git) revision
*/
public static final String SCM_REVISION= "${buildNumber}";
/**
* SCM branch
*/
public static final String SCM_BRANCH = "${scmBranch}";
/**
* build timestamp
*/
public static final String TIMESTAMP ="${buildtimestamp}";
}
\ No newline at end of file
package com.sxc.etaxincome.domain.business;
import com.sxc.etaxincome.domain.model.report.ApiConfig;
public interface IApiConfigManager {
ApiConfig getApiConfig(String apiCode);
}
package com.sxc.etaxincome.domain.business;
import com.sxc.etaxincome.entity.EtaxReportResultConfig;
import com.sxc.etaxincome.entity.FinSysDict;
import java.util.List;
public interface ICachedConfigManager {
List<FinSysDict> queryDictConfig(String dictGroup);
}
package com.sxc.etaxincome.domain.business;
import com.sxc.etaxincome.domain.model.report.AnalysisCriteria;
import com.sxc.etaxincome.domain.model.report.ExceptionStat;
import java.util.List;
public interface IExceptionManager {
List<ExceptionStat> getExceptionStatList(AnalysisCriteria analysisCriteria);
}
package com.sxc.etaxincome.domain.business;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.domain.model.report.AreaCodeStat;
import java.util.List;
/**
* @ProjectName: etax-income-api
* @Package: com.sxc.etaxincome.domain.business
* @ClassName: IMonitorManager
* @Author: ddx
* @Description:
* @Date: 2024-06-06 16:40
* @Version: 1.0
*/
public interface IMonitorManager {
List<AreaCodeStat> statAreaIncome(IncomeQueryCommon incomeQueryCommon);
}
package com.sxc.etaxincome.domain.business;
import com.sxc.etaxincome.criteria.IncomeQueryCriteria;
import com.sxc.etaxincome.entity.FinRealLog;
public interface IQueryManager {
String queryPageListOrderByUpdateTimeDesc(IncomeQueryCriteria incomeQueryCriteria);
String completePeriod(Long applyId);
String completePeriod(FinRealLog incomeInvoiceApply);
}
package com.sxc.etaxincome.domain.business;
import java.util.Map;
public interface IResultTransferManager {
Map<String, String> transferToMap(String formData, String tableCode);
String transferToJson(String formData, String tableCode);
}
package com.sxc.etaxincome.domain.business;
import com.sxc.etaxincome.domain.model.sysManage.SysAppUserSummary;
import com.sxc.etaxincome.entity.FinSysDict;
import java.util.List;
/**
* @ProjectName: etax-income-api
* @Package: com.sxc.etaxincome.domain.business
* @ClassName: ISysManageManager
* @Author: ddx
* @Description:
* @Date: 2024-05-28 10:50
* @Version: 1.0
*/
public interface ISysManageManager {
List<SysAppUserSummary> queryListByCriteria();
List<FinSysDict> queryDictListByDictGroup(String dictGroup);
}
package com.sxc.etaxincome.domain.business;
/**
* @author caosongqing
* @date 2022/12/12
* @description
*/
public interface IVersionManager {
String version();
String buildVersion();
String allVersion();
String latestVersion();
}
package com.sxc.etaxincome.domain.business.impl;
import com.google.common.collect.Lists;
import com.sxc.etaxincome.domain.business.IApiConfigManager;
import com.sxc.etaxincome.domain.format.ReportParamFormat;
import com.sxc.etaxincome.domain.model.report.ApiConfig;
import com.sxc.etaxincome.domain.model.report.ApiParamMapping;
import com.sxc.etaxincome.entity.EtaxReportApiConfig;
import com.sxc.etaxincome.entity.EtaxReportParamConfig;
import com.sxc.etaxincome.enums.ApiParamReadonly;
import com.sxc.etaxincome.service.IEtaxReportApiConfigService;
import com.sxc.etaxincome.service.IEtaxReportParamConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service
public class ApiConfigManager implements IApiConfigManager {
@Autowired
private IEtaxReportApiConfigService etaxReportApiConfigService;
@Autowired
private IEtaxReportParamConfigService etaxReportParamConfigService;
@Override
public ApiConfig getApiConfig(String apiCode) {
EtaxReportParamConfig etaxReportParamConfigCriteria = new EtaxReportParamConfig();
etaxReportParamConfigCriteria.setApiCode(apiCode);
etaxReportParamConfigCriteria.setReadonly(ApiParamReadonly.NO.getCode());
List<EtaxReportParamConfig> etaxReportParamConfigList = etaxReportParamConfigService.queryList(etaxReportParamConfigCriteria);
List<ApiParamMapping> apiParamMappingList = Lists.newArrayListWithExpectedSize(etaxReportParamConfigList.size());
for (EtaxReportParamConfig etaxReportParamConfig : etaxReportParamConfigList) {
apiParamMappingList.add(ApiParamMapping.builder().apiParamName(this.renderApiParamName(etaxReportParamConfig)).etaxParamName(etaxReportParamConfig.getEtaxParamName()).build());
}
EtaxReportApiConfig etaxReportApiConfigCriteria = new EtaxReportApiConfig();
etaxReportApiConfigCriteria.setApiCode(apiCode);
EtaxReportApiConfig etaxReportApiConfig = etaxReportApiConfigService.queryOne(etaxReportApiConfigCriteria);
return ApiConfig.builder()
.apiCode(etaxReportApiConfig.getApiCode())
.apiUrl(etaxReportApiConfig.getApiUrl())
.apiParamMappingList(apiParamMappingList).build();
}
private String renderApiParamName(EtaxReportParamConfig etaxReportParamConfig) {
String tableCode = etaxReportParamConfig.getTableCode();
String row = etaxReportParamConfig.getLocationRow();
String col = etaxReportParamConfig.getLocationCol();
return ReportParamFormat.formatReportParam(tableCode, row, col);
}
}
package com.sxc.etaxincome.domain.business.impl;
import com.alicp.jetcache.anno.CacheType;
import com.alicp.jetcache.anno.Cached;
import com.sxc.etaxincome.domain.business.ICachedConfigManager;
import com.sxc.etaxincome.entity.EtaxReportResultConfig;
import com.sxc.etaxincome.entity.FinSysDict;
import com.sxc.etaxincome.service.IEtaxReportResultConfigService;
import com.sxc.etaxincome.service.IFinSysDictService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service
public class CachedConfigManager implements ICachedConfigManager {
@Autowired
private IFinSysDictService finSysDictService;
@Cached(name = "etax-income:dict:config", key = "#dictGroup", expire = 36000, cacheType = CacheType.LOCAL)
public List<FinSysDict> queryDictConfig(String dictGroup) {
FinSysDict sysDict = new FinSysDict();
sysDict.setDictGroup(dictGroup);
return finSysDictService.queryDictListByCriteria(sysDict);
}
}
package com.sxc.etaxincome.domain.business.impl;
import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.google.common.collect.Maps;
import com.sxc.etaxincome.common.model.report.IncomeExceptionStatResult;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.domain.business.IExceptionManager;
import com.sxc.etaxincome.domain.constants.EtaxExceptionConstants;
import com.sxc.etaxincome.domain.model.report.AnalysisCriteria;
import com.sxc.etaxincome.domain.model.report.ExceptionStat;
import com.sxc.etaxincome.domain.support.DateProvider;
import com.sxc.etaxincome.service.IFinRealLogService;
import com.sxc.framework.common.date.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Service
public class ExceptionManager implements IExceptionManager {
@Autowired
private IFinRealLogService finRealLogService;
@Override
public List<ExceptionStat> getExceptionStatList(AnalysisCriteria analysisCriteria) {
IncomeQueryCommon incomeQueryCommon = IncomeQueryCommon.builder()
.userName(analysisCriteria.getUsername())
.areaCode(analysisCriteria.getAreaCode())
.startDateTime(LocalDateTime.parse(DateProvider.getLongDateTimeHead(analysisCriteria.getStartDateTime()), DateTimeFormatter.ofPattern(DateUtils.YMDHMS_DASH)))
.endDateTime(LocalDateTime.parse(DateProvider.getLongDateTimeHead(analysisCriteria.getEndDateTime()), DateTimeFormatter.ofPattern(DateUtils.YMDHMS_DASH)))
.build();
List<IncomeExceptionStatResult> incomeInvoiceApplyList = finRealLogService.queryExceptionList(incomeQueryCommon);
if (CollectionUtils.isEmpty(incomeInvoiceApplyList)) {
return Collections.emptyList();
}
Map<String, Integer> exceptionMap = Maps.newLinkedHashMapWithExpectedSize(10);
incomeInvoiceApplyList.forEach(e -> {
if(StringUtils.isEmpty(e.getResMsg())) {
e.setResMsg(EtaxExceptionConstants.ETAX_EXCEPTION_TAX_NULL);
}
if(e.getResMsg().contains(EtaxExceptionConstants.ETAX_EXCEPTION_TAX_BUSY)) {
e.setResMsg(EtaxExceptionConstants.ETAX_EXCEPTION_TAX_BUSY);
}
if(null==exceptionMap.get(e.getResMsg())) {
exceptionMap.put(e.getResMsg(), e.getResNum());
} else {
exceptionMap.put(e.getResMsg(), exceptionMap.get(e.getResMsg()) + e.getResNum());
}
});
List<ExceptionStat> exceptionStatList = Lists.newArrayListWithExpectedSize(10);
exceptionMap.forEach((key, value) -> exceptionStatList.add(ExceptionStat.builder().message(key).count(value).build()));
List<ExceptionStat> exceptionSortedList = exceptionStatList.stream().sorted(Comparator.comparing(ExceptionStat::getCount).reversed()).limit(8).collect(Collectors.toList());
return exceptionSortedList;
}
}
package com.sxc.etaxincome.domain.business.impl;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.domain.business.IMonitorManager;
import com.sxc.etaxincome.domain.model.report.AreaCodeStat;
import com.sxc.etaxincome.domain.support.ZoneProvider;
import com.sxc.etaxincome.entity.FinCountReport;
import com.sxc.etaxincome.service.IFinRealLogService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* @ProjectName: etax-income-api
* @Package: com.sxc.etaxincome.domain.business.impl
* @ClassName: MonitorManager
* @Author: ddx
* @Description:
* @Date: 2024-06-06 16:40
* @Version: 1.0
*/
@Slf4j
@Service
public class MonitorManager implements IMonitorManager {
@Autowired
private IFinRealLogService finRealLogService;
@Override
public List<AreaCodeStat> statAreaIncome(IncomeQueryCommon incomeQueryCommon) {
List<FinCountReport> countReportList = finRealLogService.statAreaIncome(incomeQueryCommon);
List<AreaCodeStat> areaCodeStatList = Lists.newArrayList();
countReportList.stream().forEach(e -> {
areaCodeStatList.add(AreaCodeStat.builder().areaCode(e.getZoneCode())
.name(ZoneProvider.getZoneNameByCode(e.getZoneCode()))
.taxnoCount(Long.valueOf(e.getTaxnoNum())).requsetCount(Long.valueOf(e.getTotalNum())).build());
});
return areaCodeStatList;
}
}
package com.sxc.etaxincome.domain.business.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.collect.Lists;
import com.sxc.etaxincome.criteria.FinRealLogCriteria;
import com.sxc.etaxincome.criteria.IncomeQueryCriteria;
import com.sxc.etaxincome.domain.business.IQueryManager;
import com.sxc.etaxincome.domain.constants.CommonConstants;
import com.sxc.etaxincome.domain.model.common.PageList;
import com.sxc.etaxincome.domain.model.report.IncomeCompletePeriod;
import com.sxc.etaxincome.entity.FinRealLog;
import com.sxc.etaxincome.service.IFinRealLogService;
import com.sxc.framework.common.code.EncryptUtil;
import com.sxc.framework.common.json.JSONUtil;
import com.sxc.framework.common.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author caosongqing
* @date 2023/2/10
* @description
*/
@Slf4j
@Service
public class QueryManager implements IQueryManager {
@Autowired
private IFinRealLogService finRealLogService;
@Override
public String queryPageListOrderByUpdateTimeDesc(IncomeQueryCriteria incomeQueryCriteria) {
FinRealLogCriteria finRealLogCriteria = FinRealLogCriteria.builder()
.userCode(incomeQueryCriteria.getUserCode())
.zoneCode(incomeQueryCriteria.getZoneCode())
.taxno(incomeQueryCriteria.getTaxno())
.itype(incomeQueryCriteria.getItype())
.reqSign(incomeQueryCriteria.getReqSign())
.reqContext(incomeQueryCriteria.getReqContext())
.resContext(incomeQueryCriteria.getResContext())
.resMsg(incomeQueryCriteria.getResMsg())
.timeFlag(incomeQueryCriteria.getTimeFlag())
.resCode(incomeQueryCriteria.getResCode())
.dateTimeStart(incomeQueryCriteria.getStartDateTime())
.dateTimeEnd(incomeQueryCriteria.getEndDateTime())
.startTimeDiff(incomeQueryCriteria.getStartTimeDiff())
.endTimeDiff(incomeQueryCriteria.getEndTimeDiff())
.build();
int start = incomeQueryCriteria.getPageNumber();
int limit = incomeQueryCriteria.getPageSize();
IPage<FinRealLog> incomeInvoiceApplyPage = finRealLogService.queryPageListOrderByRequestTimeDesc(finRealLogCriteria, start, limit);
List<FinRealLog> incomeInvoiceApplyList = incomeInvoiceApplyPage.getRecords();
PageList<FinRealLog> incomeInvoiceApplyPageList = PageList.<FinRealLog>builder()
.total(Integer.valueOf(String.valueOf(incomeInvoiceApplyPage.getTotal())))
.pageNumber(start)
.pageSize(limit)
.list(incomeInvoiceApplyList).build();
return JSONUtil.toString(incomeInvoiceApplyPageList);
}
@Override
public String completePeriod(Long applyId) {
FinRealLog incomeInvoiceApply = finRealLogService.getBaseMapper().selectById(applyId);
return this.completePeriod(incomeInvoiceApply);
}
@Override
public String completePeriod(FinRealLog incomeInvoiceApply) {
JSONObject requestParam = new JSONObject();
JSONObject cookie = new JSONObject();
String reqContext = incomeInvoiceApply.getReqContext();
if (StringUtil.isNotEmpty(reqContext)) {
if(reqContext.contains("token")) {
String preReqContext = reqContext.substring(reqContext.indexOf("T1C2K3"));
String cookieContext = EncryptUtil.decryptAesCk(preReqContext.substring(0, preReqContext.indexOf("\\")));
if(StringUtil.isNotEmpty(cookieContext)) {
cookie = JSON.parseObject(cookieContext);
requestParam.put("cookie", cookie.get("cookie"));
requestParam.put("dqdm", incomeInvoiceApply.getZoneCode());
}
}
}
JSONObject responseResult = null;
IncomeCompletePeriod incomeCompletePeriod = IncomeCompletePeriod.builder()
.cookie(cookie)
.requestParam(requestParam)
.reqContext(incomeInvoiceApply.getReqContext())
.resContext(incomeInvoiceApply.getResContext())
.build();
return JSONUtil.toString(incomeCompletePeriod);
}
}
package com.sxc.etaxincome.domain.business.impl;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Maps;
import com.sxc.etaxincome.domain.business.ICachedConfigManager;
import com.sxc.etaxincome.domain.business.IResultTransferManager;
import com.sxc.etaxincome.domain.format.ReportParamFormat;
import com.sxc.etaxincome.entity.EtaxReportResultConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class ResultTransferManager implements IResultTransferManager {
@Autowired
private ICachedConfigManager cachedConfigManager;
public Map<String, EtaxReportResultConfig> queryMapByTableCode(String tableCode, boolean fullFlag) {
Map<String, EtaxReportResultConfig> resultConfigMap = Maps.newHashMap();
// List<EtaxReportResultConfig> resultConfigList = cachedConfigManager.queryReportResultConfig(tableCode);
// log.info("resultConfigList size:{}", resultConfigList.size());
// if(fullFlag) {
// resultConfigList.forEach(x-> resultConfigMap.put(x.getEtaxParamName(), x));
// } else {
// resultConfigList.stream().filter(x -> "1".equals(x.getShowFlag())).forEach(x-> resultConfigMap.put(x.getEtaxParamName(), x));
// }
return resultConfigMap;
}
public Map<String, String> transferToMap(String formData, String tableCode) {
Map<String, String> resultMap = Maps.newHashMap();
// log.info("formData:{} tableCode:{}", formData, tableCode);
// //准备数据
// Map<String, String> tableFullMap = HtmlParseUtil.parseTableHtmlToMap(formData, tableCode, false);
// log.info("tableFullMap:{}", tableFullMap);
// Map<String, EtaxReportResultConfig> tableShowMap = this.queryMapByTableCode(tableCode, false);
//
// for (String etaxParamName: tableShowMap.keySet()) {
// log.info("etaxParamName:{}", etaxParamName);
// EtaxReportResultConfig resultConfig = tableShowMap.get(etaxParamName);
// String resultParamKey = this.getExportParamKey(resultConfig);
// log.info("resultParamKey:{}", resultParamKey);
// resultMap.put(resultParamKey, tableFullMap.get(etaxParamName));
// }
return resultMap;
}
public String transferToJson(String formData, String tableCode) {
Map<String, String> resultMap = transferToMap(formData, tableCode);
return JSON.toJSONString(resultMap);
}
private String getExportParamKey(EtaxReportResultConfig resultConfig) {
if ("-1".equals(resultConfig.getLocationRow())) {
return resultConfig.getEtaxExportName();
}
return ReportParamFormat.formatReportParam(resultConfig.getTableCode(), resultConfig.getLocationRow(), resultConfig.getLocationCol());
}
}
package com.sxc.etaxincome.domain.business.impl;
import com.sxc.etaxincome.domain.business.ICachedConfigManager;
import com.sxc.etaxincome.domain.business.ISysManageManager;
import com.sxc.etaxincome.domain.model.sysManage.SysAppUserSummary;
import com.sxc.etaxincome.entity.FinSysDict;
import com.sxc.etaxincome.entity.SysAppUser;
import com.sxc.etaxincome.service.IFinSysDictService;
import com.sxc.etaxincome.service.ISysAppUserService;
import com.sxc.framework.common.date.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.format.DateTimeFormatter;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* @ProjectName: etax-income-api
* @Package: com.sxc.etaxincome.domain.business.impl
* @ClassName: SysManageManager
* @Author: ddx
* @Description:
* @Date: 2024-05-28 10:51
* @Version: 1.0
*/
@Slf4j
@Service
public class SysManageManager implements ISysManageManager {
@Autowired
private ISysAppUserService sysAppUserService;
@Autowired
private ICachedConfigManager cachedConfigManager;
public List<SysAppUserSummary> queryListByCriteria() {
SysAppUser sysAppUserCriteria = new SysAppUser();
List<SysAppUser> sysAppUserList = sysAppUserService.queryListByCriteria(sysAppUserCriteria);
return sysAppUserList.stream().sorted(Comparator.comparing(SysAppUser::getName)).map(e -> {
return SysAppUserSummary.builder()
.userName(e.getUsername())
.nickName(e.getName())
.status(e.getStatus()).build();
}).collect(Collectors.toList());
}
public List<FinSysDict> queryDictListByDictGroup(String dictGroup) {
List<FinSysDict> sysDictList = cachedConfigManager.queryDictConfig(dictGroup);
return sysDictList;
}
}
package com.sxc.etaxincome.domain.business.impl;
import com.alibaba.fastjson.JSON;
import com.alicp.jetcache.anno.CacheType;
import com.alicp.jetcache.anno.Cached;
import com.sxc.etaxincome.domain.Version;
import com.sxc.etaxincome.domain.business.IVersionManager;
import com.sxc.etaxincome.domain.model.common.AggregateVersion;
import com.sxc.etaxincome.domain.model.common.ApiVersion;
import com.sxc.etaxincome.domain.model.common.BuildVersion;
import com.sxc.framework.common.file.FileUtil;
import com.sxc.framework.common.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
/**
* @author caosongqing
* @date 2022/12/12
* @description
*/
@Slf4j
@Service
public class VersionManager implements IVersionManager {
private static final int VERSION_LENGTH = 10;
@Override
@Cached(name = "income-invoice:version:version", expire = 36000, cacheType = CacheType.LOCAL)
public String version() {
String startWith = "s";
int subRevisionLength = VERSION_LENGTH;
String latestVersion;
try {
String versionJson = this.allVersion();
ApiVersion apiVersion = JSON.parseObject(versionJson, ApiVersion.class);
latestVersion = apiVersion.getLatestVersion().getVersion();
} catch (Exception e) {
latestVersion = "unknown";
log.error("get version error:", e);
}
String revision = Version.SCM_REVISION;
int lengthRevision = revision.length();
String subRevision = StringUtils.substring(revision, lengthRevision - subRevisionLength, lengthRevision);
String version = String.format("%s_%s_%s", startWith, latestVersion, subRevision);
log.info("version:{}", version);
return version;
}
@Override
@Cached(name = "income-invoice:version:buildVersion", expire = 36000, cacheType = CacheType.LOCAL)
public String buildVersion() {
BuildVersion buildVersion = BuildVersion.builder()
.projectVersion(Version.PROJECT_VERSION)
.revision(Version.SCM_REVISION)
.branch(Version.SCM_BRANCH)
.date(Version.TIMESTAMP).build();
return JSONUtil.toString(buildVersion);
}
@Override
@Cached(name = "income-invoice:version:allVersion", expire = 36000, cacheType = CacheType.LOCAL)
public String allVersion() {
return FileUtil.readContent("version/version.json");
}
@Override
@Cached(name = "income-invoice:version:latestVersion", expire = 36000, cacheType = CacheType.LOCAL)
public String latestVersion() {
String version = this.allVersion();
ApiVersion apiVersion = JSON.parseObject(version, ApiVersion.class);
BuildVersion buildVersion = BuildVersion.builder()
.projectVersion(Version.PROJECT_VERSION)
.revision(Version.SCM_REVISION)
.branch(Version.SCM_BRANCH)
.date(Version.TIMESTAMP)
.build();
AggregateVersion aggregateVersion = AggregateVersion.builder()
.apiVersionLog(apiVersion.getLatestVersion())
.buildVersion(buildVersion)
.build();
return JSONUtil.toString(aggregateVersion);
}
}
package com.sxc.etaxincome.domain.command.analysis;
import com.sxc.etaxincome.common.enums.CountTypeCode;
import com.sxc.etaxincome.common.model.report.IncomeInvoiceStatResult;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.domain.model.report.AnalysisCriteria;
import com.sxc.etaxincome.domain.support.DateProvider;
import com.sxc.etaxincome.service.IFinCountReportService;
import com.sxc.framework.common.date.DateUtils;
import com.sxc.framework.common.json.JSONUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
@Component(value = "analysisCommand")
public class AnalysisCommand implements IAnalysisCommand {
@Autowired
private IFinCountReportService finCountReportService;
@Override
public String handle(AnalysisCriteria analysisCriteria) {
IncomeQueryCommon incomeQueryCommon = IncomeQueryCommon.builder()
.userName(analysisCriteria.getUsername())
.countType(analysisCriteria.getCountType())
.startDateTime(LocalDateTime.parse(DateProvider.getLongDateTimeHead(analysisCriteria.getStartDateTime()), DateTimeFormatter.ofPattern(DateUtils.YMDHMS_DASH)))
.endDateTime(LocalDateTime.parse(DateProvider.getLongDateTimeHead(analysisCriteria.getEndDateTime()), DateTimeFormatter.ofPattern(DateUtils.YMDHMS_DASH)))
.build();
List<IncomeInvoiceStatResult> incomeInvoiceStatResultList = finCountReportService.queryReportListByDate(incomeQueryCommon);
incomeInvoiceStatResultList.stream().forEach(e -> {
if(!analysisCriteria.getCountType().equals(CountTypeCode.HOUR.getCode())) {
e.setStatDate(e.getStatDate().substring(0, 10));
}
});
return JSONUtil.toString(incomeInvoiceStatResultList);
}
}
package com.sxc.etaxincome.domain.command.analysis;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.domain.business.IMonitorManager;
import com.sxc.etaxincome.domain.model.report.AnalysisCriteria;
import com.sxc.etaxincome.domain.support.DateProvider;
import com.sxc.framework.common.date.DateUtils;
import com.sxc.framework.common.json.JSONUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Component(value = "areaGroupCommand")
public class AreaGroupCommand implements IAnalysisCommand {
@Autowired
private IMonitorManager monitorManager;
@Override
public String handle(AnalysisCriteria analysisCriteria) {
IncomeQueryCommon incomeQueryCommon = IncomeQueryCommon.builder()
.userName(analysisCriteria.getUsername())
.startDateTime(LocalDateTime.parse(DateProvider.getLongDateTimeHead(analysisCriteria.getStartDateTime()), DateTimeFormatter.ofPattern(DateUtils.YMDHMS_DASH)))
.endDateTime(LocalDateTime.parse(DateProvider.getLongDateTimeTail(analysisCriteria.getEndDateTime()), DateTimeFormatter.ofPattern(DateUtils.YMDHMS_DASH)))
.build();
return JSONUtil.toString(monitorManager.statAreaIncome(incomeQueryCommon));
}
}
package com.sxc.etaxincome.domain.command.analysis;
import com.sxc.etaxincome.common.enums.CountTypeCode;
import com.sxc.etaxincome.common.model.report.IncomeInvoiceStatResult;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.domain.model.report.AnalysisCriteria;
import com.sxc.etaxincome.domain.support.DateProvider;
import com.sxc.etaxincome.service.IFinCountReportService;
import com.sxc.framework.common.date.DateUtils;
import com.sxc.framework.common.json.JSONUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
@Component(value = "groupAnalysisCommand")
public class GroupAnalysisCommand implements IAnalysisCommand {
@Autowired
private IFinCountReportService finCountReportService;
@Override
public String handle(AnalysisCriteria analysisCriteria) {
IncomeQueryCommon incomeQueryCommon = IncomeQueryCommon.builder()
.userName(analysisCriteria.getUsername())
.countType(analysisCriteria.getCountType())
.startDateTime(LocalDateTime.parse(DateProvider.getLongDateTimeHead(analysisCriteria.getStartDateTime()), DateTimeFormatter.ofPattern(DateUtils.YMDHMS_DASH)))
.endDateTime(LocalDateTime.parse(DateProvider.getLongDateTimeHead(analysisCriteria.getEndDateTime()), DateTimeFormatter.ofPattern(DateUtils.YMDHMS_DASH)))
.build();
List<IncomeInvoiceStatResult> incomeInvoiceStatResultList = finCountReportService.queryReportListByUser(incomeQueryCommon);
return JSONUtil.toString(incomeInvoiceStatResultList);
}
}
package com.sxc.etaxincome.domain.command.analysis;
import com.sxc.etaxincome.domain.model.report.AnalysisCriteria;
public interface IAnalysisCommand {
String handle(AnalysisCriteria analysisCriteria);
}
package com.sxc.etaxincome.domain.command.analysis;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.sxc.etaxincome.criteria.FinRealLogCriteria;
import com.sxc.etaxincome.domain.constants.CommonConstants;
import com.sxc.etaxincome.domain.model.common.DateTimeRange;
import com.sxc.etaxincome.domain.model.report.AnalysisCriteria;
import com.sxc.etaxincome.domain.support.DateProvider;
import com.sxc.etaxincome.entity.FinRealLog;
import com.sxc.etaxincome.service.IFinRealLogService;
import com.sxc.framework.common.json.JSONUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Comparator;
import java.util.List;
/**
* @ProjectName: etax-income-api
* @Package: com.sxc.etaxincome.domain.command.analysis
* @ClassName: QueryIncomeSuccessAnalysisCommand
* @Author: ddx
* @Description:
* @Date: 2024-06-21 17:21
* @Version: 1.0
*/
@Component(value = "queryIncomeSuccessAnalysisCommand")
public class QueryIncomeSuccessAnalysisCommand implements IAnalysisCommand {
@Autowired
private IFinRealLogService finRealLogService;
@Override
public String handle(AnalysisCriteria analysisCriteria) {
DateTimeRange dateTimeRange = DateProvider.today();
FinRealLogCriteria finRealLogCriteria = FinRealLogCriteria.builder()
.userCode(analysisCriteria.getUsername())
.zoneCode(analysisCriteria.getAreaCode())
.resCode(CommonConstants.SUCCESS)
.dateTimeStart(dateTimeRange.getStartDateTime())
.dateTimeEnd(dateTimeRange.getEndDateTime())
.build();
int start = 1;
int limit = 100;
IPage<FinRealLog> realLogPage = finRealLogService.queryPageListOrderByRequestTimeDesc(finRealLogCriteria, start, limit);
List<FinRealLog> realLogList = realLogPage.getRecords();
if (CollectionUtils.isNotEmpty(realLogList)) {
realLogList.sort(Comparator.comparing(FinRealLog::getReqDate));
return JSONUtil.toString(realLogList);
}
return "[]";
}
}
package com.sxc.etaxincome.domain.command.analysis;
import cn.hutool.core.date.DateUtil;
import com.google.common.collect.Lists;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.domain.model.report.AnalysisCriteria;
import com.sxc.etaxincome.domain.model.report.SellerGrowth;
import com.sxc.etaxincome.domain.support.DateProvider;
import com.sxc.etaxincome.entity.FinUserTaxno;
import com.sxc.etaxincome.service.IFinUserTaxnoService;
import com.sxc.framework.common.json.JSONUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author caosongqing
* @date 2023/11/10
* @description
*/
@Component(value = "sellerGrowthCommand")
public class SellerGrowthCommand implements IAnalysisCommand {
@Autowired
private IFinUserTaxnoService finUserTaxnoService;
@Override
public String handle(AnalysisCriteria analysisCriteria) {
String startDate = analysisCriteria.getStartDateTime();
String endDate = analysisCriteria.getEndDateTime();
List<String> dateList = DateProvider.dateListBetween(startDate, endDate);
List<SellerGrowth> sellerGrowthList = Lists.newArrayListWithExpectedSize(20);
for (String targetDate : dateList) {
IncomeQueryCommon incomeQueryCommon = IncomeQueryCommon.builder()
.userName(analysisCriteria.getUsername())
.startDateTime(DateUtil.parseLocalDateTime(DateProvider.getDateTimeHead(targetDate)))
.endDateTime(DateUtil.parseLocalDateTime(DateProvider.getDateTimeTail(targetDate))).build();
List<FinUserTaxno> makeoutInvoiceSellerList = finUserTaxnoService.queryList(incomeQueryCommon);
sellerGrowthList.add(SellerGrowth.builder().date(targetDate).count(makeoutInvoiceSellerList.size()).build());
}
return JSONUtil.toString(sellerGrowthList);
}
}
package com.sxc.etaxincome.domain.command.query;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
import com.sxc.etaxincome.domain.model.common.CommonResponse;
import com.sxc.etaxincome.domain.model.common.PageList;
import com.sxc.etaxincome.domain.model.report.IReportResponse;
public interface IQueryCommand {
CommonResponse<IReportResponse> execute(CommonRequestWrapper commonRequestWrapper);
}
package com.sxc.etaxincome.domain.command.query;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
import com.sxc.etaxincome.domain.model.common.PageList;
import com.sxc.etaxincome.domain.model.common.CommonResponse;
import com.sxc.etaxincome.domain.model.report.IReportResponse;
public interface IQueryPageListCommand {
CommonResponse<PageList<IReportResponse>> execute(CommonRequestWrapper commonRequestWrapper);
}
package com.sxc.etaxincome.domain.command.query;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.google.common.base.Stopwatch;
import com.google.common.collect.Lists;
import com.sxc.etaxincome.common.util.RetryHttpHelper;
import com.sxc.etaxincome.domain.business.IApiConfigManager;
import com.sxc.etaxincome.domain.constants.EtaxReportConstants;
import com.sxc.etaxincome.domain.exception.EtaxIncomeException;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
import com.sxc.etaxincome.domain.model.common.PageList;
import com.sxc.etaxincome.domain.model.common.CommonResponse;
import com.sxc.etaxincome.domain.model.cookie.TokenNecessary;
import com.sxc.etaxincome.domain.model.report.ApiConfig;
import com.sxc.etaxincome.domain.model.report.CancelReportResponse;
import com.sxc.etaxincome.domain.model.report.IReportResponse;
import com.sxc.etaxincome.domain.model.report.QueryCancelListRequestWrapper;
import com.sxc.etaxincome.domain.template.ResponseHandlerTemplate;
import com.sxc.etaxincome.enums.ApiCode;
import com.sxc.framework.common.httpclient.ResponseContent;
import com.sxc.framework.common.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.concurrent.TimeUnit;
import static com.sxc.etaxincome.domain.constants.EtaxReportConstants.*;
@Slf4j
@Component(value = "queryCancelListQueryPageListCommand")
public class QueryCancelListQueryPageListCommand implements IQueryPageListCommand {
@NacosValue(value = "${url.etax.report}", autoRefreshed = true)
private String etaxReportUrl;
@Autowired
private IApiConfigManager apiConfigManager;
@Override
public CommonResponse<PageList<IReportResponse>> execute(CommonRequestWrapper commonRequestWrapper) {
Stopwatch stopwatch = Stopwatch.createStarted();
ApiConfig apiConfig = apiConfigManager.getApiConfig(ApiCode.QUERY_CANCEL_PAGE_LIST.getCode());
JSONObject requestDataJsonObject = new JSONObject();
String requestDataStr = commonRequestWrapper.getData();
String requestSerialNo = commonRequestWrapper.getRequestSerialNo();
log.info("queryCancelPageList requestSerialNo:{} data:{}", requestSerialNo, requestDataStr);
QueryCancelListRequestWrapper queryCancelListRequestWrapper = JSON.parseObject(requestDataStr, QueryCancelListRequestWrapper.class);
TokenNecessary tokenNecessary = queryCancelListRequestWrapper.decodeToken();
String token = tokenNecessary.getToken();
requestDataJsonObject.put(API_PARAM_TOKEN, token);
requestDataJsonObject.put(API_PARAM_AREA_CODE, queryCancelListRequestWrapper.getArea());
String test = queryCancelListRequestWrapper.getTest();
if (StringUtils.isNotBlank(test)) {
requestDataJsonObject.put(API_PARAM_TEST, test);
}
if (StringUtils.isNotBlank(queryCancelListRequestWrapper.getReportDateStart())) {
requestDataJsonObject.put("sbrqq", queryCancelListRequestWrapper.getReportDateStart());
}
if (StringUtils.isNotBlank(queryCancelListRequestWrapper.getReportDateEnd())) {
requestDataJsonObject.put("sbrqz", queryCancelListRequestWrapper.getReportDateEnd());
}
if (queryCancelListRequestWrapper.getPageSize() != null) {
requestDataJsonObject.put("pageSize", queryCancelListRequestWrapper.getPageSize().toString());
}
if (queryCancelListRequestWrapper.getPageNumber() != null) {
requestDataJsonObject.put("pageNumber", queryCancelListRequestWrapper.getPageNumber().toString());
}
try {
String etaxReportUrlFull = etaxReportUrl + apiConfig.getApiUrl();
log.info("url:{}", etaxReportUrlFull);
String requestJson = JSONUtil.toString(requestDataJsonObject);
log.info("request:{}", requestJson);
ResponseContent responseContent = RetryHttpHelper.retryPostJsonEntity(etaxReportUrlFull, requestJson);
String response = responseContent.getContent();
log.info("response:{}", response);
stopwatch.stop();
log.info("query cancel page list elapsed time:{}ms", stopwatch.elapsed(TimeUnit.MILLISECONDS));
return new ResponseHandlerTemplate<PageList<IReportResponse>>() {
@Override
public CommonResponse<PageList<IReportResponse>> handleSuccess(JSONObject jsonObject) {
JSONObject resultJsonObject = jsonObject.getJSONObject(EtaxReportConstants.ETAX_RESPONSE_DATA_KEY);
JSONArray jsonArray = resultJsonObject.getJSONArray("List");
Integer total = resultJsonObject.getInteger("Total");
Integer pageSize = resultJsonObject.getInteger("PageSize");
Integer pageNumber = resultJsonObject.getInteger("PageNumber");
List<IReportResponse> invoiceResponseList = Lists.newArrayListWithExpectedSize(10);
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObjectInvoice = jsonArray.getJSONObject(i);
CancelReportResponse cancelReportResponse = new CancelReportResponse();
cancelReportResponse.putAll(jsonObjectInvoice);
invoiceResponseList.add(cancelReportResponse);
}
PageList<IReportResponse> pageList = PageList.<IReportResponse>builder()
.total(total)
.pageNumber(pageNumber)
.pageSize(pageSize)
.list(invoiceResponseList).build();
return CommonResponse.success(pageList);
}
}.handle(response);
} catch (Exception e) {
log.error("query cancel page list error:", e);
throw new EtaxIncomeException(e);
}
}
}
package com.sxc.etaxincome.domain.command.query;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.google.common.base.Stopwatch;
import com.sxc.etaxincome.common.util.RetryHttpHelper;
import com.sxc.etaxincome.domain.business.IApiConfigManager;
import com.sxc.etaxincome.domain.business.IResultTransferManager;
import com.sxc.etaxincome.domain.constants.EtaxReportConstants;
import com.sxc.etaxincome.domain.exception.EtaxIncomeException;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
import com.sxc.etaxincome.domain.model.common.CommonResponse;
import com.sxc.etaxincome.domain.model.cookie.TokenNecessary;
import com.sxc.etaxincome.domain.model.report.*;
import com.sxc.etaxincome.domain.template.ResponseHandlerTemplate;
import com.sxc.etaxincome.entity.EtaxReportType;
import com.sxc.etaxincome.enums.ApiCode;
import com.sxc.etaxincome.service.IEtaxReportTypeService;
import com.sxc.framework.common.httpclient.ResponseContent;
import com.sxc.framework.common.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import static com.sxc.etaxincome.domain.constants.EtaxReportConstants.*;
@Slf4j
@Component(value = "queryReportItemQueryCommand")
public class QueryReportItemQueryCommand implements IQueryCommand {
@NacosValue(value = "${url.etax.report}", autoRefreshed = true)
private String etaxReportUrl;
@Autowired
private IApiConfigManager apiConfigManager;
@Autowired
private IResultTransferManager resultTransfarManager;
@Autowired
private IEtaxReportTypeService etaxReportTypeService;
@Override
public CommonResponse<IReportResponse> execute(CommonRequestWrapper commonRequestWrapper) {
Stopwatch stopwatch = Stopwatch.createStarted();
ApiConfig apiConfig = apiConfigManager.getApiConfig(ApiCode.QUERY_REPORT_ITEM.getCode());
JSONObject requestDataJsonObject = new JSONObject();
String requestDataStr = commonRequestWrapper.getData();
String requestSerialNo = commonRequestWrapper.getRequestSerialNo();
log.info("queryReportItem requestSerialNo:{} data:{}", requestSerialNo, requestDataStr);
QueryReportItemRequestWrapper queryReportItemRequestWrapper = JSON.parseObject(requestDataStr, QueryReportItemRequestWrapper.class);
TokenNecessary tokenNecessary = queryReportItemRequestWrapper.decodeToken();
String token = tokenNecessary.getToken();
requestDataJsonObject.put(API_PARAM_TOKEN, token);
requestDataJsonObject.put(API_PARAM_AREA_CODE, queryReportItemRequestWrapper.getArea());
String test = queryReportItemRequestWrapper.getTest();
if (StringUtils.isNotBlank(test)) {
requestDataJsonObject.put(API_PARAM_TEST, test);
}
if (StringUtils.isNotBlank(queryReportItemRequestWrapper.getDeclareDateStart())) {
requestDataJsonObject.put("skssqq", queryReportItemRequestWrapper.getDeclareDateStart());
}
if (StringUtils.isNotBlank(queryReportItemRequestWrapper.getDeclareDateEnd())) {
requestDataJsonObject.put("skssqz", queryReportItemRequestWrapper.getDeclareDateEnd());
}
if (StringUtils.isNotBlank(queryReportItemRequestWrapper.getSbuuid())) {
requestDataJsonObject.put("sbuuid", queryReportItemRequestWrapper.getSbuuid());
}
if (StringUtils.isNotBlank(queryReportItemRequestWrapper.getReportType())) {
JSONArray reportIdJsonArray = new JSONArray();
reportIdJsonArray.add(queryReportItemRequestWrapper.getReportType());
requestDataJsonObject.put("reportIdList", reportIdJsonArray);
}
try {
String etaxReportUrlFull = etaxReportUrl + apiConfig.getApiUrl();
log.info("url:{}", etaxReportUrlFull);
String requestJson = JSONUtil.toString(requestDataJsonObject);
log.info("request:{}", requestJson);
ResponseContent responseContent = RetryHttpHelper.retryPostJsonEntity(etaxReportUrlFull, requestJson);
String response = responseContent.getContent();
log.info("response:{}", response);
stopwatch.stop();
log.info("query report item elapsed time:{}ms", stopwatch.elapsed(TimeUnit.MILLISECONDS));
return new ResponseHandlerTemplate<IReportResponse>() {
@Override
public CommonResponse<IReportResponse> handleSuccess(JSONObject jsonObject) {
EtaxReportType etaxReportTypeCriteria = new EtaxReportType();
etaxReportTypeCriteria.setReportId(queryReportItemRequestWrapper.getReportType());
EtaxReportType etaxReportType = etaxReportTypeService.queryOne(etaxReportTypeCriteria);
if (etaxReportType == null) {
return CommonResponse.error("未查询到报表信息");
}
String tableCode = etaxReportType.getTableCode();
String formData = jsonObject.getString(EtaxReportConstants.ETAX_RESPONSE_DATA_KEY);
ReportItemResponse reportItemResponse = new ReportItemResponse();
Map<String, String> reportItemMap = resultTransfarManager.transferToMap(formData, tableCode);
reportItemResponse.putAll(reportItemMap);
return CommonResponse.success(reportItemResponse);
}
}.handle(response);
} catch (Exception e) {
log.error("query report item error:", e);
throw new EtaxIncomeException(e);
}
}
}
package com.sxc.etaxincome.domain.command.query;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.google.common.base.Stopwatch;
import com.google.common.collect.Lists;
import com.sxc.etaxincome.common.util.RetryHttpHelper;
import com.sxc.etaxincome.domain.business.IApiConfigManager;
import com.sxc.etaxincome.domain.constants.EtaxReportConstants;
import com.sxc.etaxincome.domain.exception.EtaxIncomeException;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
import com.sxc.etaxincome.domain.model.common.CommonResponse;
import com.sxc.etaxincome.domain.model.common.PageList;
import com.sxc.etaxincome.domain.model.cookie.TokenNecessary;
import com.sxc.etaxincome.domain.model.report.*;
import com.sxc.etaxincome.domain.template.ResponseHandlerTemplate;
import com.sxc.etaxincome.enums.ApiCode;
import com.sxc.framework.common.httpclient.ResponseContent;
import com.sxc.framework.common.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
import static com.sxc.etaxincome.domain.constants.EtaxReportConstants.*;
@Slf4j
@Component(value = "queryReportListQueryPageListCommand")
public class QueryReportListQueryPageListCommand implements IQueryPageListCommand {
@NacosValue(value = "${url.etax.report}", autoRefreshed = true)
private String etaxReportUrl;
@Autowired
private IApiConfigManager apiConfigManager;
@Override
public CommonResponse<PageList<IReportResponse>> execute(CommonRequestWrapper commonRequestWrapper) {
Stopwatch stopwatch = Stopwatch.createStarted();
ApiConfig apiConfig = apiConfigManager.getApiConfig(ApiCode.QUERY_REPORT_PAGE_LIST.getCode());
JSONObject requestDataJsonObject = new JSONObject();
String requestDataStr = commonRequestWrapper.getData();
String requestSerialNo = commonRequestWrapper.getRequestSerialNo();
log.info("queryReportPageList requestSerialNo:{} data:{}", requestSerialNo, requestDataStr);
QueryReportListRequestWrapper queryReportListRequestWrapper = JSON.parseObject(requestDataStr, QueryReportListRequestWrapper.class);
TokenNecessary tokenNecessary = queryReportListRequestWrapper.decodeToken();
String token = tokenNecessary.getToken();
requestDataJsonObject.put(API_PARAM_TOKEN, token);
requestDataJsonObject.put(API_PARAM_AREA_CODE, queryReportListRequestWrapper.getArea());
String test = queryReportListRequestWrapper.getTest();
if (StringUtils.isNotBlank(test)) {
requestDataJsonObject.put(API_PARAM_TEST, test);
}
if (StringUtils.isNotBlank(queryReportListRequestWrapper.getReportDateStart())) {
requestDataJsonObject.put("sbrqq", queryReportListRequestWrapper.getReportDateStart());
}
if (StringUtils.isNotBlank(queryReportListRequestWrapper.getReportDateEnd())) {
requestDataJsonObject.put("sbrqz", queryReportListRequestWrapper.getReportDateEnd());
}
if (StringUtils.isNotBlank(queryReportListRequestWrapper.getDeclareDateStart())) {
requestDataJsonObject.put("skssqq", queryReportListRequestWrapper.getDeclareDateStart());
}
if (StringUtils.isNotBlank(queryReportListRequestWrapper.getDeclareDateEnd())) {
requestDataJsonObject.put("skssqz", queryReportListRequestWrapper.getDeclareDateEnd());
}
if (StringUtils.isNotBlank(queryReportListRequestWrapper.getCancelStatus())) {
requestDataJsonObject.put("zfbz", queryReportListRequestWrapper.getCancelStatus());
}
if (StringUtils.isNotBlank(queryReportListRequestWrapper.getReportType())) {
requestDataJsonObject.put("yzpzzlDm", queryReportListRequestWrapper.getReportType());
}
if (CollectionUtils.isNotEmpty(queryReportListRequestWrapper.getUpdateTypeList())) {
requestDataJsonObject.put("gzlx", queryReportListRequestWrapper.getUpdateTypeList());
}
if (queryReportListRequestWrapper.getPageSize() != null) {
requestDataJsonObject.put("pageSize", queryReportListRequestWrapper.getPageSize().toString());
}
if (queryReportListRequestWrapper.getPageNumber() != null) {
requestDataJsonObject.put("pageNumber", queryReportListRequestWrapper.getPageNumber().toString());
}
try {
String etaxReportUrlFull = etaxReportUrl + apiConfig.getApiUrl();
log.info("url:{}", etaxReportUrlFull);
String requestJson = JSONUtil.toString(requestDataJsonObject);
log.info("request:{}", requestJson);
ResponseContent responseContent = RetryHttpHelper.retryPostJsonEntity(etaxReportUrlFull, requestJson);
String response = responseContent.getContent();
log.info("response:{}", response);
stopwatch.stop();
log.info("query report page list elapsed time:{}ms", stopwatch.elapsed(TimeUnit.MILLISECONDS));
return new ResponseHandlerTemplate<PageList<IReportResponse>>() {
@Override
public CommonResponse<PageList<IReportResponse>> handleSuccess(JSONObject jsonObject) {
JSONObject resultJsonObject = jsonObject.getJSONObject(EtaxReportConstants.ETAX_RESPONSE_DATA_KEY);
JSONArray jsonArray = resultJsonObject.getJSONArray("List");
Integer total = resultJsonObject.getInteger("Total");
Integer pageSize = resultJsonObject.getInteger("PageSize");
Integer pageNumber = resultJsonObject.getInteger("PageNumber");
List<IReportResponse> invoiceResponseList = Lists.newArrayListWithExpectedSize(10);
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObjectInvoice = jsonArray.getJSONObject(i);
ReportResponse reportResponse = new ReportResponse();
reportResponse.putAll(jsonObjectInvoice);
invoiceResponseList.add(reportResponse);
}
PageList<IReportResponse> pageList = PageList.<IReportResponse>builder()
.total(total)
.pageNumber(pageNumber)
.pageSize(pageSize)
.list(invoiceResponseList).build();
return CommonResponse.success(pageList);
}
}.handle(response);
} catch (Exception e) {
log.error("query report page list error:", e);
throw new EtaxIncomeException(e);
}
}
}
package com.sxc.etaxincome.domain.command.report;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.google.common.base.Stopwatch;
import com.sxc.etaxincome.common.util.RetryHttpHelper;
import com.sxc.etaxincome.domain.business.IApiConfigManager;
import com.sxc.etaxincome.domain.exception.EtaxIncomeException;
import com.sxc.etaxincome.domain.handler.transferparam.IReportTransferParamHandler;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
import com.sxc.etaxincome.domain.model.common.CommonResponse;
import com.sxc.etaxincome.domain.model.cookie.TokenNecessary;
import com.sxc.etaxincome.domain.model.report.*;
import com.sxc.etaxincome.domain.template.ResponseHandlerTemplate;
import com.sxc.etaxincome.enums.ApiCode;
import com.sxc.framework.common.httpclient.ResponseContent;
import com.sxc.framework.common.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.concurrent.TimeUnit;
import static com.sxc.etaxincome.domain.constants.EtaxReportConstants.*;
@Slf4j
@Component(value = "cancelReportCommand")
public class CancelReportCommand implements IReportCommand {
@NacosValue(value = "${url.etax.report}", autoRefreshed = true)
private String etaxReportUrl;
@Autowired
private IApiConfigManager apiConfigManager;
@Autowired
private List<IReportTransferParamHandler> reportTransferParamHandlerList;
@Override
public CommonResponse<IReportResponse> execute(CommonRequestWrapper commonRequestWrapper) {
Stopwatch stopwatch = Stopwatch.createStarted();
ApiConfig apiConfig = apiConfigManager.getApiConfig(ApiCode.CANCEL_REPORT.getCode());
JSONObject requestDataJsonObject = new JSONObject();
String requestDataStr = commonRequestWrapper.getData();
String requestSerialNo = commonRequestWrapper.getRequestSerialNo();
log.info("cancel report requestSerialNo:{} data:{}", requestSerialNo, requestDataStr);
CancelReportRequestWrapper cancelReportRequestWrapper = JSON.parseObject(requestDataStr, CancelReportRequestWrapper.class);
TokenNecessary tokenNecessary = cancelReportRequestWrapper.decodeToken();
String token = tokenNecessary.getToken();
requestDataJsonObject.put(API_PARAM_TOKEN, token);
requestDataJsonObject.put(API_PARAM_AREA_CODE, cancelReportRequestWrapper.getArea());
String test = cancelReportRequestWrapper.getTest();
if (StringUtils.isNotBlank(test)) {
requestDataJsonObject.put(API_PARAM_TEST, test);
}
if (StringUtils.isNotBlank(cancelReportRequestWrapper.getPzxh())) {
requestDataJsonObject.put("pzxh", cancelReportRequestWrapper.getPzxh());
}
if (StringUtils.isNotBlank(cancelReportRequestWrapper.getReportType())) {
requestDataJsonObject.put("yzpzzlDm", cancelReportRequestWrapper.getReportType());
}
if (StringUtils.isNotBlank(cancelReportRequestWrapper.getDeclareDateStart())) {
requestDataJsonObject.put("skssqq", cancelReportRequestWrapper.getDeclareDateStart());
}
if (StringUtils.isNotBlank(cancelReportRequestWrapper.getDeclareDateEnd())) {
requestDataJsonObject.put("skssqz", cancelReportRequestWrapper.getDeclareDateEnd());
}
if (StringUtils.isNotBlank(cancelReportRequestWrapper.getSbuuid())) {
requestDataJsonObject.put("sbuuid", cancelReportRequestWrapper.getSbuuid());
}
if (StringUtils.isNotBlank(cancelReportRequestWrapper.getZsxmDm())) {
requestDataJsonObject.put("zsxmDm", cancelReportRequestWrapper.getZsxmDm());
}
try {
String etaxReportUrlFull = etaxReportUrl + apiConfig.getApiUrl();
log.info("url:{}", etaxReportUrlFull);
String requestJson = JSONUtil.toString(requestDataJsonObject);
log.info("request:{}", requestJson);
ResponseContent responseContent = RetryHttpHelper.retryPostJsonEntity(etaxReportUrlFull, requestJson);
String response = responseContent.getContent();
log.info("response:{}", response);
stopwatch.stop();
log.info("cancel report elapsed time:{}ms", stopwatch.elapsed(TimeUnit.MILLISECONDS));
return new ResponseHandlerTemplate<IReportResponse>() {
@Override
public CommonResponse<IReportResponse> handleSuccess(JSONObject jsonObject) {
String message = jsonObject.getString(ETAX_RESPONSE_MESSAGE_KEY);
return CommonResponse.success(message);
}
}.handle(response);
} catch (Exception e) {
log.error("cancel report error:", e);
throw new EtaxIncomeException(e);
}
}
}
package com.sxc.etaxincome.domain.command.report;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.google.common.base.Stopwatch;
import com.sxc.etaxincome.common.util.RetryHttpHelper;
import com.sxc.etaxincome.domain.business.IApiConfigManager;
import com.sxc.etaxincome.domain.exception.EtaxIncomeException;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
import com.sxc.etaxincome.domain.model.common.CommonResponse;
import com.sxc.etaxincome.domain.model.cookie.TokenNecessary;
import com.sxc.etaxincome.domain.model.report.ApiConfig;
import com.sxc.etaxincome.domain.model.report.ForceReportRequestWrapper;
import com.sxc.etaxincome.domain.model.report.IReportResponse;
import com.sxc.etaxincome.domain.template.ResponseHandlerTemplate;
import com.sxc.etaxincome.enums.ApiCode;
import com.sxc.framework.common.httpclient.ResponseContent;
import com.sxc.framework.common.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.concurrent.TimeUnit;
import static com.sxc.etaxincome.domain.constants.EtaxReportConstants.*;
@Slf4j
@Component(value = "forceReportCommand")
public class ForceReportCommand implements IReportCommand {
@NacosValue(value = "${url.etax.report}", autoRefreshed = true)
private String etaxReportUrl;
@Autowired
private IApiConfigManager apiConfigManager;
@Override
public CommonResponse<IReportResponse> execute(CommonRequestWrapper commonRequestWrapper) {
Stopwatch stopwatch = Stopwatch.createStarted();
ApiConfig apiConfig = apiConfigManager.getApiConfig(ApiCode.FORCE_REPORT.getCode());
JSONObject requestDataJsonObject = new JSONObject();
String requestDataStr = commonRequestWrapper.getData();
String requestSerialNo = commonRequestWrapper.getRequestSerialNo();
log.info("cancel report requestSerialNo:{} data:{}", requestSerialNo, requestDataStr);
ForceReportRequestWrapper forceReportRequestWrapper = JSON.parseObject(requestDataStr, ForceReportRequestWrapper.class);
TokenNecessary tokenNecessary = forceReportRequestWrapper.decodeToken();
String token = tokenNecessary.getToken();
requestDataJsonObject.put(API_PARAM_TOKEN, token);
requestDataJsonObject.put(API_PARAM_AREA_CODE, forceReportRequestWrapper.getArea());
String test = forceReportRequestWrapper.getTest();
if (StringUtils.isNotBlank(test)) {
requestDataJsonObject.put(API_PARAM_TEST, test);
}
if (StringUtils.isNotBlank(forceReportRequestWrapper.getPch())) {
requestDataJsonObject.put("pch", forceReportRequestWrapper.getPch());
}
if (StringUtils.isNotBlank(forceReportRequestWrapper.getReportType())) {
requestDataJsonObject.put("yzpzzlDm", forceReportRequestWrapper.getReportType());
}
if (StringUtils.isNotBlank(forceReportRequestWrapper.getSbxh())) {
requestDataJsonObject.put("sbxh", forceReportRequestWrapper.getSbxh());
}
if (StringUtils.isNotBlank(forceReportRequestWrapper.getForceReason())) {
requestDataJsonObject.put("qtyy", forceReportRequestWrapper.getForceReason());
}
try {
String etaxReportUrlFull = etaxReportUrl + apiConfig.getApiUrl();
log.info("url:{}", etaxReportUrlFull);
String requestJson = JSONUtil.toString(requestDataJsonObject);
log.info("request:{}", requestJson);
ResponseContent responseContent = RetryHttpHelper.retryPostJsonEntity(etaxReportUrlFull, requestJson);
String response = responseContent.getContent();
log.info("response:{}", response);
stopwatch.stop();
log.info("cancel report elapsed time:{}ms", stopwatch.elapsed(TimeUnit.MILLISECONDS));
return new ResponseHandlerTemplate<IReportResponse>() {
@Override
public CommonResponse<IReportResponse> handleSuccess(JSONObject jsonObject) {
String message = jsonObject.getString(ETAX_RESPONSE_MESSAGE_KEY);
return CommonResponse.success(message);
}
}.handle(response);
} catch (Exception e) {
log.error("cancel report error:", e);
throw new EtaxIncomeException(e);
}
}
}
package com.sxc.etaxincome.domain.command.report;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.google.common.base.Stopwatch;
import com.sxc.etaxincome.common.util.RetryHttpHelper;
import com.sxc.etaxincome.domain.business.IApiConfigManager;
import com.sxc.etaxincome.domain.constants.EtaxReportConstants;
import com.sxc.etaxincome.domain.exception.EtaxIncomeException;
import com.sxc.etaxincome.domain.handler.transferparam.IReportTransferParamHandler;
import com.sxc.etaxincome.domain.model.cookie.TokenNecessary;
import com.sxc.etaxincome.domain.model.report.*;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
import com.sxc.etaxincome.domain.model.common.CommonResponse;
import com.sxc.etaxincome.domain.template.ResponseHandlerTemplate;
import com.sxc.etaxincome.enums.ApiCode;
import com.sxc.framework.common.httpclient.ResponseContent;
import com.sxc.framework.common.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.concurrent.TimeUnit;
import static com.sxc.etaxincome.domain.constants.EtaxReportConstants.*;
@Slf4j
@Component(value = "generalTaxpayerReportCommand")
public class GeneralTaxpayerReportCommand implements IReportCommand {
@NacosValue(value = "${url.etax.report}", autoRefreshed = true)
private String etaxReportUrl;
@Autowired
private IApiConfigManager apiConfigManager;
@Autowired
private List<IReportTransferParamHandler> reportTransferParamHandlerList;
@Override
public CommonResponse<IReportResponse> execute(CommonRequestWrapper commonRequestWrapper) {
Stopwatch stopwatch = Stopwatch.createStarted();
ApiConfig apiConfig = apiConfigManager.getApiConfig(ApiCode.REPORT.getCode());
JSONObject requestDataJsonObject = new JSONObject();
String requestDataStr = commonRequestWrapper.getData();
String requestSerialNo = commonRequestWrapper.getRequestSerialNo();
log.info("report requestSerialNo:{} data:{}", requestSerialNo, requestDataStr);
ReportRequestWrapper reportRequestWrapper = JSON.parseObject(requestDataStr, ReportRequestWrapper.class);
TokenNecessary tokenNecessary = reportRequestWrapper.decodeToken();
String token = tokenNecessary.getToken();
requestDataJsonObject.put(API_PARAM_TOKEN, token);
requestDataJsonObject.put(API_PARAM_AREA_CODE, reportRequestWrapper.getArea());
String test = reportRequestWrapper.getTest();
if (StringUtils.isNotBlank(test)) {
requestDataJsonObject.put(API_PARAM_TEST, test);
}
reportTransferParamHandlerList.forEach(e -> e.handle(apiConfig, commonRequestWrapper, reportRequestWrapper));
requestDataJsonObject.put("formData", reportRequestWrapper.getFormData());
try {
String etaxReportUrlFull = etaxReportUrl + apiConfig.getApiUrl();
log.info("url:{}", etaxReportUrlFull);
String requestJson = JSONUtil.toString(requestDataJsonObject);
log.info("request:{}", requestJson);
ResponseContent responseContent = RetryHttpHelper.retryPostJsonEntity(etaxReportUrlFull, requestJson);
String response = responseContent.getContent();
log.info("response:{}", response);
stopwatch.stop();
log.info("query cancel page list elapsed time:{}ms", stopwatch.elapsed(TimeUnit.MILLISECONDS));
return new ResponseHandlerTemplate<IReportResponse>() {
@Override
public CommonResponse<IReportResponse> handleSuccess(JSONObject jsonObject) {
JSONObject resultJsonObject = jsonObject.getJSONObject(EtaxReportConstants.ETAX_RESPONSE_DATA_KEY);
ReportResponse reportResponse = new ReportResponse();
reportResponse.putAll(resultJsonObject);
return CommonResponse.success(reportResponse);
}
}.handle(response);
} catch (Exception e) {
log.error("report error:", e);
throw new EtaxIncomeException(e);
}
}
}
package com.sxc.etaxincome.domain.command.report;
import com.sxc.etaxincome.domain.model.report.IReportResponse;
import com.sxc.etaxincome.domain.model.common.CommonResponse;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
public interface IReportCommand {
CommonResponse<IReportResponse> execute(CommonRequestWrapper commonRequestWrapper);
}
package com.sxc.etaxincome.domain.constants;
public class CommonConstants {
private CommonConstants() {
}
public static final String SUCCESS = "00";
}
package com.sxc.etaxincome.domain.constants;
public class EtaxExceptionConstants {
private EtaxExceptionConstants() {
}
public static final String ETAX_EXCEPTION_TAX_BUSY = "税号访问频繁,请10秒后再试";
public static final String ETAX_EXCEPTION_TAX_NULL = "空值";
}
package com.sxc.etaxincome.domain.constants;
public class EtaxReportConstants {
private EtaxReportConstants() {
}
public static final String ETAX_RESPONSE_CODE_KEY = "code";
public static final String ETAX_RESPONSE_MESSAGE_KEY = "message";
public static final String ETAX_RESPONSE_DATA_KEY = "data";
public static final String ETAX_ERROR_INVALID_TOKEN = "w4000000";
public static final String ETAX_SUCCESS_CODE = "0";
public static final String ETAX_ERROR_CODE = "-1";
public static final String PROXY_KEY_IN_COOKIE = "psswoeoeqqxxx";
public static final String API_PARAM_TOKEN = "cookie";
public static final String API_PARAM_AREA_CODE = "zoneCode";
public static final String API_PARAM_TEST = "test";
}
package com.sxc.etaxincome.domain.exception;
/**
* @author caosongqing
* @date 2024/4/23
* @description
*/
public class EtaxIncomeException extends RuntimeException {
public EtaxIncomeException(final String errorMessage, final Object... args) {
super(String.format(errorMessage, args));
}
public EtaxIncomeException(final Throwable cause) {
super(cause);
}
}
package com.sxc.etaxincome.domain.format;
public class ReportParamFormat {
private ReportParamFormat() {
}
public static String formatReportParam(String tableCode, String row, String col) {
return String.format("%s_row_%s|%s_col_%s", tableCode, row, tableCode, col);
}
}
package com.sxc.etaxincome.domain.handler.transferparam;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
import com.sxc.etaxincome.domain.model.report.ApiConfig;
import com.sxc.etaxincome.domain.model.report.ReportRequestWrapper;
/**
* @author caosongqing
* @date 2023/9/7
* @description
*/
public interface IReportTransferParamHandler {
void handle(ApiConfig apiConfig, CommonRequestWrapper requestCommonWrapper, ReportRequestWrapper reportRequestWrapper);
}
package com.sxc.etaxincome.domain.handler.transferparam;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
import com.sxc.etaxincome.domain.model.report.ApiConfig;
import com.sxc.etaxincome.domain.model.report.ApiParamMapping;
import com.sxc.etaxincome.domain.model.report.ReportRequestWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Component
public class MappingReportTransferParamHandler implements IReportTransferParamHandler {
@Override
public void handle(ApiConfig apiConfig, CommonRequestWrapper requestCommonWrapper, ReportRequestWrapper reportRequestWrapper) {
List<ApiParamMapping> apiParamMappingList = apiConfig.getApiParamMappingList();
Map<String, String> apiParamMapping = apiParamMappingList.stream().collect(Collectors.toMap(ApiParamMapping::getApiParamName, ApiParamMapping::getEtaxParamName, (k1, k2) -> k1));
LinkedHashMap<String, String> requestFormDataJsonObject = reportRequestWrapper.getFormData();
LinkedHashMap<String, String> targetFormDataJsonObject = Maps.newLinkedHashMapWithExpectedSize(10);
for (ApiParamMapping apiParamMappingEach : apiParamMappingList) {
String dataKey = apiParamMappingEach.getApiParamName();
log.info("dataKey:{}", dataKey);
if (requestFormDataJsonObject.containsKey(dataKey)) {
targetFormDataJsonObject.put(apiParamMapping.get(dataKey), requestFormDataJsonObject.get(dataKey));
}
}
reportRequestWrapper.setFormData(targetFormDataJsonObject);
}
}
package com.sxc.etaxincome.domain.infrastructure;
import com.alicp.jetcache.Cache;
/**
* @author caosongqing
* @date 2023/2/10
* @description
*/
public interface ICacheService {
Cache<String ,String> getJetCache();
String get(String key);
void put(String key, String value, long expiredTimeSeconds);
boolean del(String key);
}
package com.sxc.etaxincome.domain.infrastructure.impl;
import com.alicp.jetcache.Cache;
import com.alicp.jetcache.CacheManager;
import com.alicp.jetcache.anno.CacheType;
import com.alicp.jetcache.template.QuickConfig;
import com.sxc.etaxincome.domain.infrastructure.ICacheService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
/**
* @author caosongqing
* @date 2023/3/22
* @description
*/
@Slf4j
@Service
public class CacheService implements ICacheService {
public static final long DEFAULT_EXPIRED_TIME = 3600L;
public static final String GX2022_AREA_LIST_KEY_PREFIX = "gx2022:areaList";
public static final String DATA_PRIVILEGE_AREA_KEY_PREFIX = "erm:dataPrivilege:area:%s";
public static final String DATA_PRIVILEGE_TAXNO_KEY_PREFIX = "erm:dataPrivilege:taxno:%s";
public static final String DATA_PRIVILEGE_TAXCOUNT_KEY_PREFIX = "erm:dataPrivilege:taxcount:%s";
public static final String GOODS_CATEGORY_KEY_PREFIX = "goods:category:%s";
public static final String COOKIE_KEY_PREFIX = "cookie:%s";
@Autowired
private CacheManager cacheManager;
private Cache<String, String> jetCache;
@PostConstruct
public void init() {
QuickConfig qc = QuickConfig.newBuilder("cache:makeout-invoice:")
.expire(Duration.ofSeconds(60 * 60L))
.cacheType(CacheType.REMOTE)
.syncLocal(true)
.build();
jetCache = cacheManager.getOrCreateCache(qc);
}
@Override
public String get(String key) {
return jetCache.get(key);
}
@Override
public void put(String key, String value, long expiredTimeSeconds) {
jetCache.put(key, value, expiredTimeSeconds, TimeUnit.SECONDS);
}
@Override
public Cache<String ,String> getJetCache() {
return this.jetCache;
}
@Override
public boolean del(String key) {
return jetCache.remove(key);
}
}
package com.sxc.etaxincome.domain.init;
import cn.hutool.http.HttpUtil;
import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.sxc.etaxincome.domain.business.IVersionManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
/**
* @author caosongqing
* @date 2022/12/12
* @description
*/
@Slf4j
@Component
public class SendVersionRunner implements CommandLineRunner, Ordered {
@Autowired
private IVersionManager versionService;
@NacosValue(value = "${url.monitor.version}", autoRefreshed = true)
private String sendVersionUrl;
@NacosValue(value = "${send.version.enabled}", autoRefreshed = true)
private boolean sendVersionEnabled;
private void handle() {
log.info("sendVersionEnabled:{}", sendVersionEnabled);
if (sendVersionEnabled) {
try {
String response = HttpUtil.get(sendVersionUrl + "?version=" + versionService.version());
log.info("start application send version response:{}", response);
} catch (Exception e) {
log.error("send version error:{}", e);
}
}
}
@Override
public void run(String... args) throws Exception {
handle();
}
@Override
public int getOrder() {
return 0;
}
}
package com.sxc.etaxincome.domain.job;
import cn.hutool.http.HttpUtil;
import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.sxc.etaxincome.domain.business.IVersionManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
/**
* @author caosongqing
* @date 2022/12/23
* @description
*/
@Configuration
@EnableScheduling
@Slf4j
public class SendVersionJob {
@Autowired
private IVersionManager versionManager;
@NacosValue(value = "${url.monitor.version}", autoRefreshed = true)
private String sendVersionUrl;
@NacosValue(value = "${send.version.enabled}", autoRefreshed = true)
private boolean sendVersionEnabled;
@Scheduled(cron = "${job.send-version.cron}")
private void handle() {
log.info("sendVersionEnabled:{}", sendVersionEnabled);
if (sendVersionEnabled) {
try {
String response = HttpUtil.get(sendVersionUrl + "?version=" + versionManager.version());
log.info("job send version response:{}", response);
} catch (Exception e) {
log.error("send version error:", e);
}
}
}
}
package com.sxc.etaxincome.domain.model.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author caosongqing
* @date 2022/11/17
* @description
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class AggregateVersion {
private ApiVersionLog apiVersionLog;
private BuildVersion buildVersion;
}
package com.sxc.etaxincome.domain.model.common;
import lombok.Data;
import java.util.List;
/**
* @author caosongqing
* @date 2022/8/23
* @description
*/
@Data
public class ApiVersion {
private String latestVersion;
private List<ApiVersionLog> versionList;
public ApiVersionLog getLatestVersion() {
for (ApiVersionLog apiVersionLog : versionList) {
if (latestVersion.equals(apiVersionLog.getVersion())) {
return apiVersionLog;
}
}
return new ApiVersionLog();
}
}
package com.sxc.etaxincome.domain.model.common;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.util.Date;
/**
* @author caosongqing
* @date 2022/8/23
* @description
*/
@Data
public class ApiVersionLog {
private String version;
private String previousVersion;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date date;
private String description;
}
package com.sxc.etaxincome.domain.model.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author caosongqing
* @date 2023/1/31
* @description
*/
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public class BuildVersion {
private String projectVersion;
private String revision;
private String branch;
private String date;
}
package com.sxc.etaxincome.domain.model.common;
import com.alibaba.fastjson2.JSON;
import com.sxc.etaxincome.domain.exception.EtaxIncomeException;
import com.sxc.etaxincome.domain.model.cookie.CookieCarrier;
import com.sxc.etaxincome.domain.model.cookie.TokenNecessary;
import com.sxc.framework.common.code.EncryptUtil;
import com.sxc.framework.common.json.JSONUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
import static com.sxc.etaxincome.domain.constants.EtaxReportConstants.PROXY_KEY_IN_COOKIE;
/**
* @author caosongqing
* @date 2022/9/21
* @description
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public class BusinessCommonRequestWrapper implements Serializable {
private static final long serialVersionUID = -4090578281523166142L;
private String taxno;
private String area;
private String site;
private String token;
private String test;
public String getPlainToken() {
return this.decodeToken().getToken();
}
public TokenNecessary decodeToken() {
String decodeToken = token;
if (token.startsWith(EncryptUtil.FKEY)) {
decodeToken = EncryptUtil.decryptAesCk(StringUtils.replace(token, " ", "+"));
}
String targetToken;
String proxy;
String session = null;
if (JSONUtil.isJSONObject(decodeToken)) {
CookieCarrier cookieCarrier = JSON.parseObject(decodeToken, CookieCarrier.class);
targetToken = cookieCarrier.getCookie();
proxy = cookieCarrier.getProxyIp();
session = cookieCarrier.getSession();
} else {
if (decodeToken.length() < 100) {
throw new IllegalArgumentException("Token不合法,请检查");
}
targetToken = delCookieProxy(decodeToken);
proxy = getCookieProxy(decodeToken);
}
return TokenNecessary.builder().token(targetToken).proxy(proxy).session(session).build();
}
public String getCookieProxy(String cookie) {
if (cookie != null && cookie.contains(PROXY_KEY_IN_COOKIE)) {
String[] ss = cookie.split(";");
for (int i = 0; i < ss.length; i++) {
if (ss[i].contains(PROXY_KEY_IN_COOKIE)) {
String[] ssss = ss[i].split("=");
return ssss[1];
}
}
}
return "";
}
public String delCookieProxy(String cookie) {
if (cookie != null && cookie.contains(PROXY_KEY_IN_COOKIE)) {
String[] ss = cookie.split(";");
for (int i = 0; i < ss.length; i++) {
if (ss[i].contains(PROXY_KEY_IN_COOKIE)) {
return cookie.replace(ss[i], "");
}
}
}
return cookie;
}
public void doCheckRequestBusinessParam() {
if (StringUtils.isBlank(this.getArea())) {
throw new EtaxIncomeException("area is empty");
} else if (this.getArea().length() != 4) {
throw new EtaxIncomeException("area is invalid");
}
if (StringUtils.isBlank(this.getTaxno())) {
throw new EtaxIncomeException("taxno is empty");
}
if (StringUtils.isBlank(this.getToken())) {
throw new EtaxIncomeException("token is empty");
}
}
}
package com.sxc.etaxincome.domain.model.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @author caosongqing
* @date 2022/9/20
* @description
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CommonRequestWrapper implements Serializable {
private static final long serialVersionUID = 191691175092676480L;
/**
* request serial number
*/
@NotNull(message = "请求流水号不能为空")
@Length(message = "请求流水号最大长度范围1-50", min = 1, max = 50)
private String requestSerialNo;
/**
* username
*/
@NotNull(message = "用户名不能为空")
@Length(message = "用户名不能为空", min = 1)
private String username;
/**
* sign
*/
@NotNull(message = "签名字符串不能为空")
@Length(message = "签名字符串不能为空", min = 1)
private String sign;
/**
* 接口类型
*/
private String rtype;
/**
* timestamp
*/
@NotNull(message = "时间戳不能为空")
@Length(message = "时间戳格式为yyyyMMddHHmmss", min = 14, max = 14)
private String timestamp;
/**
* request business data
*/
@NotNull(message = "业务数据不能为空")
@Length(message = "业务数据不能为空", min = 1)
private String data;
}
package com.sxc.etaxincome.domain.model.common;
import com.alibaba.fastjson2.annotation.JSONField;
import com.google.common.collect.Lists;
import com.sxc.etaxincome.enums.ResponseCode;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* @author caosongqing
* @date 2024/4/23
* @description
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CommonResponse<T> implements Serializable {
private static final long serialVersionUID = 3212054091102827090L;
/**
* code
*/
@JSONField(name = "resultCode")
private String resultCode;
/**
* message
*/
@JSONField(name = "resultMessage")
private String resultMessage;
/**
* data
*/
@JSONField(name = "data")
@SuppressWarnings("java:S1948")
private T data;
private CommonResponse(String resultCode, String resultMessage) {
this.resultCode = resultCode;
this.resultMessage = resultMessage;
this.data = null;
}
public boolean resultSuccess() {
return ResponseCode.SUCCESS.getCode().equals(resultCode);
}
public boolean invalidToken() {
return ResponseCode.TOKEN_INVALID.getCode().equals(resultCode);
}
public boolean requiredQrcodeSecurity() {
return ResponseCode.ETAX_QR_CODE_CHECK.getCode().equals(resultCode);
}
public boolean notifyIgnore() {
List<ResponseCode> ignoreResponseCodeList = Lists.newArrayListWithExpectedSize(10);
ignoreResponseCodeList.add(ResponseCode.SUCCESS);
ignoreResponseCodeList.add(ResponseCode.ETAX_LOGIN_INVALID);
ignoreResponseCodeList.add(ResponseCode.ETAX_QR_CODE_CHECK);
ignoreResponseCodeList.add(ResponseCode.TOKEN_INVALID);
ignoreResponseCodeList.add(ResponseCode.MAKEOUT_INVOICE_NO_EXPIRED);
ignoreResponseCodeList.add(ResponseCode.MAKEOUT_INVOICE_NO_REQUIRED);
ignoreResponseCodeList.add(ResponseCode.ERROR_TAX);
ignoreResponseCodeList.add(ResponseCode.MAKEOUT_INVOICE_PROXY_ERROR);
ignoreResponseCodeList.add(ResponseCode.NOT_FOUND_ITEM);
ignoreResponseCodeList.add(ResponseCode.OVER_CREDIT_LINE);
ignoreResponseCodeList.add(ResponseCode.FREEZE_CREDIT_LINE);
ignoreResponseCodeList.add(ResponseCode.DISCOUNT_OVER_ITEM_AMOUNT);
ignoreResponseCodeList.add(ResponseCode.WRONG_FORMAT_BANK_ACCOUNT);
ignoreResponseCodeList.add(ResponseCode.ILLEGAL_PARAM);
ignoreResponseCodeList.add(ResponseCode.RESPONSE_419_ERROR);
ignoreResponseCodeList.add(ResponseCode.NOT_FOUND_BUYER_TAXNO);
return ignoreResponseCodeList.contains(ResponseCode.as(resultCode));
}
public static <T> CommonResponse<T> success(T data) {
return new CommonResponse<>(ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getDesc(), data);
}
public static <T> CommonResponse<T> success() {
return success(null);
}
public static <T> CommonResponse<T> success(String message) {
return new CommonResponse<>(ResponseCode.SUCCESS.getCode(), message);
}
public static <T> CommonResponse<T> error(ResponseCode responseCode) {
return new CommonResponse<>(responseCode.getCode(), responseCode.getDesc());
}
public static <T> CommonResponse<T> error(ResponseCode responseCode, String msg) {
return new CommonResponse<>(responseCode.getCode(), msg);
}
public static <T> CommonResponse<T> error(ResponseCode responseCode, T data) {
return new CommonResponse<>(responseCode.getCode(), responseCode.getDesc(), data);
}
public static <T> CommonResponse<T> error(ResponseCode responseCode, String msg, T data) {
return new CommonResponse<>(responseCode.getCode(), msg, data);
}
public static <T> CommonResponse<T> error(String code, String msg) {
return new CommonResponse<>(code, msg);
}
public static <T> CommonResponse<T> error(String msg) {
return new CommonResponse<>(ResponseCode.ERROR.getCode(), msg);
}
}
package com.sxc.etaxincome.domain.model.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author caosongqing
* @date 2023/1/11
* @description
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DateTimeRange {
private String startDateTime;
private String endDateTime;
}
package com.sxc.etaxincome.domain.model.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author caosongqing
* @date 2023/4/19
* @description
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PageList<E> {
private Integer total;
private Integer pageNumber;
private Integer pageSize;
private List<E> list;
}
package com.sxc.etaxincome.domain.model.cookie;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author caosongqing
* @date 2023/3/30
* @description
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CookieCarrier {
private String cookie;
private String proxyIp;
private String session;
}
package com.sxc.etaxincome.domain.model.cookie;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author caosongqing
* @date 2023/3/28
* @description
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TokenNecessary {
private String token;
private String proxy;
private String session;
}
package com.sxc.etaxincome.domain.model.report;
import lombok.Data;
@Data
public class AnalysisCriteria {
private String username;
private String taxno;
private String areaCode;
private String startDate;
private String endDate;
private String startDateTime;
private String endDateTime;
private String countType;
}
package com.sxc.etaxincome.domain.model.report;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ApiConfig {
private String apiCode;
private String apiUrl;
private List<ApiParamMapping> apiParamMappingList;
}
package com.sxc.etaxincome.domain.model.report;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ApiParamMapping {
private String apiParamName;
private String etaxParamName;
}
package com.sxc.etaxincome.domain.model.report;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author caosongqing
* @date 2023/4/13
* @description
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class AreaCodeStat {
private String areaCode;
private String name;
private Long taxnoCount;
private Long requsetCount;
}
package com.sxc.etaxincome.domain.model.report;
import com.sxc.etaxincome.domain.model.common.BusinessCommonRequestWrapper;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public class CancelReportRequestWrapper extends BusinessCommonRequestWrapper {
private String pzxh;
private String reportType;
private String declareDateStart;
private String declareDateEnd;
private String sbuuid;
private String zsxmDm;
}
package com.sxc.etaxincome.domain.model.report;
import com.alibaba.fastjson.JSONObject;
public class CancelReportResponse extends JSONObject implements IReportResponse {
}
package com.sxc.etaxincome.domain.model.report;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author caosongqing
* @date 2023/11/2
* @description
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ExceptionStat {
private String message;
private Integer count;
}
package com.sxc.etaxincome.domain.model.report;
import com.sxc.etaxincome.domain.model.common.BusinessCommonRequestWrapper;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public class ForceReportRequestWrapper extends BusinessCommonRequestWrapper {
/**
* ???
*/
private String pch;
/**
* 申报序号
*/
private String sbxh;
/**
* 申报种类
*/
private String reportType;
/**
* 强制提交原因
*/
private String forceReason;
}
package com.sxc.etaxincome.domain.model.report;
public interface IReportRequest {
}
package com.sxc.etaxincome.domain.model.report;
public interface IReportResponse {
}
package com.sxc.etaxincome.domain.model.report;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @ProjectName: etax-income-api
* @Package: com.sxc.etaxincome.domain.model.report
* @ClassName: IncomeCompletePeriod
* @Author: ddx
* @Description:
* @Date: 2024-07-02 14:25
* @Version: 1.0
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class IncomeCompletePeriod {
private JSONObject requestParam;
private JSONObject cookie;
private String reqContext;
private String resContext;
}
package com.sxc.etaxincome.domain.model.report;
import com.sxc.etaxincome.domain.model.common.BusinessCommonRequestWrapper;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public class QueryCancelListRequestWrapper extends BusinessCommonRequestWrapper {
/**
* 申报日期(起)
*/
private String reportDateStart;
/**
* 申报日期(止)
*/
private String reportDateEnd;
/**
* 当前页号
*/
private Integer pageNumber;
/**
* 每页记录数
*/
private Integer pageSize;
}
package com.sxc.etaxincome.domain.model.report;
import com.sxc.etaxincome.domain.model.common.BusinessCommonRequestWrapper;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public class QueryReportItemRequestWrapper extends BusinessCommonRequestWrapper {
/**
* 税款所属期(起)
*/
private String declareDateStart;
/**
* 税款所属期(止)
*/
private String declareDateEnd;
/**
* 申报uuid
*/
private String sbuuid;
/**
* 报表id
*/
private String reportType;
}
package com.sxc.etaxincome.domain.model.report;
import com.sxc.etaxincome.domain.model.common.BusinessCommonRequestWrapper;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public class QueryReportListRequestWrapper extends BusinessCommonRequestWrapper {
/**
* 申报日期(起)
*/
private String reportDateStart;
/**
* 申报日期(止)
*/
private String reportDateEnd;
/**
* 税款所属期(起)
*/
private String declareDateStart;
/**
* 税款所属期(止)
*/
private String declareDateEnd;
/**
* 作废状态
*/
private String cancelStatus;
/**
* 报表类型
*/
private String reportType;
/**
* 更正类型
*/
private List<String> updateTypeList;
/**
* 分页号
*/
private Integer pageNumber;
/**
* 每页记录数
*/
private Integer pageSize;
}
package com.sxc.etaxincome.domain.model.report;
import com.alibaba.fastjson.JSONObject;
public class ReportItemResponse extends JSONObject implements IReportResponse {
}
package com.sxc.etaxincome.domain.model.report;
import com.alibaba.fastjson.JSONObject;
public class ReportRequest implements IReportRequest {
private String cookie;
private String zoneCode;
private JSONObject formData;
}
package com.sxc.etaxincome.domain.model.report;
import com.alibaba.fastjson.JSONObject;
import com.sxc.etaxincome.domain.model.common.BusinessCommonRequestWrapper;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.LinkedHashMap;
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public class ReportRequestWrapper extends BusinessCommonRequestWrapper {
private LinkedHashMap<String, String> formData;
}
package com.sxc.etaxincome.domain.model.report;
import com.alibaba.fastjson.JSONObject;
public class ReportResponse extends JSONObject implements IReportResponse {
}
package com.sxc.etaxincome.domain.model.report;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @ProjectName: etax-report-api
* @Package: com.sxc.etaxincome.domain.model.report
* @ClassName: ReportResultMapping
* @Author: ddx
* @Description: 报表转换结果
* @Date: 2024-04-25 17:39
* @Version: 1.0
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ReportResultMapping {
private String etaxExportName;
private String etaxExportValue;
}
package com.sxc.etaxincome.domain.model.report;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author caosongqing
* @date 2023/11/10
* @description
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public class SellerGrowth {
private String date;
private int count;
}
package com.sxc.etaxincome.domain.model.sysManage;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author ddx
* @date 2024/05/28
* @description
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SysAppUserSummary {
private String userName;
private String nickName;
private String status;
}
package com.sxc.etaxincome.domain.support;
import com.google.common.collect.Lists;
import com.sxc.etaxincome.domain.exception.EtaxIncomeException;
import com.sxc.etaxincome.domain.model.common.DateTimeRange;
import com.sxc.framework.common.date.DateUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* @author caosongqing
* @date 2023/1/11
* @description
*/
public class DateProvider {
private DateProvider() {
}
/**
* 获取给定时间前一小时的时间
* @param date
* @return java.util.Date
*/
public static Date beforeOneHour(Date date) {
Calendar calendar = Calendar.getInstance();
/*
HOUR_OF_DAY 指示一天中的小时
*/
calendar.setTime(date);
calendar.add(Calendar.HOUR_OF_DAY, -1);
return calendar.getTime();
}
/**
* 获取给定时间后一小时的时间
* @param date
* @return java.util.Date
*/
public static Date afterOneHour(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
/*
HOUR_OF_DAY 指示一天中的小时
*/
calendar.add(Calendar.HOUR_OF_DAY, 1);
return calendar.getTime();
}
public static DateTimeRange getHourRange(Date hourTime) {
String currentHourTimeStr = DateUtils.date2Str(hourTime, new SimpleDateFormat("yyyy-MM-dd HH"));
return DateTimeRange.builder()
.startDateTime(currentHourTimeStr + ":00:00")
.endDateTime(currentHourTimeStr + ":59:59")
.build();
}
public static DateTimeRange getLastHourRange(Date date) {
Date lastHourTime = beforeOneHour(date);
return getHourRange(lastHourTime);
}
public static DateTimeRange getNextHour(Date date) {
Date nextHourTime = afterOneHour(date);
return getHourRange(nextHourTime);
}
public static DateTimeRange today() {
String today = DateUtils.getToday(DateUtils.getYmdDash());
return renderDateRange(today, today);
}
public static DateTimeRange yesterday() {
String yesterday = DateUtils.getYesterday();
return renderDateRange(yesterday, yesterday);
}
public static DateTimeRange lastOneWeekUntilYesterday() {
try {
String yesterday = DateUtils.getYesterday();
String dateStart = DateUtils.formatAddDate(yesterday, DateUtils.YMD_DASH, -6);
String dateEnd = yesterday;
return renderDateRange(dateStart, dateEnd);
} catch (Exception e) {
throw new EtaxIncomeException("get last one week until yesterday error");
}
}
public static DateTimeRange pastNDays(int n) {
try {
String today = DateUtils.getToday(DateUtils.getYmdDash());
String dateStart = DateUtils.formatAddDate(today, DateUtils.YMD_DASH, -1 * n);
String dateEnd = DateUtils.getYesterday();
return renderDateRange(dateStart, dateEnd);
} catch (Exception e) {
throw new EtaxIncomeException("get past n days error");
}
}
public static DateTimeRange lastWeek() {
try {
Date mondayDate = thisWeekMonday();
String mondayDateStr = DateUtils.date2Str(mondayDate, DateUtils.getYmdDash());
String dateStart = DateUtils.formatAddDate(mondayDateStr, DateUtils.YMD_DASH, -7);
String dateEnd = DateUtils.formatAddDate(mondayDateStr, DateUtils.YMD_DASH, -1);
return renderDateRange(dateStart, dateEnd);
} catch (Exception e) {
throw new EtaxIncomeException("get last week error");
}
}
/**
* 获取当前日期的本周一是几号
*
* @return 本周一的日期
*/
public static Date thisWeekMonday() {
return thisWeekMonday(new Date());
}
public static Date thisWeekMonday(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 获得当前日期是一个星期的第几天
// 获取的数表示的是每个星期的第几天,不能改变,其中星期日为第一天
// 如果是星期日则获取天数时获取到的数字为1 在后面进行相减的时候出错
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
cal.setFirstDayOfWeek(Calendar.MONDAY);
// 获得当前日期是一个星期的第几天
int day = cal.get(Calendar.DAY_OF_WEEK);
// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
// cal.getFirstDayOfWeek()根据前面的设置来动态的改变此值
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
return cal.getTime();
}
public static String pastOneWeekDate() {
String today = DateUtils.getToday(DateUtils.getYmdDash());
return pastOneWeekDate(today);
}
public static String pastOneWeekDate(String dateStr) {
try {
return DateUtils.formatAddDate(dateStr, DateUtils.YMD_DASH, -7);
} catch (ParseException e) {
throw new EtaxIncomeException("get past monday error");
}
}
public static String lastWeekMonday() {
Date mondayDate = thisWeekMonday();
String mondayDateStr = DateUtils.date2Str(mondayDate, DateUtils.getYmdDash());
return pastOneWeekDate(mondayDateStr);
}
public static DateTimeRange lastMonth() {
String dateStart = DateUtils.getPastMonthFirst();
String dateEnd = DateUtils.getPastMonthLast();
return renderDateRange(dateStart, dateEnd);
}
public static DateTimeRange lastQuarter() {
String dateStart = DateUtils.getPastQuarterFirst();
String dateEnd = DateUtils.getPastQuarterLast();
return renderDateRange(dateStart, dateEnd);
}
public static DateTimeRange lastHalfAYear() {
String dateStart = DateUtils.getPastHalfAYearFirst();
String dateEnd = DateUtils.getPastHalfAYearLast();
return renderDateRange(dateStart, dateEnd);
}
public static DateTimeRange lastYear() {
int lastYear = DateUtils.getYear() - 1;
String dateStart = DateUtils.formatDate(DateUtils.getYearFirst(lastYear), DateUtils.YMD_DASH);
String dateEnd = DateUtils.formatDate(DateUtils.getYearLast(lastYear), DateUtils.YMD_DASH);
return renderDateRange(dateStart, dateEnd);
}
public static String pastMonthFirst() {
return DateUtils.getPastMonthFirst();
}
public static String pastYearFirst() {
int lastYear = DateUtils.getYear() - 1;
return DateUtils.formatDate(DateUtils.getYearFirst(lastYear), DateUtils.YMD_DASH);
}
public static DateTimeRange renderDateRange(String dateStart, String dateEnd) {
String dateTimeStart = getDateTimeHead(dateStart);
String dateTimeEnd = getDateTimeTail(dateEnd);
return DateTimeRange.builder()
.startDateTime(dateTimeStart)
.endDateTime(dateTimeEnd)
.build();
}
public static List<Date> hourTimeListYesterday() {
String yesterdayStr = DateUtils.getYesterday();
return hourTimeListDate(yesterdayStr);
}
public static List<Date> hourTimeListDate(String dateStr) {
List<Date> dateList = Lists.newArrayListWithExpectedSize(10);
Calendar calendar = Calendar.getInstance();
calendar.setTime(DateUtils.str2Date(dateStr, DateUtils.getYmdDash()));
for (int i = 0; i < 24; i++) {
dateList.add((Date) calendar.getTime().clone());
calendar.add(Calendar.HOUR_OF_DAY, 1);
}
return dateList;
}
public static List<Date> hourTimeListUntil(String fromDateStr, String untilDateStr) {
Date fromDate = DateUtils.str2Date(fromDateStr, DateUtils.getYmdhmsDash());
Date untilDate = DateUtils.str2Date(untilDateStr, DateUtils.getYmdhmsDash());
Calendar calendar = Calendar.getInstance();
calendar.setTime(fromDate);
Calendar untilCalendar = Calendar.getInstance();
untilCalendar.setTime(untilDate);
List<Date> dateList = Lists.newArrayListWithExpectedSize(10);
while(calendar.before(untilCalendar)) {
dateList.add((Date) calendar.getTime().clone());
calendar.add(Calendar.HOUR_OF_DAY, 1);
}
return dateList;
}
public static List<Date> mondayListUntil(String fromDateStr, String untilDateStr) {
Date fromDate = DateUtils.str2Date(fromDateStr, DateUtils.getYmdDash());
Date untilDate = DateUtils.str2Date(untilDateStr, DateUtils.getYmdDash());
Date firstMondayDate = firstMondayAfter(fromDate);
Calendar calendar = Calendar.getInstance();
calendar.setTime(firstMondayDate);
Calendar untilCalendar = Calendar.getInstance();
untilCalendar.setTime(untilDate);
List<Date> dateList = Lists.newArrayListWithExpectedSize(10);
while(calendar.before(untilCalendar)) {
dateList.add((Date) calendar.getTime().clone());
calendar.add(Calendar.DAY_OF_MONTH, 7);
}
return dateList;
}
public static DateTimeRange oneWeekDateRange(Date startDate) {
String statDateStr = DateUtils.date2Str(startDate, DateUtils.getYmdDash());
String toDateStr = DateUtils.date2Str(DateUtils.addDate(startDate, 6), DateUtils.getYmdDash());
return DateProvider.renderDateRange(statDateStr, toDateStr);
}
public static Date firstMondayAfter(Date fromDate) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(fromDate);
while(calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
return calendar.getTime();
}
public static DateTimeRange renderDateRange(String date) {
return renderDateRange(date, date);
}
public static List<String> dateListBetween(String from, String to) {
Date fromDate = DateUtils.str2Date(from, DateUtils.getYmdDash());
Date untilDate = DateUtils.str2Date(to, DateUtils.getYmdDash());
if (fromDate.after(untilDate)) {
return Collections.emptyList();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(fromDate);
Calendar untilCalendar = Calendar.getInstance();
untilCalendar.setTime(untilDate);
List<String> dateList = Lists.newArrayListWithExpectedSize(10);
while(!calendar.after(untilCalendar)) {
dateList.add(DateUtils.formatDate((Date) calendar.getTime().clone(), DateUtils.YMD_DASH));
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
return dateList;
}
public static String formatDateRange(DateTimeRange dateTimeRange) {
String startDateTime = dateTimeRange.getStartDateTime();
String endDateTime = dateTimeRange.getEndDateTime();
String startDate = startDateTime.substring(0, 10);
String endDate = endDateTime.substring(0, 10);
if (startDate.equals(endDate)) {
return startDate;
} else {
return startDateTime + "至" + endDateTime;
}
}
public static String getDateTimeHead(String date) {
return date + " 00:00:00";
}
public static String getDateTimeTail(String date) {
return date + " 23:59:59";
}
public static String getLongDateTimeHead(String date) {
if(date.contains("-") && !date.contains(":")) {
return getDateTimeHead(date);
}
return date;
}
public static String getLongDateTimeTail(String date) {
if(date.contains("-") && !date.contains(":")) {
return getDateTimeTail(date);
}
return date;
}
}
package com.sxc.etaxincome.domain.support;
import com.google.common.collect.Maps;
import java.util.Map;
/**
* @ProjectName: etax-income-api
* @Package: com.sxc.etaxincome.domain.support
* @ClassName: ZoneProvider
* @Author: ddx
* @Description: 地区码
* @Date: 2024-06-06 15:06
* @Version: 1.0
*/
public class ZoneProvider {
public static Map<String, String> zoneInfoMap = Maps.newHashMap();
static {
zoneInfoMap.put("1100","北京");
zoneInfoMap.put("1200","天津");
zoneInfoMap.put("1300","河北");
zoneInfoMap.put("1400","山西");
zoneInfoMap.put("1500","内蒙古");
zoneInfoMap.put("2100","辽宁");
zoneInfoMap.put("2102","大连");
zoneInfoMap.put("2200","吉林");
zoneInfoMap.put("2300","黑龙江");
zoneInfoMap.put("3100","上海");
zoneInfoMap.put("3200","江苏");
zoneInfoMap.put("3300","浙江");
zoneInfoMap.put("3302","宁波");
zoneInfoMap.put("3400","安徽");
zoneInfoMap.put("3500","福建");
zoneInfoMap.put("3502","厦门");
zoneInfoMap.put("3600","江西");
zoneInfoMap.put("3700","山东");
zoneInfoMap.put("3702","青岛");
zoneInfoMap.put("4100","河南");
zoneInfoMap.put("4200","湖北");
zoneInfoMap.put("4300","湖南");
zoneInfoMap.put("4400","广东");
zoneInfoMap.put("4403","深圳");
zoneInfoMap.put("4500","广西");
zoneInfoMap.put("4600","海南");
zoneInfoMap.put("5000","重庆");
zoneInfoMap.put("5100","四川");
zoneInfoMap.put("5200","贵州");
zoneInfoMap.put("5300","云南");
zoneInfoMap.put("5400","西藏");
zoneInfoMap.put("6100","陕西");
zoneInfoMap.put("6200","甘肃");
zoneInfoMap.put("6300","青海");
zoneInfoMap.put("6400","宁夏");
zoneInfoMap.put("6500","新疆");
zoneInfoMap.put("6789","空值");
}
public static String getZoneNameByCode(String zoneCode) {
return zoneInfoMap.get(zoneCode);
}
}
package com.sxc.etaxincome.domain.template;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.sxc.etaxincome.domain.model.common.CommonResponse;
import com.sxc.etaxincome.enums.ResponseCode;
import com.sxc.framework.common.json.JSONUtil;
import com.sxc.etaxincome.domain.constants.EtaxReportConstants;
import lombok.extern.slf4j.Slf4j;
/**
* handle response result
* @author caosongqing
* @date 2022/11/29
* @description
*/
@Slf4j
public abstract class ResponseHandlerTemplate<T> {
public CommonResponse<T> handle(String response) {
if (!JSONUtil.isJSONObject(response)) {
return CommonResponse.error(ResponseCode.ERROR);
}
CommonResponse<T> responseCommon;
JSONObject jsonObject = JSON.parseObject(response);
String responseCode = jsonObject.getString(EtaxReportConstants.ETAX_RESPONSE_CODE_KEY);
if (EtaxReportConstants.ETAX_SUCCESS_CODE.equals(responseCode)) {
responseCommon = this.handleSuccess(jsonObject);
} else if (EtaxReportConstants.ETAX_ERROR_CODE.equals(responseCode)) {
String errorMessage = jsonObject.getString(EtaxReportConstants.ETAX_RESPONSE_MESSAGE_KEY);
responseCommon = CommonResponse.error(errorMessage);
this.handleError(errorMessage);
} else if (EtaxReportConstants.ETAX_ERROR_INVALID_TOKEN.equals(responseCode)) {
responseCommon = CommonResponse.error(ResponseCode.TOKEN_INVALID);
} else {
String errorMessage = jsonObject.getString(EtaxReportConstants.ETAX_RESPONSE_MESSAGE_KEY);
responseCommon = CommonResponse.error(responseCode, errorMessage);
this.handleError(errorMessage);
}
return responseCommon;
}
protected abstract CommonResponse<T> handleSuccess(JSONObject jsonObject);
protected void handleError(String errorMessage) {
log.info("response errorMessage:{}", errorMessage);
}
}
{
"latestVersion": "1.0.3",
"versionList": [{
"version": "1.0.3",
"previousVersion": "1.0.2",
"date": "2024-05-15 16:55:00",
"description": "add api param priority"
},{
"version": "1.0.2",
"previousVersion": "1.0.1",
"date": "2024-04-25 14:30:00",
"description": "add 2002"
},{
"version": "1.0.1",
"previousVersion": "1.0.0",
"date": "2024-04-24 18:21:00",
"description": "add 1001/1901/2001"
},{
"version": "1.0.0",
"previousVersion": "",
"date": "2024-04-17 15:18:00",
"description": "init project"
}]
}
\ No newline at end of file
package com.sxc.etaxincome.domain.format;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ReportParamFormatTest {
@Test
public void testFormatReportParam() {
String result = ReportParamFormat.formatReportParam("A06488", "37", "03");
String expected = "A06488_row_37|A06488_col_03";
assertEquals(expected, result);
}
}
\ No newline at end of file
package com.sxc.etaxincome.domain.handler.transferparam;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.sxc.etaxincome.domain.model.common.CommonRequestWrapper;
import com.sxc.etaxincome.domain.model.report.ApiConfig;
import com.sxc.etaxincome.domain.model.report.ApiParamMapping;
import com.sxc.etaxincome.domain.model.report.ReportRequestWrapper;
import com.sxc.framework.common.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import java.util.LinkedHashMap;
import java.util.List;
@Slf4j
public class MappingReportTransferParamHandlerTest {
@Test
public void testHandle() {
MappingReportTransferParamHandler mappingReportTransferParamHandler = new MappingReportTransferParamHandler();
List<ApiParamMapping> apiParamMappingList = Lists.newArrayListWithExpectedSize(10);
apiParamMappingList.add(ApiParamMapping.builder().etaxParamName("getObjFromList(ywbw.sbZzsYbnsr,'ewblxh','1').asysljsxse").apiParamName("A06493_row_01|A06493_col_01").build());
apiParamMappingList.add(ApiParamMapping.builder().etaxParamName("getObjFromList(ywbw.sbZzsYbnsr,'ewblxh','1').yshwxse").apiParamName("A06493_row_02|A06493_col_01").build());
apiParamMappingList.add(ApiParamMapping.builder().etaxParamName("getObjFromList(ywbw.sbZzsYbnsr,'ewblxh','1').yslwxse").apiParamName("A06493_row_03|A06493_col_01").build());
ApiConfig apiConfig = ApiConfig.builder().apiParamMappingList(apiParamMappingList).build();
CommonRequestWrapper requestCommonWrapper = CommonRequestWrapper.builder().build();
LinkedHashMap<String, String> formData = Maps.newLinkedHashMapWithExpectedSize(10);
formData.put("A06493_row_03|A06493_col_01", "3");
formData.put("A06493_row_01|A06493_col_01", "1");
formData.put("A06493_row_02|A06493_col_01", "2");
log.info("request param:{}", JSONUtil.toString(formData));
ReportRequestWrapper reportRequestWrapper = ReportRequestWrapper.builder().formData(formData).build();
mappingReportTransferParamHandler.handle(apiConfig, requestCommonWrapper, reportRequestWrapper);
log.info("formData:{}", JSONUtil.toString(reportRequestWrapper.getFormData()));
}
}
\ No newline at end of file
package com.sxc.etaxincome.domain.handler.transferparam;
import cn.hutool.core.io.FileUtil;
import com.sxc.etaxincome.domain.business.impl.ResultTransferManager;
import com.sxc.etaxincome.service.IEtaxReportResultConfigService;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@Slf4j
@RunWith(PowerMockRunner.class)
@PrepareForTest({
ResultTransferManager.class
})
public class MappingReportTransferResultManagerTest {
@InjectMocks
private ResultTransferManager resultTransfarManager;
@Mock
private IEtaxReportResultConfigService etaxReportResultConfigService;
@Test
public void testHandle() {
String parseContent = FileUtil.readString("D:\\www\\a.html", "UTF-8");
String result = resultTransfarManager.transferToJson(parseContent, "2002");
log.info("result:{}", result);
}
}
\ No newline at end of file
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>etax-income-api</artifactId>
<groupId>com.sxc.etaxincome</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>etax-income-generator</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>etax-income-generator</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-common</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
package com.sxc.etaxincome.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
/**
* <p>
* 统计日志 前端控制器
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@Controller
@RequestMapping("/fin-count-log")
public class FinCountLogController {
}
package com.sxc.etaxincome.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
/**
* <p>
* 实时统计小时表 前端控制器
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@Controller
@RequestMapping("/fin-count-report")
public class FinCountReportController {
}
package com.sxc.etaxincome.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
/**
* <p>
* 前端控制器
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@Controller
@RequestMapping("/fin-real-log")
public class FinRealLogController {
}
package com.sxc.etaxincome.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
/**
* <p>
* 前端控制器
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@Controller
@RequestMapping("/fin-sys-dict")
public class FinSysDictController {
}
package com.sxc.etaxincome.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
/**
* <p>
* 用户日志对照表 前端控制器
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@Controller
@RequestMapping("/fin-user-taxno")
public class FinUserTaxnoController {
}
package com.sxc.etaxincome.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
/**
* <p>
* 前端控制器
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@Controller
@RequestMapping("/sys-app-user")
public class SysAppUserController {
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 统计日志
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@TableName("fin_count_log")
public class FinCountLog implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 地区
*/
private String zoneCode;
/**
* 系统异常数量
*/
private Integer errorNum;
/**
* 业务异常数量
*/
private Integer runtimeNum;
/**
* 正常数量
*/
private Integer rightNum;
/**
* 错误率
*/
private Integer countErrorRate;
/**
* 请求总数
*/
private Integer totalNum;
/**
* 统计时间
*/
private LocalDateTime countDate;
private Integer trueErrorRate;
/**
* 平均时间
*/
private Integer avgTime;
/**
* 超时请求异常率
*/
private Integer errorTimeRate;
/**
* 超时请求数量
*/
private Integer errorTimeNum;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getZoneCode() {
return zoneCode;
}
public void setZoneCode(String zoneCode) {
this.zoneCode = zoneCode;
}
public Integer getErrorNum() {
return errorNum;
}
public void setErrorNum(Integer errorNum) {
this.errorNum = errorNum;
}
public Integer getRuntimeNum() {
return runtimeNum;
}
public void setRuntimeNum(Integer runtimeNum) {
this.runtimeNum = runtimeNum;
}
public Integer getRightNum() {
return rightNum;
}
public void setRightNum(Integer rightNum) {
this.rightNum = rightNum;
}
public Integer getCountErrorRate() {
return countErrorRate;
}
public void setCountErrorRate(Integer countErrorRate) {
this.countErrorRate = countErrorRate;
}
public Integer getTotalNum() {
return totalNum;
}
public void setTotalNum(Integer totalNum) {
this.totalNum = totalNum;
}
public LocalDateTime getCountDate() {
return countDate;
}
public void setCountDate(LocalDateTime countDate) {
this.countDate = countDate;
}
public Integer getTrueErrorRate() {
return trueErrorRate;
}
public void setTrueErrorRate(Integer trueErrorRate) {
this.trueErrorRate = trueErrorRate;
}
public Integer getAvgTime() {
return avgTime;
}
public void setAvgTime(Integer avgTime) {
this.avgTime = avgTime;
}
public Integer getErrorTimeRate() {
return errorTimeRate;
}
public void setErrorTimeRate(Integer errorTimeRate) {
this.errorTimeRate = errorTimeRate;
}
public Integer getErrorTimeNum() {
return errorTimeNum;
}
public void setErrorTimeNum(Integer errorTimeNum) {
this.errorTimeNum = errorTimeNum;
}
@Override
public String toString() {
return "FinCountLog{" +
"id=" + id +
", zoneCode=" + zoneCode +
", errorNum=" + errorNum +
", runtimeNum=" + runtimeNum +
", rightNum=" + rightNum +
", countErrorRate=" + countErrorRate +
", totalNum=" + totalNum +
", countDate=" + countDate +
", trueErrorRate=" + trueErrorRate +
", avgTime=" + avgTime +
", errorTimeRate=" + errorTimeRate +
", errorTimeNum=" + errorTimeNum +
"}";
}
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 实时统计小时表
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@TableName("fin_count_report")
public class FinCountReport implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 操作用户
*/
private String userName;
/**
* 地区
*/
private String zoneCode;
/**
* 请求成功数量
*/
private Integer successNum;
/**
* 请求失败数量
*/
private Integer failNum;
/**
* 请求税号数量
*/
private Integer taxnoNum;
/**
* 请求接口数量
*/
private Integer faceNum;
/**
* 请求合计数量
*/
private Integer totalNum;
/**
* 统计时间
*/
private LocalDateTime countDate;
/**
* 统计月份
*/
private String countMonth;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 统计类型
*/
private String countType;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getZoneCode() {
return zoneCode;
}
public void setZoneCode(String zoneCode) {
this.zoneCode = zoneCode;
}
public Integer getSuccessNum() {
return successNum;
}
public void setSuccessNum(Integer successNum) {
this.successNum = successNum;
}
public Integer getFailNum() {
return failNum;
}
public void setFailNum(Integer failNum) {
this.failNum = failNum;
}
public Integer getTaxnoNum() {
return taxnoNum;
}
public void setTaxnoNum(Integer taxnoNum) {
this.taxnoNum = taxnoNum;
}
public Integer getFaceNum() {
return faceNum;
}
public void setFaceNum(Integer faceNum) {
this.faceNum = faceNum;
}
public Integer getTotalNum() {
return totalNum;
}
public void setTotalNum(Integer totalNum) {
this.totalNum = totalNum;
}
public LocalDateTime getCountDate() {
return countDate;
}
public void setCountDate(LocalDateTime countDate) {
this.countDate = countDate;
}
public String getCountMonth() {
return countMonth;
}
public void setCountMonth(String countMonth) {
this.countMonth = countMonth;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public String getCountType() {
return countType;
}
public void setCountType(String countType) {
this.countType = countType;
}
@Override
public String toString() {
return "FinCountReport{" +
"id=" + id +
", userName=" + userName +
", zoneCode=" + zoneCode +
", successNum=" + successNum +
", failNum=" + failNum +
", taxnoNum=" + taxnoNum +
", faceNum=" + faceNum +
", totalNum=" + totalNum +
", countDate=" + countDate +
", countMonth=" + countMonth +
", createTime=" + createTime +
", countType=" + countType +
"}";
}
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@TableName("fin_real_log")
public class FinRealLog implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String taxno;
private LocalDateTime reqDate;
private String itype;
private String userCode;
private String reqContext;
private String resCode;
private String resMsg;
private LocalDateTime resDate;
private String timeFlag;
private String zoneCode;
/**
* 0-未拦截 1-拦截
*/
private String filterFlag;
/**
* 时间差
*/
private Integer timeDiff;
private String resContext;
private String reqSign;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTaxno() {
return taxno;
}
public void setTaxno(String taxno) {
this.taxno = taxno;
}
public LocalDateTime getReqDate() {
return reqDate;
}
public void setReqDate(LocalDateTime reqDate) {
this.reqDate = reqDate;
}
public String getItype() {
return itype;
}
public void setItype(String itype) {
this.itype = itype;
}
public String getUserCode() {
return userCode;
}
public void setUserCode(String userCode) {
this.userCode = userCode;
}
public String getReqContext() {
return reqContext;
}
public void setReqContext(String reqContext) {
this.reqContext = reqContext;
}
public String getResCode() {
return resCode;
}
public void setResCode(String resCode) {
this.resCode = resCode;
}
public String getResMsg() {
return resMsg;
}
public void setResMsg(String resMsg) {
this.resMsg = resMsg;
}
public LocalDateTime getResDate() {
return resDate;
}
public void setResDate(LocalDateTime resDate) {
this.resDate = resDate;
}
public String getTimeFlag() {
return timeFlag;
}
public void setTimeFlag(String timeFlag) {
this.timeFlag = timeFlag;
}
public String getZoneCode() {
return zoneCode;
}
public void setZoneCode(String zoneCode) {
this.zoneCode = zoneCode;
}
public String getFilterFlag() {
return filterFlag;
}
public void setFilterFlag(String filterFlag) {
this.filterFlag = filterFlag;
}
public Integer getTimeDiff() {
return timeDiff;
}
public void setTimeDiff(Integer timeDiff) {
this.timeDiff = timeDiff;
}
public String getResContext() {
return resContext;
}
public void setResContext(String resContext) {
this.resContext = resContext;
}
public String getReqSign() {
return reqSign;
}
public void setReqSign(String reqSign) {
this.reqSign = reqSign;
}
@Override
public String toString() {
return "FinRealLog{" +
"id=" + id +
", taxno=" + taxno +
", reqDate=" + reqDate +
", itype=" + itype +
", userCode=" + userCode +
", reqContext=" + reqContext +
", resCode=" + resCode +
", resMsg=" + resMsg +
", resDate=" + resDate +
", timeFlag=" + timeFlag +
", zoneCode=" + zoneCode +
", filterFlag=" + filterFlag +
", timeDiff=" + timeDiff +
", resContext=" + resContext +
", reqSign=" + reqSign +
"}";
}
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@TableName("fin_sys_dict")
public class FinSysDict implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String dictKey;
private String dictValue;
private String dictGroup;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDictKey() {
return dictKey;
}
public void setDictKey(String dictKey) {
this.dictKey = dictKey;
}
public String getDictValue() {
return dictValue;
}
public void setDictValue(String dictValue) {
this.dictValue = dictValue;
}
public String getDictGroup() {
return dictGroup;
}
public void setDictGroup(String dictGroup) {
this.dictGroup = dictGroup;
}
@Override
public String toString() {
return "FinSysDict{" +
"id=" + id +
", dictKey=" + dictKey +
", dictValue=" + dictValue +
", dictGroup=" + dictGroup +
"}";
}
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 用户日志对照表
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@TableName("fin_user_taxno")
public class FinUserTaxno implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 税号
*/
private String taxno;
/**
* 用户名
*/
private String username;
/**
* 购方名称
*/
private String taxname;
/**
* 用户状态 0-正常 1-冻结
*/
private String taxStatus;
/**
* 创建时间
*/
private LocalDateTime createDate;
/**
* 更新时间
*/
private LocalDateTime updateDate;
/**
* 进项标记 0-否 1-是
*/
private String buyFlag;
/**
* 销项标记 0-否 1-是
*/
private String sellFlag;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTaxno() {
return taxno;
}
public void setTaxno(String taxno) {
this.taxno = taxno;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getTaxname() {
return taxname;
}
public void setTaxname(String taxname) {
this.taxname = taxname;
}
public String getTaxStatus() {
return taxStatus;
}
public void setTaxStatus(String taxStatus) {
this.taxStatus = taxStatus;
}
public LocalDateTime getCreateDate() {
return createDate;
}
public void setCreateDate(LocalDateTime createDate) {
this.createDate = createDate;
}
public LocalDateTime getUpdateDate() {
return updateDate;
}
public void setUpdateDate(LocalDateTime updateDate) {
this.updateDate = updateDate;
}
public String getBuyFlag() {
return buyFlag;
}
public void setBuyFlag(String buyFlag) {
this.buyFlag = buyFlag;
}
public String getSellFlag() {
return sellFlag;
}
public void setSellFlag(String sellFlag) {
this.sellFlag = sellFlag;
}
@Override
public String toString() {
return "FinUserTaxno{" +
"id=" + id +
", taxno=" + taxno +
", username=" + username +
", taxname=" + taxname +
", taxStatus=" + taxStatus +
", createDate=" + createDate +
", updateDate=" + updateDate +
", buyFlag=" + buyFlag +
", sellFlag=" + sellFlag +
"}";
}
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@TableName("sys_app_user")
public class SysAppUser implements Serializable {
private static final long serialVersionUID = 1L;
private String userId;
private String username;
private String password;
private String name;
private String rights;
private String roleId;
private String lastLogin;
private String ip;
private String status;
private String bz;
private String phone;
private String sfid;
private String startTime;
private String endTime;
private Integer years;
private String number;
private String email;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRights() {
return rights;
}
public void setRights(String rights) {
this.rights = rights;
}
public String getRoleId() {
return roleId;
}
public void setRoleId(String roleId) {
this.roleId = roleId;
}
public String getLastLogin() {
return lastLogin;
}
public void setLastLogin(String lastLogin) {
this.lastLogin = lastLogin;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getBz() {
return bz;
}
public void setBz(String bz) {
this.bz = bz;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getSfid() {
return sfid;
}
public void setSfid(String sfid) {
this.sfid = sfid;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
public Integer getYears() {
return years;
}
public void setYears(Integer years) {
this.years = years;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "SysAppUser{" +
"userId=" + userId +
", username=" + username +
", password=" + password +
", name=" + name +
", rights=" + rights +
", roleId=" + roleId +
", lastLogin=" + lastLogin +
", ip=" + ip +
", status=" + status +
", bz=" + bz +
", phone=" + phone +
", sfid=" + sfid +
", startTime=" + startTime +
", endTime=" + endTime +
", years=" + years +
", number=" + number +
", email=" + email +
"}";
}
}
package com.sxc.etaxincome.generator;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
public class CodeGenerator {
public static void main(final String[] args) {
// db config
String url = "jdbc:mysql://localhost:3306/numysql?useUnicode=true&characterEncoding=utf-8&tinyInt1isBit=false&allowMultiQueries=true&&useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "";
// output dir
String rootDir = System.getProperty("user.dir") + "/etax-income-generator";
String javaOutputDir = rootDir + "/src/main/java";
String mapperXmlOutDir = rootDir + "/src/main/resources/mapper";
String commentDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
FastAutoGenerator.create(url, username, password)
.globalConfig(builder ->
builder.author("mybatis-plus-generator") // 设置作者
.commentDate(commentDate) // 文件创建日期
.fileOverride() // 覆盖已生成文件
.outputDir(javaOutputDir) // 指定输出目录
)
.packageConfig(builder ->
builder.parent("com.sxc.etaxincome") // 设置父包名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, mapperXmlOutDir))
)
.strategyConfig(builder ->
builder.addInclude("sys_app_user")// 设置需要生成的表名
.addInclude("fin_count_report")
.addInclude("fin_count_log")
.addInclude("fin_real_log")
.addInclude("fin_user_taxno")
.addInclude("fin_sys_dict")
)
// 使用Freemarker引擎模板,默认的是Velocity引擎模板
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
}
package com.sxc.etaxincome.mapper;
import com.sxc.etaxincome.entity.FinCountLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 统计日志 Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
public interface FinCountLogMapper extends BaseMapper<FinCountLog> {
}
package com.sxc.etaxincome.mapper;
import com.sxc.etaxincome.entity.FinCountReport;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 实时统计小时表 Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
public interface FinCountReportMapper extends BaseMapper<FinCountReport> {
}
package com.sxc.etaxincome.mapper;
import com.sxc.etaxincome.entity.FinRealLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
public interface FinRealLogMapper extends BaseMapper<FinRealLog> {
}
package com.sxc.etaxincome.mapper;
import com.sxc.etaxincome.entity.FinSysDict;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
public interface FinSysDictMapper extends BaseMapper<FinSysDict> {
}
package com.sxc.etaxincome.mapper;
import com.sxc.etaxincome.entity.FinUserTaxno;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 用户日志对照表 Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
public interface FinUserTaxnoMapper extends BaseMapper<FinUserTaxno> {
}
package com.sxc.etaxincome.mapper;
import com.sxc.etaxincome.entity.SysAppUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
public interface SysAppUserMapper extends BaseMapper<SysAppUser> {
}
package com.sxc.etaxincome.service;
import com.sxc.etaxincome.entity.FinCountLog;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 统计日志 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
public interface IFinCountLogService extends IService<FinCountLog> {
}
package com.sxc.etaxincome.service;
import com.sxc.etaxincome.entity.FinCountReport;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 实时统计小时表 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
public interface IFinCountReportService extends IService<FinCountReport> {
}
package com.sxc.etaxincome.service;
import com.sxc.etaxincome.entity.FinRealLog;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
public interface IFinRealLogService extends IService<FinRealLog> {
}
package com.sxc.etaxincome.service;
import com.sxc.etaxincome.entity.FinSysDict;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
public interface IFinSysDictService extends IService<FinSysDict> {
}
package com.sxc.etaxincome.service;
import com.sxc.etaxincome.entity.FinUserTaxno;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 用户日志对照表 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
public interface IFinUserTaxnoService extends IService<FinUserTaxno> {
}
package com.sxc.etaxincome.service;
import com.sxc.etaxincome.entity.SysAppUser;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
public interface ISysAppUserService extends IService<SysAppUser> {
}
package com.sxc.etaxincome.service.impl;
import com.sxc.etaxincome.entity.FinCountLog;
import com.sxc.etaxincome.mapper.FinCountLogMapper;
import com.sxc.etaxincome.service.IFinCountLogService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 统计日志 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@Service
public class FinCountLogServiceImpl extends ServiceImpl<FinCountLogMapper, FinCountLog> implements IFinCountLogService {
}
package com.sxc.etaxincome.service.impl;
import com.sxc.etaxincome.entity.FinCountReport;
import com.sxc.etaxincome.mapper.FinCountReportMapper;
import com.sxc.etaxincome.service.IFinCountReportService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 实时统计小时表 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@Service
public class FinCountReportServiceImpl extends ServiceImpl<FinCountReportMapper, FinCountReport> implements IFinCountReportService {
}
package com.sxc.etaxincome.service.impl;
import com.sxc.etaxincome.entity.FinRealLog;
import com.sxc.etaxincome.mapper.FinRealLogMapper;
import com.sxc.etaxincome.service.IFinRealLogService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@Service
public class FinRealLogServiceImpl extends ServiceImpl<FinRealLogMapper, FinRealLog> implements IFinRealLogService {
}
package com.sxc.etaxincome.service.impl;
import com.sxc.etaxincome.entity.FinSysDict;
import com.sxc.etaxincome.mapper.FinSysDictMapper;
import com.sxc.etaxincome.service.IFinSysDictService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@Service
public class FinSysDictServiceImpl extends ServiceImpl<FinSysDictMapper, FinSysDict> implements IFinSysDictService {
}
package com.sxc.etaxincome.service.impl;
import com.sxc.etaxincome.entity.FinUserTaxno;
import com.sxc.etaxincome.mapper.FinUserTaxnoMapper;
import com.sxc.etaxincome.service.IFinUserTaxnoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 用户日志对照表 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@Service
public class FinUserTaxnoServiceImpl extends ServiceImpl<FinUserTaxnoMapper, FinUserTaxno> implements IFinUserTaxnoService {
}
package com.sxc.etaxincome.service.impl;
import com.sxc.etaxincome.entity.SysAppUser;
import com.sxc.etaxincome.mapper.SysAppUserMapper;
import com.sxc.etaxincome.service.ISysAppUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@Service
public class SysAppUserServiceImpl extends ServiceImpl<SysAppUserMapper, SysAppUser> implements ISysAppUserService {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.FinCountLogMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.FinCountReportMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.FinRealLogMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.FinSysDictMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.FinUserTaxnoMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.SysAppUserMapper">
</mapper>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>etax-income-api</artifactId>
<groupId>com.sxc.etaxincome</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>etax-income-mapper</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>etax-income-mapper</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-common</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- unit test start -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>mockito-core</artifactId>
<groupId>org.mockito</groupId>
</exclusion>
<exclusion>
<artifactId>mockito-junit-jupiter</artifactId>
<groupId>org.mockito</groupId>
</exclusion>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<!-- unit test end -->
</dependencies>
</project>
package com.sxc.etaxincome.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Slf4j
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
log.info("create mybatisPlusInterceptor");
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor(DbType.H2);
interceptor.addInnerInterceptor(paginationInterceptor);
return interceptor;
}
}
package com.sxc.etaxincome.criteria;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
* @ProjectName: etax-income-api
* @Package: com.sxc.etaxincome.criteria
* @ClassName: FinRealLogCriteria
* @Author: ddx
* @Description:
* @Date: 2024-06-21 17:41
* @Version: 1.0
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class FinRealLogCriteria {
private String userCode;
private String zoneCode;
private String resCode;
private String dateTimeStart;
private String dateTimeEnd;
private String taxno;
private String itype;
private String reqContext;
private String resMsg;
private String timeFlag;
private Integer timeDiff;
private String resContext;
private String reqSign;
private Long startTimeDiff;
private Long endTimeDiff;
}
package com.sxc.etaxincome.criteria;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class IncomeQueryCommon {
private String userName;
private String areaCode;
private LocalDate startDate;
private LocalDate endDate;
private LocalDateTime startDateTime;
private LocalDateTime endDateTime;
private String countType;
}
package com.sxc.etaxincome.criteria;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author caosongqing
* @date 2023/10/30
* @description
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class IncomeQueryCriteria {
private Integer pageSize;
private Integer pageNumber;
private String taxno;
private String itype;
private String userCode;
private String reqContext;
private String resCode;
private String resMsg;
private String timeFlag;
private String zoneCode;
private String resContext;
private String reqSign;
private String startDateTime;
private String endDateTime;
private Long startTimeDiff;
private Long endTimeDiff;
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-23 15:27:40
*/
@TableName("etax_report_api_config")
public class EtaxReportApiConfig implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 自增主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 接口编号
*/
private String apiCode;
/**
* 接口版本号
*/
private String apiVersion;
/**
* 接口地址
*/
private String apiUrl;
/**
* 说明
*/
private String remark;
/**
* 创建日期
*/
private LocalDateTime createTime;
/**
* 最后更新日期
*/
private LocalDateTime updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getApiCode() {
return apiCode;
}
public void setApiCode(String apiCode) {
this.apiCode = apiCode;
}
public String getApiVersion() {
return apiVersion;
}
public void setApiVersion(String apiVersion) {
this.apiVersion = apiVersion;
}
public String getApiUrl() {
return apiUrl;
}
public void setApiUrl(String apiUrl) {
this.apiUrl = apiUrl;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
@Override
public String toString() {
return "EtaxReportApiConfig{" +
"id=" + id +
", apiCode=" + apiCode +
", apiVersion=" + apiVersion +
", apiUrl=" + apiUrl +
", remark=" + remark +
", createTime=" + createTime +
", updateTime=" + updateTime +
"}";
}
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author mybatis-plus-generator
* @since 2024-05-10 17:44:46
*/
@TableName("etax_report_param_config")
public class EtaxReportParamConfig implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 自增主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 接口编号
*/
private String apiCode;
/**
* 报表名
*/
private String tableName;
/**
* 报表编码
*/
private String tableCode;
/**
* 行位置
*/
private String locationRow;
/**
* 列位置
*/
private String locationCol;
/**
* 电子税局参数名
*/
private String etaxParamName;
/**
* 说明
*/
private String remark;
/**
* 是否只读
*/
private Integer readonly;
/**
* 提交顺序
*/
private Integer priority;
/**
* 创建日期
*/
private LocalDateTime createTime;
/**
* 最后更新日期
*/
private LocalDateTime updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getApiCode() {
return apiCode;
}
public void setApiCode(String apiCode) {
this.apiCode = apiCode;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getTableCode() {
return tableCode;
}
public void setTableCode(String tableCode) {
this.tableCode = tableCode;
}
public String getLocationRow() {
return locationRow;
}
public void setLocationRow(String locationRow) {
this.locationRow = locationRow;
}
public String getLocationCol() {
return locationCol;
}
public void setLocationCol(String locationCol) {
this.locationCol = locationCol;
}
public String getEtaxParamName() {
return etaxParamName;
}
public void setEtaxParamName(String etaxParamName) {
this.etaxParamName = etaxParamName;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Integer getReadonly() {
return readonly;
}
public void setReadonly(Integer readonly) {
this.readonly = readonly;
}
public Integer getPriority() {
return priority;
}
public void setPriority(Integer priority) {
this.priority = priority;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
@Override
public String toString() {
return "EtaxReportParamConfig{" +
"id=" + id +
", apiCode=" + apiCode +
", tableName=" + tableName +
", tableCode=" + tableCode +
", locationRow=" + locationRow +
", locationCol=" + locationCol +
", etaxParamName=" + etaxParamName +
", remark=" + remark +
", readonly=" + readonly +
", priority=" + priority +
", createTime=" + createTime +
", updateTime=" + updateTime +
"}";
}
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-25 16:15:59
*/
@TableName("etax_report_result_config")
public class EtaxReportResultConfig implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 自增主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 接口编号
*/
private String apiCode;
/**
* 报表名
*/
private String tableName;
/**
* 报表编码
*/
private String tableCode;
/**
* 行位置
*/
private String locationRow;
/**
* 列位置
*/
private String locationCol;
/**
* 电子税局参数名
*/
private String etaxParamName;
/**
* 映射关系参数名
*/
private String etaxExportName;
/**
* 电子税局value
*/
private String etaxParamValue;
/**
* 是否显示 0-否 1-是
*/
private String showFlag;
/**
* 是否校验 0-否 1-是
*/
private String checkFlag;
/**
* 校验适配类
*/
private String checkClass;
/**
* 说明
*/
private String remark;
/**
* 创建日期
*/
private LocalDateTime createTime;
/**
* 最后更新日期
*/
private LocalDateTime updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getApiCode() {
return apiCode;
}
public void setApiCode(String apiCode) {
this.apiCode = apiCode;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getTableCode() {
return tableCode;
}
public void setTableCode(String tableCode) {
this.tableCode = tableCode;
}
public String getLocationRow() {
return locationRow;
}
public void setLocationRow(String locationRow) {
this.locationRow = locationRow;
}
public String getLocationCol() {
return locationCol;
}
public void setLocationCol(String locationCol) {
this.locationCol = locationCol;
}
public String getEtaxParamName() {
return etaxParamName;
}
public void setEtaxParamName(String etaxParamName) {
this.etaxParamName = etaxParamName;
}
public String getEtaxExportName() {
return etaxExportName;
}
public void setEtaxExportName(String etaxExportName) {
this.etaxExportName = etaxExportName;
}
public String getEtaxParamValue() {
return etaxParamValue;
}
public void setEtaxParamValue(String etaxParamValue) {
this.etaxParamValue = etaxParamValue;
}
public String getShowFlag() {
return showFlag;
}
public void setShowFlag(String showFlag) {
this.showFlag = showFlag;
}
public String getCheckFlag() {
return checkFlag;
}
public void setCheckFlag(String checkFlag) {
this.checkFlag = checkFlag;
}
public String getCheckClass() {
return checkClass;
}
public void setCheckClass(String checkClass) {
this.checkClass = checkClass;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
@Override
public String toString() {
return "EtaxReportResultConfig{" +
"id=" + id +
", apiCode=" + apiCode +
", tableName=" + tableName +
", tableCode=" + tableCode +
", locationRow=" + locationRow +
", locationCol=" + locationCol +
", etaxParamName=" + etaxParamName +
", etaxExportName=" + etaxExportName +
", etaxParamValue=" + etaxParamValue +
", showFlag=" + showFlag +
", checkFlag=" + checkFlag +
", checkClass=" + checkClass +
", remark=" + remark +
", createTime=" + createTime +
", updateTime=" + updateTime +
"}";
}
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-26 16:06:52
*/
@TableName("etax_report_type")
public class EtaxReportType implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 自增主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 申报种类id
*/
private String reportId;
/**
* 申报种类名称
*/
private String reportName;
/**
* 报表编码
*/
private String tableCode;
/**
* 说明
*/
private String remark;
/**
* 创建日期
*/
private LocalDateTime createTime;
/**
* 最后更新日期
*/
private LocalDateTime updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getReportId() {
return reportId;
}
public void setReportId(String reportId) {
this.reportId = reportId;
}
public String getReportName() {
return reportName;
}
public void setReportName(String reportName) {
this.reportName = reportName;
}
public String getTableCode() {
return tableCode;
}
public void setTableCode(String tableCode) {
this.tableCode = tableCode;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
@Override
public String toString() {
return "EtaxReportType{" +
"id=" + id +
", reportId=" + reportId +
", reportName=" + reportName +
", tableCode=" + tableCode +
", remark=" + remark +
", createTime=" + createTime +
", updateTime=" + updateTime +
"}";
}
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 统计日志
* </p>
*
* @author mybatis-plus-generator
* @since 2024-05-29 11:44:38
*/
@TableName("fin_count_log")
public class FinCountLog implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 地区
*/
private String zoneCode;
/**
* 系统异常数量
*/
private Integer errorNum;
/**
* 业务异常数量
*/
private Integer runtimeNum;
/**
* 正常数量
*/
private Integer rightNum;
/**
* 错误率
*/
private Integer countErrorRate;
/**
* 请求总数
*/
private Integer totalNum;
/**
* 统计时间
*/
private LocalDateTime countDate;
private Integer trueErrorRate;
/**
* 平均时间
*/
private Integer avgTime;
/**
* 超时请求异常率
*/
private Integer errorTimeRate;
/**
* 超时请求数量
*/
private Integer errorTimeNum;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getZoneCode() {
return zoneCode;
}
public void setZoneCode(String zoneCode) {
this.zoneCode = zoneCode;
}
public Integer getErrorNum() {
return errorNum;
}
public void setErrorNum(Integer errorNum) {
this.errorNum = errorNum;
}
public Integer getRuntimeNum() {
return runtimeNum;
}
public void setRuntimeNum(Integer runtimeNum) {
this.runtimeNum = runtimeNum;
}
public Integer getRightNum() {
return rightNum;
}
public void setRightNum(Integer rightNum) {
this.rightNum = rightNum;
}
public Integer getCountErrorRate() {
return countErrorRate;
}
public void setCountErrorRate(Integer countErrorRate) {
this.countErrorRate = countErrorRate;
}
public Integer getTotalNum() {
return totalNum;
}
public void setTotalNum(Integer totalNum) {
this.totalNum = totalNum;
}
public LocalDateTime getCountDate() {
return countDate;
}
public void setCountDate(LocalDateTime countDate) {
this.countDate = countDate;
}
public Integer getTrueErrorRate() {
return trueErrorRate;
}
public void setTrueErrorRate(Integer trueErrorRate) {
this.trueErrorRate = trueErrorRate;
}
public Integer getAvgTime() {
return avgTime;
}
public void setAvgTime(Integer avgTime) {
this.avgTime = avgTime;
}
public Integer getErrorTimeRate() {
return errorTimeRate;
}
public void setErrorTimeRate(Integer errorTimeRate) {
this.errorTimeRate = errorTimeRate;
}
public Integer getErrorTimeNum() {
return errorTimeNum;
}
public void setErrorTimeNum(Integer errorTimeNum) {
this.errorTimeNum = errorTimeNum;
}
@Override
public String toString() {
return "FinCountLog{" +
"id=" + id +
", zoneCode=" + zoneCode +
", errorNum=" + errorNum +
", runtimeNum=" + runtimeNum +
", rightNum=" + rightNum +
", countErrorRate=" + countErrorRate +
", totalNum=" + totalNum +
", countDate=" + countDate +
", trueErrorRate=" + trueErrorRate +
", avgTime=" + avgTime +
", errorTimeRate=" + errorTimeRate +
", errorTimeNum=" + errorTimeNum +
"}";
}
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 实时统计小时表
* </p>
*
* @author mybatis-plus-generator
* @since 2024-05-29 11:44:38
*/
@TableName("fin_count_report")
public class FinCountReport implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 操作用户
*/
private String userName;
/**
* 地区
*/
private String zoneCode;
/**
* 请求成功数量
*/
private Integer successNum;
/**
* 请求失败数量
*/
private Integer failNum;
/**
* 请求税号数量
*/
private Integer taxnoNum;
/**
* 请求接口数量
*/
private Integer faceNum;
/**
* 请求合计数量
*/
private Integer totalNum;
/**
* 统计时间
*/
private LocalDateTime countDate;
/**
* 统计月份
*/
private String countMonth;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 统计类型
*/
private String countType;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getZoneCode() {
return zoneCode;
}
public void setZoneCode(String zoneCode) {
this.zoneCode = zoneCode;
}
public Integer getSuccessNum() {
return successNum;
}
public void setSuccessNum(Integer successNum) {
this.successNum = successNum;
}
public Integer getFailNum() {
return failNum;
}
public void setFailNum(Integer failNum) {
this.failNum = failNum;
}
public Integer getTaxnoNum() {
return taxnoNum;
}
public void setTaxnoNum(Integer taxnoNum) {
this.taxnoNum = taxnoNum;
}
public Integer getFaceNum() {
return faceNum;
}
public void setFaceNum(Integer faceNum) {
this.faceNum = faceNum;
}
public Integer getTotalNum() {
return totalNum;
}
public void setTotalNum(Integer totalNum) {
this.totalNum = totalNum;
}
public LocalDateTime getCountDate() {
return countDate;
}
public void setCountDate(LocalDateTime countDate) {
this.countDate = countDate;
}
public String getCountMonth() {
return countMonth;
}
public void setCountMonth(String countMonth) {
this.countMonth = countMonth;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public String getCountType() {
return countType;
}
public void setCountType(String countType) {
this.countType = countType;
}
@Override
public String toString() {
return "FinCountReport{" +
"id=" + id +
", userName=" + userName +
", zoneCode=" + zoneCode +
", successNum=" + successNum +
", failNum=" + failNum +
", taxnoNum=" + taxnoNum +
", faceNum=" + faceNum +
", totalNum=" + totalNum +
", countDate=" + countDate +
", countMonth=" + countMonth +
", createTime=" + createTime +
", countType=" + countType +
"}";
}
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author mybatis-plus-generator
* @since 2024-06-05 22:49:55
*/
@TableName("fin_real_log")
public class FinRealLog implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String taxno;
private LocalDateTime reqDate;
private String itype;
private String userCode;
private String reqContext;
private String resCode;
private String resMsg;
private LocalDateTime resDate;
private String timeFlag;
private String zoneCode;
/**
* 0-未拦截 1-拦截
*/
private String filterFlag;
/**
* 时间差
*/
private Integer timeDiff;
private String resContext;
private String reqSign;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTaxno() {
return taxno;
}
public void setTaxno(String taxno) {
this.taxno = taxno;
}
public LocalDateTime getReqDate() {
return reqDate;
}
public void setReqDate(LocalDateTime reqDate) {
this.reqDate = reqDate;
}
public String getItype() {
return itype;
}
public void setItype(String itype) {
this.itype = itype;
}
public String getUserCode() {
return userCode;
}
public void setUserCode(String userCode) {
this.userCode = userCode;
}
public String getReqContext() {
return reqContext;
}
public void setReqContext(String reqContext) {
this.reqContext = reqContext;
}
public String getResCode() {
return resCode;
}
public void setResCode(String resCode) {
this.resCode = resCode;
}
public String getResMsg() {
return resMsg;
}
public void setResMsg(String resMsg) {
this.resMsg = resMsg;
}
public LocalDateTime getResDate() {
return resDate;
}
public void setResDate(LocalDateTime resDate) {
this.resDate = resDate;
}
public String getTimeFlag() {
return timeFlag;
}
public void setTimeFlag(String timeFlag) {
this.timeFlag = timeFlag;
}
public String getZoneCode() {
return zoneCode;
}
public void setZoneCode(String zoneCode) {
this.zoneCode = zoneCode;
}
public String getFilterFlag() {
return filterFlag;
}
public void setFilterFlag(String filterFlag) {
this.filterFlag = filterFlag;
}
public Integer getTimeDiff() {
return timeDiff;
}
public void setTimeDiff(Integer timeDiff) {
this.timeDiff = timeDiff;
}
public String getResContext() {
return resContext;
}
public void setResContext(String resContext) {
this.resContext = resContext;
}
public String getReqSign() {
return reqSign;
}
public void setReqSign(String reqSign) {
this.reqSign = reqSign;
}
@Override
public String toString() {
return "FinRealLog{" +
"id=" + id +
", taxno=" + taxno +
", reqDate=" + reqDate +
", itype=" + itype +
", userCode=" + userCode +
", reqContext=" + reqContext +
", resCode=" + resCode +
", resMsg=" + resMsg +
", resDate=" + resDate +
", timeFlag=" + timeFlag +
", zoneCode=" + zoneCode +
", filterFlag=" + filterFlag +
", timeDiff=" + timeDiff +
", resContext=" + resContext +
", reqSign=" + reqSign +
"}";
}
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@TableName("fin_sys_dict")
public class FinSysDict implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String dictKey;
private String dictValue;
private String dictGroup;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDictKey() {
return dictKey;
}
public void setDictKey(String dictKey) {
this.dictKey = dictKey;
}
public String getDictValue() {
return dictValue;
}
public void setDictValue(String dictValue) {
this.dictValue = dictValue;
}
public String getDictGroup() {
return dictGroup;
}
public void setDictGroup(String dictGroup) {
this.dictGroup = dictGroup;
}
@Override
public String toString() {
return "FinSysDict{" +
"id=" + id +
", dictKey=" + dictKey +
", dictValue=" + dictValue +
", dictGroup=" + dictGroup +
"}";
}
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 用户日志对照表
* </p>
*
* @author mybatis-plus-generator
* @since 2024-06-28 10:42:45
*/
@TableName("fin_user_taxno")
public class FinUserTaxno implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 税号
*/
private String taxno;
/**
* 用户名
*/
private String username;
/**
* 购方名称
*/
private String taxname;
/**
* 用户状态 0-正常 1-冻结
*/
private String taxStatus;
/**
* 创建时间
*/
private LocalDateTime createDate;
/**
* 更新时间
*/
private LocalDateTime updateDate;
/**
* 进项标记 0-否 1-是
*/
private String buyFlag;
/**
* 销项标记 0-否 1-是
*/
private String sellFlag;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTaxno() {
return taxno;
}
public void setTaxno(String taxno) {
this.taxno = taxno;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getTaxname() {
return taxname;
}
public void setTaxname(String taxname) {
this.taxname = taxname;
}
public String getTaxStatus() {
return taxStatus;
}
public void setTaxStatus(String taxStatus) {
this.taxStatus = taxStatus;
}
public LocalDateTime getCreateDate() {
return createDate;
}
public void setCreateDate(LocalDateTime createDate) {
this.createDate = createDate;
}
public LocalDateTime getUpdateDate() {
return updateDate;
}
public void setUpdateDate(LocalDateTime updateDate) {
this.updateDate = updateDate;
}
public String getBuyFlag() {
return buyFlag;
}
public void setBuyFlag(String buyFlag) {
this.buyFlag = buyFlag;
}
public String getSellFlag() {
return sellFlag;
}
public void setSellFlag(String sellFlag) {
this.sellFlag = sellFlag;
}
@Override
public String toString() {
return "FinUserTaxno{" +
"id=" + id +
", taxno=" + taxno +
", username=" + username +
", taxname=" + taxname +
", taxStatus=" + taxStatus +
", createDate=" + createDate +
", updateDate=" + updateDate +
", buyFlag=" + buyFlag +
", sellFlag=" + sellFlag +
"}";
}
}
package com.sxc.etaxincome.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author mybatis-plus-generator
* @since 2024-05-27 22:24:49
*/
@TableName("sys_app_user")
public class SysAppUser implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "user_id")
private String userId;
private String username;
private String password;
private String name;
private String rights;
private String roleId;
private String lastLogin;
private String ip;
private String status;
private String bz;
private String phone;
private String sfid;
private String startTime;
private String endTime;
private Integer years;
private String number;
private String email;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRights() {
return rights;
}
public void setRights(String rights) {
this.rights = rights;
}
public String getRoleId() {
return roleId;
}
public void setRoleId(String roleId) {
this.roleId = roleId;
}
public String getLastLogin() {
return lastLogin;
}
public void setLastLogin(String lastLogin) {
this.lastLogin = lastLogin;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getBz() {
return bz;
}
public void setBz(String bz) {
this.bz = bz;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getSfid() {
return sfid;
}
public void setSfid(String sfid) {
this.sfid = sfid;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
public Integer getYears() {
return years;
}
public void setYears(Integer years) {
this.years = years;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "SysAppUser{" +
"userId=" + userId +
", username=" + username +
", password=" + password +
", name=" + name +
", rights=" + rights +
", roleId=" + roleId +
", lastLogin=" + lastLogin +
", ip=" + ip +
", status=" + status +
", bz=" + bz +
", phone=" + phone +
", sfid=" + sfid +
", startTime=" + startTime +
", endTime=" + endTime +
", years=" + years +
", number=" + number +
", email=" + email +
"}";
}
}
package com.sxc.etaxincome.enums;
import lombok.Getter;
/**
* @author caosongqing
* @date 2024/4/24
* @description
*/
@Getter
public enum ApiCode {
REPORT("1001", "申报"),
FORCE_REPORT("1002", "申报强制提交"),
CANCEL_REPORT("1901", "申报作废"),
QUERY_CANCEL_PAGE_LIST("2001", "查询作废列表"),
QUERY_REPORT_PAGE_LIST("2002", "查询申报列表"),
QUERY_REPORT_ITEM("2003", "申报信息明细查询");
private final String code;
private final String desc;
ApiCode(String code, String desc) {
this.code = code;
this.desc = desc;
}
public static ApiCode as(String code) {
for (ApiCode apiCode : ApiCode.values()) {
if (apiCode.code.equals(code)) {
return apiCode;
}
}
return null;
}
}
package com.sxc.etaxincome.enums;
import lombok.Getter;
import java.util.Objects;
/**
* @author caosongqing
* @date 2024/5/15
* @description
*/
@Getter
public enum ApiParamReadonly {
YES(1, "只读"),
NO(0, "可写");
private final Integer code;
private final String desc;
ApiParamReadonly(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public static ApiParamReadonly as(Integer code) {
for (ApiParamReadonly apiParamReadonly : ApiParamReadonly.values()) {
if (Objects.equals(apiParamReadonly.code, code)) {
return apiParamReadonly;
}
}
return null;
}
}
package com.sxc.etaxincome.enums;
import lombok.Getter;
@Getter
public enum IncomeInvoiceExceptionType {
INVALID_TOKEN(1, "invalid_token", "Token无效"),
READ_TIMEOUT(2, "read_timeout", "连接超时"),
VERIFY_IDENTITY_FAIL(3, "verify_identity_fail", "身份认证失败"),
ILLEGAL_PARAM(4, "illegal_param", "不合法参数"),
ETAX_DOWN(5, "etax_down", "税局不可用"),
SIGN_ERROR(6, "sign_error", "签名异常"),
MAKEOUT_DONE(7, "makeout_done", "发票已经开具"),
MAKEOUT_DOING(8, "makeout_doing", "开票进行中"),
ILLEGAL_TOKEN(9, "illegal_token", "Token不合法"),
LOGIN_ERROR(10, "login_error", "登录异常"),
MAKEOUT_FAIL(11, "makeout_fail", "开票失败"),
OTHER(99, "other", "其他");
private final int type;
private final String humanType;
private final String desc;
IncomeInvoiceExceptionType(int type, String humanType, String desc) {
this.type = type;
this.humanType = humanType;
this.desc = desc;
}
public static IncomeInvoiceExceptionType as(int type) {
for (IncomeInvoiceExceptionType incomeInvoiceExceptionType : IncomeInvoiceExceptionType.values()) {
if (incomeInvoiceExceptionType.type == type) {
return incomeInvoiceExceptionType;
}
}
return null;
}
public static IncomeInvoiceExceptionType as(String humanType) {
for (IncomeInvoiceExceptionType incomeInvoiceExceptionType : IncomeInvoiceExceptionType.values()) {
if (incomeInvoiceExceptionType.humanType.equals(humanType)) {
return incomeInvoiceExceptionType;
}
}
return null;
}
}
package com.sxc.etaxincome.enums;
import lombok.Getter;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
/**
* general exception code.
* @author caosongqing
* @date 2024-4-23
*/
@Getter
public enum ResponseCode {
/**
* success.
*/
SUCCESS("00", "成功"),
/**
* user not found.
*/
NO_USER_FOUND("01", "无此用户"),
/**
* sign wrong.
*/
SIGN_WRONG("02", "签名错误"),
/**
* parameter required.
*/
PARAMETER_REQUIRED("03", "参数不全"),
/**
* token invalid.
*/
TOKEN_INVALID("04", "Token无效"),
/**
* service not found.
*/
NO_SERVICE_FOUND("05", "无此服务"),
/**
* privilege not found.
*/
NO_PRIVILEGE_FOUND("06", "没有权限"),
/**
* taxno not registered.
*/
TAXNO_NOT_REGISTERED("07", "该税号未注册"),
/**
* taxcount exceed maximum
*/
TAXCOUNT_EXCEED_MAX("08", "超过授权税号总数"),
ACCOUNT_DISABLED("09", "账号已禁用"),
NO_PRIVILEGE_AREA_FOUND("10", "没有地区权限"),
PARAMETER_REQUIRED_USERNAME("11", "缺少用户名"),
PARAMETER_REQUIRED_TAXNO("12", "缺少税号"),
SMS_SEND("13", "已发送短信"),
LOGIN_DENY("14", "无法登录"),
LOGIN_WAITING("15", "登录遇阻,可重试"),
PARAMETER_REQUIRED_AREA("16", "缺少地区"),
DIFFERENT_MAKEOUT_INVOICE_API_CODE("22", "同一流水号不允许变更开票接口"),
AUTH_PERMISSION_QUERY_FAIL("23", "查询功能权限失败"),
AUTH_PERMISSION_NOT_FOUND("24", "功能未授权"),
AUTH_USER_QUERY_FAIL("25", "查询用户失败"),
AUTH_USER_NOT_FOUND("26", "未查询到用户"),
AUTH_DATA_PRIVILEGE_QUERY_FAIL("27", "查询权限失败"),
AUTH_DATA_PRIVILEGE_NOT_FOUND("28", "税号未授权"),
DIFFERENT_MAKEOUT_INVOICE_TYPE("29", "同一流水号不允许变更开票类型"),
DIFFERENT_MAKEOUT_INVOICE_MODE("30", "同一流水号不允许变更开票模式"),
ETAX_LOGIN_INVALID("31", "请重新登录后继续办理业务"),
ETAX_QR_CODE_CHECK("32", "需要扫描二维码进行身份校验"),
NOT_FOUND_BUYER_TAXNO("33", "未查询到购买方纳税人信息,请维护"),
ERROR_TAX("34", "税率不合法"),
OVER_CREDIT_LINE("35", "授信额度不够"),
NOT_FOUND_ITEM("36", "未查询到对应的项目信息"),
DISCOUNT_OVER_ITEM_AMOUNT("37", "折扣金额大于商品金额"),
WRONG_FORMAT_BANK_ACCOUNT("38", "销售方银行账号格式不正确"),
FREEZE_CREDIT_LINE("39", "暂停授信"),
READ_TIMED_OUT("40", "开票请求超时,请检查是否开票成功"),
MAKEOUT_INVOICE_DOING_FROM_TAX_BUREAU("41", "发票正在开具中(税局正在处理中)"),
ETAX_RESPONSE_ERROR("42", "税局处理异常,请检查是否开票成功"),
ETAX_DOWN_ERROR("43", "税局暂不可用,请稍后重试"),
MAKEOUT_INVOICE_APPLY_DETAIL_SAVE_FAIL("50", "开票请求详情保存失败"),
MAKEOUT_INVOICE_APPLY_SAVE_FAIL("51", "开票请求保存失败"),
/**
* invoice made out.
*/
MAKEOUT_INVOICE_DONE("52", "发票已经开具"),
MAKEOUT_INVOICE_APPLY_UPDATE_FAIL("53", "开票请求更新失败"),
/**
* invoice make out fail
*/
MAKEOUT_INVOICE_FAIL("54", "开票失败"),
MAKEOUT_INVOICE_RESULT_SAVE_FAIL("55", "开票结果保存失败"),
MAKEOUT_INVOICE_NO_EXPIRED("56", "当前开票信息已失效,请重试"),
MAKEOUT_INVOICE_NO_RESULT("57", "发票已开具,但未查询到开票结果"),
MAKEOUT_INVOICE_DOING("58", "开票正在进行中(开票服务正在处理中)"),
MAKEOUT_INVOICE_DONE_GET_RESULT_MATCHED("59", "发票已经开具,通过查询最近开票列表匹配到开票结果"),
MAKEOUT_INVOICE_NO_REQUIRED("60", "当前开票信息不完整,请重试"),
MAKEOUT_INVOICE_DONE_GET_RESULT_FAIL("61", "发票已经开具,但未获得开票结果"),
MAKEOUT_INVOICE_DONE_GET_RESULT_NOT_MATCHED("62", "发票已经开具,通过查询最近开票列表未匹配到开票结果"),
MAKEOUT_INVOICE_SUCCESS_SUBMITTING_FAIL_GET_RESULT_EXPIRED_MAKEOUT_INVOICE_NO("63", "发票已经成功提交开具,但一直未获得开票结果,再次提交开票时,开票信息已失效,终止开票"),
MAKEOUT_INVOICE_RED_QUERY_RESULT_FAIL("65", "开具红票录入成功,但查询开票结果失败"),
MAKEOUT_INVOICE_PROXY_ERROR("70", "请求代理异常,请稍后重试"),
RESPONSE_419_ERROR("71", "请求发生异常,请稍后重试"),
ILLEGAL_PARAM("72", "参数校验不通过"),
SIGN_STRENGTH_ERROR("73", "请求税局发生异常,请稍后重试"),
CALL_PROXY_API_UNKNOWN_ERROR("74", SIGN_STRENGTH_ERROR.desc),
GET_MAKEOUT_INVOICE_NO_ERROR("75", "获取开票号失败,请稍后重试"),
MAKEOUT_INVOICE_FAIL_RETRY_LATER("76", SIGN_STRENGTH_ERROR.desc),
UPGRADE_SIGN("80", "非法请求"),
MAKEOUT_INVOICE_REVOKE("90", "已作废,不可重新开票"),
/**
* error.
*/
ERROR("99", "网络繁忙,请稍后重试");
private final String code;
private final String desc;
ResponseCode(String code, String desc) {
this.code = code;
this.desc = desc;
}
private static final Map<String, ResponseCode> ENUM_CACHE = new HashMap<>();
static {
for (ResponseCode responseCode : ResponseCode.values()) {
ENUM_CACHE.put(responseCode.code, responseCode);
}
}
public static ResponseCode as(String code) {
for (ResponseCode responseCode : ResponseCode.values()) {
if (responseCode.code.equals(code)) {
return responseCode;
}
}
return null;
}
public static String getDesc(String code) {
return Optional.ofNullable(ENUM_CACHE.get(code))
.map(ResponseCode::getDesc)
.orElseThrow(() -> new IllegalArgumentException("invalid exception code."));
}
}
\ No newline at end of file
package com.sxc.etaxincome.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sxc.etaxincome.entity.EtaxReportApiConfig;
/**
* <p>
* Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-23 15:27:40
*/
public interface EtaxReportApiConfigMapper extends BaseMapper<EtaxReportApiConfig> {
}
package com.sxc.etaxincome.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sxc.etaxincome.entity.EtaxReportParamConfig;
/**
* <p>
* Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-23 15:27:40
*/
public interface EtaxReportParamConfigMapper extends BaseMapper<EtaxReportParamConfig> {
}
package com.sxc.etaxincome.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sxc.etaxincome.entity.EtaxReportResultConfig;
/**
* <p>
* Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-24 21:40:43
*/
public interface EtaxReportResultConfigMapper extends BaseMapper<EtaxReportResultConfig> {
}
package com.sxc.etaxincome.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sxc.etaxincome.entity.EtaxReportType;
/**
* <p>
* Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-26 16:06:52
*/
public interface EtaxReportTypeMapper extends BaseMapper<EtaxReportType> {
}
package com.sxc.etaxincome.mapper;
import com.sxc.etaxincome.common.model.report.IncomeInvoiceStatResult;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.entity.FinCountLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* <p>
* 统计日志 Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-05-29 11:44:38
*/
public interface FinCountLogMapper extends BaseMapper<FinCountLog> {
List<IncomeInvoiceStatResult> queryReportListByDate(IncomeQueryCommon incomeQueryCommon);
}
package com.sxc.etaxincome.mapper;
import com.sxc.etaxincome.common.model.report.IncomeInvoiceStatResult;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.entity.FinCountReport;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* <p>
* 实时统计小时表 Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-05-29 11:44:38
*/
public interface FinCountReportMapper extends BaseMapper<FinCountReport> {
List<IncomeInvoiceStatResult> queryReportListByDate(IncomeQueryCommon incomeQueryCommon);
List<IncomeInvoiceStatResult> queryReportListByUser(IncomeQueryCommon incomeQueryCommon);
}
package com.sxc.etaxincome.mapper;
import com.sxc.etaxincome.common.model.report.IncomeExceptionStatResult;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.entity.FinCountReport;
import com.sxc.etaxincome.entity.FinRealLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-06-05 22:49:55
*/
public interface FinRealLogMapper extends BaseMapper<FinRealLog> {
List<FinCountReport> statAreaIncome(IncomeQueryCommon incomeQueryCommon);
List<IncomeExceptionStatResult> queryExceptionList(IncomeQueryCommon incomeQueryCommon);
}
package com.sxc.etaxincome.mapper;
import com.sxc.etaxincome.entity.FinSysDict;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
public interface FinSysDictMapper extends BaseMapper<FinSysDict> {
}
package com.sxc.etaxincome.mapper;
import com.sxc.etaxincome.entity.FinUserTaxno;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 用户日志对照表 Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-06-28 10:42:45
*/
public interface FinUserTaxnoMapper extends BaseMapper<FinUserTaxno> {
}
package com.sxc.etaxincome.mapper;
import com.sxc.etaxincome.entity.SysAppUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author mybatis-plus-generator
* @since 2024-05-27 22:24:49
*/
public interface SysAppUserMapper extends BaseMapper<SysAppUser> {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.EtaxReportApiConfigMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.EtaxReportParamConfigMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.EtaxReportResultConfigMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.EtaxReportTypeMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.FinCountLogMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.FinCountReportMapper">
<select id="queryReportListByDate" parameterType="com.sxc.etaxincome.criteria.IncomeQueryCommon" resultType="com.sxc.etaxincome.common.model.report.IncomeInvoiceStatResult">
SELECT
user_name,
count_date as stat_date,
count( 1 ) AS zone_total_num,
sum( success_num ) AS success_total_num,
sum( fail_num ) AS fail_total_num,
sum( taxno_num ) AS taxno_total_num,
sum( total_num ) AS sum_total_num,
max( face_num ) AS face_max_num
FROM
fin_count_report
WHERE
user_name = #{userName}
AND count_type = #{countType}
<![CDATA[
AND count_date >= #{startDateTime}
AND count_date <= #{endDateTime}
]]>
GROUP BY count_date
</select>
<select id="queryReportListByUser" parameterType="com.sxc.etaxincome.criteria.IncomeQueryCommon" resultType="com.sxc.etaxincome.common.model.report.IncomeInvoiceStatResult">
SELECT
user_name,
count( 1 ) AS zone_total_num,
sum( success_num ) AS success_total_num,
sum( fail_num ) AS fail_total_num,
sum( taxno_num ) AS taxno_total_num,
sum( total_num ) AS sum_total_num,
max( face_num ) AS face_max_num
FROM
fin_count_report
WHERE
count_type = #{countType}
<![CDATA[
AND count_date >= #{startDateTime}
AND count_date <= #{endDateTime}
]]>
GROUP BY user_name
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.FinRealLogMapper">
<select id="statAreaIncome" resultType="com.sxc.etaxincome.entity.FinCountReport" parameterType="com.sxc.etaxincome.criteria.IncomeQueryCommon">
SELECT
user_code AS user_name,
none_code AS zone_code,
count( DISTINCT taxno ) AS taxno_num,
count( DISTINCT itype ) AS face_num,
sum( nes_code = '99' ) AS fail_num,
sum( nes_code = '00' ) AS success_num,
count( nes_code) as total_num
FROM
( SELECT *, IF ( res_code = '99', '99', '00' ) AS nes_code, IFNULL(zone_code, '6789') as none_code FROM fin_real_log
WHERE user_code = #{userName}
<![CDATA[
AND req_date >= #{startDateTime}
AND req_date <= #{endDateTime}
]]>
) a
GROUP BY
none_code
</select>
<select id="queryExceptionList" resultType="com.sxc.etaxincome.common.model.report.IncomeExceptionStatResult" parameterType="com.sxc.etaxincome.criteria.IncomeQueryCommon">
SELECT
res_code,
res_msg,
count( 1 ) AS res_num
FROM
fin_real_log
WHERE
user_code = #{userName}
<if test="null != areaCode and '' != areaCode">
AND zone_code = #{areaCode}
</if>
AND res_code != '00'
<![CDATA[
AND req_date >= #{startDateTime}
AND req_date <= #{endDateTime}
]]>
GROUP BY
res_code,
res_msg
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.FinSysDictMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.FinUserTaxnoMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxc.etaxincome.mapper.SysAppUserMapper">
</mapper>
CREATE TABLE `etax_report_param_config` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`api_code` VARCHAR(50) NOT NULL COMMENT '接口编号',
`table_name` VARCHAR(100) DEFAULT NULL COMMENT '报表名',
`table_code` VARCHAR(30) DEFAULT NULL COMMENT '报表编码',
`location_row` VARCHAR(100) NOT NULL COMMENT '行位置',
`location_col` VARCHAR(500) NOT NULL COMMENT '列位置',
`etax_param_name` VARCHAR(100) NOT NULL COMMENT '电子税局参数名',
`remark` VARCHAR(100) NOT NULL COMMENT '说明',
`readonly` TINYINT DEFAULT 0 COMMENT '是否只读',
`priority` INT DEFAULT 99999 COMMENT '提交顺序',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后更新日期',
PRIMARY KEY (`id`)
);
CREATE TABLE `etax_report_api_config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`api_code` VARCHAR(50) NOT NULL COMMENT '接口编号',
`api_version` VARCHAR(100) NOT NULL COMMENT '接口版本号',
`api_url` VARCHAR(500) DEFAULT '' COMMENT '接口地址',
`remark` VARCHAR(1000) NOT NULL COMMENT '说明',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后更新日期',
PRIMARY KEY (`id`)
);
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>etax-income-api</artifactId>
<groupId>com.sxc.etaxincome</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>etax-income-server</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>etax-income-server</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-controller</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<build>
<finalName>etax-income-api</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.sxc.etaxincome;
import com.alibaba.nacos.api.config.ConfigType;
import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
import com.alicp.jetcache.anno.config.EnableMethodCache;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
/**
* @author caosongqing
* @date 2024/4/17
* @description
*/
@SpringBootApplication
@ServletComponentScan
@EnableAsync
@EnableAspectJAutoProxy(proxyTargetClass = true)
@MapperScan("com.sxc.etaxincome.mapper")
@EnableMethodCache(basePackages = "com.sxc.etaxincome")
@NacosPropertySource(dataId = "param_config", groupId = "etax_report_config", autoRefreshed = true, type = ConfigType.PROPERTIES)
@NacosPropertySource(dataId = "url_config", groupId = "etax_report_config", autoRefreshed = true, type = ConfigType.PROPERTIES)
public class EtaxIncomeApplication {
public static void main(String[] args) {
SpringApplication.run(EtaxIncomeApplication.class, args);
}
}
spring:
datasource:
hikari:
auto-commit: true
connection-test-query: SELECT 1
connection-timeout: 30000
idle-timeout: 180000
max-lifetime: 1800000
maximum-pool-size: 10
minimum-idle: 5
pool-name: MyHikariCP
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/numysql?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useSSL=false
username: root
password:
server:
port: 8886
servlet:
context-path: /etax-income
tomcat:
max-http-form-post-size: 10MB
management:
metrics:
tags:
application: ${spring.application.name}
endpoint:
health:
show-details: always
enabled: true
prometheus:
enabled: true
shutdown:
enabled: false
endpoints:
web:
exposure:
exclude: shutdown
include: '*'
logging:
config: classpath:logback.xml
mybatis-plus:
type-enums-package: com.sxc.etaxincome.enums
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
nacos:
config:
server-addr: localhost:8848
namespace: 3b0e7d88-4a53-4734-a1fa-7f5943603c7f
username: nacos
password: nacos
jetcache:
statIntervalMinutes: 2
areaInCacheName: false
local:
default:
type: caffeine
keyConvertor: fastjson
limit: 10000
remote:
default:
type: redis.lettuce
keyConvertor: fastjson
# 序列化器的全局配置。仅remote类型的缓存需要指定,可选java和kryo
valueEncoder: kryo
valueDecoder: kryo
# redis ip 地址
uri:
- redis://@localhost:6379/0?timeout=5s
# host 和 port 也可以用 url 配置:如下
# uri: redis://password@localhost:6379/1?timeout=5s
# 如果 redis 有设置密码需要加上 password
# 以毫秒为单位指定超时时间的全局配置
expireAfterWriteInMillis: 5000
# 集群模式
# mode: MasterSlave # (主从模式)
poolConfig:
minIdle: 5
maxIdle: 20
maxTotal: 20
job:
send-version:
cron: 0 0/5 * * * ?
spring:
datasource:
hikari:
auto-commit: true
connection-test-query: SELECT 1
connection-timeout: 30000
idle-timeout: 180000
max-lifetime: 1800000
maximum-pool-size: 10
minimum-idle: 5
pool-name: MyHikariCP
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://172.16.9.142:3866/etax_report?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useSSL=false
username: shenbao
password: sb@prdm20242k
server:
port: 8886
servlet:
context-path: /etax-report
tomcat:
max-http-form-post-size: 10MB
max-connections: 10000
max-threads: 500
management:
metrics:
tags:
application: ${spring.application.name}
endpoint:
health:
show-details: always
enabled: true
prometheus:
enabled: true
shutdown:
enabled: false
endpoints:
web:
exposure:
exclude: shutdown
include: '*'
logging:
config: classpath:logback.xml
mybatis-plus:
type-enums-package: com.sxc.etaxincome.enums
configuration:
log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
nacos:
config:
server-addr: nacos.taxservices.cn:8500
namespace: 9139b86a-530d-4fce-8b86-f95fe3a8aec6
username: nacos
password: nac@csq!2022
jetcache:
statIntervalMinutes: 30
areaInCacheName: false
local:
default:
type: caffeine
keyConvertor: fastjson
limit: 10000
remote:
default:
type: redis.lettuce
keyConvertor: fastjson
# 序列化器的全局配置。仅remote类型的缓存需要指定,可选java和kryo
valueEncoder: kryo
valueDecoder: kryo
# redis ip 地址
uri:
- redis://pa33W0rD,@rediscy.taxservices.cn:6781/0?timeout=5s
# host 和 port 也可以用 url 配置:如下
# uri: redis://password@localhost:6379/1?timeout=5s
# 如果 redis 有设置密码需要加上 password
# 以毫秒为单位指定超时时间的全局配置
expireAfterWriteInMillis: 5000
# 集群模式
# mode: MasterSlave # (主从模式)
poolConfig:
minIdle: 5
maxIdle: 20
maxTotal: 20
job:
send-version:
cron: 0 0/5 * * * ?
spring:
datasource:
hikari:
auto-commit: true
connection-test-query: SELECT 1
connection-timeout: 30000
idle-timeout: 180000
max-lifetime: 1800000
maximum-pool-size: 10
minimum-idle: 5
pool-name: MyHikariCP
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://172.16.6.244:3866/makeout_invoice?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useSSL=false
username: makeout_invoice
password: Jndxpq@20-Laice2!
server:
port: 8886
servlet:
context-path: /etax-report
tomcat:
max-http-form-post-size: 10MB
management:
metrics:
tags:
application: ${spring.application.name}
endpoint:
health:
show-details: always
enabled: true
prometheus:
enabled: true
shutdown:
enabled: false
endpoints:
web:
exposure:
exclude: shutdown
include: '*'
logging:
config: classpath:logback.xml
mybatis-plus:
type-enums-package: com.sxc.etaxincome.enums
configuration:
log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
nacos:
config:
server-addr: nacos.taxservices.cn:8500
namespace: 9139b86a-530d-4fce-8b86-f95fe3a8aec6
username: nacos
password: nac@csq!2022
jetcache:
statIntervalMinutes: 30
areaInCacheName: false
local:
default:
type: caffeine
keyConvertor: fastjson
limit: 10000
remote:
default:
type: redis.lettuce
keyConvertor: fastjson
# 序列化器的全局配置。仅remote类型的缓存需要指定,可选java和kryo
valueEncoder: kryo
valueDecoder: kryo
# redis ip 地址
uri:
- redis://pa33W0rD,@rediscy.taxservices.cn:6781/0?timeout=5s
# host 和 port 也可以用 url 配置:如下
# uri: redis://password@localhost:6379/1?timeout=5s
# 如果 redis 有设置密码需要加上 password
# 以毫秒为单位指定超时时间的全局配置
expireAfterWriteInMillis: 5000
# 集群模式
# mode: MasterSlave # (主从模式)
poolConfig:
minIdle: 5
maxIdle: 20
maxTotal: 20
job:
send-version:
cron: 0 0 0/1 * * ?
spring:
profiles:
active: dev
application:
name: etax-income-api
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 刷新配置scanPeriod,单位:秒,默认60s -->
<configuration scan="true" scanPeriod="60">
<define name="ip" class="com.sxc.etaxincome.common.util.LogIpConfig"/>
<property name="LOG_HOME" value="logs"/>
<property name="maxHistoryCount" value="168"/>
<!-- 控制台输出日志 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] [%X{traceId}] %-5level %logger{36} [%line] - %msg%n
</pattern>
</encoder>
</appender>
<appender name="INFO_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${ip}.info.log.%d{yyyyMMdd-HH}</fileNamePattern>
<maxHistory>${maxHistoryCount}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] [%X{traceId}] %-5level %logger{36} [%line] - %msg%n
</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
</filter>
</appender>
<appender name="ERROR_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${ip}.error.log.%d{yyyyMMdd-HH}</fileNamePattern>
<maxHistory>${maxHistoryCount}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] [%X{traceId}] %-5level %logger{36} [%line] - %msg%n
</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</configuration>
\ No newline at end of file
# ???????????,???com.p6spy.engine.spy.P6SpyFactory
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
# ???????? ???com.p6spy.engine.spy.appender.SingleLineFormat , ???? ??????
#logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
#appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# ?? Log ? appender?????????Log4j????????????????
appender=com.p6spy.engine.spy.appender.Slf4JLogger
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
#appender=com.p6spy.engine.spy.appender.StdoutLogger
#appender=com.p6spy.engine.spy.appender.FileLogger
# ????p6spy driver????
deregisterdrivers=true
# if true then url must be prefixed with p6spy.
useprefix=true
# ????Log??error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
#??SimpleDateFormat???? ????
dateformat=yyyy-MM-dd HH:mm:ss
# ????
#driverlist=org.h2.Driver
driverlist=com.mysql.cj.jdbc.Driver
# P6Outage ??????????????? ??false
outagedetection=true
# ?SQL???? ?
outagedetectioninterval=2
# ??????::
# %(connectionId) connection id
# %(currentTime) ????
# %(executionTime) ????
# %(category) ????
# %(effectiveSql) ???SQL ??
# %(effectiveSqlSingleLine) ???SQL ?????
# %(sql) ?????SQL????????
# %(sqlSingleLine) ?????SQL???????? ?????
customLogMessageFormat=[%(currentTime)] [%(category)-%(connectionId)] [execute time: %(executionTime) ms] execute sql:\n %(sqlSingleLine)
\ No newline at end of file
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>etax-income-api</artifactId>
<groupId>com.sxc.etaxincome</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>etax-income-service</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>etax-income-service</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-mapper</artifactId>
</dependency>
</dependencies>
</project>
package com.sxc.etaxincome.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sxc.etaxincome.entity.EtaxReportApiConfig;
/**
* <p>
* 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-23 15:27:40
*/
public interface IEtaxReportApiConfigService extends IService<EtaxReportApiConfig> {
EtaxReportApiConfig queryOne(EtaxReportApiConfig etaxReportApiConfigCriteria);
}
package com.sxc.etaxincome.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sxc.etaxincome.entity.EtaxReportParamConfig;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-23 15:27:40
*/
public interface IEtaxReportParamConfigService extends IService<EtaxReportParamConfig> {
List<EtaxReportParamConfig> queryList(EtaxReportParamConfig etaxReportParamConfigCriteria);
}
package com.sxc.etaxincome.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sxc.etaxincome.entity.EtaxReportResultConfig;
import java.util.List;
import java.util.Map;
/**
* <p>
* 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-24 21:40:43
*/
public interface IEtaxReportResultConfigService extends IService<EtaxReportResultConfig> {
public List<EtaxReportResultConfig> queryList(EtaxReportResultConfig etaxReportResultConfigCriteria);
}
package com.sxc.etaxincome.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sxc.etaxincome.entity.EtaxReportType;
/**
* <p>
* 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-26 16:06:52
*/
public interface IEtaxReportTypeService extends IService<EtaxReportType> {
EtaxReportType queryOne(EtaxReportType etaxReportTypeCriteria);
}
package com.sxc.etaxincome.service;
import com.sxc.etaxincome.entity.FinCountLog;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 统计日志 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-05-29 11:44:38
*/
public interface IFinCountLogService extends IService<FinCountLog> {
}
package com.sxc.etaxincome.service;
import com.sxc.etaxincome.common.model.report.IncomeInvoiceStatResult;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.entity.FinCountReport;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 实时统计小时表 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-05-29 11:44:38
*/
public interface IFinCountReportService extends IService<FinCountReport> {
List<FinCountReport> queryListByCriteria(IncomeQueryCommon incomeQueryCommon);
List<IncomeInvoiceStatResult> queryReportListByDate(IncomeQueryCommon incomeQueryCommon);
List<IncomeInvoiceStatResult> queryReportListByUser(IncomeQueryCommon incomeQueryCommon);
}
package com.sxc.etaxincome.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sxc.etaxincome.common.model.report.IncomeExceptionStatResult;
import com.sxc.etaxincome.criteria.FinRealLogCriteria;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.entity.FinCountReport;
import com.sxc.etaxincome.entity.FinRealLog;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-06-05 22:49:55
*/
public interface IFinRealLogService extends IService<FinRealLog> {
List<FinCountReport> statAreaIncome(IncomeQueryCommon incomeQueryCommon);
List<IncomeExceptionStatResult> queryExceptionList(IncomeQueryCommon incomeQueryCommon);
public IPage<FinRealLog> queryPageListOrderByRequestTimeDesc(FinRealLogCriteria finRealLogCriteria, int start, int limit);
}
package com.sxc.etaxincome.service;
import com.sxc.etaxincome.entity.FinSysDict;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
public interface IFinSysDictService extends IService<FinSysDict> {
List<FinSysDict> queryDictListByCriteria(FinSysDict sysDictCriteria);
}
package com.sxc.etaxincome.service;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.entity.FinUserTaxno;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 用户日志对照表 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-06-28 10:42:45
*/
public interface IFinUserTaxnoService extends IService<FinUserTaxno> {
List<FinUserTaxno> queryList(IncomeQueryCommon incomeQueryCommon);
}
package com.sxc.etaxincome.service;
import com.sxc.etaxincome.entity.SysAppUser;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-05-27 22:24:49
*/
public interface ISysAppUserService extends IService<SysAppUser> {
List<SysAppUser> queryListByCriteria(SysAppUser sysAppUser);
}
package com.sxc.etaxincome.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sxc.etaxincome.entity.EtaxReportApiConfig;
import com.sxc.etaxincome.mapper.EtaxReportApiConfigMapper;
import com.sxc.etaxincome.service.IEtaxReportApiConfigService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-23 15:27:40
*/
@Service
public class EtaxReportApiConfigServiceImpl extends ServiceImpl<EtaxReportApiConfigMapper, EtaxReportApiConfig> implements IEtaxReportApiConfigService {
@Override
public EtaxReportApiConfig queryOne(EtaxReportApiConfig etaxReportApiConfigCriteria) {
try {
Wrapper<EtaxReportApiConfig> queryWrapper = Wrappers.<EtaxReportApiConfig>lambdaQuery()
.eq(etaxReportApiConfigCriteria.getId() != null, EtaxReportApiConfig::getId, etaxReportApiConfigCriteria.getId())
.eq(StringUtils.isNotBlank(etaxReportApiConfigCriteria.getApiCode()), EtaxReportApiConfig::getApiCode, etaxReportApiConfigCriteria.getApiCode());
return this.getOne(queryWrapper);
} catch(Exception e) {
log.error("query param config list error:", e);
return new EtaxReportApiConfig();
}
}
}
package com.sxc.etaxincome.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sxc.etaxincome.entity.EtaxReportParamConfig;
import com.sxc.etaxincome.mapper.EtaxReportParamConfigMapper;
import com.sxc.etaxincome.service.IEtaxReportParamConfigService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-23 15:27:40
*/
@Service
public class EtaxReportParamConfigServiceImpl extends ServiceImpl<EtaxReportParamConfigMapper, EtaxReportParamConfig> implements IEtaxReportParamConfigService {
@Override
public List<EtaxReportParamConfig> queryList(EtaxReportParamConfig etaxReportParamConfigCriteria) {
try {
Wrapper<EtaxReportParamConfig> queryWrapper = Wrappers.<EtaxReportParamConfig>lambdaQuery()
.eq(etaxReportParamConfigCriteria.getId() != null, EtaxReportParamConfig::getId, etaxReportParamConfigCriteria.getId())
.eq(etaxReportParamConfigCriteria.getPriority() != null, EtaxReportParamConfig::getReadonly, etaxReportParamConfigCriteria.getReadonly())
.eq(StringUtils.isNotBlank(etaxReportParamConfigCriteria.getApiCode()), EtaxReportParamConfig::getApiCode, etaxReportParamConfigCriteria.getApiCode())
.orderByAsc(EtaxReportParamConfig::getPriority);
return this.list(queryWrapper);
} catch(Exception e) {
log.error("query param config list error:", e);
return Collections.emptyList();
}
}
}
package com.sxc.etaxincome.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.sxc.etaxincome.entity.EtaxReportParamConfig;
import com.sxc.etaxincome.entity.EtaxReportResultConfig;
import com.sxc.etaxincome.mapper.EtaxReportResultConfigMapper;
import com.sxc.etaxincome.service.IEtaxReportResultConfigService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* <p>
* 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-24 21:40:43
*/
@Service
public class EtaxReportResultConfigServiceImpl extends ServiceImpl<EtaxReportResultConfigMapper, EtaxReportResultConfig> implements IEtaxReportResultConfigService {
@Override
public List<EtaxReportResultConfig> queryList(EtaxReportResultConfig etaxReportResultConfigCriteria) {
try {
Wrapper<EtaxReportResultConfig> queryWrapper = Wrappers.<EtaxReportResultConfig>lambdaQuery()
.eq(StringUtils.isNotBlank(etaxReportResultConfigCriteria.getTableCode()), EtaxReportResultConfig::getTableCode, etaxReportResultConfigCriteria.getTableCode());
return this.list(queryWrapper);
} catch(Exception e) {
log.error("query result config list error:", e);
return Collections.emptyList();
}
}
}
package com.sxc.etaxincome.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sxc.etaxincome.entity.EtaxReportApiConfig;
import com.sxc.etaxincome.entity.EtaxReportType;
import com.sxc.etaxincome.mapper.EtaxReportTypeMapper;
import com.sxc.etaxincome.service.IEtaxReportTypeService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-04-26 16:06:52
*/
@Service
public class EtaxReportTypeServiceImpl extends ServiceImpl<EtaxReportTypeMapper, EtaxReportType> implements IEtaxReportTypeService {
@Override
public EtaxReportType queryOne(EtaxReportType etaxReportTypeCriteria) {
try {
Wrapper<EtaxReportType> queryWrapper = Wrappers.<EtaxReportType>lambdaQuery()
.eq(etaxReportTypeCriteria.getId() != null, EtaxReportType::getId, etaxReportTypeCriteria.getId())
.eq(StringUtils.isNotBlank(etaxReportTypeCriteria.getReportId()), EtaxReportType::getReportId, etaxReportTypeCriteria.getReportId());
return this.getOne(queryWrapper);
} catch(Exception e) {
log.error("query reportType error:", e);
return new EtaxReportType();
}
}
}
package com.sxc.etaxincome.service.impl;
import com.sxc.etaxincome.entity.FinCountLog;
import com.sxc.etaxincome.mapper.FinCountLogMapper;
import com.sxc.etaxincome.service.IFinCountLogService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 统计日志 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-05-29 11:44:38
*/
@Service
public class FinCountLogServiceImpl extends ServiceImpl<FinCountLogMapper, FinCountLog> implements IFinCountLogService {
}
package com.sxc.etaxincome.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sxc.etaxincome.common.model.report.IncomeInvoiceStatResult;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.entity.FinCountReport;
import com.sxc.etaxincome.mapper.FinCountReportMapper;
import com.sxc.etaxincome.service.IFinCountReportService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 实时统计小时表 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-05-29 11:44:38
*/
@Service
public class FinCountReportServiceImpl extends ServiceImpl<FinCountReportMapper, FinCountReport> implements IFinCountReportService {
@Override
public List<FinCountReport> queryListByCriteria(IncomeQueryCommon incomeQueryCommon) {
Wrapper<FinCountReport> queryWrapper = Wrappers.<FinCountReport>lambdaQuery()
.eq(StringUtils.isNotBlank(incomeQueryCommon.getUserName()), FinCountReport::getUserName, incomeQueryCommon.getUserName())
.between(FinCountReport::getCountDate, incomeQueryCommon.getStartDateTime(), incomeQueryCommon.getEndDateTime())
.orderByAsc(FinCountReport::getCountDate);
return this.list(queryWrapper);
}
@Override
public List<IncomeInvoiceStatResult> queryReportListByDate(IncomeQueryCommon incomeQueryCommon) {
return this.getBaseMapper().queryReportListByDate(incomeQueryCommon);
}
@Override
public List<IncomeInvoiceStatResult> queryReportListByUser(IncomeQueryCommon incomeQueryCommon) {
return this.getBaseMapper().queryReportListByUser(incomeQueryCommon);
}
}
package com.sxc.etaxincome.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sxc.etaxincome.common.model.report.IncomeExceptionStatResult;
import com.sxc.etaxincome.criteria.FinRealLogCriteria;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.entity.FinCountReport;
import com.sxc.etaxincome.entity.FinRealLog;
import com.sxc.etaxincome.mapper.FinRealLogMapper;
import com.sxc.etaxincome.service.IFinRealLogService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import static javax.management.Query.eq;
/**
* <p>
* 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-06-05 22:49:55
*/
@Service
public class FinRealLogServiceImpl extends ServiceImpl<FinRealLogMapper, FinRealLog> implements IFinRealLogService {
@Override
public List<FinCountReport> statAreaIncome(IncomeQueryCommon incomeQueryCommon) {
return this.getBaseMapper().statAreaIncome(incomeQueryCommon);
}
@Override
public List<IncomeExceptionStatResult> queryExceptionList(IncomeQueryCommon incomeQueryCommon) {
return this.getBaseMapper().queryExceptionList(incomeQueryCommon);
}
@Override
public IPage<FinRealLog> queryPageListOrderByRequestTimeDesc(FinRealLogCriteria finRealLogCriteria, int start, int limit) {
Wrapper<FinRealLog> queryWrapper = Wrappers.<FinRealLog>lambdaQuery()
.eq(StringUtils.isNotBlank(finRealLogCriteria.getZoneCode()), FinRealLog::getZoneCode, finRealLogCriteria.getZoneCode())
.eq(StringUtils.isNotBlank(finRealLogCriteria.getUserCode()), FinRealLog::getUserCode, finRealLogCriteria.getUserCode())
.eq(StringUtils.isNotBlank(finRealLogCriteria.getResCode()), FinRealLog::getResCode, finRealLogCriteria.getResCode())
.eq(StringUtils.isNotBlank(finRealLogCriteria.getTaxno()), FinRealLog::getTaxno, finRealLogCriteria.getTaxno())
.eq(StringUtils.isNotBlank(finRealLogCriteria.getItype()), FinRealLog::getItype, finRealLogCriteria.getItype())
.eq(StringUtils.isNotBlank(finRealLogCriteria.getReqSign()), FinRealLog::getReqSign, finRealLogCriteria.getReqSign())
.eq(StringUtils.isNotBlank(finRealLogCriteria.getTimeFlag()), FinRealLog::getTimeFlag, finRealLogCriteria.getTimeFlag())
.like(StringUtils.isNotBlank(finRealLogCriteria.getReqContext()), FinRealLog::getReqContext, finRealLogCriteria.getReqContext())
.like(StringUtils.isNotBlank(finRealLogCriteria.getResContext()), FinRealLog::getResContext, finRealLogCriteria.getResContext())
.like(StringUtils.isNotBlank(finRealLogCriteria.getResMsg()), FinRealLog::getResMsg, finRealLogCriteria.getResMsg())
.between(FinRealLog::getReqDate, finRealLogCriteria.getDateTimeStart(), finRealLogCriteria.getDateTimeEnd())
.ge(finRealLogCriteria.getStartTimeDiff() != null, FinRealLog::getTimeDiff, finRealLogCriteria.getStartTimeDiff())
.le(finRealLogCriteria.getEndTimeDiff() != null, FinRealLog::getTimeDiff, finRealLogCriteria.getEndTimeDiff())
.orderByDesc(true, FinRealLog::getReqDate);
return this.page(new Page<>(start, limit), queryWrapper);
}
}
package com.sxc.etaxincome.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sxc.etaxincome.entity.FinSysDict;
import com.sxc.etaxincome.entity.SysAppUser;
import com.sxc.etaxincome.mapper.FinSysDictMapper;
import com.sxc.etaxincome.service.IFinSysDictService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-07-02 16:32:19
*/
@Service
public class FinSysDictServiceImpl extends ServiceImpl<FinSysDictMapper, FinSysDict> implements IFinSysDictService {
public List<FinSysDict> queryDictListByCriteria(FinSysDict sysDictCriteria) {
Wrapper<FinSysDict> queryWrapper = Wrappers.<FinSysDict>lambdaQuery()
.eq(StringUtils.isNotBlank(sysDictCriteria.getDictGroup()), FinSysDict::getDictGroup, sysDictCriteria.getDictGroup());
return this.list(queryWrapper);
}
}
package com.sxc.etaxincome.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sxc.etaxincome.criteria.IncomeQueryCommon;
import com.sxc.etaxincome.entity.FinUserTaxno;
import com.sxc.etaxincome.mapper.FinUserTaxnoMapper;
import com.sxc.etaxincome.service.IFinUserTaxnoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 用户日志对照表 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-06-28 10:42:45
*/
@Service
public class FinUserTaxnoServiceImpl extends ServiceImpl<FinUserTaxnoMapper, FinUserTaxno> implements IFinUserTaxnoService {
@Override
public List<FinUserTaxno> queryList(IncomeQueryCommon incomeQueryCommon) {
Wrapper<FinUserTaxno> queryWrapper = Wrappers.<FinUserTaxno>lambdaQuery()
.eq(StringUtils.isNotBlank(incomeQueryCommon.getUserName()), FinUserTaxno::getUsername, incomeQueryCommon.getUserName())
.between(incomeQueryCommon.getStartDateTime() != null && incomeQueryCommon.getEndDateTime() != null, FinUserTaxno::getCreateDate, incomeQueryCommon.getStartDateTime(), incomeQueryCommon.getEndDateTime());
return this.list(queryWrapper);
}
}
package com.sxc.etaxincome.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sxc.etaxincome.entity.SysAppUser;
import com.sxc.etaxincome.mapper.SysAppUserMapper;
import com.sxc.etaxincome.service.ISysAppUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author mybatis-plus-generator
* @since 2024-05-27 22:24:49
*/
@Service
public class SysAppUserServiceImpl extends ServiceImpl<SysAppUserMapper, SysAppUser> implements ISysAppUserService {
public List<SysAppUser> queryListByCriteria(SysAppUser sysAppUserCriteria) {
Wrapper<SysAppUser> queryWrapper = Wrappers.<SysAppUser>lambdaQuery()
.eq(sysAppUserCriteria.getUserId() != null, SysAppUser::getUserId, sysAppUserCriteria.getUserId())
.eq(StringUtils.isNotBlank(sysAppUserCriteria.getUsername()), SysAppUser::getUsername, sysAppUserCriteria.getUsername());
return this.list(queryWrapper);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-api</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>etax-income-controller</module>
<module>etax-income-mapper</module>
<module>etax-income-service</module>
<module>etax-income-domain</module>
<module>etax-income-server</module>
<module>etax-income-common</module>
<module>etax-income-generator</module>
</modules>
<packaging>pom</packaging>
<name>etax-income-api</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<lombok.version>1.18.16</lombok.version>
<guava.version>23.0</guava.version>
<guava-retrying.version>2.0.0</guava-retrying.version>
<hutool.version>5.7.21</hutool.version>
<fastjson.version>2.0.7</fastjson.version>
<aspectjrt.version>1.9.6</aspectjrt.version>
<aspectweaver.version>1.8.13</aspectweaver.version>
<mybatis-spring-boot.version>2.2.0</mybatis-spring-boot.version>
<mysql.version>8.0.22</mysql.version>
<mybatis-plus.version>3.5.0</mybatis-plus.version>
<mybatis-plus-generator.version>3.5.1</mybatis-plus-generator.version>
<p6spy.version>3.9.1</p6spy.version>
<hibernate-validator.version>6.0.22.Final</hibernate-validator.version>
<springboot.version>2.5.3</springboot.version>
<sxc.common.version>0.0.1</sxc.common.version>
<sxc.model.version>0.0.1</sxc.model.version>
<jetcache.version>2.7.3</jetcache.version>
<kryo.version>3.0.3</kryo.version>
<nacos.version>0.2.12</nacos.version>
<easyexcel.version>3.1.0</easyexcel.version>
<undertow.version>1.4.11.Final</undertow.version>
<junit-jupiter.version>5.8.2</junit-jupiter.version>
<junit-platform.version>1.8.2</junit-platform.version>
<hamcrest.version>2.2</hamcrest.version>
<mockito-junit-jupiter.version>3.9.0</mockito-junit-jupiter.version>
<h2.version>1.4.200</h2.version>
<powermock.version>2.0.2</powermock.version>
<mockito.version>3.9.0</mockito.version>
<mockito-inline.version>3.9.0</mockito-inline.version>
<dbunit.version>2.7.0</dbunit.version>
<rest-assured.version>4.0.0</rest-assured.version>
<jsonassert.version>1.5.0</jsonassert.version>
<json-unit-assert.version>2.35.0</json-unit-assert.version>
<maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.sxc.framework</groupId>
<artifactId>framework-common</artifactId>
<version>${sxc.common.version}</version>
</dependency>
<dependency>
<groupId>com.sxc.framework</groupId>
<artifactId>model-token</artifactId>
<version>${sxc.model.version}</version>
</dependency>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-mapper</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-domain</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-service</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-server</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.sxc.etaxincome</groupId>
<artifactId>etax-income-controller</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.esotericsoftware</groupId>
<artifactId>kryo</artifactId>
<version>${kryo.version}</version>
</dependency>
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis-lettuce</artifactId>
<version>${jetcache.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>${nacos.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<dependency>
<groupId>com.github.rholder</groupId>
<artifactId>guava-retrying</artifactId>
<version>${guava-retrying.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>${p6spy.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus-generator.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator.version}</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectjrt.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectweaver.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
</dependency>
<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-servlet</artifactId>
<version>${undertow.version}</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-commons -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
<version>${junit-platform.version}</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-runner -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>${junit-platform.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>hamcrest-core</artifactId>
<groupId>org.hamcrest</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-launcher -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>${junit-platform.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>${junit-platform.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite-api</artifactId>
<version>${junit-platform.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>${hamcrest.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>mockito-core</artifactId>
<groupId>org.mockito</groupId>
</exclusion>
<exclusion>
<artifactId>objenesis</artifactId>
<groupId>org.objenesis</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>hamcrest-core</artifactId>
<groupId>org.hamcrest</groupId>
</exclusion>
</exclusions>
</dependency>
<!--Db Unit-->
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>${dbunit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>${mockito-junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>${mockito-inline.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-core</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>${rest-assured.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>hamcrest-core</artifactId>
<groupId>org.hamcrest</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.skyscreamer</groupId>
<artifactId>jsonassert</artifactId>
<version>${jsonassert.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.javacrumbs.json-unit</groupId>
<artifactId>json-unit-assertj</artifactId>
<version>${json-unit-assert.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<testSource>${java.version}</testSource>
<testTarget>${java.version}</testTarget>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment