This commit is contained in:
dev 2025-08-04 17:23:07 +08:00
commit 578a0edefc
634 changed files with 51788 additions and 0 deletions

18
.editorconfig Normal file
View File

@ -0,0 +1,18 @@
# http://editorconfig.org
root = true
# 空格替代Tab缩进在各种编辑工具下效果一致
[*]
indent_style = space
indent_size = 4
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
[*.{json,yml,yaml}]
indent_size = 2
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

51
.gitignore vendored Normal file
View File

@ -0,0 +1,51 @@
######################################################################
# Build Tools
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
/docker/
/logs/
target/
!.mvn/wrapper/maven-wrapper.jar
######################################################################
# IDE
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### JRebel ###
rebel.xml
### NetBeans ###
nbproject/private/
build/*
nbbuild/
nbdist/
.nb-gradle/
######################################################################
# Others
*.log
*.xml.versionsBackup
*.swp
!*/build/*.java
!*/build/*.html
!*/build/*.xml
.flattened-pom.xml
.lingma

23
.run/asinkj-auth.run.xml Normal file
View File

@ -0,0 +1,23 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="asinkj-auth" type="docker-deploy" factoryName="dockerfile" server-name="阿里云">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="asinkj/asinkj-auth:2.2.2" />
<option name="containerName" value="asinkj-auth" />
<option name="portBindings">
<list>
<DockerPortBindingImpl>
<option name="containerPort" value="9210" />
<option name="hostPort" value="9210" />
</DockerPortBindingImpl>
</list>
</option>
<option name="commandLineOptions" value="--network 1panel-network" />
<option name="sourceFilePath" value="asinkj-auth/Dockerfile" />
</settings>
</deployment>
<method v="2">
<option name="Maven.BeforeRunTask" enabled="true" file="F:\Asinkj-Cloud\asinkj-auth/pom.xml" goal="package" />
</method>
</configuration>
</component>

View File

@ -0,0 +1,23 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="asinkj-gateway" type="docker-deploy" factoryName="dockerfile" server-name="阿里云">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="asinkj/asinkj-gateway:2.2.2" />
<option name="containerName" value="asinkj-gateway" />
<option name="portBindings">
<list>
<DockerPortBindingImpl>
<option name="containerPort" value="8080" />
<option name="hostPort" value="8080" />
</DockerPortBindingImpl>
</list>
</option>
<option name="commandLineOptions" value="--network 1panel-network" />
<option name="sourceFilePath" value="asinkj-gateway/Dockerfile" />
</settings>
</deployment>
<method v="2">
<option name="Maven.BeforeRunTask" enabled="true" file="F:\Asinkj-Cloud\asinkj-gateway/pom.xml" goal="package" />
</method>
</configuration>
</component>

12
.run/asinkj-gen.run.xml Normal file
View File

@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="asinkj-gen" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="asinkj/asinkj-gen:2.2.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="asinkj-modules/asinkj-gen/Dockerfile" />
</settings>
</deployment>
<method v="2" />
</configuration>
</component>

23
.run/asinkj-job.run.xml Normal file
View File

@ -0,0 +1,23 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="asinkj-job" type="docker-deploy" factoryName="dockerfile" server-name="阿里云">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="asinkj/asinkj-job:2.2.2" />
<option name="containerName" value="asinkj-job" />
<option name="portBindings">
<list>
<DockerPortBindingImpl>
<option name="containerPort" value="9203" />
<option name="hostPort" value="9203" />
</DockerPortBindingImpl>
</list>
</option>
<option name="commandLineOptions" value="--network 1panel-network" />
<option name="sourceFilePath" value="asinkj-modules/asinkj-job/Dockerfile" />
</settings>
</deployment>
<method v="2">
<option name="Maven.BeforeRunTask" enabled="true" file="$PROJECT_DIR$/asinkj-modules/asinkj-job/pom.xml" goal="package -Pprod" />
</method>
</configuration>
</component>

View File

@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="asinkj-monitor" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="asinkj/asinkj-monitor:2.2.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="asinkj-visual/asinkj-monitor/Dockerfile" />
</settings>
</deployment>
<method v="2" />
</configuration>
</component>

27
.run/asinkj-nacos.run.xml Normal file
View File

@ -0,0 +1,27 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="asinkj-nacos" type="docker-deploy" factoryName="dockerfile" server-name="阿里云">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="asinkj/asinkj-nacos:2.2.2" />
<option name="containerName" value="asinkj-nacos" />
<option name="portBindings">
<list>
<DockerPortBindingImpl>
<option name="containerPort" value="8848" />
<option name="hostPort" value="8848" />
</DockerPortBindingImpl>
<DockerPortBindingImpl>
<option name="containerPort" value="9848" />
<option name="hostPort" value="9848" />
</DockerPortBindingImpl>
</list>
</option>
<option name="commandLineOptions" value="--network 1panel-network" />
<option name="sourceFilePath" value="asinkj-visual/asinkj-nacos/Dockerfile" />
</settings>
</deployment>
<method v="2">
<option name="Maven.BeforeRunTask" enabled="true" file="F:\Asinkj-Cloud-Plus\asinkj-visual\asinkj-nacos/pom.xml" goal="package" />
</method>
</configuration>
</component>

View File

@ -0,0 +1,23 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="asinkj-resource" type="docker-deploy" factoryName="dockerfile" server-name="阿里云">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="asinkj/asinkj-resource:2.2.2" />
<option name="containerName" value="asinkj-resource" />
<option name="portBindings">
<list>
<DockerPortBindingImpl>
<option name="containerPort" value="9204" />
<option name="hostPort" value="9204" />
</DockerPortBindingImpl>
</list>
</option>
<option name="commandLineOptions" value="--network 1panel-network" />
<option name="sourceFilePath" value="asinkj-modules/asinkj-resource/Dockerfile" />
</settings>
</deployment>
<method v="2">
<option name="Maven.BeforeRunTask" enabled="true" file="F:\Asinkj-Cloud\asinkj-modules\asinkj-resource/pom.xml" goal="package" />
</method>
</configuration>
</component>

View File

@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="asinkj-seata-server" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="asinkj/asinkj-seata-server:2.2.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="asinkj-visual/asinkj-seata-server/Dockerfile" />
</settings>
</deployment>
<method v="2" />
</configuration>
</component>

View File

@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="asinkj-sentinel-dashboard" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="asinkj/asinkj-sentinel-dashboard:2.2.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="asinkj-visual/asinkj-sentinel-dashboard/Dockerfile" />
</settings>
</deployment>
<method v="2" />
</configuration>
</component>

View File

@ -0,0 +1,27 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="asinkj-snailjob-server" type="docker-deploy" factoryName="dockerfile" server-name="阿里云">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="asinkj/asinkj-snailjob-server:2.2.2" />
<option name="containerName" value="asinkj-snailjob-server" />
<option name="portBindings">
<list>
<DockerPortBindingImpl>
<option name="containerPort" value="8800" />
<option name="hostPort" value="8800" />
</DockerPortBindingImpl>
<DockerPortBindingImpl>
<option name="containerPort" value="17888" />
<option name="hostPort" value="17888" />
</DockerPortBindingImpl>
</list>
</option>
<option name="commandLineOptions" value="--network 1panel-network" />
<option name="sourceFilePath" value="asinkj-visual/asinkj-snailjob-server/Dockerfile" />
</settings>
</deployment>
<method v="2">
<option name="Maven.BeforeRunTask" enabled="true" file="F:\Asinkj-Cloud\asinkj-visual\asinkj-snailjob-server/pom.xml" goal="package" />
</method>
</configuration>
</component>

View File

@ -0,0 +1,23 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="asinkj-system" type="docker-deploy" factoryName="dockerfile" server-name="阿里云">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="asinkj/asinkj-system:2.2.2" />
<option name="containerName" value="asinkj-system" />
<option name="portBindings">
<list>
<DockerPortBindingImpl>
<option name="containerPort" value="9201" />
<option name="hostPort" value="9201" />
</DockerPortBindingImpl>
</list>
</option>
<option name="commandLineOptions" value="--network 1panel-network" />
<option name="sourceFilePath" value="asinkj-modules/asinkj-system/Dockerfile" />
</settings>
</deployment>
<method v="2">
<option name="Maven.BeforeRunTask" enabled="true" file="F:\Asinkj-Cloud\asinkj-modules\asinkj-system/pom.xml" goal="package" />
</method>
</configuration>
</component>

View File

@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="asinkj-workflow" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="asinkj/asinkj-workflow:2.2.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="asinkj-modules/asinkj-workflow/Dockerfile" />
</settings>
</deployment>
<method v="2" />
</configuration>
</component>

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 AsinKj-Cloud-Plus
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,27 @@
<?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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-api</artifactId>
<version>${revision}</version>
</parent>
<artifactId>asinkj-api-amz</artifactId>
<description>
asinkj-api-amz amz服务接口模块
</description>
<dependencies>
<!-- AsinKj Common Core-->
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-core</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,18 @@
package org.asinkj.amz.api;
import org.springframework.stereotype.Service;
@Service
public interface RemoteFBADataService {
void pullAmzFbaDataToken(String startDate, String endDate) throws Exception;
void updateAmzFbaDataToken() throws Exception;
void pullPurchaseOrderData(String startDate, String endDate) throws Exception;
void updatePurchaseOrderSeller(String startDate, String endDate) throws Exception;
void quoteReminder() throws Exception;
void updateRemaind();
}

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-api-bom</artifactId>
<packaging>pom</packaging>
<version>${revision}</version>
<description>
asinkj-api-bom api依赖项
</description>
<properties>
<revision>2.2.2</revision>
</properties>
<dependencyManagement>
<dependencies>
<!-- 系统接口 -->
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-api-system</artifactId>
<version>${revision}</version>
</dependency>
<!-- 资源服务接口 -->
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-api-resource</artifactId>
<version>${revision}</version>
</dependency>
<!-- workflow接口 -->
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-api-workflow</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-api-amz</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-api</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>asinkj-api-resource</artifactId>
<description>
asinkj-api-resource 资源服务接口模块
</description>
<dependencies>
<!-- AsinKj Common Core-->
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-core</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,38 @@
package org.asinkj.resource.api;
import org.asinkj.common.core.exception.ServiceException;
import org.asinkj.resource.api.domain.RemoteFile;
import java.util.List;
/**
* 文件服务
*
* @author Shuo Hu
*/
public interface RemoteFileService {
/**
* 上传文件
*
* @param file 文件信息
* @return 结果
*/
RemoteFile upload(String name, String originalFilename, String contentType, byte[] file) throws ServiceException;
/**
* 通过ossId查询对应的url
*
* @param ossIds ossId串逗号分隔
* @return url串逗号分隔
*/
String selectUrlByIds(String ossIds);
/**
* 通过ossId查询列表
*
* @param ossIds ossId串逗号分隔
* @return 列表
*/
List<RemoteFile> selectByIds(String ossIds);
}

View File

@ -0,0 +1,53 @@
package org.asinkj.resource.api;
import lombok.extern.slf4j.Slf4j;
import org.asinkj.common.core.utils.StringUtils;
import org.asinkj.resource.api.domain.RemoteFile;
import java.util.List;
/**
* 文件服务(降级处理)
*
* @author Shuo Hu
*/
@Slf4j
public class RemoteFileServiceMock implements RemoteFileService {
/**
* 上传文件
*
* @param file 文件信息
* @return 结果
*/
@Override
public RemoteFile upload(String name, String originalFilename, String contentType, byte[] file) {
log.warn("服务调用异常 -> 降级处理");
return null;
}
/**
* 通过ossId查询对应的url
*
* @param ossIds ossId串逗号分隔
* @return url串逗号分隔
*/
@Override
public String selectUrlByIds(String ossIds) {
log.warn("服务调用异常 -> 降级处理");
return StringUtils.EMPTY;
}
/**
* 通过ossId查询列表
*
* @param ossIds ossId串逗号分隔
* @return 列表
*/
@Override
public List<RemoteFile> selectByIds(String ossIds) {
log.warn("服务调用异常 -> 降级处理");
return List.of();
}
}

View File

@ -0,0 +1,21 @@
package org.asinkj.resource.api;
import org.asinkj.common.core.exception.ServiceException;
/**
* 邮件服务
*
* @author Shuo Hu
*/
public interface RemoteMailService {
/**
* 发送邮件
*
* @param to 接收人
* @param subject 标题
* @param text 内容
*/
void send(String to, String subject, String text) throws ServiceException;
}

View File

@ -0,0 +1,24 @@
package org.asinkj.resource.api;
/**
* 消息服务
*
* @author Shuo Hu
*/
public interface RemoteMessageService {
/**
* 发送消息
*
* @param sessionKey session主键 一般为用户id
* @param message 消息文本
*/
void publishMessage(Long sessionKey, String message);
/**
* 发布订阅的消息(群发)
*
* @param message 消息内容
*/
void publishAll(String message);
}

View File

@ -0,0 +1,45 @@
package org.asinkj.resource.api;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* 消息服务
*
* @author Shuo Hu
*/
@Slf4j
@RequiredArgsConstructor
public class RemoteMessageServiceStub implements RemoteMessageService {
private final RemoteMessageService remoteMessageService;
/**
* 发送消息
*
* @param sessionKey session主键 一般为用户id
* @param message 消息文本
*/
@Override
public void publishMessage(Long sessionKey, String message) {
try {
remoteMessageService.publishMessage(sessionKey, message);
} catch (Exception e) {
log.warn("推送功能未开启或服务未找到");
}
}
/**
* 发布订阅的消息(群发)
*
* @param message 消息内容
*/
@Override
public void publishAll(String message) {
try {
remoteMessageService.publishAll(message);
} catch (Exception e) {
log.warn("推送功能未开启或服务未找到");
}
}
}

View File

@ -0,0 +1,145 @@
package org.asinkj.resource.api;
import org.asinkj.resource.api.domain.RemoteSms;
import java.util.LinkedHashMap;
import java.util.List;
/**
* 短信服务
*
* @author Feng
*/
public interface RemoteSmsService {
/**
* 同步方法发送固定消息模板短信
*
* @param phone 目标手机号
* @param message 短信内容
* @return 封装了短信发送结果的 RemoteSms 对象
*/
RemoteSms sendMessage(String phone, String message);
/**
* 同步方法发送固定消息模板多模板参数短信
*
* @param phone 目标手机号
* @param messages 短信模板参数使用 LinkedHashMap 以保持参数顺序
* @return 封装了短信发送结果的 RemoteSms 对象
*/
RemoteSms sendMessage(String phone, LinkedHashMap<String, String> messages);
/**
* 同步方法使用自定义模板发送短信
*
* @param phone 目标手机号
* @param templateId 短信模板ID
* @param messages 短信模板参数使用 LinkedHashMap 以保持参数顺序
* @return 封装了短信发送结果的 RemoteSms 对象
*/
RemoteSms sendMessage(String phone, String templateId, LinkedHashMap<String, String> messages);
/**
* 同步方法群发固定模板短信
*
* @param phones 目标手机号列表1~1000
* @param message 短信内容
* @return 封装了短信发送结果的 RemoteSms 对象
*/
RemoteSms messageTexting(List<String> phones, String message);
/**
* 同步方法使用自定义模板群发短信
*
* @param phones 目标手机号列表1~10001~1000
* @param templateId 短信模板ID
* @param messages 短信模板参数使用 LinkedHashMap 以保持参数顺序
* @return 封装了短信发送结果的 RemoteSms 对象
*/
RemoteSms messageTexting(List<String> phones, String templateId, LinkedHashMap<String, String> messages);
/**
* 异步方法发送固定消息模板短信
*
* @param phone 目标手机号
* @param message 短信内容
*/
void sendMessageAsync(String phone, String message);
/**
* 异步方法使用自定义模板发送短信
*
* @param phone 目标手机号
* @param templateId 短信模板ID
* @param messages 短信模板参数使用 LinkedHashMap 以保持参数顺序
*/
void sendMessageAsync(String phone, String templateId, LinkedHashMap<String, String> messages);
/**
* 延迟发送发送固定消息模板短信
*
* @param phone 目标手机号
* @param message 短信内容
* @param delayedTime 延迟发送时间毫秒
*/
void delayMessage(String phone, String message, Long delayedTime);
/**
* 延迟发送使用自定义模板发送定时短信
*
* @param phone 目标手机号
* @param templateId 短信模板ID
* @param messages 短信模板参数使用 LinkedHashMap 以保持参数顺序
* @param delayedTime 延迟发送时间毫秒
*/
void delayMessage(String phone, String templateId, LinkedHashMap<String, String> messages, Long delayedTime);
/**
* 延迟群发群发延迟短信
*
* @param phones 目标手机号列表1~1000
* @param message 短信内容
* @param delayedTime 延迟发送时间毫秒
*/
void delayMessageTexting(List<String> phones, String message, Long delayedTime);
/**
* 延迟群发使用自定义模板发送群体延迟短信
*
* @param phones 目标手机号列表1~1000
* @param templateId 短信模板ID
* @param messages 短信模板参数使用 LinkedHashMap 以保持参数顺序
* @param delayedTime 延迟发送时间毫秒
*/
void delayMessageTexting(List<String> phones, String templateId, LinkedHashMap<String, String> messages, Long delayedTime);
/**
* 加入黑名单
*
* @param phone 手机号
*/
void addBlacklist(String phone);
/**
* 加入黑名单
*
* @param phones 手机号列表
*/
void addBlacklist(List<String> phones);
/**
* 移除黑名单
*
* @param phone 手机号
*/
void removeBlacklist(String phone);
/**
* 移除黑名单
*
* @param phones 手机号
*/
void removeBlacklist(List<String> phones);
}

View File

@ -0,0 +1,44 @@
package org.asinkj.resource.api.domain;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 文件信息
*
* @author asinkj
*/
@Data
public class RemoteFile implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* oss主键
*/
private Long ossId;
/**
* 文件名称
*/
private String name;
/**
* 文件地址
*/
private String url;
/**
* 原名
*/
private String originalName;
/**
* 文件后缀名
*/
private String fileSuffix;
}

View File

@ -0,0 +1,36 @@
package org.asinkj.resource.api.domain;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 文件信息
*
* @author asinkj
*/
@Data
public class RemoteSms implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 是否成功
*/
private Boolean success;
/**
* 配置标识名 如未配置取对应渠道名例如 Alibaba
*/
private String configId;
/**
* 厂商原返回体
* <p>
* 可自行转换为 SDK 对应的 SendSmsResponse
*/
private String response;
}

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-api</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>asinkj-api-system</artifactId>
<description>
asinkj-api-system系统接口模块
</description>
<dependencies>
<!-- AsinKj Common Core-->
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-core</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-excel</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,20 @@
package org.asinkj.system.api;
import org.asinkj.system.api.domain.vo.RemoteClientVo;
/**
* 客户端服务
*
* @author Michelle.Chung
*/
public interface RemoteClientService {
/**
* 根据客户端id获取客户端详情
*
* @param clientId 客户端id
* @return 客户端对象
*/
RemoteClientVo queryByClientId(String clientId);
}

View File

@ -0,0 +1,17 @@
package org.asinkj.system.api;
/**
* 配置服务
*
* @author Michelle.Chung
*/
public interface RemoteConfigService {
/**
* 获取注册开关
* @param tenantId 租户id
* @return true开启false关闭
*/
boolean selectRegisterEnabled(String tenantId);
}

View File

@ -0,0 +1,26 @@
package org.asinkj.system.api;
/**
* 数据权限服务
*
* @author Shuo Hu
*/
public interface RemoteDataScopeService {
/**
* 获取角色自定义权限语句
*
* @param roleId 角色ID
* @return 返回角色的自定义权限语句如果没有找到则返回 null
*/
String getRoleCustom(Long roleId);
/**
* 获取部门和下级权限语句
*
* @param deptId 部门ID
* @return 返回部门及其下级的权限语句如果没有找到则返回 null
*/
String getDeptAndChild(Long deptId);
}

View File

@ -0,0 +1,18 @@
package org.asinkj.system.api;
/**
* 部门服务
*
* @author Shuo Hu
*/
public interface RemoteDeptService {
/**
* 通过部门ID查询部门名称
*
* @param deptIds 部门ID串逗号分隔
* @return 部门名称串逗号分隔
*/
String selectDeptNameByIds(String deptIds);
}

View File

@ -0,0 +1,22 @@
package org.asinkj.system.api;
import org.asinkj.system.api.domain.vo.RemoteDictDataVo;
import java.util.List;
/**
* 字典服务
*
* @author Shuo Hu
*/
public interface RemoteDictService {
/**
* 根据字典类型查询字典数据
*
* @param dictType 字典类型
* @return 字典数据集合信息
*/
List<RemoteDictDataVo> selectDictDataByType(String dictType);
}

View File

@ -0,0 +1,27 @@
package org.asinkj.system.api;
import org.asinkj.system.api.domain.bo.RemoteLogininforBo;
import org.asinkj.system.api.domain.bo.RemoteOperLogBo;
/**
* 日志服务
*
* @author Shuo Hu
*/
public interface RemoteLogService {
/**
* 保存系统日志
*
* @param sysOperLog 日志实体
*/
void saveLog(RemoteOperLogBo sysOperLog);
/**
* 保存访问记录
*
* @param sysLogininfor 访问实体
*/
void saveLogininfor(RemoteLogininforBo sysLogininfor);
}

View File

@ -0,0 +1,52 @@
package org.asinkj.system.api;
import org.asinkj.system.api.domain.bo.RemoteSocialBo;
import org.asinkj.system.api.domain.vo.RemoteSocialVo;
import java.util.List;
/**
* 社会化关系服务
*
* @author Michelle.Chung
*/
public interface RemoteSocialService {
/**
* 根据 authId 查询用户授权信息
*
* @param authId 认证id
* @return 授权信息
*/
List<RemoteSocialVo> selectByAuthId(String authId);
/**
* 查询列表
*
* @param bo 社会化关系业务对象
*/
List<RemoteSocialVo> queryList(RemoteSocialBo bo);
/**
* 保存社会化关系
*
* @param bo 社会化关系业务对象
*/
void insertByBo(RemoteSocialBo bo);
/**
* 更新社会化关系
*
* @param bo 社会化关系业务对象
*/
void updateByBo(RemoteSocialBo bo);
/**
* 删除社会化关系
*
* @param socialId 社会化关系ID
* @return 结果
*/
Boolean deleteWithValidById(Long socialId);
}

View File

@ -0,0 +1,28 @@
package org.asinkj.system.api;
import org.asinkj.system.api.domain.vo.RemoteTenantVo;
import java.util.List;
/**
* 租户服务
*
* @author zhujie
*/
public interface RemoteTenantService {
/**
* 根据租户id获取租户详情
* @param tenantId 租户id
* @return 结果
*/
RemoteTenantVo queryByTenantId(String tenantId);
/**
* 获取租户列表
* @return 结果
*/
List<RemoteTenantVo> queryList();
}

View File

@ -0,0 +1,156 @@
package org.asinkj.system.api;
import org.asinkj.common.core.exception.ServiceException;
import org.asinkj.common.core.exception.user.UserException;
import org.asinkj.system.api.domain.bo.RemoteUserBo;
import org.asinkj.system.api.domain.vo.RemoteUserVo;
import org.asinkj.system.api.model.LoginUser;
import org.asinkj.system.api.model.XcxLoginUser;
import java.util.List;
/**
* 用户服务
*
* @author Shuo Hu
*/
public interface RemoteUserService {
/**
* 通过用户名查询用户信息
*
* @param username 用户名
* @param tenantId 租户id
* @return 结果
*/
LoginUser getUserInfo(String username, String tenantId) throws UserException;
LoginUser getUserInfoWithNickName(String nickName) throws UserException;
/**
* 通过用户id查询用户信息
*
* @param userId 用户id
* @param tenantId 租户id
* @return 结果
*/
LoginUser getUserInfo(Long userId, String tenantId) throws UserException;
/**
* 通过手机号查询用户信息
*
* @param phonenumber 手机号
* @param tenantId 租户id
* @return 结果
*/
LoginUser getUserInfoByPhonenumber(String phonenumber, String tenantId) throws UserException;
/**
* 通过邮箱查询用户信息
*
* @param email 邮箱
* @param tenantId 租户id
* @return 结果
*/
LoginUser getUserInfoByEmail(String email, String tenantId) throws UserException;
/**
* 通过openid查询用户信息
*
* @param openid openid
* @return 结果
*/
XcxLoginUser getUserInfoByOpenid(String openid) throws UserException;
/**
* 注册用户信息
*
* @param remoteUserBo 用户信息
* @return 结果
*/
Boolean registerUserInfo(RemoteUserBo remoteUserBo) throws UserException, ServiceException;
/**
* 通过userId查询用户账户
*
* @param userId 用户id
* @return 结果
*/
String selectUserNameById(Long userId);
/**
* 通过用户ID查询用户昵称
*
* @param userId 用户id
* @return 结果
*/
String selectNicknameById(Long userId);
/**
* 通过用户ID查询用户账户
*
* @param userIds 用户ID 多个用逗号隔开
* @return 用户名称
*/
String selectNicknameByIds(String userIds);
/**
* 通过用户ID查询用户手机号
*
* @param userId 用户id
* @return 用户手机号
*/
String selectPhonenumberById(Long userId);
/**
* 通过用户ID查询用户邮箱
*
* @param userId 用户id
* @return 用户邮箱
*/
String selectEmailById(Long userId);
/**
* 更新用户信息
*
* @param userId 用户ID
* @param ip IP地址
*/
void recordLoginInfo(Long userId, String ip);
/**
* 更新用户信息
*
* @param userId 用户ID
* @param openId openId
*/
void recordOpenId(Long userId, String openId);
/**
* 通过用户ID查询用户列表
*
* @param userIds 用户ids
* @return 用户列表
*/
List<RemoteUserVo> selectListByIds(List<Long> userIds);
/**
* 通过角色ID查询用户ID
*
* @param roleIds 角色ids
* @return 用户ids
*/
List<Long> selectUserIdsByRoleIds(List<Long> roleIds);
/**
* 通过角色ID查询用户ID
*
* @param roleIds 角色ids
* @return 用户ids
*/
List<String> selectUserOpenIdsByRoleIds(List<Long> roleIds);
List<RemoteUserVo> selectUserByRoleIds(List<Long> roleIds);
}

View File

@ -0,0 +1,71 @@
package org.asinkj.system.api.domain;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
/**
* 当前在线会话
*
* @author Shuo Hu
*/
@Data
@NoArgsConstructor
public class SysUserOnline implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 会话编号
*/
private String tokenId;
/**
* 部门名称
*/
private String deptName;
/**
* 用户名称
*/
private String userName;
/**
* 客户端
*/
private String clientKey;
/**
* 设备类型
*/
private String deviceType;
/**
* 登录IP地址
*/
private String ipaddr;
/**
* 登录地址
*/
private String loginLocation;
/**
* 浏览器类型
*/
private String browser;
/**
* 操作系统
*/
private String os;
/**
* 登录时间
*/
private Long loginTime;
}

View File

@ -0,0 +1,89 @@
package org.asinkj.system.api.domain.bo;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 系统访问记录表 sys_logininfor
*
* @author Shuo Hu
*/
@Data
@NoArgsConstructor
public class RemoteLogininforBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 访问ID
*/
private Long infoId;
/**
* 租户编号
*/
private String tenantId;
/**
* 用户账号
*/
private String userName;
/**
* 客户端
*/
private String clientKey;
/**
* 设备类型
*/
private String deviceType;
/**
* 登录IP地址
*/
private String ipaddr;
/**
* 登录地点
*/
private String loginLocation;
/**
* 浏览器类型
*/
private String browser;
/**
* 操作系统
*/
private String os;
/**
* 登录状态0成功 1失败
*/
private String status;
/**
* 提示消息
*/
private String msg;
/**
* 访问时间
*/
private Date loginTime;
/**
* 请求参数
*/
private Map<String, Object> params = new HashMap<>();
}

View File

@ -0,0 +1,119 @@
package org.asinkj.system.api.domain.bo;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 操作日志记录表 oper_log
*
* @author Shuo Hu
*/
@Data
@NoArgsConstructor
public class RemoteOperLogBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 日志主键
*/
private Long operId;
/**
* 租户编号
*/
private String tenantId;
/**
* 模块标题
*/
private String title;
/**
* 业务类型0其它 1新增 2修改 3删除
*/
private Integer businessType;
/**
* 方法名称
*/
private String method;
/**
* 请求方式
*/
private String requestMethod;
/**
* 操作类别0其它 1后台用户 2手机端用户
*/
private Integer operatorType;
/**
* 操作人员
*/
private String operName;
/**
* 部门名称
*/
private String deptName;
/**
* 请求URL
*/
private String operUrl;
/**
* 主机地址
*/
private String operIp;
/**
* 操作地点
*/
private String operLocation;
/**
* 请求参数
*/
private String operParam;
/**
* 返回参数
*/
private String jsonResult;
/**
* 操作状态0正常 1异常
*/
private Integer status;
/**
* 错误消息
*/
private String errorMsg;
/**
* 操作时间
*/
private Date operTime;
/**
* 消耗时间
*/
private Long costTime;
/**
* 请求参数
*/
private Map<String, Object> params = new HashMap<>();
}

View File

@ -0,0 +1,129 @@
package org.asinkj.system.api.domain.bo;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
/**
* 社会化关系业务对象 sys_social
*
* @author Michelle.Chung
*/
@Data
@NoArgsConstructor
public class RemoteSocialBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private Long id;
/**
* 的唯一ID
*/
private String authId;
/**
* 用户来源
*/
private String source;
/**
* 用户的授权令牌
*/
private String accessToken;
/**
* 用户的授权令牌的有效期部分平台可能没有
*/
private int expireIn;
/**
* 刷新令牌部分平台可能没有
*/
private String refreshToken;
/**
* 平台唯一id
*/
private String openId;
/**
* 用户的 ID
*/
private Long userId;
/**
* 平台的授权信息部分平台可能没有
*/
private String accessCode;
/**
* 用户的 unionid
*/
private String unionId;
/**
* 授予的权限部分平台可能没有
*/
private String scope;
/**
* 授权的第三方账号
*/
private String userName;
/**
* 授权的第三方昵称
*/
private String nickName;
/**
* 授权的第三方邮箱
*/
private String email;
/**
* 授权的第三方头像地址
*/
private String avatar;
/**
* 个别平台的授权信息部分平台可能没有
*/
private String tokenType;
/**
* id token部分平台可能没有
*/
private String idToken;
/**
* 小米平台用户的附带属性部分平台可能没有
*/
private String macAlgorithm;
/**
* 小米平台用户的附带属性部分平台可能没有
*/
private String macKey;
/**
* 用户的授权code部分平台可能没有
*/
private String code;
/**
* Twitter平台用户的附带属性部分平台可能没有
*/
private String oauthToken;
/**
* Twitter平台用户的附带属性部分平台可能没有
*/
private String oauthTokenSecret;
}

View File

@ -0,0 +1,124 @@
package org.asinkj.system.api.domain.bo;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.asinkj.common.core.constant.UserConstants;
import org.asinkj.common.core.xss.Xss;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 用户信息业务对象 sys_user
*
* @author Michelle.Chung
*/
@Data
@NoArgsConstructor
public class RemoteUserBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
private Long userId;
/**
* 租户ID
*/
private String tenantId;
/**
* 部门ID
*/
private Long deptId;
/**
* 用户账号
*/
@Xss(message = "用户账号不能包含脚本字符")
@NotBlank(message = "用户账号不能为空")
@Size(min = 0, max = 30, message = "用户账号长度不能超过{max}个字符")
private String userName;
/**
* 用户昵称
*/
@Xss(message = "用户昵称不能包含脚本字符")
@Size(min = 0, max = 30, message = "用户昵称长度不能超过{max}个字符")
private String nickName;
/**
* 用户类型sys_user系统用户
*/
private String userType;
/**
* 用户邮箱
*/
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过{max}个字符")
private String email;
/**
* 手机号码
*/
private String phonenumber;
/**
* 用户性别0男 1女 2未知
*/
private String sex;
/**
* 头像地址
*/
private Long avatar;
/**
* 密码
*/
private String password;
/**
* 帐号状态0正常 1停用
*/
private String status;
/**
* 最后登录IP
*/
private String loginIp;
/**
* 最后登录时间
*/
private Date loginDate;
/**
* 备注
*/
private String remark;
/**
* 数据权限 当前角色ID
*/
private Long roleId;
public RemoteUserBo(Long userId) {
this.userId = userId;
}
public boolean isSuperAdmin() {
return UserConstants.SUPER_ADMIN_ID.equals(this.userId);
}
}

View File

@ -0,0 +1,70 @@
package org.asinkj.system.api.domain.vo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 授权管理视图对象 sys_client
*
* @author Michelle.Chung
*/
@Data
public class RemoteClientVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
private Long id;
/**
* 客户端id
*/
private String clientId;
/**
* 客户端key
*/
private String clientKey;
/**
* 客户端秘钥
*/
private String clientSecret;
/**
* 授权类型
*/
private List<String> grantTypeList;
/**
* 授权类型
*/
private String grantType;
/**
* 设备类型
*/
private String deviceType;
/**
* token活跃超时时间
*/
private Long activeTimeout;
/**
* token固定超时时间
*/
private Long timeout;
/**
* 状态0正常 1停用
*/
private String status;
}

View File

@ -0,0 +1,76 @@
package org.asinkj.system.api.domain.vo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 字典数据视图对象 sys_dict_data
*
* @author Michelle.Chung
*/
@Data
public class RemoteDictDataVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 字典编码
*/
private Long dictCode;
/**
* 字典排序
*/
private Integer dictSort;
/**
* 字典标签
*/
private String dictLabel;
/**
* 字典键值
*/
private String dictValue;
/**
* 字典类型
*/
private String dictType;
/**
* 样式属性其他样式扩展
*/
private String cssClass;
/**
* 表格回显样式
*/
private String listClass;
/**
* 是否默认Y是 N否
*/
private String isDefault;
/**
* 状态0正常 1停用
*/
private String status;
/**
* 备注
*/
private String remark;
/**
* 创建时间
*/
private Date createTime;
}

View File

@ -0,0 +1,135 @@
package org.asinkj.system.api.domain.vo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 社会化关系视图对象 sys_social
*
* @author thiszhc
*/
@Data
public class RemoteSocialVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private Long id;
/**
* 用户ID
*/
private Long userId;
/**
* 租户ID
*/
private String tenantId;
/**
* 认证唯一ID
*/
private String authId;
/**
* 用户来源
*/
private String source;
/**
* 用户的授权令牌
*/
private String accessToken;
/**
* 用户的授权令牌的有效期部分平台可能没有
*/
private int expireIn;
/**
* 刷新令牌部分平台可能没有
*/
private String refreshToken;
/**
* 用户的 open id
*/
private String openId;
/**
* 授权的第三方账号
*/
private String userName;
/**
* 授权的第三方昵称
*/
private String nickName;
/**
* 授权的第三方邮箱
*/
private String email;
/**
* 授权的第三方头像地址
*/
private String avatar;
/**
* 平台的授权信息部分平台可能没有
*/
private String accessCode;
/**
* 用户的 unionid
*/
private String unionId;
/**
* 授予的权限部分平台可能没有
*/
private String scope;
/**
* 个别平台的授权信息部分平台可能没有
*/
private String tokenType;
/**
* id token部分平台可能没有
*/
private String idToken;
/**
* 小米平台用户的附带属性部分平台可能没有
*/
private String macAlgorithm;
/**
* 小米平台用户的附带属性部分平台可能没有
*/
private String macKey;
/**
* 用户的授权code部分平台可能没有
*/
private String code;
/**
* Twitter平台用户的附带属性部分平台可能没有
*/
private String oauthToken;
/**
* Twitter平台用户的附带属性部分平台可能没有
*/
private String oauthTokenSecret;
}

View File

@ -0,0 +1,91 @@
package org.asinkj.system.api.domain.vo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 租户视图对象
*
* @author zhujie
*/
@Data
public class RemoteTenantVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
private Long id;
/**
* 租户编号
*/
private String tenantId;
/**
* 联系人
*/
private String contactUserName;
/**
* 联系电话
*/
private String contactPhone;
/**
* 企业名称
*/
private String companyName;
/**
* 统一社会信用代码
*/
private String licenseNumber;
/**
* 地址
*/
private String address;
/**
* 域名
*/
private String domain;
/**
* 企业简介
*/
private String intro;
/**
* 备注
*/
private String remark;
/**
* 租户套餐编号
*/
private Long packageId;
/**
* 过期时间
*/
private Date expireTime;
/**
* 用户数量-1不限制
*/
private Long accountCount;
/**
* 租户状态0正常 1停用
*/
private String status;
}

View File

@ -0,0 +1,76 @@
package org.asinkj.system.api.domain.vo;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 用户
*
* @author Michelle.Chung
*/
@Data
@NoArgsConstructor
public class RemoteUserVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
private Long userId;
/**
* 部门ID
*/
private Long deptId;
/**
* 用户账号
*/
private String userName;
/**
* 用户昵称
*/
private String nickName;
/**
* 用户类型sys_user系统用户
*/
private String userType;
/**
* 用户邮箱
*/
private String email;
/**
* 手机号码
*/
private String phonenumber;
/**
* 用户性别0男 1女 2未知
*/
private String sex;
/**
* 帐号状态0正常 1停用
*/
private String status;
/**
* 创建时间
*/
private Date createTime;
private String address;
}

View File

@ -0,0 +1,148 @@
package org.asinkj.system.api.model;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import java.util.Set;
/**
* 用户信息
*
* @author asinkj
*/
@Data
@NoArgsConstructor
public class LoginUser implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 租户ID
*/
private String tenantId;
/**
* 用户ID
*/
private Long userId;
/**
* 部门ID
*/
private Long deptId;
/**
* 部门类别编码
*/
private String deptCategory;
/**
* 部门名
*/
private String deptName;
/**
* 用户唯一标识
*/
private String token;
/**
* 用户类型
*/
private String userType;
/**
* 登录时间
*/
private Long loginTime;
/**
* 过期时间
*/
private Long expireTime;
/**
* 登录IP地址
*/
private String ipaddr;
/**
* 登录地点
*/
private String loginLocation;
/**
* 浏览器类型
*/
private String browser;
/**
* 操作系统
*/
private String os;
/**
* 菜单权限
*/
private Set<String> menuPermission;
/**
* 角色权限
*/
private Set<String> rolePermission;
/**
* 用户名
*/
private String username;
/**
* 用户昵称
*/
private String nickname;
/**
* 密码
*/
private String password;
private String openId;
/**
* 角色对象
*/
private List<RoleDTO> roles;
/**
* 数据权限 当前角色ID
*/
private Long roleId;
/**
* 客户端
*/
private String clientKey;
/**
* 设备类型
*/
private String deviceType;
/**
* 获取登录id
*/
public String getLoginId() {
if (userType == null) {
throw new IllegalArgumentException("用户类型不能为空");
}
if (userId == null) {
throw new IllegalArgumentException("用户ID不能为空");
}
return userType + ":" + userId;
}
}

View File

@ -0,0 +1,42 @@
package org.asinkj.system.api.model;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
/**
* 角色
*
* @author Shuo Hu
*/
@Data
@NoArgsConstructor
public class RoleDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 角色ID
*/
private Long roleId;
/**
* 角色名称
*/
private String roleName;
/**
* 角色权限
*/
private String roleKey;
/**
* 数据范围1所有数据权限2自定义数据权限3本部门数据权限4本部门及以下数据权限5仅本人数据权限
*/
private String dataScope;
}

View File

@ -0,0 +1,27 @@
package org.asinkj.system.api.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.io.Serial;
/**
* 小程序登录用户身份权限
*
* @author Shuo Hu
*/
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public class XcxLoginUser extends LoginUser {
@Serial
private static final long serialVersionUID = 1L;
/**
* openid
*/
private String openid;
}

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-api</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>asinkj-api-workflow</artifactId>
<description>
asinkj-api-workflow 工作流接口模块
</description>
<dependencies>
<!-- AsinKj Common Core-->
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-core</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-bus</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,78 @@
package org.asinkj.workflow.api.domain;
import java.util.List;
import java.util.Map;
/**
* 通用 工作流服务
*
* @Author ZETA
* @Date 2024/6/3
*/
public interface RemoteWorkflowService {
/**
* 运行中的实例 删除程实例删除历史记录删除业务与流程关联信息
*
* @param businessKeys 业务id
* @return 结果
*/
boolean deleteRunAndHisInstance(List<String> businessKeys);
/**
* 获取当前流程状态
*
* @param taskId 任务id
*/
String getBusinessStatusByTaskId(String taskId);
/**
* 获取当前流程状态
*
* @param businessKey 业务id
*/
String getBusinessStatus(String businessKey);
/**
* 设置流程变量(全局变量)
*
* @param taskId 任务id
* @param variableName 变量名称
* @param value 变量值
*/
void setVariable(String taskId, String variableName, Object value);
/**
* 设置流程变量(全局变量)
*
* @param taskId 任务id
* @param variables 流程变量
*/
void setVariables(String taskId, Map<String, Object> variables);
/**
* 设置流程变量(本地变量,非全局变量)
*
* @param taskId 任务id
* @param variableName 变量名称
* @param value 变量值
*/
void setVariableLocal(String taskId, String variableName, Object value);
/**
* 设置流程变量(本地变量,非全局变量)
*
* @param taskId 任务id
* @param variables 流程变量
*/
void setVariablesLocal(String taskId, Map<String, Object> variables);
/**
* 按照业务id查询流程实例id
*
* @param businessKey 业务id
* @return 结果
*/
String getInstanceIdByBusinessKey(String businessKey);
}

View File

@ -0,0 +1,46 @@
package org.asinkj.workflow.api.domain.event;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.asinkj.common.core.utils.SpringUtils;
import org.springframework.cloud.bus.event.RemoteApplicationEvent;
import java.io.Serial;
/**
* 总体流程监听
*
* @author may
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ProcessEvent extends RemoteApplicationEvent {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程定义key
*/
private String key;
/**
* 业务id
*/
private String businessKey;
/**
* 状态
*/
private String status;
/**
* 当为true时为申请人节点办理
*/
private boolean submit;
public ProcessEvent() {
super(new Object(), SpringUtils.getApplicationName(), DEFAULT_DESTINATION_FACTORY.getDestination(null));
}
}

View File

@ -0,0 +1,45 @@
package org.asinkj.workflow.api.domain.event;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.asinkj.common.core.utils.SpringUtils;
import org.springframework.cloud.bus.event.RemoteApplicationEvent;
import java.io.Serial;
/**
* 流程办理监听
*
* @author may
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ProcessTaskEvent extends RemoteApplicationEvent {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程定义key
*/
private String key;
/**
* 审批节点key
*/
private String taskDefinitionKey;
/**
* 任务id
*/
private String taskId;
/**
* 业务id
*/
private String businessKey;
public ProcessTaskEvent() {
super(new Object(), SpringUtils.getApplicationName(), DEFAULT_DESTINATION_FACTORY.getDestination(null));
}
}

26
asinkj-api/pom.xml Normal file
View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-cloud-plus</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<modules>
<module>asinkj-api-bom</module>
<module>asinkj-api-system</module>
<module>asinkj-api-resource</module>
<module>asinkj-api-workflow</module>
<module>asinkj-api-amz</module>
</modules>
<artifactId>asinkj-api</artifactId>
<packaging>pom</packaging>
<description>
asinkj-api系统接口
</description>
</project>

View File

@ -0,0 +1,29 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
#FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
#FROM bellsoft/liberica-openjdk-debian:21.0.3-cds
#FROM findepi/graalvm:java17-native
FROM amazoncorretto:17.0.14
ENV TZ=Asia/Shanghai
LABEL maintainer="Shuo Hu "
RUN mkdir -p /asinkj/amz/logs \
/asinkj/amz/temp \
/asinkj/skywalking/agent
WORKDIR /asinkj/amz
ENV SERVER_PORT=9404 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
EXPOSE ${SERVER_PORT}
ADD ./target/asinkj-amz.jar ./app.jar
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
-Dspring.profiles.active="prod" \
#-Dskywalking.agent.service_name=asinkj-auth \
#-javaagent:/asinkj/skywalking/agent/skywalking-agent.jar \
-XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
-jar app.jar

View File

@ -0,0 +1,137 @@
<?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/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-biz</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>asinkj-amz</artifactId>
<dependencies>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-nacos</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-sentinel</artifactId>
</dependency>
<!-- AsinKj Common Log -->
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-log</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-dict</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-doc</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-web</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-wp</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-seata</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-idempotent</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-tenant</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-security</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-translation</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-sensitive</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-common-encrypt</artifactId>
</dependency>
<!-- AsinKj Api System -->
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-api-system</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-api-resource</artifactId>
</dependency>
<dependency>
<groupId>org.asinkj</groupId>
<artifactId>asinkj-api-amz</artifactId>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,17 @@
package org.asinkj;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
@EnableDubbo
@SpringBootApplication
public class AsinKjAmzApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(AsinKjAmzApplication.class);
application.setApplicationStartup(new BufferingApplicationStartup(2048));
application.run(args);
System.out.println("(♥◠‿◠)ノ゙ 亚马逊模块启动成功 ლ(´ڡ`ლ)゙ ");
}
}

View File

@ -0,0 +1,114 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizInquiryBlacklistVo;
import org.asinkj.amz.domain.bo.BizInquiryBlacklistBo;
import org.asinkj.amz.service.IBizInquiryBlacklistService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 物流询价屏蔽记录
* 前端访问路由地址为:/amz/inquiryBlacklist
*
* @author shuo hu
* @date 2025-04-22
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/inquiryBlacklist")
public class BizInquiryBlacklistController extends BaseController {
private final IBizInquiryBlacklistService bizInquiryBlacklistService;
/**
* 查询物流询价屏蔽记录列表
*/
@SaCheckPermission("amz:inquiryBlacklist:list")
@GetMapping("/list")
public TableDataInfo<BizInquiryBlacklistVo> list(BizInquiryBlacklistBo bo, PageQuery pageQuery) {
return bizInquiryBlacklistService.queryPageList(bo, pageQuery);
}
/**
* 导出物流询价屏蔽记录列表
*/
@SaCheckPermission("amz:inquiryBlacklist:export")
@Log(title = "物流询价屏蔽记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizInquiryBlacklistBo bo, HttpServletResponse response) {
List<BizInquiryBlacklistVo> list = bizInquiryBlacklistService.queryList(bo);
ExcelUtil.exportExcel(list, "物流询价屏蔽记录", BizInquiryBlacklistVo.class, response);
}
/**
* 获取物流询价屏蔽记录详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:inquiryBlacklist:query")
@GetMapping("/{id}")
public R<BizInquiryBlacklistVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizInquiryBlacklistService.queryById(id));
}
/**
* 新增物流询价屏蔽记录
*/
@SaCheckPermission("amz:inquiryBlacklist:add")
@Log(title = "物流询价屏蔽记录", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizInquiryBlacklistBo bo) {
return toAjax(bizInquiryBlacklistService.insertByBo(bo));
}
@Log(title = "物流询价屏蔽记录", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/insert")
public R<Void> insert( @RequestBody List<Long> list) {
bizInquiryBlacklistService.insertByList(list);
return R.ok();
}
/**
* 修改物流询价屏蔽记录
*/
@SaCheckPermission("amz:inquiryBlacklist:edit")
@Log(title = "物流询价屏蔽记录", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizInquiryBlacklistBo bo) {
return toAjax(bizInquiryBlacklistService.updateByBo(bo));
}
/**
* 删除物流询价屏蔽记录
*
* @param ids 主键串
*/
@SaCheckPermission("amz:inquiryBlacklist:remove")
@Log(title = "物流询价屏蔽记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizInquiryBlacklistService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,157 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.asinkj.amz.domain.vo.InquiryRequestItemVo;
import org.asinkj.common.wp.handler.WxMessagesManager;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizInquiryRequestVo;
import org.asinkj.amz.domain.bo.BizInquiryRequestBo;
import org.asinkj.amz.service.IBizInquiryRequestService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
/**
* 物流询价
* 前端访问路由地址为:/amz/inquiryRequest
*
* @author shuo hu
* @date 2025-03-21
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/inquiryRequest")
public class BizInquiryRequestController extends BaseController {
private final IBizInquiryRequestService bizInquiryRequestService;
/**
* 查询物流询价列表
*/
@SaCheckPermission("amz:inquiryRequest:list")
@GetMapping("/list")
public TableDataInfo<BizInquiryRequestVo> list(BizInquiryRequestBo bo, PageQuery pageQuery) {
return bizInquiryRequestService.queryPageList(bo, pageQuery);
}
/**
* 根据目的地仓库和渠道查询物流询价单
*/
// @SaCheckPermission("amz:inquiryRequest:list")
@SaCheckPermission("amz:shipmentPlan:edit")
@GetMapping("/query/{destination}/{channelId}/{date}")
public TableDataInfo<BizInquiryRequestVo> queryWithDesAndChannel(@PathVariable("destination") @NotNull(message = "目的地不能为空") String destination,
@PathVariable("channelId") @NotNull(message = "渠道不能为空") String channelId,
@PathVariable("date") @NotNull(message = "日期不能为空") String date) {
return bizInquiryRequestService.queryWithDesAndChannel(destination, channelId, date);
}
/**
* 根据目的地仓库和渠道创建物流询价单
*/
// @SaCheckPermission("amz:inquiryRequest:list")
@SaCheckPermission("amz:shipmentPlan:edit")
@GetMapping("/create/{destination}/{channelId}/{date}")
public R<String> createWithDesAndChannel(@PathVariable("destination") @NotNull(message = "目的地不能为空") String destination,
@PathVariable("channelId") @NotNull(message = "渠道不能为空") String channelId,
@PathVariable("date") @NotNull(message = "日期不能为空") String date) {
return bizInquiryRequestService.createWithDesAndChannel(destination, channelId, date);
}
@SaCheckPermission("amz:shipmentPlan:edit")
@PostMapping("/create/batch")
@RepeatSubmit
public R<String> batchCreateWithItems(@RequestBody List<InquiryRequestItemVo> items) {
return bizInquiryRequestService.batchCreateWithItems(items);
}
/**
* 导出物流询价列表
*/
@SaCheckPermission("amz:inquiryRequest:export")
@Log(title = "物流询价", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizInquiryRequestBo bo, HttpServletResponse response) {
List<BizInquiryRequestVo> list = bizInquiryRequestService.queryList(bo);
ExcelUtil.exportExcel(list, "物流询价", BizInquiryRequestVo.class, response);
}
/**
* 获取物流询价详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:inquiryRequest:query")
@GetMapping("/{id}")
public R<BizInquiryRequestVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizInquiryRequestService.queryById(id));
}
/**
* 新增物流询价
*/
@SaCheckPermission("amz:inquiryRequest:add")
@Log(title = "物流询价", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizInquiryRequestBo bo) {
return toAjax(bizInquiryRequestService.insertByBo(bo));
}
/**
* 修改物流询价
*/
@SaCheckPermission("amz:inquiryRequest:edit")
@Log(title = "物流询价", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizInquiryRequestBo bo) {
return toAjax(bizInquiryRequestService.updateByBo(bo));
}
/**
* 删除物流询价
*
* @param ids 主键串
*/
@SaCheckPermission("amz:inquiryRequest:remove")
@Log(title = "物流询价", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizInquiryRequestService.deleteWithValidByIds(List.of(ids), true));
}
@GetMapping("/message/test/{key1}/{key2}/{openId}")
public R<Void> test(
@PathVariable("key1") String key1,
@PathVariable("key2") String key2,
@PathVariable("openId") String openId
) throws Exception {
WxMessagesManager.sendWechatTempMessage(key1, key2, openId);
return R.ok();
}
}

View File

@ -0,0 +1,112 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizLogisticsChannelVo;
import org.asinkj.amz.domain.bo.BizLogisticsChannelBo;
import org.asinkj.amz.service.IBizLogisticsChannelService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 物流商渠道
* 前端访问路由地址为:/amz/logisticsChannel
*
* @author shuo hu
* @date 2025-03-20
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/logisticsChannel")
public class BizLogisticsChannelController extends BaseController {
private final IBizLogisticsChannelService bizLogisticsChannelService;
/**
* 查询物流商渠道列表
*/
@SaCheckPermission("amz:logisticsChannel:list")
@GetMapping("/list")
public TableDataInfo<BizLogisticsChannelVo> list(BizLogisticsChannelBo bo, PageQuery pageQuery) {
return bizLogisticsChannelService.queryPageList(bo, pageQuery);
}
// @SaCheckPermission("amz:logisticsChannel:list")
@GetMapping("/list/all")
public TableDataInfo<BizLogisticsChannelVo> listAll() {
return bizLogisticsChannelService.queryListAll();
}
/**
* 导出物流商渠道列表
*/
@SaCheckPermission("amz:logisticsChannel:export")
@Log(title = "物流商渠道", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizLogisticsChannelBo bo, HttpServletResponse response) {
List<BizLogisticsChannelVo> list = bizLogisticsChannelService.queryList(bo);
ExcelUtil.exportExcel(list, "物流商渠道", BizLogisticsChannelVo.class, response);
}
/**
* 获取物流商渠道详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:logisticsChannel:query")
@GetMapping("/{id}")
public R<BizLogisticsChannelVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizLogisticsChannelService.queryById(id));
}
/**
* 新增物流商渠道
*/
@SaCheckPermission("amz:logisticsChannel:add")
@Log(title = "物流商渠道", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizLogisticsChannelBo bo) {
return toAjax(bizLogisticsChannelService.insertByBo(bo));
}
/**
* 修改物流商渠道
*/
@SaCheckPermission("amz:logisticsChannel:edit")
@Log(title = "物流商渠道", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizLogisticsChannelBo bo) {
return toAjax(bizLogisticsChannelService.updateByBo(bo));
}
/**
* 删除物流商渠道
*
* @param ids 主键串
*/
@SaCheckPermission("amz:logisticsChannel:remove")
@Log(title = "物流商渠道", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizLogisticsChannelService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,167 @@
package org.asinkj.amz.controller;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import cn.hutool.core.io.FileUtil;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.apache.dubbo.config.annotation.DubboReference;
import org.asinkj.amz.domain.BizLogisticsOrder;
import org.asinkj.amz.domain.bo.BizLogisticsCreateOrderBo;
import org.asinkj.common.core.utils.StringUtils;
import org.asinkj.common.core.utils.file.MimeTypeUtils;
import org.asinkj.common.satoken.utils.LoginHelper;
import org.asinkj.resource.api.RemoteFileService;
import org.asinkj.resource.api.domain.RemoteFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizLogisticsOrderVo;
import org.asinkj.amz.domain.bo.BizLogisticsOrderBo;
import org.asinkj.amz.service.IBizLogisticsOrderService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
/**
* 物流订单
* 前端访问路由地址为:/amz/logisticsOrder
*
* @author shuo hu
* @date 2025-03-24
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/logisticsOrder")
public class BizLogisticsOrderController extends BaseController {
private static final Logger log = LoggerFactory.getLogger(BizLogisticsOrderController.class);
private final IBizLogisticsOrderService bizLogisticsOrderService;
@DubboReference
private RemoteFileService remoteFileService;
/**
* 查询物流订单列表
*/
@SaCheckPermission("amz:logisticsOrder:list")
@GetMapping("/list")
public TableDataInfo<BizLogisticsOrderVo> list(BizLogisticsOrderBo bo, PageQuery pageQuery) {
return bizLogisticsOrderService.queryPageList(bo, pageQuery);
}
/**
* 导出物流订单列表
*/
@SaCheckPermission("amz:logisticsOrder:export")
@Log(title = "物流订单", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizLogisticsOrderBo bo, HttpServletResponse response) {
List<BizLogisticsOrderVo> list = bizLogisticsOrderService.queryList(bo);
ExcelUtil.exportExcel(list, "物流订单", BizLogisticsOrderVo.class, response);
}
/**
* 获取物流订单详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:logisticsOrder:query")
@GetMapping("/{id}")
public R<BizLogisticsOrderVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) {
return R.ok(bizLogisticsOrderService.queryById(id));
}
/**
* 新增物流订单
*/
@SaCheckPermission("amz:logisticsOrder:add")
@Log(title = "物流订单", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizLogisticsOrderBo bo) {
return toAjax(bizLogisticsOrderService.insertByBo(bo));
}
/**
* 新增物流订单
*/
@SaCheckPermission("amz:shipmentPlan:add")
@Log(title = "物流订单", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/createOrder")
public R<Void> createOrder(@Validated(AddGroup.class) @RequestBody BizLogisticsCreateOrderBo bo) {
bizLogisticsOrderService.createByBo(bo);
return R.ok();
}
@RepeatSubmit
@GlobalTransactional(rollbackFor = Exception.class)
@PostMapping(value = "/uploadPod", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> uploadPod(@RequestPart("file") MultipartFile file, @RequestParam String order) throws IOException {
if (!file.isEmpty()) {
// String extension = FileUtil.extName(file.getOriginalFilename());
// if (!StringUtils.equalsAnyIgnoreCase(extension, MimeTypeUtils.IMAGE_EXTENSION)) {
// return R.fail("文件格式不正确,请上传" + Arrays.toString(MimeTypeUtils.IMAGE_EXTENSION) + "格式");
// }
RemoteFile oss = remoteFileService.upload(file.getName(), file.getOriginalFilename(), file.getContentType(), file.getBytes());
log.info("url" + oss.getUrl());
log.info("order" + order);
log.info("oss" + oss.toString());
BizLogisticsOrderBo bizLogisticsOrderBo = new BizLogisticsOrderBo();
bizLogisticsOrderBo.setOrderId(order);
bizLogisticsOrderBo.setPodUrl(oss.getUrl());
bizLogisticsOrderService.updateByOrderId(bizLogisticsOrderBo);
return R.ok();
}
return R.fail("上传图片异常,请联系管理员");
}
/**
* 修改物流订单
*/
@SaCheckPermission("amz:logisticsOrder:edit")
@Log(title = "物流订单", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizLogisticsOrderBo bo) {
return toAjax(bizLogisticsOrderService.updateByBo(bo));
}
/**
* 删除物流订单
*
* @param ids 主键串
*/
@SaCheckPermission("amz:logisticsOrder:remove")
@Log(title = "物流订单", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) {
return toAjax(bizLogisticsOrderService.deleteWithValidByIds(List.of(ids), true));
}
@GetMapping("/query")
public R<List<BizLogisticsOrder>> query() {
return R.ok(bizLogisticsOrderService.selectOrdersByUserId());
}
}

View File

@ -0,0 +1,134 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.asinkj.common.excel.core.ExcelResult;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizLogisticsOrderDetailVo;
import org.asinkj.amz.domain.bo.BizLogisticsOrderDetailBo;
import org.asinkj.amz.service.IBizLogisticsOrderDetailService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
/**
* 物流订单明细按箱子维度存储
* 前端访问路由地址为:/amz/logisticsOrderDetail
*
* @author shuo hu
* @date 2025-03-24
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/logisticsOrderDetail")
public class BizLogisticsOrderDetailController extends BaseController {
private final IBizLogisticsOrderDetailService bizLogisticsOrderDetailService;
/**
* 查询物流订单明细按箱子维度存储列表
*/
@SaCheckPermission("amz:logisticsOrderDetail:list")
@GetMapping("/list")
public TableDataInfo<BizLogisticsOrderDetailVo> list(BizLogisticsOrderDetailBo bo, PageQuery pageQuery) {
return bizLogisticsOrderDetailService.queryPageList(bo, pageQuery);
}
/**
* 导出物流订单明细按箱子维度存储列表
*/
@SaCheckPermission("amz:logisticsOrderDetail:export")
@Log(title = "物流订单明细(按箱子维度存储)", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizLogisticsOrderDetailBo bo, HttpServletResponse response) {
List<BizLogisticsOrderDetailVo> list = bizLogisticsOrderDetailService.queryList(bo);
ExcelUtil.exportExcel(list, "物流订单明细(按箱子维度存储)", BizLogisticsOrderDetailVo.class, response);
}
@SaCheckPermission("amz:logisticsOrderDetail:export")
@Log(title = "物流订单明细(按箱子维度存储)", businessType = BusinessType.EXPORT)
@PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> importData(@RequestPart("file") MultipartFile file) throws Exception {
bizLogisticsOrderDetailService.importExcel(file.getInputStream());
return R.ok();
}
/**
* 获取物流订单明细按箱子维度存储详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:logisticsOrderDetail:query")
@GetMapping("/{id}")
public R<BizLogisticsOrderDetailVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizLogisticsOrderDetailService.queryById(id));
}
/**
* 新增物流订单明细按箱子维度存储
*/
@SaCheckPermission("amz:logisticsOrderDetail:add")
@Log(title = "物流订单明细(按箱子维度存储)", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizLogisticsOrderDetailBo bo) {
return toAjax(bizLogisticsOrderDetailService.insertByBo(bo));
}
/**
* 修改物流订单明细按箱子维度存储
*/
@SaCheckPermission("amz:logisticsOrderDetail:edit")
@Log(title = "物流订单明细(按箱子维度存储)", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizLogisticsOrderDetailBo bo) {
return toAjax(bizLogisticsOrderDetailService.updateByBo(bo));
}
/**
* 删除物流订单明细按箱子维度存储
*
* @param ids 主键串
*/
@SaCheckPermission("amz:logisticsOrderDetail:remove")
@Log(title = "物流订单明细(按箱子维度存储)", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizLogisticsOrderDetailService.deleteWithValidByIds(List.of(ids), true));
}
/**
* 新增物流订单明细按箱子维度存储
*/
@SaCheckPermission("amz:logisticsOrderDetail:edit")
@Log(title = "批量更新物流订单明细", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/updateList")
public R<Void> updateList(@Validated(AddGroup.class) @RequestBody List<BizLogisticsOrderDetailBo> list) {
bizLogisticsOrderDetailService.updateList(list);
return R.ok();
}
}

View File

@ -0,0 +1,113 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizLogisticsOrderQuotationVo;
import org.asinkj.amz.domain.bo.BizLogisticsOrderQuotationBo;
import org.asinkj.amz.service.IBizLogisticsOrderQuotationService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 物流订单确认
* 前端访问路由地址为:/amz/logisticsOrderQuotation
*
* @author shuo hu
* @date 2025-04-21
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/logisticsOrderQuotation")
public class BizLogisticsOrderQuotationController extends BaseController {
private final IBizLogisticsOrderQuotationService bizLogisticsOrderQuotationService;
/**
* 查询物流订单确认列表
*/
@SaCheckPermission("amz:logisticsOrderQuotation:list")
@GetMapping("/list")
public TableDataInfo<BizLogisticsOrderQuotationVo> list(BizLogisticsOrderQuotationBo bo, PageQuery pageQuery) {
return bizLogisticsOrderQuotationService.queryPageList(bo, pageQuery);
}
/**
* 导出物流订单确认列表
*/
@SaCheckPermission("amz:logisticsOrderQuotation:export")
@Log(title = "物流订单确认", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizLogisticsOrderQuotationBo bo, HttpServletResponse response) {
List<BizLogisticsOrderQuotationVo> list = bizLogisticsOrderQuotationService.queryList(bo);
ExcelUtil.exportExcel(list, "物流订单确认", BizLogisticsOrderQuotationVo.class, response);
}
/**
* 获取物流订单确认详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:logisticsOrderQuotation:query")
@GetMapping("/{id}")
public R<BizLogisticsOrderQuotationVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizLogisticsOrderQuotationService.queryById(id));
}
@SaCheckPermission("amz:logisticsOrderQuotation:query")
@PostMapping("/quotationOrder")
public R<Void> quotationOrder(@RequestBody BizLogisticsOrderQuotationBo bo) {
bizLogisticsOrderQuotationService.quotationOrder(bo);
return R.ok();
}
/**
* 新增物流订单确认
*/
@SaCheckPermission("amz:logisticsOrderQuotation:add")
@Log(title = "物流订单确认", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizLogisticsOrderQuotationBo bo) {
return toAjax(bizLogisticsOrderQuotationService.insertByBo(bo));
}
/**
* 修改物流订单确认
*/
@SaCheckPermission("amz:logisticsOrderQuotation:edit")
@Log(title = "物流订单确认", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizLogisticsOrderQuotationBo bo) {
return toAjax(bizLogisticsOrderQuotationService.updateByBo(bo));
}
/**
* 删除物流订单确认
*
* @param ids 主键串
*/
@SaCheckPermission("amz:logisticsOrderQuotation:remove")
@Log(title = "物流订单确认", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizLogisticsOrderQuotationService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,179 @@
package org.asinkj.amz.controller;
import java.util.List;
import java.util.Map;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.annotation.SaMode;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.asinkj.amz.domain.bo.BizLogisticsQuoteMostBo;
import org.asinkj.amz.domain.bo.BizLogisticsQuoteReportBo;
import org.asinkj.amz.domain.vo.InquiryQuoteStatusDTO;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizLogisticsQuoteVo;
import org.asinkj.amz.domain.bo.BizLogisticsQuoteBo;
import org.asinkj.amz.service.IBizLogisticsQuoteService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 物流报价
* 前端访问路由地址为:/amz/logisticsQuote
*
* @author shuo hu
* @date 2025-03-20
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/logisticsQuote")
public class BizLogisticsQuoteController extends BaseController {
private final IBizLogisticsQuoteService bizLogisticsQuoteService;
/**
* 查询物流报价列表
*/
@SaCheckPermission("amz:logisticsQuote:list")
@GetMapping("/list")
public TableDataInfo<BizLogisticsQuoteVo> list(BizLogisticsQuoteBo bo, PageQuery pageQuery) {
return bizLogisticsQuoteService.queryPageList(bo, pageQuery);
}
/**
* 根据目的地仓库和渠道查询物流报价列表
*/
// @SaCheckPermission("amz:logisticsQuote:list")
@SaCheckPermission("amz:shipmentPlan:edit")
@GetMapping("/query/{destination}/{channelId}/{date}")
public TableDataInfo<BizLogisticsQuoteVo> queryWithDesAndChannel(@PathVariable("destination") @NotNull(message = "目的地不能为空") String destination,
@PathVariable("channelId") @NotNull(message = "渠道不能为空") String channelId,
@PathVariable("date") @NotNull(message = "日期不能为空") String date) {
return bizLogisticsQuoteService.listWithDesAndChannel(destination, channelId, date);
}
@SaCheckPermission("amz:shipmentPlan:edit")
@GetMapping("/queryWithDes/{destination}/{date}/{shipmentId}")
public TableDataInfo<BizLogisticsQuoteVo> queryWithDes(@PathVariable("destination") @NotNull(message = "目的地不能为空") String destination,
@PathVariable("date") @NotNull(message = "日期不能为空") String date,
@PathVariable("shipmentId") @NotNull(message = "fba货件编号不能为空") String shipmentId) {
return bizLogisticsQuoteService.listWithDes(destination, date,shipmentId);
}
/**
* 导出物流报价列表
*/
@SaCheckPermission("amz:logisticsQuote:export")
@Log(title = "物流报价", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizLogisticsQuoteBo bo, HttpServletResponse response) {
List<BizLogisticsQuoteVo> list = bizLogisticsQuoteService.queryList(bo);
ExcelUtil.exportExcel(list, "物流报价", BizLogisticsQuoteVo.class, response);
}
/**
* 获取物流报价详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:logisticsQuote:query")
@GetMapping("/{id}")
public R<BizLogisticsQuoteVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizLogisticsQuoteService.queryById(id));
}
/**
* 新增物流报价
*/
@SaCheckPermission("amz:logisticsQuote:add")
@Log(title = "物流报价", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizLogisticsQuoteBo bo) {
return toAjax(bizLogisticsQuoteService.insertByBo(bo));
}
/**
* 新增物流报价
*/
@SaCheckPermission("amz:logisticsQuote:add")
@Log(title = "生成多日期的物流报价", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/most")
public R<Void> addMostQuote(@Validated(AddGroup.class) @RequestBody BizLogisticsQuoteMostBo bo) {
bizLogisticsQuoteService.insertMostQuoteByBo(bo);
return R.ok();
}
@SaCheckPermission("amz:logisticsQuote:add")
@Log(title = "生成报价建议", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/check-quote-price")
public R<Boolean> checkQuotePrice(@Validated(AddGroup.class) @RequestBody BizLogisticsQuoteMostBo bo) {
return R.ok(bizLogisticsQuoteService.checkPriceQuoteByBo(bo));
}
@GetMapping("/today-quote-status")
@RepeatSubmit()
public R<List<InquiryQuoteStatusDTO>> getTodayQuoteStatus() {
List<InquiryQuoteStatusDTO> statusList = bizLogisticsQuoteService.getTodayQuoteStatus();
return R.ok(statusList);
}
/**
* 修改物流报价
*/
@SaCheckPermission("amz:logisticsQuote:edit")
@Log(title = "物流报价", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizLogisticsQuoteBo bo) {
return toAjax(bizLogisticsQuoteService.updateByBo(bo));
}
/**
* 删除物流报价
*
* @param ids 主键串
*/
@SaCheckPermission("amz:logisticsQuote:remove")
@Log(title = "物流报价", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizLogisticsQuoteService.deleteWithValidByIds(List.of(ids), true));
}
/**
* 查询报表
*
* @return
*/
@SaCheckRole(value = {"superadmin", "yunying"}, mode = SaMode.OR)
@PostMapping("/report")
public R<List<Map<String, Object>>> getInfo(@Valid @RequestBody BizLogisticsQuoteReportBo bo) {
List<Map<String, Object>> maps = bizLogisticsQuoteService.generateReport(bo);
return R.ok(maps);
}
}

View File

@ -0,0 +1,106 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizOrderOutItemVo;
import org.asinkj.amz.domain.bo.BizOrderOutItemBo;
import org.asinkj.amz.service.IBizOrderOutItemService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 采购订单明细
* 前端访问路由地址为:/amz/orderOutItem
*
* @author shuo hu
* @date 2025-07-22
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/orderOutItem")
public class BizOrderOutItemController extends BaseController {
private final IBizOrderOutItemService bizOrderOutItemService;
/**
* 查询采购订单明细列表
*/
@SaCheckPermission("amz:orderOutItem:list")
@GetMapping("/list")
public TableDataInfo<BizOrderOutItemVo> list(BizOrderOutItemBo bo, PageQuery pageQuery) {
return bizOrderOutItemService.queryPageList(bo, pageQuery);
}
/**
* 导出采购订单明细列表
*/
@SaCheckPermission("amz:orderOutItem:export")
@Log(title = "采购订单明细", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizOrderOutItemBo bo, HttpServletResponse response) {
List<BizOrderOutItemVo> list = bizOrderOutItemService.queryList(bo);
ExcelUtil.exportExcel(list, "采购订单明细", BizOrderOutItemVo.class, response);
}
/**
* 获取采购订单明细详细信息
*
* @param tenantId 主键
*/
@SaCheckPermission("amz:orderOutItem:query")
@GetMapping("/{tenantId}")
public R<BizOrderOutItemVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable String tenantId) {
return R.ok(bizOrderOutItemService.queryById(tenantId));
}
/**
* 新增采购订单明细
*/
@SaCheckPermission("amz:orderOutItem:add")
@Log(title = "采购订单明细", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizOrderOutItemBo bo) {
return toAjax(bizOrderOutItemService.insertByBo(bo));
}
/**
* 修改采购订单明细
*/
@SaCheckPermission("amz:orderOutItem:edit")
@Log(title = "采购订单明细", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizOrderOutItemBo bo) {
return toAjax(bizOrderOutItemService.updateByBo(bo));
}
/**
* 删除采购订单明细
*
* @param tenantIds 主键串
*/
@SaCheckPermission("amz:orderOutItem:remove")
@Log(title = "采购订单明细", businessType = BusinessType.DELETE)
@DeleteMapping("/{tenantIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable String[] tenantIds) {
return toAjax(bizOrderOutItemService.deleteWithValidByIds(List.of(tenantIds), true));
}
}

View File

@ -0,0 +1,106 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizPackingSpecsVo;
import org.asinkj.amz.domain.bo.BizPackingSpecsBo;
import org.asinkj.amz.service.IBizPackingSpecsService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 产品装箱规格
* 前端访问路由地址为:/amz/packingSpecs
*
* @author shuo hu
* @date 2025-07-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/packingSpecs")
public class BizPackingSpecsController extends BaseController {
private final IBizPackingSpecsService bizPackingSpecsService;
/**
* 查询产品装箱规格列表
*/
@SaCheckPermission("amz:packingSpecs:list")
@GetMapping("/list")
public TableDataInfo<BizPackingSpecsVo> list(BizPackingSpecsBo bo, PageQuery pageQuery) {
return bizPackingSpecsService.queryPageList(bo, pageQuery);
}
/**
* 导出产品装箱规格列表
*/
@SaCheckPermission("amz:packingSpecs:export")
@Log(title = "产品装箱规格", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizPackingSpecsBo bo, HttpServletResponse response) {
List<BizPackingSpecsVo> list = bizPackingSpecsService.queryList(bo);
ExcelUtil.exportExcel(list, "产品装箱规格", BizPackingSpecsVo.class, response);
}
/**
* 获取产品装箱规格详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:packingSpecs:query")
@GetMapping("/{id}")
public R<BizPackingSpecsVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizPackingSpecsService.queryById(id));
}
/**
* 新增产品装箱规格
*/
@SaCheckPermission("amz:packingSpecs:add")
@Log(title = "产品装箱规格", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizPackingSpecsBo bo) {
return toAjax(bizPackingSpecsService.insertByBo(bo));
}
/**
* 修改产品装箱规格
*/
@SaCheckPermission("amz:packingSpecs:edit")
@Log(title = "产品装箱规格", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizPackingSpecsBo bo) {
return toAjax(bizPackingSpecsService.updateByBo(bo));
}
/**
* 删除产品装箱规格
*
* @param ids 主键串
*/
@SaCheckPermission("amz:packingSpecs:remove")
@Log(title = "产品装箱规格", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizPackingSpecsService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,147 @@
package org.asinkj.amz.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.annotation.SaMode;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.asinkj.amz.service.IBizPurchaseOrderItemService;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizPurchaseOrderVo;
import org.asinkj.amz.domain.bo.BizPurchaseOrderBo;
import org.asinkj.amz.service.IBizPurchaseOrderService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
import javax.annotation.Resource;
/**
* 采购单主
* 前端访问路由地址为:/amz/purchaseOrder
*
* @author shuo hu
* @date 2025-05-10
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/purchaseOrder")
public class BizPurchaseOrderController extends BaseController {
private final IBizPurchaseOrderService bizPurchaseOrderService;
/**
* 查询采购单主列表
*/
// @SaCheckPermission("amz:purchaseOrder:list")
@SaCheckRole(value = {"gongying", "gengdan", "superadmin", "yunying"}, mode = SaMode.OR)
@GetMapping("/list")
public TableDataInfo<BizPurchaseOrderVo> list(BizPurchaseOrderBo bo, PageQuery pageQuery) {
return bizPurchaseOrderService.queryPageList(bo, pageQuery);
}
/**
* 导出采购单主列表
*/
@SaCheckPermission("amz:purchaseOrder:export")
@Log(title = "采购单主", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizPurchaseOrderBo bo, HttpServletResponse response) {
List<BizPurchaseOrderVo> list = bizPurchaseOrderService.queryList(bo);
ExcelUtil.exportExcel(list, "采购单主", BizPurchaseOrderVo.class, response);
}
/**
* 获取采购单主详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:purchaseOrder:query")
@GetMapping("/{id}")
public R<BizPurchaseOrderVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizPurchaseOrderService.queryById(id));
}
/**
* 新增采购单主
*/
@SaCheckPermission("amz:purchaseOrder:add")
@Log(title = "采购单主", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizPurchaseOrderBo bo) {
return toAjax(bizPurchaseOrderService.insertByBo(bo));
}
/**
* 修改采购单主
*/
@SaCheckPermission("amz:purchaseOrder:edit")
@Log(title = "采购单主", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizPurchaseOrderBo bo) {
return toAjax(bizPurchaseOrderService.updateByBo(bo));
}
@SaCheckPermission("amz:purchaseOrder:edit")
@Log(title = "采购单主", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/confirm")
public R<Void> confirm(@Validated(EditGroup.class) @RequestBody BizPurchaseOrderBo bo) {
return toAjax(bizPurchaseOrderService.confirmByBo(bo));
}
/**
* 删除采购单主
*
* @param orderSns 主键串
*/
@SaCheckPermission("amz:purchaseOrder:remove")
@Log(title = "采购单主", businessType = BusinessType.DELETE)
@DeleteMapping("/{orderSns}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable String[] orderSns) {
return toAjax(bizPurchaseOrderService.deleteWithValidByIds(List.of(orderSns), true));
}
@SaCheckPermission("amz:shipmentPlan:query")
@GetMapping("/take-today-purchase-order")
public R<Void> takeTodayPurchaseOrder() throws Exception {
bizPurchaseOrderService.takeTodayPurchaseOrder();
return R.ok();
}
@SaCheckPermission("amz:shipmentPlan:query")
@GetMapping("/update-today-purchase-order")
public R<Void> updateTodayPurchaseOrder() throws Exception {
bizPurchaseOrderService.updateTodayPurchaseOrder();
return R.ok();
}
@GetMapping("/send-message-to-supplier/{message}/{supplier}")
public R<Void> sendMessageToSupplier(@PathVariable String message, @PathVariable String supplier) throws Exception {
bizPurchaseOrderService.sendMessageToSupplier(message, supplier);
return R.ok();
}
}

View File

@ -0,0 +1,106 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizPurchaseOrderItemVo;
import org.asinkj.amz.domain.bo.BizPurchaseOrderItemBo;
import org.asinkj.amz.service.IBizPurchaseOrderItemService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 供应商订单产品明细
* 前端访问路由地址为:/amz/purchaseOrderItem
*
* @author shuo hu
* @date 2025-05-10
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/purchaseOrderItem")
public class BizPurchaseOrderItemController extends BaseController {
private final IBizPurchaseOrderItemService bizPurchaseOrderItemService;
/**
* 查询供应商订单产品明细列表
*/
@SaCheckPermission("amz:purchaseOrderItem:list")
@GetMapping("/list")
public TableDataInfo<BizPurchaseOrderItemVo> list(BizPurchaseOrderItemBo bo, PageQuery pageQuery) {
return bizPurchaseOrderItemService.queryPageList(bo, pageQuery);
}
/**
* 导出供应商订单产品明细列表
*/
@SaCheckPermission("amz:purchaseOrderItem:export")
@Log(title = "供应商订单产品明细", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizPurchaseOrderItemBo bo, HttpServletResponse response) {
List<BizPurchaseOrderItemVo> list = bizPurchaseOrderItemService.queryList(bo);
ExcelUtil.exportExcel(list, "供应商订单产品明细", BizPurchaseOrderItemVo.class, response);
}
/**
* 获取供应商订单产品明细详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:purchaseOrderItem:query")
@GetMapping("/{id}")
public R<BizPurchaseOrderItemVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizPurchaseOrderItemService.queryById(id));
}
/**
* 新增供应商订单产品明细
*/
@SaCheckPermission("amz:purchaseOrderItem:add")
@Log(title = "供应商订单产品明细", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizPurchaseOrderItemBo bo) {
return toAjax(bizPurchaseOrderItemService.insertByBo(bo));
}
/**
* 修改供应商订单产品明细
*/
@SaCheckPermission("amz:purchaseOrderItem:edit")
@Log(title = "供应商订单产品明细", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizPurchaseOrderItemBo bo) {
return toAjax(bizPurchaseOrderItemService.updateByBo(bo));
}
/**
* 删除供应商订单产品明细
*
* @param ids 主键串
*/
@SaCheckPermission("amz:purchaseOrderItem:remove")
@Log(title = "供应商订单产品明细", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizPurchaseOrderItemService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,122 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizPurchaseOutOrderVo;
import org.asinkj.amz.domain.bo.BizPurchaseOutOrderBo;
import org.asinkj.amz.service.IBizPurchaseOutOrderService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 组合订单
* 前端访问路由地址为:/amz/purchaseOutOrder
*
* @author shuo hu
* @date 2025-07-22
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/purchaseOutOrder")
public class BizPurchaseOutOrderController extends BaseController {
private final IBizPurchaseOutOrderService bizPurchaseOutOrderService;
/**
* 查询组合订单列表
*/
@SaCheckPermission("amz:purchaseOutOrder:list")
@GetMapping("/list")
public TableDataInfo<BizPurchaseOutOrderVo> list(BizPurchaseOutOrderBo bo, PageQuery pageQuery) {
return bizPurchaseOutOrderService.queryPageList(bo, pageQuery);
}
/**
* 导出组合订单列表
*/
@SaCheckPermission("amz:purchaseOutOrder:export")
@Log(title = "组合订单", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizPurchaseOutOrderBo bo, HttpServletResponse response) {
List<BizPurchaseOutOrderVo> list = bizPurchaseOutOrderService.queryList(bo);
ExcelUtil.exportExcel(list, "组合订单", BizPurchaseOutOrderVo.class, response);
}
/**
* 获取组合订单详细信息
*
* @param tenantId 主键
*/
@SaCheckPermission("amz:purchaseOutOrder:query")
@GetMapping("/{tenantId}")
public R<BizPurchaseOutOrderVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable String tenantId) {
return R.ok(bizPurchaseOutOrderService.queryByPurchaseId(tenantId));
}
/**
* 新增组合订单
*/
@SaCheckPermission("amz:purchaseOutOrder:add")
@Log(title = "组合订单", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizPurchaseOutOrderBo bo) {
return toAjax(bizPurchaseOutOrderService.insertByBo(bo));
}
/**
* 修改组合订单
*/
@SaCheckPermission("amz:purchaseOutOrder:edit")
@Log(title = "组合订单", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizPurchaseOutOrderBo bo) {
return toAjax(bizPurchaseOutOrderService.updateByBo(bo));
}
/**
* 删除组合订单
*
* @param tenantIds 主键串
*/
@SaCheckPermission("amz:purchaseOutOrder:remove")
@Log(title = "组合订单", businessType = BusinessType.DELETE)
@DeleteMapping("/{tenantIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable String[] tenantIds) {
return toAjax(bizPurchaseOutOrderService.deleteWithValidByIds(List.of(tenantIds), true));
}
@SaCheckPermission("amz:purchaseOutOrder:edit")
@Log(title = "创建发货订单", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("submit")
public R<Void> submit(@Validated(EditGroup.class) @RequestBody BizPurchaseOutOrderBo bo) {
bizPurchaseOutOrderService.createSendOrderByBo(bo);
return R.ok();
}
}

View File

@ -0,0 +1,127 @@
package org.asinkj.amz.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.annotation.SaMode;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizSendOrderVo;
import org.asinkj.amz.domain.bo.BizSendOrderBo;
import org.asinkj.amz.service.IBizSendOrderService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 供应商创建的发货单
* 前端访问路由地址为:/amz/sendOrder
*
* @author shuo hu
* @date 2025-05-14
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/sendOrder")
public class BizSendOrderController extends BaseController {
private final IBizSendOrderService bizSendOrderService;
/**
* 查询供应商创建的发货单列表
*/
@SaCheckRole(value = {"gongying", "gengdan", "superadmin", "yunying"}, mode = SaMode.OR)
@GetMapping("/list")
public TableDataInfo<BizSendOrderVo> list(BizSendOrderBo bo, PageQuery pageQuery) {
return bizSendOrderService.queryPageList(bo, pageQuery);
}
/**
* 导出供应商创建的发货单列表
*/
@SaCheckRole(value = {"gongying", "gengdan", "superadmin"}, mode = SaMode.OR)
@Log(title = "供应商创建的发货单", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizSendOrderBo bo, HttpServletResponse response) {
List<BizSendOrderVo> list = bizSendOrderService.queryList(bo);
ExcelUtil.exportExcel(list, "供应商创建的发货单", BizSendOrderVo.class, response);
}
/**
* 获取供应商创建的发货单详细信息
*
* @param id 主键
*/
@SaCheckRole(value = {"gongying", "gengdan", "superadmin", "yunying"}, mode = SaMode.OR)
@GetMapping("/{id}")
public R<BizSendOrderVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizSendOrderService.queryById(id));
}
/**
* 新增供应商创建的发货单
*/
@SaCheckRole(value = {"gongying", "superadmin", "gengdan"}, mode = SaMode.OR)
@Log(title = "供应商创建的发货单", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizSendOrderBo bo) {
return toAjax(bizSendOrderService.insertByBo(bo));
}
/**
* 修改供应商创建的发货单
*/
@SaCheckRole(value = {"gongying", "gengdan", "superadmin", "yunying"}, mode = SaMode.OR)
@Log(title = "供应商创建的发货单", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizSendOrderBo bo) {
return toAjax(bizSendOrderService.updateByBo(bo));
}
@SaCheckRole(value = {"gongying", "gengdan", "superadmin", "yunying"}, mode = SaMode.OR)
@Log(title = "供应商创建的发货单", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/data")
public R<Void> setData(@Validated(EditGroup.class) @RequestBody BizSendOrderBo bo) {
return toAjax(bizSendOrderService.updateDataByBo(bo));
}
@SaCheckRole(value = {"gongying", "gengdan", "superadmin"}, mode = SaMode.OR)
@Log(title = "供应商创建的发货单", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/link")
public R<Void> link(@Validated(EditGroup.class) @RequestBody BizSendOrderBo bo) {
bizSendOrderService.linkByBo(bo);
return R.ok();
}
/**
* 删除供应商创建的发货单
*
* @param ids 主键串
*/
@SaCheckPermission("amz:sendOrder:remove")
@Log(title = "供应商创建的发货单", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizSendOrderService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,106 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizSendOrderItemVo;
import org.asinkj.amz.domain.bo.BizSendOrderItemBo;
import org.asinkj.amz.service.IBizSendOrderItemService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 供应商创建的发货单明细
* 前端访问路由地址为:/amz/sendOrderItem
*
* @author shuo hu
* @date 2025-07-24
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/sendOrderItem")
public class BizSendOrderItemController extends BaseController {
private final IBizSendOrderItemService bizSendOrderItemService;
/**
* 查询供应商创建的发货单明细列表
*/
@SaCheckPermission("amz:sendOrderItem:list")
@GetMapping("/list")
public TableDataInfo<BizSendOrderItemVo> list(BizSendOrderItemBo bo, PageQuery pageQuery) {
return bizSendOrderItemService.queryPageList(bo, pageQuery);
}
/**
* 导出供应商创建的发货单明细列表
*/
@SaCheckPermission("amz:sendOrderItem:export")
@Log(title = "供应商创建的发货单明细", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizSendOrderItemBo bo, HttpServletResponse response) {
List<BizSendOrderItemVo> list = bizSendOrderItemService.queryList(bo);
ExcelUtil.exportExcel(list, "供应商创建的发货单明细", BizSendOrderItemVo.class, response);
}
/**
* 获取供应商创建的发货单明细详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:sendOrderItem:query")
@GetMapping("/{id}")
public R<BizSendOrderItemVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizSendOrderItemService.queryById(id));
}
/**
* 新增供应商创建的发货单明细
*/
@SaCheckPermission("amz:sendOrderItem:add")
@Log(title = "供应商创建的发货单明细", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizSendOrderItemBo bo) {
return toAjax(bizSendOrderItemService.insertByBo(bo));
}
/**
* 修改供应商创建的发货单明细
*/
@SaCheckPermission("amz:sendOrderItem:edit")
@Log(title = "供应商创建的发货单明细", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizSendOrderItemBo bo) {
return toAjax(bizSendOrderItemService.updateByBo(bo));
}
/**
* 删除供应商创建的发货单明细
*
* @param ids 主键串
*/
@SaCheckPermission("amz:sendOrderItem:remove")
@Log(title = "供应商创建的发货单明细", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizSendOrderItemService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,117 @@
package org.asinkj.amz.controller;
import java.util.List;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.asinkj.amz.domain.bo.BatchRelDTO;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizSendShipmentRelVo;
import org.asinkj.amz.domain.bo.BizSendShipmentRelBo;
import org.asinkj.amz.service.IBizSendShipmentRelService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 发货单与货运计划多对多关联
* 前端访问路由地址为:/amz/sendShipmentRel
*
* @author shuo hu
* @date 2025-06-20
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/sendShipmentRel")
public class BizSendShipmentRelController extends BaseController {
private final IBizSendShipmentRelService bizSendShipmentRelService;
/**
* 查询发货单与货运计划多对多关联列表
*/
@SaCheckPermission("amz:sendShipmentRel:list")
@GetMapping("/list")
public TableDataInfo<BizSendShipmentRelVo> list(BizSendShipmentRelBo bo, PageQuery pageQuery) {
return bizSendShipmentRelService.queryPageList(bo, pageQuery);
}
/**
* 导出发货单与货运计划多对多关联列表
*/
@SaCheckPermission("amz:sendShipmentRel:export")
@Log(title = "发货单与货运计划多对多关联", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizSendShipmentRelBo bo, HttpServletResponse response) {
List<BizSendShipmentRelVo> list = bizSendShipmentRelService.queryList(bo);
ExcelUtil.exportExcel(list, "发货单与货运计划多对多关联", BizSendShipmentRelVo.class, response);
}
/**
* 获取发货单与货运计划多对多关联详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:sendShipmentRel:query")
@GetMapping("/{id}")
public R<BizSendShipmentRelVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizSendShipmentRelService.queryById(id));
}
/**
* 新增发货单与货运计划多对多关联
*/
@SaCheckPermission("amz:sendShipmentRel:add")
@Log(title = "发货单与货运计划多对多关联", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizSendShipmentRelBo bo) {
return toAjax(bizSendShipmentRelService.insertByBo(bo));
}
/**
* 修改发货单与货运计划多对多关联
*/
@SaCheckPermission("amz:sendShipmentRel:edit")
@Log(title = "发货单与货运计划多对多关联", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizSendShipmentRelBo bo) {
return toAjax(bizSendShipmentRelService.updateByBo(bo));
}
/**
* 删除发货单与货运计划多对多关联
*
* @param ids 主键串
*/
@SaCheckPermission("amz:sendShipmentRel:remove")
@Log(title = "发货单与货运计划多对多关联", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizSendShipmentRelService.deleteWithValidByIds(List.of(ids), true));
}
@PostMapping("/createBatchRelations")
public R<Void> createBatchRelations(
@Valid @RequestBody BatchRelDTO dto) {
bizSendShipmentRelService.batchCreateRelations(dto);
return R.ok();
}
}

View File

@ -0,0 +1,118 @@
package org.asinkj.amz.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.annotation.SaMode;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizShipForwardVo;
import org.asinkj.amz.domain.bo.BizShipForwardBo;
import org.asinkj.amz.service.IBizShipForwardService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 货件转发
* 前端访问路由地址为:/amz/shipForward
*
* @author shuo hu
* @date 2025-05-13
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/shipForward")
public class BizShipForwardController extends BaseController {
private final IBizShipForwardService bizShipForwardService;
/**
* 查询货件转发列表
*/
@SaCheckPermission("amz:shipForward:list")
@GetMapping("/list")
public TableDataInfo<BizShipForwardVo> list(BizShipForwardBo bo, PageQuery pageQuery) {
return bizShipForwardService.queryPageList(bo, pageQuery);
}
/**
* 导出货件转发列表
*/
@SaCheckPermission("amz:shipForward:export")
@Log(title = "货件转发", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizShipForwardBo bo, HttpServletResponse response) {
List<BizShipForwardVo> list = bizShipForwardService.queryList(bo);
ExcelUtil.exportExcel(list, "货件转发", BizShipForwardVo.class, response);
}
/**
* 获取货件转发详细信息
*
* @param id 主键
*/
@SaCheckRole(value = {"gengdan", "gongying", "superadmin"}, mode = SaMode.OR)
@GetMapping("/{id}")
public R<BizShipForwardVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizShipForwardService.queryById(id));
}
/**
* 新增货件转发
*/
@SaCheckPermission("amz:shipForward:add")
@SaCheckRole(value = {"gengdan", "superadmin"}, mode = SaMode.OR)
@Log(title = "货件转发", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizShipForwardBo bo) {
return toAjax(bizShipForwardService.insertByBo(bo));
}
/**
* 修改货件转发
*/
@SaCheckRole(value = {"gengdan", "gongying", "superadmin"}, mode = SaMode.OR)
@Log(title = "货件转发", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizShipForwardBo bo) {
return toAjax(bizShipForwardService.updateByBo(bo));
}
@SaCheckRole(value = {"gengdan", "gongying", "superadmin"}, mode = SaMode.OR)
@Log(title = "货件转发", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/sendUpdate")
public R<Void> sendUpdate(@Validated(EditGroup.class) @RequestBody BizShipForwardBo bo) {
bizShipForwardService.sendUpdateByBo(bo);
return R.ok();
}
/**
* 删除货件转发
*
* @param ids 主键串
*/
@SaCheckPermission("amz:shipForward:remove")
@Log(title = "货件转发", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizShipForwardService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,106 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizShipmentItemVo;
import org.asinkj.amz.domain.bo.BizShipmentItemBo;
import org.asinkj.amz.service.IBizShipmentItemService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 货品明细
* 前端访问路由地址为:/amz/shipmentItem
*
* @author shuo hu
* @date 2025-03-20
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/shipmentItem")
public class BizShipmentItemController extends BaseController {
private final IBizShipmentItemService bizShipmentItemService;
/**
* 查询货品明细列表
*/
@SaCheckPermission("amz:shipmentItem:list")
@GetMapping("/list")
public TableDataInfo<BizShipmentItemVo> list(BizShipmentItemBo bo, PageQuery pageQuery) {
return bizShipmentItemService.queryPageList(bo, pageQuery);
}
/**
* 导出货品明细列表
*/
@SaCheckPermission("amz:shipmentItem:export")
@Log(title = "货品明细", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizShipmentItemBo bo, HttpServletResponse response) {
List<BizShipmentItemVo> list = bizShipmentItemService.queryList(bo);
ExcelUtil.exportExcel(list, "货品明细", BizShipmentItemVo.class, response);
}
/**
* 获取货品明细详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:shipmentItem:query")
@GetMapping("/{id}")
public R<BizShipmentItemVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizShipmentItemService.queryById(id));
}
/**
* 新增货品明细
*/
@SaCheckPermission("amz:shipmentItem:add")
@Log(title = "货品明细", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizShipmentItemBo bo) {
return toAjax(bizShipmentItemService.insertByBo(bo));
}
/**
* 修改货品明细
*/
@SaCheckPermission("amz:shipmentItem:edit")
@Log(title = "货品明细", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizShipmentItemBo bo) {
return toAjax(bizShipmentItemService.updateByBo(bo));
}
/**
* 删除货品明细
*
* @param ids 主键串
*/
@SaCheckPermission("amz:shipmentItem:remove")
@Log(title = "货品明细", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizShipmentItemService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,181 @@
package org.asinkj.amz.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaCheckRole;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.asinkj.amz.domain.vo.BizLogisticsQuoteVo;
import org.asinkj.amz.domain.vo.BizShipmentPlanOrderVo;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizShipmentPlanVo;
import org.asinkj.amz.domain.bo.BizShipmentPlanBo;
import org.asinkj.amz.service.IBizShipmentPlanService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
/**
* 货件计划
* 前端访问路由地址为:/amz/shipmentPlan
*
* @author shuo hu
* @date 2025-03-19
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/shipmentPlan")
public class BizShipmentPlanController extends BaseController {
private final IBizShipmentPlanService bizShipmentPlanService;
/**
* 查询货件计划列表
*/
@SaCheckPermission("amz:shipmentPlan:list")
@GetMapping("/list")
public TableDataInfo<BizShipmentPlanVo> list(BizShipmentPlanBo bo, PageQuery pageQuery) {
return bizShipmentPlanService.queryPageList(bo, pageQuery);
}
@SaCheckPermission("amz:shipmentPlan:list")
@GetMapping("/list/order")
public TableDataInfo<BizShipmentPlanOrderVo> listOrder(BizShipmentPlanBo bo, PageQuery pageQuery) {
return bizShipmentPlanService.queryPageListOrder(bo, pageQuery);
}
/**
* 导出货件计划列表
*/
@SaCheckPermission("amz:shipmentPlan:export")
@Log(title = "货件计划", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizShipmentPlanBo bo, HttpServletResponse response) {
List<BizShipmentPlanVo> list = bizShipmentPlanService.queryList(bo);
ExcelUtil.exportExcel(list, "货件计划", BizShipmentPlanVo.class, response);
}
/**
* 获取货件计划详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:shipmentPlan:query")
@GetMapping("/{id}")
public R<BizShipmentPlanVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizShipmentPlanService.queryById(id));
}
/**
* 新增货件计划
*/
@SaCheckPermission("amz:shipmentPlan:add")
@Log(title = "货件计划", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizShipmentPlanBo bo) {
return toAjax(bizShipmentPlanService.insertByBo(bo));
}
@SaCheckPermission("amz:shipmentPlan:add")
@Log(title = "货件计划", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/update/list/{status}")
public R<Void> updateList( @RequestBody List<String> list, @PathVariable String status) {
bizShipmentPlanService.updateList(list, status);
return R.ok();
}
/**
* 修改货件计划
*/
@SaCheckPermission("amz:shipmentPlan:edit")
@Log(title = "货件计划", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizShipmentPlanBo bo) {
return toAjax(bizShipmentPlanService.updateByBo(bo));
}
@SaCheckPermission("amz:shipmentPlan:edit")
@Log(title = "货件计划", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("link")
public R<Void> link(@Validated(EditGroup.class) @RequestBody BizShipmentPlanBo bo) {
return toAjax(bizShipmentPlanService.linkByBo(bo));
}
/**
* 删除货件计划
*
* @param ids 主键串
*/
@SaCheckPermission("amz:shipmentPlan:remove")
@Log(title = "货件计划", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizShipmentPlanService.deleteWithValidByIds(List.of(ids), true));
}
@SaCheckPermission("amz:shipmentPlan:remove")
@Log(title = "删除货件计划发货单关系", businessType = BusinessType.DELETE)
@DeleteMapping("delete/{shipmentPlanId}/{sendOrderId}")
public R<Integer> deleteRelation(
@NotNull(message = "计划ID不能为空") @PathVariable Long shipmentPlanId, @NotNull(message = "发货单ID不能为空") @PathVariable Long sendOrderId) {
return R.ok(bizShipmentPlanService.deleteBySendOrderShipmentPlan(shipmentPlanId, sendOrderId));
}
/**
* 获取货件计划详细信息
*
*
*/
@SaCheckPermission("amz:shipmentPlan:query")
@GetMapping("/quote/{destination}/{channel}")
public R<List<BizLogisticsQuoteVo>> getQuote(@NotNull(message = "主键不能为空")
@PathVariable String destination,
@PathVariable String channel) {
return R.ok(bizShipmentPlanService.getQuote(destination,channel));
}
/**
* 获取货件计划详细信息
*
*
*/
@SaCheckPermission("amz:shipmentPlan:query")
@GetMapping("/take-today-amz-plan-data")
public R<Void> takeTodayAmzPlanData() {
bizShipmentPlanService.takeTodayAmzPlanData();
return R.ok();
}
@SaCheckRole("yunying")
@Log(title = "更新货件信息", businessType = BusinessType.EXPORT)
@PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> importData(@RequestPart("file") MultipartFile file) throws Exception {
bizShipmentPlanService.importExcel(file.getInputStream());
return R.ok();
}
}

View File

@ -0,0 +1,106 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.BizShipmentTrackingVo;
import org.asinkj.amz.domain.bo.BizShipmentTrackingBo;
import org.asinkj.amz.service.IBizShipmentTrackingService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 物流追踪
* 前端访问路由地址为:/amz/shipmentTracking
*
* @author shuo hu
* @date 2025-04-03
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/shipmentTracking")
public class BizShipmentTrackingController extends BaseController {
private final IBizShipmentTrackingService bizShipmentTrackingService;
/**
* 查询物流追踪列表
*/
@SaCheckPermission("amz:shipmentTracking:list")
@GetMapping("/list")
public TableDataInfo<BizShipmentTrackingVo> list(BizShipmentTrackingBo bo, PageQuery pageQuery) {
return bizShipmentTrackingService.queryPageList(bo, pageQuery);
}
/**
* 导出物流追踪列表
*/
@SaCheckPermission("amz:shipmentTracking:export")
@Log(title = "物流追踪", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BizShipmentTrackingBo bo, HttpServletResponse response) {
List<BizShipmentTrackingVo> list = bizShipmentTrackingService.queryList(bo);
ExcelUtil.exportExcel(list, "物流追踪", BizShipmentTrackingVo.class, response);
}
/**
* 获取物流追踪详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:shipmentTracking:query")
@GetMapping("/{id}")
public R<BizShipmentTrackingVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(bizShipmentTrackingService.queryById(id));
}
/**
* 新增物流追踪
*/
@SaCheckPermission("amz:shipmentTracking:add")
@Log(title = "物流追踪", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BizShipmentTrackingBo bo) {
return toAjax(bizShipmentTrackingService.insertByBo(bo));
}
/**
* 修改物流追踪
*/
@SaCheckPermission("amz:shipmentTracking:edit")
@Log(title = "物流追踪", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BizShipmentTrackingBo bo) {
return toAjax(bizShipmentTrackingService.updateByBo(bo));
}
/**
* 删除物流追踪
*
* @param ids 主键串
*/
@SaCheckPermission("amz:shipmentTracking:remove")
@Log(title = "物流追踪", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(bizShipmentTrackingService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,250 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.asinkj.amz.api.RemoteFBADataService;
import org.asinkj.amz.service.LingxinCallback;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.SysAmazonStoreVo;
import org.asinkj.amz.domain.bo.SysAmazonStoreBo;
import org.asinkj.amz.service.ISysAmazonStoreService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
import javax.annotation.Resource;
/**
* 亚马逊店铺信息
* 前端访问路由地址为:/amz/amazonStore
*
* @author shuo hu
* @date 2025-03-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/amazonStore")
public class SysAmazonStoreController extends BaseController {
private final ISysAmazonStoreService sysAmazonStoreService;
/**
* 查询亚马逊店铺信息列表
*/
@SaCheckPermission("amz:amazonStore:list")
@GetMapping("/list")
public TableDataInfo<SysAmazonStoreVo> list(SysAmazonStoreBo bo, PageQuery pageQuery) {
return sysAmazonStoreService.queryPageList(bo, pageQuery);
}
/**
* 导出亚马逊店铺信息列表
*/
@SaCheckPermission("amz:amazonStore:export")
@Log(title = "亚马逊店铺信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SysAmazonStoreBo bo, HttpServletResponse response) {
List<SysAmazonStoreVo> list = sysAmazonStoreService.queryList(bo);
ExcelUtil.exportExcel(list, "亚马逊店铺信息", SysAmazonStoreVo.class, response);
}
/**
* 获取亚马逊店铺信息详细信息
*
* @param id 主键
*/
@SaCheckPermission("amz:amazonStore:query")
@GetMapping("/{id}")
public R<SysAmazonStoreVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(sysAmazonStoreService.queryById(id));
}
/**
* 新增亚马逊店铺信息
*/
@SaCheckPermission("amz:amazonStore:add")
@Log(title = "亚马逊店铺信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysAmazonStoreBo bo) {
return toAjax(sysAmazonStoreService.insertByBo(bo));
}
/**
* 修改亚马逊店铺信息
*/
@SaCheckPermission("amz:amazonStore:edit")
@Log(title = "亚马逊店铺信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysAmazonStoreBo bo) {
return toAjax(sysAmazonStoreService.updateByBo(bo));
}
/**
* 删除亚马逊店铺信息
*
* @param ids 主键串
*/
@SaCheckPermission("amz:amazonStore:remove")
@Log(title = "亚马逊店铺信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(sysAmazonStoreService.deleteWithValidByIds(List.of(ids), true));
}
/**
* 亚马逊api
*
*
*/
@SaCheckPermission("amz:amazonStore:remove")
@Log(title = "获取亚马逊店铺数据", businessType = BusinessType.OTHER)
@GetMapping("/amz-store")
public R<Void> getAmzApiToken() {
sysAmazonStoreService.collectAmzStoreData();
return R.ok();
}
/**
* 亚马逊api
*
*
*/
@SaCheckPermission("amz:amazonStore:remove")
@Log(title = "亚马逊FBA", businessType = BusinessType.OTHER)
@GetMapping("/amz-fba/{startDate}/{endDate}")
public R<Void> getAmzFbaToken(@PathVariable String startDate, @PathVariable String endDate) {
try {
sysAmazonStoreService.pullAmzFBAData(startDate,endDate);
} catch (Exception e) {
throw new RuntimeException(e);
}
return R.ok();
}
@SaCheckPermission("amz:amazonStore:remove")
@Log(title = "亚马逊STA", businessType = BusinessType.OTHER)
@GetMapping("/amz-sta/{startDate}/{endDate}")
public R<Void> getAmzStaToken(@PathVariable String startDate, @PathVariable String endDate) {
try {
sysAmazonStoreService.pullAmzStaData(startDate, endDate, new LingxinCallback() {
@Override
public void onFinished(String result, int status) {
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
return R.ok();
}
@GetMapping("/purchase/{startDate}/{endDate}")
public R<Void> pullPurchaseOrderData(@PathVariable String startDate, @PathVariable String endDate) {
try {
sysAmazonStoreService.pullPurchaseOrderData(startDate, endDate, new LingxinCallback() {
@Override
public void onFinished(String result, int status) {
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
return R.ok();
}
@GetMapping("/purchaseOut/{startDate}/{endDate}")
public R<Void> updatePurchaseOrderSeller(@PathVariable String startDate, @PathVariable String endDate) {
try {
sysAmazonStoreService.updatePurchaseOrderSeller(startDate, endDate, new LingxinCallback() {
@Override
public void onFinished(String result, int status) {
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
return R.ok();
}
/**
* 获取委外组合订单
* @param startDate
* @param endDate
* @return
*/
@GetMapping("/purchaseOrderOut/{startDate}/{endDate}")
public R<Void> updatePurchaseOrderOutSeller(@PathVariable String startDate, @PathVariable String endDate) {
try {
sysAmazonStoreService.pullPurchaseOutOrderData(startDate, endDate, new LingxinCallback() {
@Override
public void onFinished(String result, int status) {
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
return R.ok();
}
@SaCheckPermission("amz:amazonStore:remove")
@Log(title = "亚马逊FBAtest", businessType = BusinessType.OTHER)
@GetMapping("/test")
public R<Void> testAmzFbaToken() {
try {
sysAmazonStoreService.pullAmzBoxData2();
} catch (Exception e) {
throw new RuntimeException(e);
}
return R.ok();
}
@SaCheckPermission("amz:amazonStore:remove")
@Log(title = "亚马逊FBAtest", businessType = BusinessType.OTHER)
@GetMapping("/test2")
public R<Void> testAmzFbaToken2() {
try {
sysAmazonStoreService.testAmazonData2();
} catch (Exception e) {
throw new RuntimeException(e);
}
return R.ok();
}
@Resource
private RemoteFBADataService remoteFBADataService;
@GetMapping("/test3")
public R<Void> testRmaind() {
try {
remoteFBADataService.updateRemaind();
} catch (Exception e) {
throw new RuntimeException(e);
}
return R.ok();
}
}

View File

@ -0,0 +1,106 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.SysStatusHistoryVo;
import org.asinkj.amz.domain.bo.SysStatusHistoryBo;
import org.asinkj.amz.service.ISysStatusHistoryService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 状态历史
* 前端访问路由地址为:/amz/statusHistory
*
* @author shuo hu
* @date 2025-06-09
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/statusHistory")
public class SysStatusHistoryController extends BaseController {
private final ISysStatusHistoryService sysStatusHistoryService;
/**
* 查询状态历史列表
*/
@SaCheckPermission("amz:statusHistory:list")
@GetMapping("/list")
public TableDataInfo<SysStatusHistoryVo> list(SysStatusHistoryBo bo, PageQuery pageQuery) {
return sysStatusHistoryService.queryPageList(bo, pageQuery);
}
/**
* 导出状态历史列表
*/
@SaCheckPermission("amz:statusHistory:export")
@Log(title = "状态历史", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SysStatusHistoryBo bo, HttpServletResponse response) {
List<SysStatusHistoryVo> list = sysStatusHistoryService.queryList(bo);
ExcelUtil.exportExcel(list, "状态历史", SysStatusHistoryVo.class, response);
}
/**
* 获取状态历史详细信息
*
* @param historyId 主键
*/
@SaCheckPermission("amz:statusHistory:query")
@GetMapping("/{historyId}")
public R<SysStatusHistoryVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long historyId) {
return R.ok(sysStatusHistoryService.queryById(historyId));
}
/**
* 新增状态历史
*/
@SaCheckPermission("amz:statusHistory:add")
@Log(title = "状态历史", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysStatusHistoryBo bo) {
return toAjax(sysStatusHistoryService.insertByBo(bo));
}
/**
* 修改状态历史
*/
@SaCheckPermission("amz:statusHistory:edit")
@Log(title = "状态历史", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysStatusHistoryBo bo) {
return toAjax(sysStatusHistoryService.updateByBo(bo));
}
/**
* 删除状态历史
*
* @param historyIds 主键串
*/
@SaCheckPermission("amz:statusHistory:remove")
@Log(title = "状态历史", businessType = BusinessType.DELETE)
@DeleteMapping("/{historyIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] historyIds) {
return toAjax(sysStatusHistoryService.deleteWithValidByIds(List.of(historyIds), true));
}
}

View File

@ -0,0 +1,106 @@
package org.asinkj.amz.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.asinkj.common.idempotent.annotation.RepeatSubmit;
import org.asinkj.common.log.annotation.Log;
import org.asinkj.common.web.core.BaseController;
import org.asinkj.common.mybatis.core.page.PageQuery;
import org.asinkj.common.core.domain.R;
import org.asinkj.common.core.validate.AddGroup;
import org.asinkj.common.core.validate.EditGroup;
import org.asinkj.common.log.enums.BusinessType;
import org.asinkj.common.excel.utils.ExcelUtil;
import org.asinkj.amz.domain.vo.SysUserVo;
import org.asinkj.amz.domain.bo.SysUserBo;
import org.asinkj.amz.service.ISysUserService;
import org.asinkj.common.mybatis.core.page.TableDataInfo;
/**
* 用户信息
* 前端访问路由地址为:/amz/user
*
* @author shuo hu
* @date 2025-06-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/user")
public class SysUserController extends BaseController {
private final ISysUserService sysUserService;
/**
* 查询用户信息列表
*/
@SaCheckPermission("amz:user:list")
@GetMapping("/list")
public TableDataInfo<SysUserVo> list(SysUserBo bo, PageQuery pageQuery) {
return sysUserService.queryPageList(bo, pageQuery);
}
/**
* 导出用户信息列表
*/
@SaCheckPermission("amz:user:export")
@Log(title = "用户信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SysUserBo bo, HttpServletResponse response) {
List<SysUserVo> list = sysUserService.queryList(bo);
ExcelUtil.exportExcel(list, "用户信息", SysUserVo.class, response);
}
/**
* 获取用户信息详细信息
*
* @param userId 主键
*/
@SaCheckPermission("amz:user:query")
@GetMapping("/{userId}")
public R<SysUserVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long userId) {
return R.ok(sysUserService.queryById(userId));
}
/**
* 新增用户信息
*/
@SaCheckPermission("amz:user:add")
@Log(title = "用户信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysUserBo bo) {
return toAjax(sysUserService.insertByBo(bo));
}
/**
* 修改用户信息
*/
@SaCheckPermission("amz:user:edit")
@Log(title = "用户信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysUserBo bo) {
return toAjax(sysUserService.updateByBo(bo));
}
/**
* 删除用户信息
*
* @param userIds 主键串
*/
@SaCheckPermission("amz:user:remove")
@Log(title = "用户信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{userIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] userIds) {
return toAjax(sysUserService.deleteWithValidByIds(List.of(userIds), true));
}
}

View File

@ -0,0 +1,51 @@
package org.asinkj.amz.domain;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 物流询价屏蔽记录对象 biz_inquiry_blacklist
*
* @author shuo hu
* @date 2025-04-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_inquiry_blacklist")
public class BizInquiryBlacklist extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 自增主键ID
*/
private Long id;
/**
* 关联的询价单ID外键
*/
private Long inquiryId;
/**
* 物流商ID外键
*/
private Long providerId;
/**
* 屏蔽状态标识0=正常显示1=已屏蔽
*/
private String isBlocked;
/**
* 逻辑删除标记0=有效数据1=已删除
*/
@TableLogic
private String delFlag;
}

View File

@ -0,0 +1,118 @@
package org.asinkj.amz.domain;
import org.asinkj.asinking.entity.FbaShipmentApiResponse;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial;
/**
* 物流询价对象 biz_inquiry_request
*
* @author shuo hu
* @date 2025-03-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_inquiry_request")
public class BizInquiryRequest extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID自增序列
*/
private Long id;
/**
* 询价单号规则INQ+年月+6位序列
*/
private String inquiryNo;
/**
* 发起人id
*/
private Long requesterId;
/**
* 发起人名称
*/
private String requesterName;
/**
* 目标物流商ID列表JSON数组格式示例[101,202,303]
*/
private String targetProviders;
/**
* 目的地存储四级行政编码如CN310115
*/
private String destination;
/**
* 运输方式枚举值AIR-空运/SEA-海运/LAND-公路/RAIL-铁路
*/
private String transportChannel;
/**
* 询价状态状态机OPEN-开放中/CLOSED-已关闭/COMPLETED-已完成
*/
private String inquiryStatus;
/**
* 报价截止时间超过此时限自动关闭询价
*/
private LocalDateTime deadline;
/**
* $column.columnComment
*/
@TableLogic
private String delFlag;
/**
* 渠道IDsystem=dict_codecustom=自定义渠道ID
*/
private Long channelId;
/**
* 渠道名称
*/
private String channelName;
/**
* 报价有效的开始日期
*/
private Date effectiveStartTime;
/**
* 报价有效的结束日期
*/
private Date effectiveEndTime;
private String customsFlag;
/**
* 报价目标日期
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date quoteDate;
private FbaShipmentApiResponse.Address shipToAddress;
private String type;
private String shipmentId;
}

View File

@ -0,0 +1,66 @@
package org.asinkj.amz.domain;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 物流商渠道对象 biz_logistics_channel
*
* @author shuo hu
* @date 2025-03-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_logistics_channel")
public class BizLogisticsChannel extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 渠道ID
*/
private Long id;
/**
* 物流商用户ID关联sys_user
*/
private Long userId;
/**
* 渠道名称
*/
private String channelName;
/**
* 渠道描述
*/
private String description;
/**
* 删除标志0正常 2删除
*/
@TableLogic
private String delFlag;
/**
* 渠道类型system=系统/custom=自定义
*/
private String channelType;
/**
* 国家
*/
private String country;
/**
* 运输方式
*/
private String shippingMethod;
}

View File

@ -0,0 +1,51 @@
package org.asinkj.amz.domain;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 物流商自定义渠道对象 biz_logistics_custom_channel
*
* @author shuo hu
* @date 2025-03-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_logistics_channel")
public class BizLogisticsCustomChannel extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 渠道ID
*/
private Long id;
/**
* 物流商用户ID关联sys_user
*/
private Long userId;
/**
* 渠道名称
*/
private String channelName;
/**
* 渠道描述
*/
private String description;
/**
* 删除标志0正常 2删除
*/
@TableLogic
private String delFlag;
}

View File

@ -0,0 +1,104 @@
package org.asinkj.amz.domain;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
import java.util.List;
/**
* 物流订单对象 biz_logistics_order
*
* @author shuo hu
* @date 2025-03-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_logistics_order")
public class BizLogisticsOrder extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键应用层生成的全局唯一ID如雪花算法
*/
private Long id;
/**
* FBA货件编号亚马逊系统生成的唯一标识
*/
private String fbaShipmentId;
/**
* 订单编号应用层生成的唯一业务流水号
*/
private String orderId;
/**
* 物流商ID关联物流商信息表
*/
private Long logisticsProviderId;
/**
* 物流商名称冗余存储避免高频联表查询
*/
private String logisticsProviderName;
/**
* 物流渠道如空运/海运/快递等
*/
private String channelName;
/**
* 目的地仓库名称或编码
*/
private String destination;
/**
* 总箱子数量此订单包含的箱子总数
*/
private Long boxQuantity;
/**
* 总货件数量商品件数总和
*/
private Long shipmentQuantity;
/**
* 亚马逊仓库实际上架日期
*/
private Date amazonShelfDate;
/**
* 上架时效单位从发货到上架的总天数
*/
private Long shelfTimeliness;
/**
* 根据哪个报价单生成的报价单
*/
private Long quoteOrderId;
/**
* 删除标记0=正常1=删除
*/
@TableLogic
private String delFlag;
private String podUrl;
private String status;
@TableField(exist = false)
private List<BizLogisticsOrderDetail> details;
}

View File

@ -0,0 +1,191 @@
package org.asinkj.amz.domain;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 物流订单明细按箱子维度存储对象 biz_logistics_order_detail
*
* @author shuo hu
* @date 2025-03-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_logistics_order_detail")
public class BizLogisticsOrderDetail extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键应用层生成的全局唯一ID
*/
private Long id;
/**
* 关联主表IDbiz_logistics_order.id
*/
private String orderId;
/**
* FBA货件编号冗余存储避免联表查询
*/
private String fbaShipmentId;
/**
* FBA箱号亚马逊系统中箱子的唯一标识
*/
private String fbaBoxNumber;
/**
* 物流商ID冗余存储
*/
private Long logisticsProviderId;
/**
* 物流商名称冗余存储
*/
private String logisticsProviderName;
/**
* 物流渠道与主表一致
*/
private String channelName;
/**
* 目的地仓库冗余存储
*/
private String destination;
/**
* 计划数量该箱子预计装载的商品数量
*/
private Long plannedQuantity;
/**
* 实际货件数量该箱子实际装载的商品数量
*/
private Long shipmentQuantity;
/**
* 物流追踪号物流商提供的唯一包裹标识
*/
private String trackingNumber;
/**
* 供应商称重单位KG由供应商提供
*/
private Long supplierWeight;
/**
* 物流商计重单位KG物流商实际测量值
*/
private Long logisticsWeight;
/**
* 称重差异应用层计算物流商计重 - 供应商称重
*/
private Long weightDiff;
/**
* 物流单价单位/KG由合同或报价确定
*/
private Long pricePerKg;
/**
* 物流计价重量应用层根据业务规则计算
*/
private Long logisticsCalculationPrice;
/**
* 其他物流费用如报关费保险费等
*/
private Long otherFee;
/**
* 费用合计应用层计算物流计价 + 其他费用
*/
private Long totalFee;
/**
* 物流状态pending:待发运/in_transit:运输中/delivered:已签收
*/
private String logisticsStatus;
/**
* 预计签收日期物流商提供的预估日期
*/
private Date estimatedDeliveryDate;
/**
* 实际签收日期物流商回传的实际日期
*/
private Date actualDeliveryDate;
/**
* 运输时效单位实际签收日期 - 发货日期
*/
private Long timeliness;
/**
* 删除标记0=正常1=删除
*/
@TableLogic
private String delFlag;
/**
* 物流商确认接收时间
*/
private Date carrierConfirmTime;
/**
* 已提货时间
*/
private Date goodsReceiptTime;
/**
* 转运开始时间
*/
private Date transferStartTime;
/**
* 最终签收时间
*/
private Date signedTime;
/**
* 排仓时间
*/
private Date scheduleTime;
/**
* 船舶离港时间
*/
private Date vesselDepartTime;
/**
* 目的港到达时间
*/
private Date portArrivalTime;
/**
* 查验开始时间
*/
private Date inspectionTime;
/**
* 末端提取时间
*/
private Date deliveryPickupTime;
private Long quoteOrderId;
}

View File

@ -0,0 +1,84 @@
package org.asinkj.amz.domain;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 物流订单确认对象 biz_logistics_order_quotation
*
* @author shuo hu
* @date 2025-04-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_logistics_order_quotation")
public class BizLogisticsOrderQuotation extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键应用层生成的全局唯一ID如雪花算法
*/
private Long id;
/**
* FBA货件编号亚马逊系统生成的唯一标识
*/
private String fbaShipmentId;
/**
* 订单编号应用层生成的唯一业务流水号
*/
private String orderId;
/**
* 物流商ID关联物流商信息表
*/
private Long logisticsProviderId;
/**
* 物流商名称冗余存储避免高频联表查询
*/
private String logisticsProviderName;
/**
* 物流渠道如空运/海运/快递等
*/
private String channelName;
/**
* 目的地仓库名称或编码
*/
private String destination;
/**
* 总箱子数量此订单包含的箱子总数
*/
private Long boxQuantity;
/**
* 总货件数量商品件数总和
*/
private Long shipmentQuantity;
/**
* 删除标记0=正常1=删除
*/
@TableLogic
private String delFlag;
private String confirm;
/**
* 根据哪个报价单生成的订单
*/
private Long quoteOrderId;
}

View File

@ -0,0 +1,129 @@
package org.asinkj.amz.domain;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial;
/**
* 物流报价对象 biz_logistics_quote
*
* @author shuo hu
* @date 2025-03-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_logistics_quote")
public class BizLogisticsQuote extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private Long id;
/**
* 物流商用户ID关联sys_user表
*/
private Long userId;
/**
* 物流商
*/
private String logisticsName;
/**
* 目的地建议使用ISO国家代码如CN/US/GB
*/
private String destination;
/**
* 渠道名称冗余存储保证查询效率
*/
private String channelName;
/**
* 基础价格
*/
private BigDecimal price;
/**
* 时效单位
*/
private Long leadTime;
private Long minLeadTime;
/**
* 附加费
*/
private Long surcharge;
/**
* 报价生效日期
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date quoteDate;
/**
* 提交状态Y已提交 N未提交
*/
private String isSubmitted;
/**
* 报价备注
*/
private String remark;
/**
* 删除标志0正常 2删除
*/
@TableLogic
private String delFlag;
/**
* 渠道类型system=系统/custom=自定义
*/
private String channelType;
/**
* 渠道IDsystem=dict_codecustom=自定义渠道ID
*/
private Long channelId;
/**
* 是否双清包税N不是 Y是
*/
private String isDdp;
/**
* 单位
*/
private String unit;
private Long inquiryId;
private String customsFlag;
/**
* 后端物流类型
*/
private String backLogisticsType;
private String type;
private String shipmentId;
private BigDecimal totalPrice;
}

View File

@ -0,0 +1,100 @@
package org.asinkj.amz.domain;
import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMapping;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 采购订单明细对象 biz_order_out_item
*
* @author shuo hu
* @date 2025-07-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_order_out_item")
public class BizOrderOutItem extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
private String purchaseOrderSn;
/**
* 删除标志0正常 2删除
*/
@TableLogic
private String delFlag;
/**
* 明细项自增主键
*/
@TableId(value = "item_id", type = IdType.ASSIGN_ID)
private Long itemId;
/**
* 关联采购订单号 (外键)
*/
private String outOrderSn;
/**
* 产品名称
*/
private String productName;
/**
* SKU编码
*/
private String sku;
/**
* 采购需求数量
*/
private Long quantityRequire;
/**
* 业务创建时间 (Jackson格式: yyyy-MM-dd HH:mm:ss)
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@AutoMapping(dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date bizCreateTime;
/**
* 创建人姓名
*/
private String createRealname;
/**
* 预计到达时间
*/
private String expectArriveTime;
/**
* 仓库名称
*/
private String warehouseName;
/**
* 供应商名称
*/
private String supplierName;
/**
* 实际到货数量
*/
private Long quantityReal;
/**
* 已入库数量
*/
private Long quantityEntry;
}

View File

@ -0,0 +1,76 @@
package org.asinkj.amz.domain;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 产品装箱规格对象 biz_packing_specs
*
* @author shuo hu
* @date 2025-07-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_packing_specs")
public class BizPackingSpecs extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 规格ID主键
*/
private Long id;
/**
* 关联采购单明细项ID
*/
private Long sendOrderId;
/**
* 规格名称如规格A
*/
private String specName;
/**
* 箱数单位
*/
private Long cartonCount;
/**
* 每箱件数单位
*/
private Long piecesPerCarton;
/**
* 箱子长度单位厘米
*/
private Long length;
/**
* 箱子宽度单位厘米
*/
private Long width;
/**
* 箱子高度单位厘米
*/
private Long height;
/**
* 单箱重量单位千克
*/
private Long weight;
/**
* 删除标志0正常 2删除
*/
@TableLogic
private String delFlag;
}

View File

@ -0,0 +1,302 @@
package org.asinkj.amz.domain;
import io.github.linpeilie.annotations.AutoMapping;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 采购单主对象 biz_purchase_order
*
* @author shuo hu
* @date 2025-05-10
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_purchase_order")
public class BizPurchaseOrder extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 采购单号
*/
@TableId
private Long id;
private String orderSn;
/**
* 自定义单号
*/
private String customOrderSn;
/**
* 供应商ID
*/
private Long supplierId;
/**
* 供应商名称
*/
private String supplierName;
/**
* 采购员ID
*/
private Long optUid;
/**
* 审核人姓名
*/
private String auditorRealname;
/**
* 操作人姓名
*/
private String optRealname;
/**
* 最后操作人姓名
*/
private String lastRealname;
/**
* 下单时间
*/
@AutoMapping(dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date orderTime;
/**
* 应付货款手工
*/
private String payment;
/**
* 审核人员ID
*/
private Long auditorUid;
/**
* 审核时间
*/
@AutoMapping(dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date auditorTime;
/**
* 最后操作人员ID
*/
private Long lastUid;
/**
* 最后操作时间
*/
@AutoMapping(dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date lastTime;
/**
* 作废原因
*/
private String reason;
/**
* 是否含税0 1
*/
private Long isTax;
/**
* 采购单状态-1 作废, 3 待提交, 1 待下单, 2 待签收, 9 完成, 121 待审核, 122 驳回, 124 作废
*/
private Long status;
/**
* 状态说明
*/
private String statusText;
/**
* 支付状态说明
*/
private String payStatusText;
/**
* 到货状态1 未到货, 2 部分到货, 3 全部到货
*/
private Long statusShipped;
/**
* 到货状态说明
*/
private String statusShippedText;
/**
* 货物总价
*/
private Long amountTotal;
/**
* 总金额
*/
private Long totalPrice;
/**
* 币种符号
*/
private String icon;
/**
* 付款状态0 未申请, 1 已申请, 2 部分付款, 3 已付款
*/
private Long payStatus;
/**
* 备注
*/
private String remark;
/**
* 其他费用
*/
private Long otherFee;
/**
* 其他费用币种
*/
private String otherCurrency;
/**
* 费用分摊方式0 不分摊, 1 按金额, 2 按数量
*/
private Long feePartType;
/**
* 运费
*/
private Long shippingPrice;
/**
* 运费币种
*/
private String shippingCurrency;
/**
* 采购币种
*/
private String purchaseCurrency;
/**
* 采购汇率
*/
private Long purchaseRate;
/**
* 采购总量
*/
private Long quantityTotal;
/**
* 仓库ID
*/
private Long wid;
/**
* 仓库名称
*/
private String wareHouseName;
/**
* 仓库名(备份)
*/
private String wareHouseBakName;
/**
* 入库量
*/
private Long quantityEntry;
/**
* 实际采购量
*/
private Long quantityReal;
/**
* 待到货量
*/
private Long quantityReceive;
/**
* 采购方ID
*/
private Long purchaserId;
/**
* 联系人
*/
private String contactPerson;
/**
* 联系方式
*/
private String contactNumber;
/**
* 结算方式7 现结, 8 月结
*/
private Long settlementMethod;
/**
* 结算描述
*/
private String settlementDescription;
/**
* 支付方式
*/
private Long paymentMethod;
/**
* 删除标志0正常 2删除
*/
@TableLogic
private String delFlag;
/**
* 交货天数
*/
private Long estDlvDays;
/**
* 订单状态
*/
private String orderStatus;
/**
* 交货时间
*/
@AutoMapping(dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date deliveryTime;
/**
* 订单交付变动天数
*/
private Long dlvTimeVar;
@AutoMapping(dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date divTime;
private String storeName;
private String type;
}

View File

@ -0,0 +1,199 @@
package org.asinkj.amz.domain;
import io.github.linpeilie.annotations.AutoMapping;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
import java.util.List;
/**
* 供应商订单产品明细对象 biz_purchase_order_item
*
* @author shuo hu
* @date 2025-05-10
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_purchase_order_item")
public class BizPurchaseOrderItem extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 采购单子项ID
*/
@TableId
private Long id;
/**
* 关联采购单号
*/
private String orderSn;
/**
* 仓库ID
*/
private Long wid;
/**
* 仓库名称
*/
private String wareHouseName;
/**
* 采购计划号
*/
private String planSn;
/**
* 本地产品ID
*/
private Long productId;
/**
* 品名
*/
private String productName;
/**
* SKU
*/
private String sku;
/**
* FNSKU
*/
private String fnsku;
/**
* 店铺ID
*/
private Long sid;
/**
* 型号
*/
private String model;
/**
* 含税单价
*/
private Long price;
/**
* 价税合计
*/
private Long amount;
/**
* 计划采购量
*/
private Long quantityPlan;
/**
* 实际采购量
*/
private Long quantityReal;
/**
* 到货入库量
*/
private Long quantityEntry;
/**
* 待到货量
*/
private Long quantityReceive;
/**
* 退货数
*/
private Long quantityReturn;
/**
* 换货量
*/
private Long quantityExchange;
/**
* 质检量
*/
private Long quantityQc;
/**
* 待质检量
*/
private Long quantityQcPrepare;
/**
* 期待到货时间
*/
@AutoMapping(dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date expectArriveTime;
/**
* 备注
*/
private String remark;
/**
* 箱数
*/
private Long casesNum;
/**
* 单箱数量
*/
private Long quantityPerCase;
/**
* 是否删除0 1
*/
private Long isDelete;
/**
* 税率
*/
private String taxRate;
/**
* SPU
*/
private String spu;
/**
* 款名
*/
private String spuName;
@AutoMapping(dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date confirmTime;
private Long confirmBy;
private String confirmOpenId;
/**
* 删除标志0正常 2删除
*/
@TableLogic
private String delFlag;
private Long sfgAvlQty;
private String orderStatus;
}

View File

@ -0,0 +1,121 @@
package org.asinkj.amz.domain;
import io.github.linpeilie.annotations.AutoMapping;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 组合订单对象 biz_purchase_out_order
*
* @author shuo hu
* @date 2025-07-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_purchase_out_order")
public class BizPurchaseOutOrder extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 删除标志0正常 2删除
*/
@TableLogic
private String delFlag;
/**
* 订单唯一编号
*/
private String orderSn;
/**
* 仓库名称
*/
private String warehouseName;
/**
* 外包仓库名称
*/
private String outsourceWarehouseName;
/**
* 供应商名称
*/
private String supplierName;
/**
* 业务创建时间 (Jackson格式: yyyy-MM-dd HH:mm:ss)
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@AutoMapping(dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date bizCreateTime;
/**
* 状态文本描述
*/
private String statusText;
/**
* 创建人姓名
*/
private String createRealname;
/**
* PTP流水号
*/
private String ptpSn;
/**
* 产品名称
*/
private String productName;
/**
* 标准SKU编码
*/
private String sku;
/**
* FNSKU编码
*/
private String fnsku;
/**
* 外包数量
*/
private Long outsourceQuantity;
/**
* 实收数量
*/
private Long receiveQuantity;
/**
* 预计到达时间
*/
private String expectArriveTime;
/**
* MSKU编码列表 (数组存储)
*/
private String msku;
/**
* 关联计划单号列表 (数组存储)
*/
private String planSn;
/**
* 销售商名称
*/
private String sellerName;
}

View File

@ -0,0 +1,119 @@
package org.asinkj.amz.domain;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 供应商创建的发货单对象 biz_send_order
*
* @author shuo hu
* @date 2025-05-14
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_send_order")
public class BizSendOrder extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId
private Long id;
/**
* 删除标志0正常 2删除
*/
@TableLogic
private String delFlag;
/**
* 采购单号
*/
private String orderSn;
private Long orderDetailId;
/**
* 发货日期
*/
private Date sendDate;
/**
* 采购店铺
*/
private String storeName;
/**
* 产品名称
*/
private String productName;
/**
* 发货数量
*/
private Long quantitySend;
/**
* 单箱产品数量
*/
private Long quantityPerBox;
/**
* 箱数
*/
private Long boxCount;
/**
* 箱子尺寸
*/
private String boxDimensions;
/**
* 单箱重量
*/
private Long weightPerBox;
/**
* 实际采购店铺
*/
private String realStoreName;
/**
* 发货状态pending=未发货confirm=确认发货, processing=发货中completed=发货完成
*/
private String sendStatus;
private Long sendId;
private String sendName;
private String sendDetail;
private String logisticsProviderName;
private Long logisticsProviderId;
private String shipmentId;
@TableField(exist = false)
private String shipmentIdKey;
private String type;
private String createName;
}

View File

@ -0,0 +1,66 @@
package org.asinkj.amz.domain;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 供应商创建的发货单明细对象 biz_send_order_item
*
* @author shuo hu
* @date 2025-07-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_send_order_item")
public class BizSendOrderItem extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private Long id;
/**
* 删除标志0正常 2删除
*/
@TableLogic
private String delFlag;
/**
* 采购单号
*/
private String orderSn;
/**
* 发货日期
*/
private Date sendDate;
/**
* 发货日期
*/
private String storeName;
/**
* 发货日期
*/
private String productName;
private String sku;
/**
* 发货日期
*/
private Long quantitySend;
private Long mainOrderSn;
}

View File

@ -0,0 +1,40 @@
package org.asinkj.amz.domain;
import org.asinkj.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 发货单与货运计划多对多关联对象 biz_send_shipment_rel
*
* @author shuo hu
* @date 2025-06-20
*/
@Data
//@EqualsAndHashCode(callSuper = true)
@TableName("biz_send_shipment_rel")
public class BizSendShipmentRel {
@Serial
private static final long serialVersionUID = 1L;
/**
* $column.columnComment
*/
private Long id;
/**
* 发货单ID
*/
private Long sendOrderId;
/**
* 货运计划ID
*/
private Long shipmentPlanId;
}

View File

@ -0,0 +1,140 @@
package org.asinkj.amz.domain;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 货件转发对象 biz_ship_forward
*
* @author shuo hu
* @date 2025-05-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_ship_forward")
public class BizShipForward extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* $column.columnComment
*/
private Long id;
/**
* 采购单号
*/
private String orderSn;
private String inOrderSn;
/**
* 采购店铺名称
*/
private String storeName;
/**
* 产品唯一标识码
*/
private String sku;
/**
* 产品全称
*/
private String productName;
/**
* 实际发货数量
*/
private Long quantitySend;
/**
* 发货供应商名称
*/
private String outSupplierName;
/**
* 发货供应商系统ID
*/
private Long outSupplierId;
/**
* 收货供应商名称
*/
private String inSupplierName;
/**
* 收货供应商系统ID
*/
private Long inSupplierId;
/**
* 计划发货起始时间
*/
private Date shipmentStart;
/**
* 计划发货截止时间
*/
private Date shipmentEnd;
/**
* 订单跟进人姓名
*/
private String trackerName;
/**
* 订单跟进人系统ID
*/
private Long trackerId;
/**
* 软删除标记0-正常2-删除
*/
@TableLogic
private String delFlag;
/**
* 转发状态pending=未转发processing=转发中completed=转发完成
*/
private String fwdStatus;
/**
* 发货时间
*/
private Date sendTime;
/**
* 采购单子项ID
*/
private Long orderDetailId;
/**
* 预计到达时间
*/
private Date expDeliveryDate;
/**
* 实际到达日期
*/
private Date deliveryDate;
/**
* 箱数
*/
private Long boxNum;
private Long totalPrice;
}

View File

@ -0,0 +1,90 @@
package org.asinkj.amz.domain;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 货品明细对象 biz_shipment_item
*
* @author shuo hu
* @date 2025-03-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_shipment_item")
public class BizShipmentItem extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private Long id;
/**
* 关联货件ID
*/
private String shipmentId;
/**
* 商家SKU
*/
private String msku;
/**
* 仓储编码
*/
private String fnsku;
/**
* 发货量
*/
private Long quantityShipped;
/**
* 收货量
*/
private Long quantityReceived;
/**
* 预处理说明
*/
private String prepInstruction;
/**
* 责任方
*/
private String prepOwner;
/**
* 商品SKU
*/
private String sku;
/**
* 品名
*/
private String productName;
private String asin;
/**
* 有效期
*/
private Date expiration;
/**
* $column.columnComment
*/
@TableLogic
private String delFlag;
}

View File

@ -0,0 +1,198 @@
package org.asinkj.amz.domain;
import org.asinkj.amz.hanlder.AddressTypeHandler;
import org.asinkj.asinking.entity.FbaShipmentApiResponse;
import org.asinkj.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
import java.io.Serial;
/**
* 货件计划对象 biz_shipment_plan
*
* @author shuo hu
* @date 2025-03-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_shipment_plan")
public class BizShipmentPlan extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private Long id;
/**
* 关联系统ID
*/
private Long sid;
/**
* 货件编号
*/
private String shipmentId;
/**
* 货件唯一编号
*/
private String shipmentUniqueId;
/**
* 货件名称
*/
private String shipmentName;
/**
* 是否关闭
*/
private String isClosed;
/**
* 货件状态
*/
private String shipmentStatus;
/**
* 物流中心编码
*/
private String destination;
/**
* 运输模式
*/
private String shippingMode;
/**
* 运输方案
*/
private String shippingSolution;
/**
* 最后更新时间
*/
private Date gmtModified;
/**
* 创建时间
*/
private Date gmtCreate;
/**
* 同步时间
*/
private Date receivingTime;
/**
* 计划发货日期
*/
private Date staShipmentDate;
/**
* 预计到货开始日
*/
private Date staDeliveryStartDate;
/**
* 预计到货截止日
*/
private Date staDeliveryEndDate;
/**
* 发货地址
*/
@TableField(typeHandler = AddressTypeHandler.class)
private FbaShipmentApiResponse.Address shipFromAddress;
/**
* 收货地址
*/
@TableField(typeHandler = AddressTypeHandler.class)
private FbaShipmentApiResponse.Address shipToAddress;
/**
* 参考编号
*/
private String referenceId;
/**
* 入库计划ID
*/
private String staInboundPlanId;
/**
* 是否STA计划
*/
private String isSta;
/**
* 运营操作货件状态
*/
private String fbaStatus;
/**
* 总箱子数量
*/
private Long boxQuantity;
/**
* 箱子尺寸
*/
private String boxSize;
/**
* 供应商称重
*/
private Long vendorWeight;
/**
* 套数系统中的申报量
*/
private Long setTotal;
/**
* 渠道ID
*/
private Long channelId;
/**
* 物流渠道
*/
private String channelName;
/**
* 删除标记
*/
@TableLogic
private String delFlag;
/**
* sta 计划ID
*/
private String inboundPlanId;
/**
* 供应商发货单id
*/
private Long sendOrderId;
@TableField(exist = false)
private String logisticsProviderName;
@TableField(exist = false)
private String address;
private Long itemCount;
}

View File

@ -0,0 +1,63 @@
package org.asinkj.amz.domain;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.asinkj.amz.hanlder.AddressTypeHandler;
import org.asinkj.asinking.entity.FbaShipmentApiResponse;
import org.asinkj.common.tenant.core.TenantEntity;
import java.io.Serial;
import java.util.Date;
/**
* 货件计划对象 biz_shipment_plan
*
* @author shuo hu
* @date 2025-03-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_shipment_plan")
public class BizShipmentPlanFileData extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 货件编号
*/
@ExcelProperty(value = "货件编号")
private String shipmentId;
/**
* 总箱子数量
*/
@ExcelProperty(value = "总箱子数量")
private Long boxQuantity;
/**
* 箱子尺寸
*/
@ExcelProperty(value = "箱子尺寸")
private String boxSize;
/**
* 总的物流商计重单位KG物流商实际测量值
*/
@ExcelProperty(value = "总的物流商计重")
private Long vendorWeight;
/**
* 套数系统中的申报量
*/
@ExcelProperty(value = "套数")
private Long setTotal;
}

Some files were not shown because too many files have changed in this diff Show More