diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b2e6077
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,70 @@
+######################################################################
+# Build Tools
+
+.gradle
+/build/
+!gradle/wrapper/gradle-wrapper.jar
+
+ecerp-api/target/
+framework/**/target
+!.mvn/wrapper/maven-wrapper.jar
+
+######################################################################
+# IDE
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+.vscode
+
+### JRebel ###
+rebel.xml
+
+### NetBeans ###
+nbproject/private/
+build/*
+nbbuild/
+dist/
+nbdist/
+.nb-gradle/
+
+######################################################################
+# Others
+*.log
+*.xml.versionsBackup
+*.swp
+
+!*/build/*.java
+!*/build/*.html
+!*/build/*.xml
+=======
+# Build and Release Folders
+bin-debug/
+bin-release/
+[Oo]bj/
+#[Bb]in/
+logs
+
+# Other files and folders
+.settings/
+
+# Executables
+*.swf
+*.air
+*.ipa
+*.apk
+
+# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
+# should NOT be excluded as they contain compiler settings and other important
+# information for Eclipse / Flash Builder.
+bak/
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..7ff67eb
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 启航
+
+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.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..30a369c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,224 @@
+# 启航电商ERP系统
+
+
+启航电商ERP系统是一套为中小电商企业构建的一套简单、实用、覆盖全流程的电商系统,本项目采用Java SpringBoot3+Vue2前后端分离开发。
+
+
+
+支持供应商一件代发和仓库发货两种发货方式,功能覆盖采购、网店订单处理、供应商一件代发、仓库发货、网店售后、网店商品管理、仓库出入库、采购结算、代发结算等功能,基本上覆盖了电商日常业务。
+
+支持的电商平台有:淘宝、京东、拼多多、抖店、视频号小店、快手、小红书。
+
+
+
+## 项目介绍
+**启航电商ERP可以说是我这五年以来的工作经验成果。**
+
+公司从2019年踏入电商以来,一直都是由我组建和带领一帮技术人员从零开始建设了一套完全适应公司业务需要的电商ERP系统,包括WMS仓库系统、OMS订单处理系统、财务系统、直播运营系统等子系统组成。主要功能模块包括:采购模块、出入库模块、订单发货模块、网店订单管理模块、电子面单打印模块。公司ERP对接了批批网、1688、蘑菇街、淘宝天猫、拼多多、抖店、快手小店平台。
+
+### 技术栈
++ Java17
++ SpringBoot3
++ Redis
++ Nacos
++ MyBatis-Plus
++ MySQL8
+
+
+### 公司应用场景一:抖店直播
+
+
+```mermaid
+graph TD
+A[早上7点开播] -->B(10点结束直播-一般是500单左右)
+ B --> C[使用ERP系统打单-对接平台电子面单接口]
+ C --> E(库存核对)
+ E --> F[库存不足]
+ F --> F1(采购补货)
+ F1 --> G1
+ E --> G(库存充足)
+ G --> G1[打印订单]
+ G1 --> G5(推送快递单号到平台)
+ G1 --> G2(生成备货单)
+ G2 --> G3(仓库人员备货出库)
+ G3 --> H(完成)
+ G5 --> H
+```
+
+
+## 一、功能模块
+### 供应链管理
++ 供应商管理:管理供应商信息
++ 采购订单管理:管理采购流程,包括供应商选择、采购订单生成、采购合同管理等。
++ 采购账单管理
++ 采购退货管理
++ 采购物流管理:跟踪采购订单物流信息。
++ 供应商代发管理:管理一件代发订单。
++ 代发账单管理
+
+**采购流程**
+
+```mermaid
+graph LR
+A[创建采购订单] -->B(审核)
+ B --> C[供应商确认]
+ C --> E[供应商发货]
+ E --> F1(生成物流信息)
+ F1 --> G1[确认收货]
+ G1 --> G3[生成入库单]
+ G3 --> G4(入库)
+ G1 --> G2[生成财务应付及明细]
+ G4 --> H(完成)
+ G2 --> H
+
+```
+
+### 订单管理
++ 订单管理:所有导入的订单统一管理,
+ + 查询、管理所有店铺审核过的订单。
++ 创建订单:手动创建订单。
++ 店铺订单导入:处理和管理多平台原始订单。
+ + 支持淘宝、京东、拼多多、抖店、微信视频号小店、快手小店、小红书平台订单接口;
+ + 审核订单,审核之后订单到统一订单库;
+ + 更新订单,更新订单信息和状态
+
+
+### 发货管理
++ 备货清单:展示需要发货的订单明细
+ + 生成出库单
++ 拣货出库:拣货出库、生成出库单减库存;
++ 打包发货:记录包裹信息、物流发货、同步发货状态;
++ 物流跟踪:跟踪发货快递物流;
++ 供应商代发管理:管理供应商代发的订单
+
+**订单发货流程**
+```mermaid
+graph TD
+A[网店拉取订单] -->B(审核订单)
+ B --> C[订单库]
+ C --> C1[备货清单中展示需要发货的订单]
+ C1 --> D[仓库发货-生成出库单]
+ C1 --> E[分配供应商发货]
+ D --> F(拣货出库)
+ F --> F1[出库]
+ E --> H(打包发货-记录包裹信息)
+ F1 --> H
+ H --> G(推送发货信息-记录包裹信息-生成发货费用-物流费和代发费)
+ G --> I(完成)
+```
+
+**仓库发货流程**
+```mermaid
+graph TD
+A[查询备货清单] -->B(生成拣货单)
+ B --> C[拣货出库]
+ C --> E(减库存)
+ E --> F[打包发货]
+ F --> F1(记录包裹信息)
+ F1 --> G(填写物流信息)
+ G --> G1[同步发货状态]
+ G1 --> H(完成)
+ G --> G2[生成物流费用账单]
+ G2 --> H
+
+```
+
+### 售后管理
+对退货、换货、维修等售后处理进行管理,包括退款审核、退货入库、退款处理等环节。
++ 店铺售后管理:处理和管理多平台售后包括录入售后数据、退货入库、换货处理等。
+ + 支持拼多多、抖店、快手小店、小红书平台售后接口;
+ + 支持手动录入、备注;
++ 退货处理:数据录入、仓库收货确认、库存处理等。
++ 换货处理:数据录入、仓库收货确认、仓库发货、库存处理等。
+
+**退货退款流程**
+```mermaid
+graph LR
+A[录入退款退货] -->B(仅退款)
+ B --> H(完成)
+ A --> D(退货退款)
+ D --> E[仓库收货]
+ E --> F[退货入库处理]
+ F --> H
+```
+
+**售后流程**
+```mermaid
+graph LR
+A[录入售后] -->B(补发商品)
+ B --> H[仓库出库-记录]
+ A --> D(换货)
+ D --> E[仓库收货-入库]
+ E --> H
+ H --> F(完成)
+```
+**订单拦截**
+```mermaid
+graph LR
+A[录入拦截] -->B(通知仓库)
+ B --> H1[未发货-直接入库]
+ B --> D(已发货)
+ D --> E[通知消费者拒收]
+ E --> H[消费者拒收]
+ H --> C[退回入库]
+ C --> F(退款给消费者)
+ F --> G[完成]
+ H1 --> G
+```
+### 店铺管理
++ 店铺商品管理
+ + 淘宝商品管理:同步淘宝店铺商品,关联到ERP商品(用于仓库发货处理);
+ + 多多商品管理:同步多多店铺商品,关联到ERP商品(用于仓库发货处理);
+ + 抖店商品管理:同步抖店店铺商品,关联到ERP商品(用于仓库发货处理);
+ + 京东、视频号、快手、小红书同上
++ 店铺管理:网店管理、API参数设置;
++ 平台参数设置
+
+### 库存管理
+
++ 入库管理
++ 出库管理
++ 库存查询:跟踪和管理库存,包括批次管理、库存盘点、库存调整、库存预警等。
++ 库位管理
+
+
+### 商品管理
+商品信息、分类信息、属性信息等管理。
+
+
+## 二、部署说明
+
+**项目采用SpringBoot+vue2开发。具体使用方法如下**
+
+
+
+#### 2.1 配置启动MySQL
+
++ 创建数据库`qihang-erp`并导入sql脚本`docs\qihang-erp.sql`
+
+
+
+#### 2.3 启动Redis
+项目开发采用Redis7
+
+#### 2.4 启动Nacos
+项目开发采用Nacos2.2.0
+
+
+#### 2.3 启动后端api
++ 修改`api`项目中的配置文件`application.yml`配置`Nacos`相关。
++ Nacos新建dataId:`ecerp-dev`配置项,配置内容在`docs\NacosConfig\ecerp-dev.txt`文件中。
++ IDE启动项目
+
+
+#### 2.4 启动前端 `vue`
++ `npm install`
++ `npm run dev`
++ 打包`npm run build:prod`
++ 访问web
+ + 访问地址:`http://localhost`
+ + 登录名:`admin`
+ + 登录密码:`admin123`
+
+
+
diff --git a/api/.gitignore b/api/.gitignore
new file mode 100644
index 0000000..5ff6309
--- /dev/null
+++ b/api/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/api/Dockerfile b/api/Dockerfile
new file mode 100644
index 0000000..1c292c6
--- /dev/null
+++ b/api/Dockerfile
@@ -0,0 +1,7 @@
+FROM openjdk:17-jdk-slim
+
+WORKDIR /app
+
+COPY ecerp-api-0.2.0.jar .
+
+CMD ["java", "-jar", "ecerp-api-0.2.0.jar"]
\ No newline at end of file
diff --git a/api/pom.xml b/api/pom.xml
new file mode 100644
index 0000000..7270edb
--- /dev/null
+++ b/api/pom.xml
@@ -0,0 +1,193 @@
+
+ 4.0.0
+
+ cn.qihangerp
+ qihangerp
+ 2.0.1
+
+ api
+ jar
+ 2.0.1
+
+ api
+ http://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-undertow
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.5.3.1
+
+
+
+
+
+
+
+
+
+
+
+
+ mysql
+ mysql-connector-java
+ ${mysql.version}
+
+
+
+ com.alibaba.boot
+ nacos-config-spring-boot-starter
+ 0.2.12
+
+
+
+ io.minio
+ minio
+ 8.5.7
+
+
+ org.projectlombok
+ lombok
+ 1.18.30
+ provided
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.aspectj
+ aspectjweaver
+ 1.9.20
+ runtime
+
+
+
+
+
+
+
+
+
+ io.netty
+ netty-all
+ 4.1.109.Final
+
+
+
+
+ cn.qihangerp
+ system
+ 2.0.1
+
+
+
+ cn.qihangerp.api
+ tao-api
+ 2.0.1
+
+
+ cn.qihangerp.api
+ jd-api
+ 2.0.2
+
+
+ cn.qihangerp.api
+ pdd-api
+ 2.0.2
+
+
+ cn.qihangerp.api
+ dou-api
+ 2.0.2
+
+
+ cn.qihangerp.api
+ wei-api
+ 2.0.2
+
+
+ cn.qihangerp.api
+ kwai-api
+ 0.4.28
+
+
+ cn.qihangerp.api
+ xhs-api
+ 2.0.2
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ cn.qihangerp.api.ApiApplication
+ true
+
+
+
+
+ repackage
+
+
+
+
+
+
+
+
+
diff --git a/api/src/main/java/cn/qihangerp/api/ApiApplication.java b/api/src/main/java/cn/qihangerp/api/ApiApplication.java
new file mode 100644
index 0000000..dab95e5
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/ApiApplication.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api;
+
+
+//import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
+import lombok.extern.java.Log;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ * 启动程序
+ *
+ * @author qihang
+ */
+// @ComponentScan("com.zhijian")
+@Log
+//@NacosPropertySource(dataId = "ecerp-dev.yaml", autoRefreshed = true)
+//@EnableTransactionManagement
+//@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+@ComponentScan("cn.qihangerp")
+@SpringBootApplication
+public class ApiApplication {
+ public static void main(String[] args) {
+ // System.setProperty("spring.devtools.restart.enabled", "false");
+ SpringApplication.run(ApiApplication.class, args);
+
+ log.info("启航电商ERP系统启动成功 \n" +
+ " ____ _____ _ _ _ _ _____ ______ _____ _____ \n" +
+ " / __ \\ |_ _|| | | | /\\ | \\ | | / ____|| ____|| __ \\ | __ \\ \n" +
+ " | | | | | | | |__| | / \\ | \\| || | __ | |__ | |__) || |__) |\n" +
+ " | | | | | | | __ | / /\\ \\ | . ` || | |_ || __| | _ / | ___/ \n" +
+ " | |__| | _| |_ | | | | / ____ \\ | |\\ || |__| || |____ | | \\ \\ | | \n" +
+ " \\___\\_\\|_____||_| |_|/_/ \\_\\|_| \\_| \\_____||______||_| \\_\\|_| \n");
+ // System.out.println("启航电商ERP系统启动成功 \n" +
+ // " ____ _____ _ _ _ _ _____ ______ _____ _____ \n" +
+ // " / __ \\ |_ _|| | | | /\\ | \\ | | / ____|| ____|| __ \\ | __ \\ \n" +
+ // " | | | | | | | |__| | / \\ | \\| || | __ | |__ | |__) || |__) |\n" +
+ // " | | | | | | | __ | / /\\ \\ | . ` || | |_ || __| | _ / | ___/ \n" +
+ // " | |__| | _| |_ | | | | / ____ \\ | |\\ || |__| || |____ | | \\ \\ | | \n" +
+ // " \\___\\_\\|_____||_| |_|/_/ \\_\\|_| \\_| \\_____||______||_| \\_\\|_|
+ // \n");
+
+ // System.out.println("(♥◠‿◠)ノ゙ 启航电商ERP系统启动成功 ლ(´ڡ`ლ)゙ \n" +
+ // " .-------. ____ __ \n" +
+ // " | _ _ \\ \\ \\ / / \n" +
+ // " | ( ' ) | \\ _. / ' \n" +
+ // " |(_ o _) / _( )_ .' \n" +
+ // " | (_,_).' __ ___(_ o _)' \n" +
+ // " | |\\ \\ | || |(_,_)' \n" +
+ // " | | \\ `' /| `-' / \n" +
+ // " | | \\ / \\ / \n" +
+ // " ''-' `'-' `-..-' ");
+ }
+
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/MyBatisConfig.java b/api/src/main/java/cn/qihangerp/api/MyBatisConfig.java
new file mode 100644
index 0000000..c2a0643
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/MyBatisConfig.java
@@ -0,0 +1,27 @@
+//package cn.qihangerp.api;
+//
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+//import org.springframework.transaction.PlatformTransactionManager;
+//import org.springframework.transaction.annotation.EnableTransactionManagement;
+//
+//import javax.sql.DataSource;
+//
+//@Configuration
+//@EnableTransactionManagement
+//public class MyBatisConfig {
+//
+// private final DataSource dataSource;
+//
+// public MyBatisConfig(DataSource dataSource) {
+// this.dataSource = dataSource;
+// }
+//
+// @Bean
+// public PlatformTransactionManager transactionManager() {
+// return new DataSourceTransactionManager(dataSource);
+// }
+//}
+//
+//
diff --git a/api/src/main/java/cn/qihangerp/api/MybatisPlusConfig.java b/api/src/main/java/cn/qihangerp/api/MybatisPlusConfig.java
new file mode 100644
index 0000000..f001c85
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/MybatisPlusConfig.java
@@ -0,0 +1,19 @@
+package cn.qihangerp.api;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@MapperScan(basePackages = {"cn.qihangerp.api.mapper","cn.qihangerp.system.mapper", "cn.qihangerp.open.tao.mapper","cn.qihangerp.api.pdd.mapper","cn.qihangerp.api.dou.mapper","cn.qihangerp.api.xhs.mapper","cn.qihangerp.api.wei.mapper","cn.qihangerp.api.jd.mapper"})
+@Configuration
+public class MybatisPlusConfig {
+ @Bean
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+ return interceptor;
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/common/EnumResultVo.java b/api/src/main/java/cn/qihangerp/api/common/EnumResultVo.java
new file mode 100644
index 0000000..002aff5
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/common/EnumResultVo.java
@@ -0,0 +1,63 @@
+//package cn.qihangerp.api.common;
+///**
+// * 描述:
+// * 结果枚举
+// *
+// * @author qlp
+// * @date 2019-04-10 10:31
+// */
+//public enum EnumResultVo {
+// SUCCESS("成功", 0),
+// NotFound("NotFound", 404),//没有找到
+// Unable("Unable", 403),//无法处理
+// NotLogin("未登录", 400),//未登录
+// Cancelled("Cancelled", 401),//已经取消的
+// StateError("StateError", 402),//状态错误
+// Locking("Locking", 405),//锁定,不能操作
+// NumberLess("数量不足", 406),
+// StatusError("状态不正确", 407),
+// DataError("DataError", 500),//数据错误,不能操作
+// DataExist("DataExist", 800),//数据已存在,不能操作
+// ParamsError("参数错误", 505),//参数错误
+// HasAssociatedData("存在关联数据", 501),//存在关联数据
+// Exist("已存在相同的数据", 502),//已存在相同的数据
+// SystemException("系统异常", 505),//系统异常
+// TokenFail("token过期", 1401),//ali token过期
+// Fail("失败", 1000);
+//
+// private String name;
+// private int index;
+//
+// // 构造方法
+// private EnumResultVo(String name, int index) {
+// this.name = name;
+// this.index = index;
+// }
+//
+// // 普通方法
+// public static String getName(int index) {
+// for (EnumResultVo c : EnumResultVo.values()) {
+// if (c.getIndex() == index) {
+// return c.name;
+// }
+// }
+// return null;
+// }
+//
+// // get set 方法
+// public String getName() {
+// return name;
+// }
+//
+// public void setName(String name) {
+// this.name = name;
+// }
+//
+// public int getIndex() {
+// return index;
+// }
+//
+// public void setIndex(int index) {
+// this.index = index;
+// }
+//}
diff --git a/api/src/main/java/cn/qihangerp/api/common/PageReq.java b/api/src/main/java/cn/qihangerp/api/common/PageReq.java
new file mode 100644
index 0000000..0d7ccc1
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/common/PageReq.java
@@ -0,0 +1,9 @@
+package cn.qihangerp.api.common;
+
+import lombok.Data;
+
+@Data
+public class PageReq {
+ private Integer currentPage;
+ private Integer pageSize;
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/AfterSaleController.java b/api/src/main/java/cn/qihangerp/api/controller/AfterSaleController.java
new file mode 100644
index 0000000..5329610
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/AfterSaleController.java
@@ -0,0 +1,91 @@
+package cn.qihangerp.api.controller;
+
+import cn.qihangerp.api.domain.ErpSaleAfterInfo;
+import cn.qihangerp.api.service.ErpSaleAfterInfoService;
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.core.page.TableDataInfo;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+
+@AllArgsConstructor
+@RestController
+@RequestMapping("/afterSale")
+public class AfterSaleController extends BaseController {
+ private final ErpSaleAfterInfoService afterInfoService;
+ /**
+ * 查询列表
+ */
+ @GetMapping("/ship_again_list")
+ public TableDataInfo ship_again_list(ErpSaleAfterInfo bo, PageQuery pageQuery)
+ {
+ bo.setType(80);
+ PageResult result = afterInfoService.queryPageList(bo, pageQuery);
+ return getDataTable(result);
+ }
+
+ @PostMapping("/shipAgain")
+ public AjaxResult shipAgainAdd(@RequestBody ErpSaleAfterInfo addBo)
+ {
+ addBo.setType(80);
+ addBo.setCreateTime(new Date());
+ addBo.setCreateBy("手动添加");
+ addBo.setStatus(1);
+ var result = afterInfoService.save(addBo);
+ return toAjax(result);
+ }
+
+ @PutMapping("/shipAgain/complete/{id}")
+ public AjaxResult completeShipAgain(@PathVariable Long id)
+ {
+ ErpSaleAfterInfo complete = new ErpSaleAfterInfo();
+ complete.setId(id.toString());
+ complete.setStatus(2);
+ complete.setUpdateTime(new Date());
+ complete.setUpdateBy("手动完成");
+ afterInfoService.updateById(complete);
+ return toAjax(1);
+ }
+
+
+ @GetMapping("/returned_list")
+ public TableDataInfo returned_list(ErpSaleAfterInfo bo, PageQuery pageQuery)
+ {
+ bo.setType(10);
+ PageResult result = afterInfoService.queryPageList(bo, pageQuery);
+ return getDataTable(result);
+ }
+
+ @GetMapping("/exchange_list")
+ public TableDataInfo exchange_list(ErpSaleAfterInfo bo, PageQuery pageQuery)
+ {
+ bo.setType(20);
+ PageResult result = afterInfoService.queryPageList(bo, pageQuery);
+ return getDataTable(result);
+ }
+
+ @PostMapping("/exchange")
+ public AjaxResult exchangeAdd(@RequestBody ErpSaleAfterInfo addBo)
+ {
+ addBo.setType(20);
+ addBo.setCreateTime(new Date());
+ addBo.setCreateBy("手动添加");
+ addBo.setStatus(1);
+ var result = afterInfoService.save(addBo);
+ return toAjax(result);
+ }
+
+ @GetMapping("/intercept_list")
+ public TableDataInfo intercept_list(ErpSaleAfterInfo bo, PageQuery pageQuery)
+ {
+ bo.setType(99);
+ PageResult result = afterInfoService.queryPageList(bo, pageQuery);
+ return getDataTable(result);
+ }
+
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsBrandController.java b/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsBrandController.java
new file mode 100644
index 0000000..7a2b151
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsBrandController.java
@@ -0,0 +1,104 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.ErpGoodsBrand;
+import cn.qihangerp.api.service.IErpGoodsBrandService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 商品品牌Controller
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@RestController
+@RequestMapping("/goods/brand")
+public class ErpGoodsBrandController extends BaseController
+{
+ @Autowired
+ private IErpGoodsBrandService erpGoodsBrandService;
+
+ /**
+ * 查询商品品牌列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:brand:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ErpGoodsBrand erpGoodsBrand)
+ {
+ startPage();
+ List list = erpGoodsBrandService.selectErpGoodsBrandList(erpGoodsBrand);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出商品品牌列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:brand:export')")
+ @Log(title = "商品品牌", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ErpGoodsBrand erpGoodsBrand)
+ {
+ List list = erpGoodsBrandService.selectErpGoodsBrandList(erpGoodsBrand);
+ ExcelUtil util = new ExcelUtil(ErpGoodsBrand.class);
+ util.exportExcel(response, list, "商品品牌数据");
+ }
+
+ /**
+ * 获取商品品牌详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('goods:brand:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(erpGoodsBrandService.selectErpGoodsBrandById(id));
+ }
+
+ /**
+ * 新增商品品牌
+ */
+ @PreAuthorize("@ss.hasPermi('goods:brand:add')")
+ @Log(title = "商品品牌", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody ErpGoodsBrand erpGoodsBrand)
+ {
+ return toAjax(erpGoodsBrandService.insertErpGoodsBrand(erpGoodsBrand));
+ }
+
+ /**
+ * 修改商品品牌
+ */
+ @PreAuthorize("@ss.hasPermi('goods:brand:edit')")
+ @Log(title = "商品品牌", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody ErpGoodsBrand erpGoodsBrand)
+ {
+ return toAjax(erpGoodsBrandService.updateErpGoodsBrand(erpGoodsBrand));
+ }
+
+ /**
+ * 删除商品品牌
+ */
+ @PreAuthorize("@ss.hasPermi('goods:brand:remove')")
+ @Log(title = "商品品牌", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(erpGoodsBrandService.deleteErpGoodsBrandByIds(ids));
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsCategoryAttributeController.java b/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsCategoryAttributeController.java
new file mode 100644
index 0000000..52d476a
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsCategoryAttributeController.java
@@ -0,0 +1,104 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.ErpGoodsCategoryAttribute;
+import cn.qihangerp.api.service.IErpGoodsCategoryAttributeService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 商品分类属性Controller
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@RestController
+@RequestMapping("/goods/categoryAttribute")
+public class ErpGoodsCategoryAttributeController extends BaseController
+{
+ @Autowired
+ private IErpGoodsCategoryAttributeService erpGoodsCategoryAttributeService;
+
+ /**
+ * 查询商品分类属性列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:categoryAttribute:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ErpGoodsCategoryAttribute erpGoodsCategoryAttribute)
+ {
+ startPage();
+ List list = erpGoodsCategoryAttributeService.selectErpGoodsCategoryAttributeList(erpGoodsCategoryAttribute);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出商品分类属性列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:categoryAttribute:export')")
+ @Log(title = "商品分类属性", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ErpGoodsCategoryAttribute erpGoodsCategoryAttribute)
+ {
+ List list = erpGoodsCategoryAttributeService.selectErpGoodsCategoryAttributeList(erpGoodsCategoryAttribute);
+ ExcelUtil util = new ExcelUtil(ErpGoodsCategoryAttribute.class);
+ util.exportExcel(response, list, "商品分类属性数据");
+ }
+
+ /**
+ * 获取商品分类属性详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('goods:categoryAttribute:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(erpGoodsCategoryAttributeService.selectErpGoodsCategoryAttributeById(id));
+ }
+
+ /**
+ * 新增商品分类属性
+ */
+ @PreAuthorize("@ss.hasPermi('goods:categoryAttribute:add')")
+ @Log(title = "商品分类属性", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody ErpGoodsCategoryAttribute erpGoodsCategoryAttribute)
+ {
+ return toAjax(erpGoodsCategoryAttributeService.insertErpGoodsCategoryAttribute(erpGoodsCategoryAttribute));
+ }
+
+ /**
+ * 修改商品分类属性
+ */
+ @PreAuthorize("@ss.hasPermi('goods:categoryAttribute:edit')")
+ @Log(title = "商品分类属性", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody ErpGoodsCategoryAttribute erpGoodsCategoryAttribute)
+ {
+ return toAjax(erpGoodsCategoryAttributeService.updateErpGoodsCategoryAttribute(erpGoodsCategoryAttribute));
+ }
+
+ /**
+ * 删除商品分类属性
+ */
+ @PreAuthorize("@ss.hasPermi('goods:categoryAttribute:remove')")
+ @Log(title = "商品分类属性", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(erpGoodsCategoryAttributeService.deleteErpGoodsCategoryAttributeByIds(ids));
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsCategoryAttributeValueController.java b/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsCategoryAttributeValueController.java
new file mode 100644
index 0000000..41a2408
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsCategoryAttributeValueController.java
@@ -0,0 +1,104 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.ErpGoodsCategoryAttributeValue;
+import cn.qihangerp.api.service.IErpGoodsCategoryAttributeValueService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 商品分类属性值Controller
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@RestController
+@RequestMapping("/goods/categoryAttributeValue")
+public class ErpGoodsCategoryAttributeValueController extends BaseController
+{
+ @Autowired
+ private IErpGoodsCategoryAttributeValueService erpGoodsCategoryAttributeValueService;
+
+ /**
+ * 查询商品分类属性值列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:categoryAttributeValue:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ErpGoodsCategoryAttributeValue erpGoodsCategoryAttributeValue)
+ {
+ startPage();
+ List list = erpGoodsCategoryAttributeValueService.selectErpGoodsCategoryAttributeValueList(erpGoodsCategoryAttributeValue);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出商品分类属性值列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:categoryAttributeValue:export')")
+ @Log(title = "商品分类属性值", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ErpGoodsCategoryAttributeValue erpGoodsCategoryAttributeValue)
+ {
+ List list = erpGoodsCategoryAttributeValueService.selectErpGoodsCategoryAttributeValueList(erpGoodsCategoryAttributeValue);
+ ExcelUtil util = new ExcelUtil(ErpGoodsCategoryAttributeValue.class);
+ util.exportExcel(response, list, "商品分类属性值数据");
+ }
+
+ /**
+ * 获取商品分类属性值详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('goods:categoryAttributeValue:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(erpGoodsCategoryAttributeValueService.selectErpGoodsCategoryAttributeValueById(id));
+ }
+
+ /**
+ * 新增商品分类属性值
+ */
+ @PreAuthorize("@ss.hasPermi('goods:categoryAttributeValue:add')")
+ @Log(title = "商品分类属性值", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody ErpGoodsCategoryAttributeValue erpGoodsCategoryAttributeValue)
+ {
+ return toAjax(erpGoodsCategoryAttributeValueService.insertErpGoodsCategoryAttributeValue(erpGoodsCategoryAttributeValue));
+ }
+
+ /**
+ * 修改商品分类属性值
+ */
+ @PreAuthorize("@ss.hasPermi('goods:categoryAttributeValue:edit')")
+ @Log(title = "商品分类属性值", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody ErpGoodsCategoryAttributeValue erpGoodsCategoryAttributeValue)
+ {
+ return toAjax(erpGoodsCategoryAttributeValueService.updateErpGoodsCategoryAttributeValue(erpGoodsCategoryAttributeValue));
+ }
+
+ /**
+ * 删除商品分类属性值
+ */
+ @PreAuthorize("@ss.hasPermi('goods:categoryAttributeValue:remove')")
+ @Log(title = "商品分类属性值", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(erpGoodsCategoryAttributeValueService.deleteErpGoodsCategoryAttributeValueByIds(ids));
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsCategoryController.java b/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsCategoryController.java
new file mode 100644
index 0000000..cab32ea
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsCategoryController.java
@@ -0,0 +1,104 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.ErpGoodsCategory;
+import cn.qihangerp.api.service.IErpGoodsCategoryService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 商品分类Controller
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@RestController
+@RequestMapping("/goods/category")
+public class ErpGoodsCategoryController extends BaseController
+{
+ @Autowired
+ private IErpGoodsCategoryService erpGoodsCategoryService;
+
+ /**
+ * 查询商品分类列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:category:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ErpGoodsCategory erpGoodsCategory)
+ {
+// startPage();
+ List list = erpGoodsCategoryService.selectErpGoodsCategoryList(erpGoodsCategory);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出商品分类列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:category:export')")
+ @Log(title = "商品分类", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ErpGoodsCategory erpGoodsCategory)
+ {
+ List list = erpGoodsCategoryService.selectErpGoodsCategoryList(erpGoodsCategory);
+ ExcelUtil util = new ExcelUtil(ErpGoodsCategory.class);
+ util.exportExcel(response, list, "商品分类数据");
+ }
+
+ /**
+ * 获取商品分类详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('goods:category:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(erpGoodsCategoryService.selectErpGoodsCategoryById(id));
+ }
+
+ /**
+ * 新增商品分类
+ */
+ @PreAuthorize("@ss.hasPermi('goods:category:add')")
+ @Log(title = "商品分类", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody ErpGoodsCategory erpGoodsCategory)
+ {
+ return toAjax(erpGoodsCategoryService.insertErpGoodsCategory(erpGoodsCategory));
+ }
+
+ /**
+ * 修改商品分类
+ */
+ @PreAuthorize("@ss.hasPermi('goods:category:edit')")
+ @Log(title = "商品分类", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody ErpGoodsCategory erpGoodsCategory)
+ {
+ return toAjax(erpGoodsCategoryService.updateErpGoodsCategory(erpGoodsCategory));
+ }
+
+ /**
+ * 删除商品分类
+ */
+ @PreAuthorize("@ss.hasPermi('goods:category:remove')")
+ @Log(title = "商品分类", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(erpGoodsCategoryService.deleteErpGoodsCategoryByIds(ids));
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsInventoryController.java b/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsInventoryController.java
new file mode 100644
index 0000000..a3d8f23
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ErpGoodsInventoryController.java
@@ -0,0 +1,101 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.ErpGoodsInventory;
+import cn.qihangerp.api.service.IErpGoodsInventoryService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 商品库存Controller
+ *
+ * @author qihang
+ * @date 2024-01-09
+ */
+@RestController
+@RequestMapping("/api/goodsInventory")
+public class ErpGoodsInventoryController extends BaseController
+{
+ @Autowired
+ private IErpGoodsInventoryService erpGoodsInventoryService;
+
+ /**
+ * 查询商品库存列表
+ */
+ @PreAuthorize("@ss.hasPermi('api:goodsInventory:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ErpGoodsInventory erpGoodsInventory)
+ {
+ startPage();
+ List list = erpGoodsInventoryService.selectErpGoodsInventoryList(erpGoodsInventory);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出商品库存列表
+ */
+ @PreAuthorize("@ss.hasPermi('api:goodsInventory:export')")
+ @Log(title = "商品库存", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ErpGoodsInventory erpGoodsInventory)
+ {
+ List list = erpGoodsInventoryService.selectErpGoodsInventoryList(erpGoodsInventory);
+ ExcelUtil util = new ExcelUtil(ErpGoodsInventory.class);
+ util.exportExcel(response, list, "商品库存数据");
+ }
+
+ /**
+ * 获取商品库存详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('api:goodsInventory:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(erpGoodsInventoryService.selectErpGoodsInventoryById(id));
+ }
+
+// /**
+// * 新增商品库存
+// */
+// @PreAuthorize("@ss.hasPermi('api:goodsInventory:add')")
+// @Log(title = "商品库存", businessType = BusinessType.INSERT)
+// @PostMapping
+// public AjaxResult add(@RequestBody ErpGoodsInventory erpGoodsInventory)
+// {
+// return toAjax(erpGoodsInventoryService.insertErpGoodsInventory(erpGoodsInventory));
+// }
+//
+// /**
+// * 修改商品库存
+// */
+// @PreAuthorize("@ss.hasPermi('api:goodsInventory:edit')")
+// @Log(title = "商品库存", businessType = BusinessType.UPDATE)
+// @PutMapping
+// public AjaxResult edit(@RequestBody ErpGoodsInventory erpGoodsInventory)
+// {
+// return toAjax(erpGoodsInventoryService.updateErpGoodsInventory(erpGoodsInventory));
+// }
+
+// /**
+// * 删除商品库存
+// */
+// @PreAuthorize("@ss.hasPermi('api:goodsInventory:remove')")
+// @Log(title = "商品库存", businessType = BusinessType.DELETE)
+// @DeleteMapping("/{ids}")
+// public AjaxResult remove(@PathVariable Long[] ids)
+// {
+// return toAjax(erpGoodsInventoryService.deleteErpGoodsInventoryByIds(ids));
+// }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ErpOrderController.java b/api/src/main/java/cn/qihangerp/api/controller/ErpOrderController.java
new file mode 100644
index 0000000..2470130
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ErpOrderController.java
@@ -0,0 +1,105 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+
+import cn.qihangerp.domain.ErpOrder;
+import cn.qihangerp.api.service.IErpOrderService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 店铺订单Controller
+ *
+ * @author qihang
+ * @date 2023-12-31
+ */
+@RestController
+@RequestMapping("/api/order")
+public class ErpOrderController extends BaseController
+{
+ @Autowired
+ private IErpOrderService orderService;
+
+ /**
+ * 查询店铺订单列表
+ */
+ @PreAuthorize("@ss.hasPermi('shop:order:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ErpOrder order)
+ {
+ startPage();
+ List list = orderService.selectErpOrderList(order);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出店铺订单列表
+ */
+ @PreAuthorize("@ss.hasPermi('shop:order:export')")
+ @Log(title = "店铺订单", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ErpOrder order)
+ {
+ List list = orderService.selectErpOrderList(order);
+ ExcelUtil util = new ExcelUtil(ErpOrder.class);
+ util.exportExcel(response, list, "店铺订单数据");
+ }
+
+ /**
+ * 获取店铺订单详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('shop:order:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(orderService.selectErpOrderById(id));
+ }
+
+ /**
+ * 新增店铺订单
+ */
+ @PreAuthorize("@ss.hasPermi('shop:order:add')")
+ @Log(title = "店铺订单", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody ErpOrder order)
+ {
+ if(order.getGoodsAmount()==null)return new AjaxResult(1503,"请填写商品价格!");
+ order.setCreateBy(getUsername());
+ int result = orderService.insertErpOrder(order);
+ if(result == -1) return new AjaxResult(501,"订单号已存在!");
+ if(result == -2) return new AjaxResult(502,"请添加订单商品!");
+ if(result == -3) return new AjaxResult(503,"请选择订单商品规格!");
+ return toAjax(result);
+ }
+
+ /**
+ * 订单发货(发货操作移到erpShipOrder中)
+ * @param order
+ * @return
+ */
+// @Log(title = "店铺订单", businessType = BusinessType.UPDATE)
+// @PostMapping("/ship")
+// public AjaxResult ship(@RequestBody ErpOrder order)
+// {
+// order.setUpdateBy(getUsername());
+// int result = orderService.shipErpOrder(order);
+// if(result == -1) return new AjaxResult(501,"订单不存在!");
+// else if(result == -2) return new AjaxResult(502,"订单状态不对!无法发货!");
+// else if(result == -3) return new AjaxResult(502,"订单发货状态不对!无法发货!");
+// return toAjax(result);
+// }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ErpOrderRefundController.java b/api/src/main/java/cn/qihangerp/api/controller/ErpOrderRefundController.java
new file mode 100644
index 0000000..7a9fd48
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ErpOrderRefundController.java
@@ -0,0 +1,26 @@
+package cn.qihangerp.api.controller;
+
+import cn.qihangerp.api.domain.bo.RefundBo;
+import cn.qihangerp.api.service.ErpSaleAfterRefundService;
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.core.page.TableDataInfo;
+import cn.qihangerp.domain.ErpSaleAfterRefund;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+@AllArgsConstructor
+@RestController
+@RequestMapping("/api/refund")
+public class ErpOrderRefundController extends BaseController {
+ private final ErpSaleAfterRefundService refundService;
+ @GetMapping("/list")
+ public TableDataInfo list(RefundBo bo, PageQuery pageQuery) throws IOException, InterruptedException {
+ PageResult result = refundService.queryPageList(bo, pageQuery);
+ return getDataTable(result);
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ErpShipLogisticsController.java b/api/src/main/java/cn/qihangerp/api/controller/ErpShipLogisticsController.java
new file mode 100644
index 0000000..248d0c7
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ErpShipLogisticsController.java
@@ -0,0 +1,104 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.ErpShipLogistics;
+import cn.qihangerp.api.service.ErpShipLogisticsService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 物流公司Controller
+ *
+ * @author qihang
+ * @date 2024-01-12
+ */
+@RestController
+@RequestMapping("/api/logistics")
+public class ErpShipLogisticsController extends BaseController
+{
+ @Autowired
+ private ErpShipLogisticsService bLogisticsCompanyService;
+
+ /**
+ * 查询物流公司列表
+ */
+ @PreAuthorize("@ss.hasPermi('api:logistics:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ErpShipLogistics bLogisticsCompany)
+ {
+ startPage();
+ List list = bLogisticsCompanyService.selectBLogisticsCompanyList(bLogisticsCompany);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出物流公司列表
+ */
+ @PreAuthorize("@ss.hasPermi('api:logistics:export')")
+ @Log(title = "物流公司", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ErpShipLogistics bLogisticsCompany)
+ {
+ List list = bLogisticsCompanyService.selectBLogisticsCompanyList(bLogisticsCompany);
+ ExcelUtil util = new ExcelUtil(ErpShipLogistics.class);
+ util.exportExcel(response, list, "物流公司数据");
+ }
+
+ /**
+ * 获取物流公司详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('api:logistics:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(bLogisticsCompanyService.selectBLogisticsCompanyById(id));
+ }
+
+ /**
+ * 新增物流公司
+ */
+ @PreAuthorize("@ss.hasPermi('api:logistics:add')")
+ @Log(title = "物流公司", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody ErpShipLogistics bLogisticsCompany)
+ {
+ return toAjax(bLogisticsCompanyService.insertBLogisticsCompany(bLogisticsCompany));
+ }
+
+ /**
+ * 修改物流公司
+ */
+ @PreAuthorize("@ss.hasPermi('api:logistics:edit')")
+ @Log(title = "物流公司", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody ErpShipLogistics bLogisticsCompany)
+ {
+ return toAjax(bLogisticsCompanyService.updateBLogisticsCompany(bLogisticsCompany));
+ }
+
+ /**
+ * 删除物流公司
+ */
+ @PreAuthorize("@ss.hasPermi('api:logistics:remove')")
+ @Log(title = "物流公司", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(bLogisticsCompanyService.deleteBLogisticsCompanyByIds(ids));
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/FmsInventoryReportController.java b/api/src/main/java/cn/qihangerp/api/controller/FmsInventoryReportController.java
new file mode 100644
index 0000000..170a96b
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/FmsInventoryReportController.java
@@ -0,0 +1,104 @@
+//package cn.qihangerp.api.controller;
+//
+//import java.util.List;
+//import javax.servlet.http.HttpServletResponse;
+//import org.springframework.security.access.prepost.PreAuthorize;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.web.bind.annotation.GetMapping;
+//import org.springframework.web.bind.annotation.PostMapping;
+//import org.springframework.web.bind.annotation.PutMapping;
+//import org.springframework.web.bind.annotation.DeleteMapping;
+//import org.springframework.web.bind.annotation.PathVariable;
+//import org.springframework.web.bind.annotation.RequestBody;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RestController;
+//import com.qihang.common.annotation.Log;
+//import com.qihang.core.controller.BaseController;
+//import com.qihang.core.domain.AjaxResult;
+//import com.qihang.common.enums.BusinessType;
+//import cn.qihangerp.api.domain.FmsInventoryReport;
+//import cn.qihangerp.api.service.IFmsInventoryReportService;
+//import com.qihang.common.utils.poi.ExcelUtil;
+//import com.qihang.core.page.TableDataInfo;
+//
+///**
+// * 库存存货报Controller
+// *
+// * @author qihang
+// * @date 2024-01-28
+// */
+//@RestController
+//@RequestMapping("/fms/inventoryReport")
+//public class FmsInventoryReportController extends BaseController
+//{
+// @Autowired
+// private IFmsInventoryReportService fmsInventoryReportService;
+//
+// /**
+// * 查询库存存货报列表
+// */
+// @PreAuthorize("@ss.hasPermi('fms:inventoryReport:list')")
+// @GetMapping("/list")
+// public TableDataInfo list(FmsInventoryReport fmsInventoryReport)
+// {
+// startPage();
+// List list = fmsInventoryReportService.selectFmsInventoryReportList(fmsInventoryReport);
+// return getDataTable(list);
+// }
+//
+// /**
+// * 导出库存存货报列表
+// */
+// @PreAuthorize("@ss.hasPermi('fms:inventoryReport:export')")
+// @Log(title = "库存存货报", businessType = BusinessType.EXPORT)
+// @PostMapping("/export")
+// public void export(HttpServletResponse response, FmsInventoryReport fmsInventoryReport)
+// {
+// List list = fmsInventoryReportService.selectFmsInventoryReportList(fmsInventoryReport);
+// ExcelUtil util = new ExcelUtil(FmsInventoryReport.class);
+// util.exportExcel(response, list, "库存存货报数据");
+// }
+//
+// /**
+// * 获取库存存货报详细信息
+// */
+// @PreAuthorize("@ss.hasPermi('fms:inventoryReport:query')")
+// @GetMapping(value = "/{id}")
+// public AjaxResult getInfo(@PathVariable("id") Long id)
+// {
+// return success(fmsInventoryReportService.selectFmsInventoryReportById(id));
+// }
+//
+// /**
+// * 新增库存存货报
+// */
+// @PreAuthorize("@ss.hasPermi('fms:inventoryReport:add')")
+// @Log(title = "库存存货报", businessType = BusinessType.INSERT)
+// @PostMapping
+// public AjaxResult add(@RequestBody FmsInventoryReport fmsInventoryReport)
+// {
+// return toAjax(fmsInventoryReportService.insertFmsInventoryReport(fmsInventoryReport));
+// }
+//
+// /**
+// * 修改库存存货报
+// */
+// @PreAuthorize("@ss.hasPermi('fms:inventoryReport:edit')")
+// @Log(title = "库存存货报", businessType = BusinessType.UPDATE)
+// @PutMapping
+// public AjaxResult edit(@RequestBody FmsInventoryReport fmsInventoryReport)
+// {
+// return toAjax(fmsInventoryReportService.updateFmsInventoryReport(fmsInventoryReport));
+// }
+//
+// /**
+// * 删除库存存货报
+// */
+// @PreAuthorize("@ss.hasPermi('fms:inventoryReport:remove')")
+// @Log(title = "库存存货报", businessType = BusinessType.DELETE)
+// @DeleteMapping("/{ids}")
+// public AjaxResult remove(@PathVariable Long[] ids)
+// {
+// return toAjax(fmsInventoryReportService.deleteFmsInventoryReportByIds(ids));
+// }
+//}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/FmsPayablePurchaseController.java b/api/src/main/java/cn/qihangerp/api/controller/FmsPayablePurchaseController.java
new file mode 100644
index 0000000..d81a87f
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/FmsPayablePurchaseController.java
@@ -0,0 +1,103 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.ScmPurchaseOrderPayable;
+import cn.qihangerp.api.service.IScmPurchaseOrderPayableService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 财务管理-应付款-采购货款Controller
+ *
+ * @author qihang
+ * @date 2024-01-28
+ */
+@RestController
+@RequestMapping("/fms/payablePurchase")
+public class FmsPayablePurchaseController extends BaseController
+{
+ @Autowired
+ private IScmPurchaseOrderPayableService fmsPayablePurchaseService;
+
+ /**
+ * 查询财务管理-应付款-采购货款列表
+ */
+ @PreAuthorize("@ss.hasPermi('fms:payablePurchase:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ScmPurchaseOrderPayable fmsPayablePurchase)
+ {
+ startPage();
+ List list = fmsPayablePurchaseService.selectFmsPayablePurchaseList(fmsPayablePurchase);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出财务管理-应付款-采购货款列表
+ */
+ @PreAuthorize("@ss.hasPermi('fms:payablePurchase:export')")
+ @Log(title = "财务管理-应付款-采购货款", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ScmPurchaseOrderPayable fmsPayablePurchase)
+ {
+ List list = fmsPayablePurchaseService.selectFmsPayablePurchaseList(fmsPayablePurchase);
+ ExcelUtil util = new ExcelUtil(ScmPurchaseOrderPayable.class);
+ util.exportExcel(response, list, "财务管理-应付款-采购货款数据");
+ }
+
+ /**
+ * 获取财务管理-应付款-采购货款详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('fms:payablePurchase:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(fmsPayablePurchaseService.selectFmsPayablePurchaseById(id));
+ }
+
+ /**
+ * 新增财务管理-应付款-采购货款
+ */
+// @PreAuthorize("@ss.hasPermi('fms:payablePurchase:add')")
+// @Log(title = "财务管理-应付款-采购货款", businessType = BusinessType.INSERT)
+// @PostMapping
+// public AjaxResult add(@RequestBody FmsPayablePurchase fmsPayablePurchase)
+// {
+// return toAjax(fmsPayablePurchaseService.insertFmsPayablePurchase(fmsPayablePurchase));
+// }
+
+ /**
+ * 修改财务管理-应付款-采购货款
+ */
+ @PreAuthorize("@ss.hasPermi('fms:payablePurchase:edit')")
+ @Log(title = "财务管理-应付款-采购货款", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody ScmPurchaseOrderPayable fmsPayablePurchase)
+ {
+ return toAjax(fmsPayablePurchaseService.updateFmsPayablePurchase(fmsPayablePurchase));
+ }
+
+ /**
+ * 删除财务管理-应付款-采购货款
+ */
+// @PreAuthorize("@ss.hasPermi('fms:payablePurchase:remove')")
+// @Log(title = "财务管理-应付款-采购货款", businessType = BusinessType.DELETE)
+// @DeleteMapping("/{ids}")
+// public AjaxResult remove(@PathVariable Long[] ids)
+// {
+// return toAjax(fmsPayablePurchaseService.deleteFmsPayablePurchaseByIds(ids));
+// }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/FmsReceivableOrderController.java b/api/src/main/java/cn/qihangerp/api/controller/FmsReceivableOrderController.java
new file mode 100644
index 0000000..9f663f4
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/FmsReceivableOrderController.java
@@ -0,0 +1,104 @@
+//package cn.qihangerp.api.controller;
+//
+//import java.util.List;
+//import javax.servlet.http.HttpServletResponse;
+//import org.springframework.security.access.prepost.PreAuthorize;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.web.bind.annotation.GetMapping;
+//import org.springframework.web.bind.annotation.PostMapping;
+//import org.springframework.web.bind.annotation.PutMapping;
+//import org.springframework.web.bind.annotation.DeleteMapping;
+//import org.springframework.web.bind.annotation.PathVariable;
+//import org.springframework.web.bind.annotation.RequestBody;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RestController;
+//import com.qihang.common.annotation.Log;
+//import com.qihang.core.controller.BaseController;
+//import com.qihang.core.domain.AjaxResult;
+//import com.qihang.common.enums.BusinessType;
+//import cn.qihangerp.api.domain.FmsReceivableOrder;
+//import cn.qihangerp.api.service.IFmsReceivableOrderService;
+//import com.qihang.common.utils.poi.ExcelUtil;
+//import com.qihang.core.page.TableDataInfo;
+//
+///**
+// * 财务管理-应收款-订单收入Controller
+// *
+// * @author qihang
+// * @date 2024-01-28
+// */
+//@RestController
+//@RequestMapping("/fms/receivableOrder")
+//public class FmsReceivableOrderController extends BaseController
+//{
+// @Autowired
+// private IFmsReceivableOrderService fmsReceivableOrderService;
+//
+// /**
+// * 查询财务管理-应收款-订单收入列表
+// */
+// @PreAuthorize("@ss.hasPermi('fms:receivableOrder:list')")
+// @GetMapping("/list")
+// public TableDataInfo list(FmsReceivableOrder fmsReceivableOrder)
+// {
+// startPage();
+// List list = fmsReceivableOrderService.selectFmsReceivableOrderList(fmsReceivableOrder);
+// return getDataTable(list);
+// }
+//
+// /**
+// * 导出财务管理-应收款-订单收入列表
+// */
+// @PreAuthorize("@ss.hasPermi('fms:receivableOrder:export')")
+// @Log(title = "财务管理-应收款-订单收入", businessType = BusinessType.EXPORT)
+// @PostMapping("/export")
+// public void export(HttpServletResponse response, FmsReceivableOrder fmsReceivableOrder)
+// {
+// List list = fmsReceivableOrderService.selectFmsReceivableOrderList(fmsReceivableOrder);
+// ExcelUtil util = new ExcelUtil(FmsReceivableOrder.class);
+// util.exportExcel(response, list, "财务管理-应收款-订单收入数据");
+// }
+//
+// /**
+// * 获取财务管理-应收款-订单收入详细信息
+// */
+// @PreAuthorize("@ss.hasPermi('fms:receivableOrder:query')")
+// @GetMapping(value = "/{id}")
+// public AjaxResult getInfo(@PathVariable("id") Long id)
+// {
+// return success(fmsReceivableOrderService.selectFmsReceivableOrderById(id));
+// }
+//
+// /**
+// * 新增财务管理-应收款-订单收入
+// */
+// @PreAuthorize("@ss.hasPermi('fms:receivableOrder:add')")
+// @Log(title = "财务管理-应收款-订单收入", businessType = BusinessType.INSERT)
+// @PostMapping
+// public AjaxResult add(@RequestBody FmsReceivableOrder fmsReceivableOrder)
+// {
+// return toAjax(fmsReceivableOrderService.insertFmsReceivableOrder(fmsReceivableOrder));
+// }
+//
+// /**
+// * 修改财务管理-应收款-订单收入
+// */
+// @PreAuthorize("@ss.hasPermi('fms:receivableOrder:edit')")
+// @Log(title = "财务管理-应收款-订单收入", businessType = BusinessType.UPDATE)
+// @PutMapping
+// public AjaxResult edit(@RequestBody FmsReceivableOrder fmsReceivableOrder)
+// {
+// return toAjax(fmsReceivableOrderService.updateFmsReceivableOrder(fmsReceivableOrder));
+// }
+//
+// /**
+// * 删除财务管理-应收款-订单收入
+// */
+// @PreAuthorize("@ss.hasPermi('fms:receivableOrder:remove')")
+// @Log(title = "财务管理-应收款-订单收入", businessType = BusinessType.DELETE)
+// @DeleteMapping("/{ids}")
+// public AjaxResult remove(@PathVariable Long[] ids)
+// {
+// return toAjax(fmsReceivableOrderService.deleteFmsReceivableOrderByIds(ids));
+// }
+//}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/GoodsAttributeConfigController.java b/api/src/main/java/cn/qihangerp/api/controller/GoodsAttributeConfigController.java
new file mode 100644
index 0000000..7df816e
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/GoodsAttributeConfigController.java
@@ -0,0 +1,104 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.GoodsAttributeConfig;
+import cn.qihangerp.api.service.IGoodsAttributeConfigService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 商品属性配置Controller
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@RestController
+@RequestMapping("/goods/goodsAttributeConfig")
+public class GoodsAttributeConfigController extends BaseController
+{
+ @Autowired
+ private IGoodsAttributeConfigService goodsAttributeConfigService;
+
+ /**
+ * 查询商品属性配置列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsAttributeConfig:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(GoodsAttributeConfig goodsAttributeConfig)
+ {
+ startPage();
+ List list = goodsAttributeConfigService.selectGoodsAttributeConfigList(goodsAttributeConfig);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出商品属性配置列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsAttributeConfig:export')")
+ @Log(title = "商品属性配置", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, GoodsAttributeConfig goodsAttributeConfig)
+ {
+ List list = goodsAttributeConfigService.selectGoodsAttributeConfigList(goodsAttributeConfig);
+ ExcelUtil util = new ExcelUtil(GoodsAttributeConfig.class);
+ util.exportExcel(response, list, "商品属性配置数据");
+ }
+
+ /**
+ * 获取商品属性配置详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsAttributeConfig:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(goodsAttributeConfigService.selectGoodsAttributeConfigById(id));
+ }
+
+ /**
+ * 新增商品属性配置
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsAttributeConfig:add')")
+ @Log(title = "商品属性配置", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody GoodsAttributeConfig goodsAttributeConfig)
+ {
+ return toAjax(goodsAttributeConfigService.insertGoodsAttributeConfig(goodsAttributeConfig));
+ }
+
+ /**
+ * 修改商品属性配置
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsAttributeConfig:edit')")
+ @Log(title = "商品属性配置", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody GoodsAttributeConfig goodsAttributeConfig)
+ {
+ return toAjax(goodsAttributeConfigService.updateGoodsAttributeConfig(goodsAttributeConfig));
+ }
+
+ /**
+ * 删除商品属性配置
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsAttributeConfig:remove')")
+ @Log(title = "商品属性配置", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(goodsAttributeConfigService.deleteGoodsAttributeConfigByIds(ids));
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/GoodsAttributeController.java b/api/src/main/java/cn/qihangerp/api/controller/GoodsAttributeController.java
new file mode 100644
index 0000000..62f2d09
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/GoodsAttributeController.java
@@ -0,0 +1,104 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.GoodsAttribute;
+import cn.qihangerp.api.service.IGoodsAttributeService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 商品属性Controller
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@RestController
+@RequestMapping("/goods/goodsAttribute")
+public class GoodsAttributeController extends BaseController
+{
+ @Autowired
+ private IGoodsAttributeService goodsAttributeService;
+
+ /**
+ * 查询商品属性列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsAttribute:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(GoodsAttribute goodsAttribute)
+ {
+ startPage();
+ List list = goodsAttributeService.selectGoodsAttributeList(goodsAttribute);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出商品属性列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsAttribute:export')")
+ @Log(title = "商品属性", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, GoodsAttribute goodsAttribute)
+ {
+ List list = goodsAttributeService.selectGoodsAttributeList(goodsAttribute);
+ ExcelUtil util = new ExcelUtil(GoodsAttribute.class);
+ util.exportExcel(response, list, "商品属性数据");
+ }
+
+ /**
+ * 获取商品属性详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsAttribute:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(goodsAttributeService.selectGoodsAttributeById(id));
+ }
+
+ /**
+ * 新增商品属性
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsAttribute:add')")
+ @Log(title = "商品属性", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody GoodsAttribute goodsAttribute)
+ {
+ return toAjax(goodsAttributeService.insertGoodsAttribute(goodsAttribute));
+ }
+
+ /**
+ * 修改商品属性
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsAttribute:edit')")
+ @Log(title = "商品属性", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody GoodsAttribute goodsAttribute)
+ {
+ return toAjax(goodsAttributeService.updateGoodsAttribute(goodsAttribute));
+ }
+
+ /**
+ * 删除商品属性
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsAttribute:remove')")
+ @Log(title = "商品属性", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(goodsAttributeService.deleteGoodsAttributeByIds(ids));
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/GoodsController.java b/api/src/main/java/cn/qihangerp/api/controller/GoodsController.java
new file mode 100644
index 0000000..8ebe641
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/GoodsController.java
@@ -0,0 +1,120 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+
+import cn.qihangerp.api.domain.vo.GoodsSpecListVo;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.Goods;
+import cn.qihangerp.api.service.IGoodsService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 商品管理Controller
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@RestController
+@RequestMapping("/goods/goods")
+public class GoodsController extends BaseController
+{
+ @Autowired
+ private IGoodsService goodsService;
+
+ /**
+ * 搜索商品SKU
+ * 条件:商品编码、SKU、商品名称
+ */
+ @GetMapping("/searchSku")
+ public TableDataInfo searchSkuBy(String keyword)
+ {
+ startPage();
+ List list = goodsService.searchGoodsSpec(keyword);
+ return getDataTable(list);
+ }
+
+ /**
+ * 查询商品管理列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goods:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(Goods goods)
+ {
+ startPage();
+ List list = goodsService.selectGoodsList(goods);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出商品管理列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goods:export')")
+ @Log(title = "商品管理", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, Goods goods)
+ {
+ List list = goodsService.selectGoodsList(goods);
+ ExcelUtil util = new ExcelUtil(Goods.class);
+ util.exportExcel(response, list, "商品管理数据");
+ }
+
+ /**
+ * 获取商品管理详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goods:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(goodsService.selectGoodsById(id));
+ }
+
+ /**
+ * 新增商品管理
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goods:add')")
+ @Log(title = "商品管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody Goods goods)
+ {
+ goods.setCreateBy(getUsername());
+ int result = goodsService.insertGoods(goods);
+ if(result == -1) new AjaxResult(501,"商品编码已存在");
+ return toAjax(1);
+ }
+
+ /**
+ * 修改商品管理
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goods:edit')")
+ @Log(title = "商品管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody Goods goods)
+ {
+ return toAjax(goodsService.updateGoods(goods));
+ }
+
+// /**
+// * 删除商品管理
+// */
+// @PreAuthorize("@ss.hasPermi('goods:goods:remove')")
+// @Log(title = "商品管理", businessType = BusinessType.DELETE)
+// @DeleteMapping("/{ids}")
+// public AjaxResult remove(@PathVariable Long[] ids)
+// {
+// return toAjax(goodsService.deleteGoodsByIds(ids));
+// }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/GoodsImgController.java b/api/src/main/java/cn/qihangerp/api/controller/GoodsImgController.java
new file mode 100644
index 0000000..7aa3f47
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/GoodsImgController.java
@@ -0,0 +1,104 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.GoodsImg;
+import cn.qihangerp.api.service.IGoodsImgService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 商品图片Controller
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@RestController
+@RequestMapping("/goods/goodsImg")
+public class GoodsImgController extends BaseController
+{
+ @Autowired
+ private IGoodsImgService goodsImgService;
+
+ /**
+ * 查询商品图片列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsImg:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(GoodsImg goodsImg)
+ {
+ startPage();
+ List list = goodsImgService.selectGoodsImgList(goodsImg);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出商品图片列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsImg:export')")
+ @Log(title = "商品图片", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, GoodsImg goodsImg)
+ {
+ List list = goodsImgService.selectGoodsImgList(goodsImg);
+ ExcelUtil util = new ExcelUtil(GoodsImg.class);
+ util.exportExcel(response, list, "商品图片数据");
+ }
+
+ /**
+ * 获取商品图片详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsImg:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(goodsImgService.selectGoodsImgById(id));
+ }
+
+ /**
+ * 新增商品图片
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsImg:add')")
+ @Log(title = "商品图片", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody GoodsImg goodsImg)
+ {
+ return toAjax(goodsImgService.insertGoodsImg(goodsImg));
+ }
+
+ /**
+ * 修改商品图片
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsImg:edit')")
+ @Log(title = "商品图片", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody GoodsImg goodsImg)
+ {
+ return toAjax(goodsImgService.updateGoodsImg(goodsImg));
+ }
+
+ /**
+ * 删除商品图片
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsImg:remove')")
+ @Log(title = "商品图片", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(goodsImgService.deleteGoodsImgByIds(ids));
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/GoodsSpecAttrController.java b/api/src/main/java/cn/qihangerp/api/controller/GoodsSpecAttrController.java
new file mode 100644
index 0000000..57926dd
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/GoodsSpecAttrController.java
@@ -0,0 +1,104 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.GoodsSpecAttr;
+import cn.qihangerp.api.service.IGoodsSpecAttrService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 商品规格属性Controller
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@RestController
+@RequestMapping("/goods/goodsSpecAttr")
+public class GoodsSpecAttrController extends BaseController
+{
+ @Autowired
+ private IGoodsSpecAttrService goodsSpecAttrService;
+
+ /**
+ * 查询商品规格属性列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsSpecAttr:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(GoodsSpecAttr goodsSpecAttr)
+ {
+ startPage();
+ List list = goodsSpecAttrService.selectGoodsSpecAttrList(goodsSpecAttr);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出商品规格属性列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsSpecAttr:export')")
+ @Log(title = "商品规格属性", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, GoodsSpecAttr goodsSpecAttr)
+ {
+ List list = goodsSpecAttrService.selectGoodsSpecAttrList(goodsSpecAttr);
+ ExcelUtil util = new ExcelUtil(GoodsSpecAttr.class);
+ util.exportExcel(response, list, "商品规格属性数据");
+ }
+
+ /**
+ * 获取商品规格属性详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsSpecAttr:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(goodsSpecAttrService.selectGoodsSpecAttrById(id));
+ }
+
+ /**
+ * 新增商品规格属性
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsSpecAttr:add')")
+ @Log(title = "商品规格属性", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody GoodsSpecAttr goodsSpecAttr)
+ {
+ return toAjax(goodsSpecAttrService.insertGoodsSpecAttr(goodsSpecAttr));
+ }
+
+ /**
+ * 修改商品规格属性
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsSpecAttr:edit')")
+ @Log(title = "商品规格属性", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody GoodsSpecAttr goodsSpecAttr)
+ {
+ return toAjax(goodsSpecAttrService.updateGoodsSpecAttr(goodsSpecAttr));
+ }
+
+ /**
+ * 删除商品规格属性
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsSpecAttr:remove')")
+ @Log(title = "商品规格属性", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(goodsSpecAttrService.deleteGoodsSpecAttrByIds(ids));
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/GoodsSpecController.java b/api/src/main/java/cn/qihangerp/api/controller/GoodsSpecController.java
new file mode 100644
index 0000000..eacc0fb
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/GoodsSpecController.java
@@ -0,0 +1,101 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.GoodsSpec;
+import cn.qihangerp.api.service.IGoodsSpecService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 商品规格Controller
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@RestController
+@RequestMapping("/goods/goodsSpec")
+public class GoodsSpecController extends BaseController
+{
+ @Autowired
+ private IGoodsSpecService goodsSpecService;
+
+ /**
+ * 查询商品规格列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsSpec:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(GoodsSpec goodsSpec)
+ {
+ startPage();
+ List list = goodsSpecService.selectGoodsSpecList(goodsSpec);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出商品规格列表
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsSpec:export')")
+ @Log(title = "商品规格", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, GoodsSpec goodsSpec)
+ {
+ List list = goodsSpecService.selectGoodsSpecList(goodsSpec);
+ ExcelUtil util = new ExcelUtil(GoodsSpec.class);
+ util.exportExcel(response, list, "商品规格数据");
+ }
+
+ /**
+ * 获取商品规格详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('goods:goodsSpec:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(goodsSpecService.selectGoodsSpecById(id));
+ }
+
+// /**
+// * 新增商品规格
+// */
+// @PreAuthorize("@ss.hasPermi('goods:goodsSpec:add')")
+// @Log(title = "商品规格", businessType = BusinessType.INSERT)
+// @PostMapping
+// public AjaxResult add(@RequestBody GoodsSpec goodsSpec)
+// {
+// return toAjax(goodsSpecService.insertGoodsSpec(goodsSpec));
+// }
+//
+// /**
+// * 修改商品规格
+// */
+// @PreAuthorize("@ss.hasPermi('goods:goodsSpec:edit')")
+// @Log(title = "商品规格", businessType = BusinessType.UPDATE)
+// @PutMapping
+// public AjaxResult edit(@RequestBody GoodsSpec goodsSpec)
+// {
+// return toAjax(goodsSpecService.updateGoodsSpec(goodsSpec));
+// }
+//
+// /**
+// * 删除商品规格
+// */
+// @PreAuthorize("@ss.hasPermi('goods:goodsSpec:remove')")
+// @Log(title = "商品规格", businessType = BusinessType.DELETE)
+// @DeleteMapping("/{ids}")
+// public AjaxResult remove(@PathVariable Long[] ids)
+// {
+// return toAjax(goodsSpecService.deleteGoodsSpecByIds(ids));
+// }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/HomeController.java b/api/src/main/java/cn/qihangerp/api/controller/HomeController.java
new file mode 100644
index 0000000..83421bc
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/HomeController.java
@@ -0,0 +1,29 @@
+package cn.qihangerp.api.controller;
+
+//import com.alibaba.nacos.api.config.annotation.NacosValue;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class HomeController {
+// @Autowired
+// private MySpiderController spiderController;
+
+// @GetMapping("/test/22")
+// public String home(){
+// spiderController.startSpider();
+// return "hello world";
+// }
+
+ @Value(value = "${zhijian.name:1}")
+ private String serverName;
+
+ @GetMapping(value = "/test/na")
+ public String get() {
+ return serverName;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/KeywordController.java b/api/src/main/java/cn/qihangerp/api/controller/KeywordController.java
new file mode 100644
index 0000000..fcdc03b
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/KeywordController.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.controller;
+
+import cn.qihangerp.api.req.KeyWordListReq;
+import cn.qihangerp.common.ApiResult;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import cn.qihangerp.api.domain.Keyword;
+
+import cn.qihangerp.api.service.IKeywordService;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.common.annotation.RepeatSubmit;
+import cn.qihangerp.common.enums.BusinessType;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/keyword")
+public class KeywordController {
+ private final IKeywordService keywordService;
+
+ public KeywordController(IKeywordService keywordService) {
+ this.keywordService = keywordService;
+ }
+
+ @GetMapping("/list")
+ public Page list(KeyWordListReq req){
+ System.out.println(req);
+ Page listAll = keywordService.getPageList(req);
+ System.out.println(listAll);
+ return listAll;
+ }
+
+ @Log(title="市场洞察-热搜词",businessType = BusinessType.INSERT)
+ @RepeatSubmit
+ @PostMapping("/save")
+ public ApiResult save(@RequestBody Keyword keyword){
+ System.out.println(keyword);
+ if(keyword.getCreateTime() == null){
+ keyword.setCreateTime(null);
+ }
+// if(StringUtils.isNotEmpty(keyword.getDate()) && keyword.getDate().length()>10){
+// keyword.setDate(keyword.getDate().substring(0,10));
+// }
+ keywordService.add(keyword);
+ return ApiResult.ok();
+ }
+
+ @DeleteMapping("/del/{id}")
+ public ApiResult del(@PathVariable ("id") String id){
+ System.out.println(id);
+ keywordService.delById(id);
+ return ApiResult.ok();
+ }
+
+ @PutMapping("/edit")
+ public ApiResult edit(@RequestBody Keyword keyword)
+ {
+// if(StringUtils.isNotEmpty(keyword.getDate()) && keyword.getDate().length()>10){
+// keyword.setDate(keyword.getDate().substring(0,10));
+// }
+ System.out.println(keyword);
+ keywordService.editById(keyword);
+ return ApiResult.ok();
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/MyPageProcessor.java b/api/src/main/java/cn/qihangerp/api/controller/MyPageProcessor.java
new file mode 100644
index 0000000..9f2fcbf
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/MyPageProcessor.java
@@ -0,0 +1,30 @@
+//package cn.qihangerp.api.controller;
+//
+//
+//import lombok.extern.java.Log;
+//import us.codecraft.webmagic.Page;
+//import us.codecraft.webmagic.Site;
+//import us.codecraft.webmagic.processor.PageProcessor;
+//import us.codecraft.webmagic.selector.Selectable;
+//
+//@Log
+//public class MyPageProcessor implements PageProcessor {
+// private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);
+// @Override
+// public void process(Page page) {
+// String url = page.getUrl().toString();
+// log.info("开始抓取网页内容"+url);
+// // 处理抓取到的网页内容的逻辑
+//
+//// Selectable xpath = page.getHtml().xpath("//td/text()");
+// Selectable xpath = page.getHtml().xpath("//div[@class='hotword-container']/a/text()");
+// System.out.println(xpath);
+// log.info("完成");
+// }
+//
+// @Override
+// public Site getSite() {
+//// return PageProcessor.super.getSite();
+// return site;
+// }
+//}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ScmPurchaseOrderController.java b/api/src/main/java/cn/qihangerp/api/controller/ScmPurchaseOrderController.java
new file mode 100644
index 0000000..7213ee3
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ScmPurchaseOrderController.java
@@ -0,0 +1,116 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+
+import cn.qihangerp.api.domain.bo.PurchaseOrderAddBo;
+import cn.qihangerp.api.domain.bo.PurchaseOrderOptionBo;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.ScmPurchaseOrder;
+import cn.qihangerp.api.service.IScmPurchaseOrderService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 采购订单Controller
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@RestController
+@RequestMapping("/purchase/purchaseOrder")
+public class ScmPurchaseOrderController extends BaseController
+{
+ @Autowired
+ private IScmPurchaseOrderService scmPurchaseOrderService;
+
+ /**
+ * 查询采购订单列表
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:purchaseOrder:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ScmPurchaseOrder scmPurchaseOrder)
+ {
+ startPage();
+ List list = scmPurchaseOrderService.selectScmPurchaseOrderList(scmPurchaseOrder);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出采购订单列表
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:purchaseOrder:export')")
+ @Log(title = "采购订单", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ScmPurchaseOrder scmPurchaseOrder)
+ {
+ List list = scmPurchaseOrderService.selectScmPurchaseOrderList(scmPurchaseOrder);
+ ExcelUtil util = new ExcelUtil(ScmPurchaseOrder.class);
+ util.exportExcel(response, list, "采购订单数据");
+ }
+
+ /**
+ * 获取采购订单详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:purchaseOrder:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ ScmPurchaseOrder order = scmPurchaseOrderService.selectScmPurchaseOrderById(id);
+ return success(order);
+ }
+
+ /**
+ * 新增采购订单
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:purchaseOrder:add')")
+ @Log(title = "采购订单", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody PurchaseOrderAddBo addBo)
+ {
+ addBo.setCreateBy(getUsername());
+ return toAjax(scmPurchaseOrderService.insertScmPurchaseOrder(addBo));
+ }
+
+ /**
+ * 修改采购订单
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:purchaseOrder:edit')")
+ @Log(title = "采购订单", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody PurchaseOrderOptionBo scmPurchaseOrder)
+ {
+ scmPurchaseOrder.setUpdateBy(getUsername());
+ int result = scmPurchaseOrderService.updateScmPurchaseOrder(scmPurchaseOrder);
+ if(result == -1){
+ return new AjaxResult(0,"状态不正确");
+ }else{
+ return toAjax(result);
+ }
+
+ }
+
+ /**
+ * 删除采购订单
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:purchaseOrder:remove')")
+ @Log(title = "采购订单", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(scmPurchaseOrderService.deleteScmPurchaseOrderByIds(ids));
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ScmPurchaseOrderCostController.java b/api/src/main/java/cn/qihangerp/api/controller/ScmPurchaseOrderCostController.java
new file mode 100644
index 0000000..3de5f96
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ScmPurchaseOrderCostController.java
@@ -0,0 +1,86 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.ScmPurchaseOrderCost;
+import cn.qihangerp.api.service.IScmPurchaseOrderCostService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 采购订单费用确认Controller
+ *
+ * @author qihang
+ * @date 2023-12-30
+ */
+@RestController
+@RequestMapping("/purchase/purchaseOrderCost")
+public class ScmPurchaseOrderCostController extends BaseController
+{
+ @Autowired
+ private IScmPurchaseOrderCostService scmPurchaseOrderCostService;
+
+ /**
+ * 查询采购订单费用确认列表
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:purchaseOrderCost:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ScmPurchaseOrderCost scmPurchaseOrderCost)
+ {
+ startPage();
+ List list = scmPurchaseOrderCostService.selectScmPurchaseOrderCostList(scmPurchaseOrderCost);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出采购订单费用确认列表
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:purchaseOrderCost:export')")
+ @Log(title = "采购订单费用确认", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ScmPurchaseOrderCost scmPurchaseOrderCost)
+ {
+ List list = scmPurchaseOrderCostService.selectScmPurchaseOrderCostList(scmPurchaseOrderCost);
+ ExcelUtil util = new ExcelUtil(ScmPurchaseOrderCost.class);
+ util.exportExcel(response, list, "采购订单费用确认数据");
+ }
+
+ /**
+ * 获取采购订单费用确认详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:purchaseOrderCost:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(scmPurchaseOrderCostService.selectScmPurchaseOrderCostById(id));
+ }
+
+
+
+ /**
+ * 修改采购订单费用确认
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:purchaseOrderCost:edit')")
+ @Log(title = "采购订单费用确认", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody ScmPurchaseOrderCost scmPurchaseOrderCost)
+ {
+ scmPurchaseOrderCost.setUpdateBy(getUsername());
+ return toAjax(scmPurchaseOrderCostService.updateScmPurchaseOrderCost(scmPurchaseOrderCost));
+ }
+
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ScmPurchaseOrderItemController.java b/api/src/main/java/cn/qihangerp/api/controller/ScmPurchaseOrderItemController.java
new file mode 100644
index 0000000..f32aa8c
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ScmPurchaseOrderItemController.java
@@ -0,0 +1,41 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.api.domain.ScmPurchaseOrderItem;
+import cn.qihangerp.api.service.IScmPurchaseOrderItemService;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 采购订单明细Controller
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@RestController
+@RequestMapping("/purchase/purchaseOrderItem")
+public class ScmPurchaseOrderItemController extends BaseController
+{
+ @Autowired
+ private IScmPurchaseOrderItemService scmPurchaseOrderItemService;
+
+ /**
+ * 查询采购订单明细列表
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:purchaseOrderItem:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ScmPurchaseOrderItem scmPurchaseOrderItem)
+ {
+ startPage();
+ List list = scmPurchaseOrderItemService.selectScmPurchaseOrderItemList(scmPurchaseOrderItem);
+ return getDataTable(list);
+ }
+
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ScmPurchaseOrderShipController.java b/api/src/main/java/cn/qihangerp/api/controller/ScmPurchaseOrderShipController.java
new file mode 100644
index 0000000..348252c
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ScmPurchaseOrderShipController.java
@@ -0,0 +1,103 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+
+import cn.qihangerp.api.domain.bo.PurchaseOrderStockInBo;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.ScmPurchaseOrderShip;
+import cn.qihangerp.api.service.IScmPurchaseOrderShipService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 采购订单物流Controller
+ *
+ * @author qihang
+ * @date 2023-12-30
+ */
+@RestController
+@RequestMapping("/purchase/PurchaseOrderShip")
+public class ScmPurchaseOrderShipController extends BaseController
+{
+ @Autowired
+ private IScmPurchaseOrderShipService scmPurchaseOrderShipService;
+
+ /**
+ * 查询采购订单物流列表
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:PurchaseOrderShip:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ScmPurchaseOrderShip scmPurchaseOrderShip)
+ {
+ startPage();
+ List list = scmPurchaseOrderShipService.selectScmPurchaseOrderShipList(scmPurchaseOrderShip);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出采购订单物流列表
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:PurchaseOrderShip:export')")
+ @Log(title = "采购订单物流", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ScmPurchaseOrderShip scmPurchaseOrderShip)
+ {
+ List list = scmPurchaseOrderShipService.selectScmPurchaseOrderShipList(scmPurchaseOrderShip);
+ ExcelUtil util = new ExcelUtil(ScmPurchaseOrderShip.class);
+ util.exportExcel(response, list, "采购订单物流数据");
+ }
+
+ /**
+ * 获取采购订单物流详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:PurchaseOrderShip:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(scmPurchaseOrderShipService.selectScmPurchaseOrderShipById(id));
+ }
+
+ /**
+ * 确认收货
+ */
+ @PreAuthorize("@ss.hasPermi('purchase:PurchaseOrderShip:edit')")
+ @Log(title = "采购订单物流", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult confirmReceipt(@RequestBody ScmPurchaseOrderShip scmPurchaseOrderShip)
+ {
+ scmPurchaseOrderShip.setUpdateBy(getUsername());
+ return toAjax(scmPurchaseOrderShipService.updateScmPurchaseOrderShip(scmPurchaseOrderShip));
+ }
+
+ @Log(title = "采购订单物流", businessType = BusinessType.UPDATE)
+ @PostMapping("/createStockInEntry")
+ public AjaxResult createStockInEntry(@RequestBody PurchaseOrderStockInBo bo)
+ {
+ bo.setCreateBy(getUsername());
+ int result = scmPurchaseOrderShipService.createStockInEntry(bo);
+ if(result == -1) return new AjaxResult(404,"采购物流不存在");
+ else if (result == -2) return new AjaxResult(501,"未确认收货不允许操作");
+ else if (result == -3) {
+ return new AjaxResult(502,"已处理过了请勿重复操作");
+ } else if (result == -4) {
+ return new AjaxResult(503,"状态不正确不能操作");
+ } else if (result == 1) {
+ return toAjax(1);
+ }else return toAjax(result);
+ }
+
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ScmSupplierController.java b/api/src/main/java/cn/qihangerp/api/controller/ScmSupplierController.java
new file mode 100644
index 0000000..1e10be2
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ScmSupplierController.java
@@ -0,0 +1,104 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.ScmSupplier;
+import cn.qihangerp.api.service.IScmSupplierService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 【请填写功能名称】Controller
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@RestController
+@RequestMapping("/scm/supplier")
+public class ScmSupplierController extends BaseController
+{
+ @Autowired
+ private IScmSupplierService scmSupplierService;
+
+ /**
+ * 查询【请填写功能名称】列表
+ */
+ @PreAuthorize("@ss.hasPermi('scm:supplier:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ScmSupplier scmSupplier)
+ {
+ startPage();
+ List list = scmSupplierService.selectScmSupplierList(scmSupplier);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出【请填写功能名称】列表
+ */
+ @PreAuthorize("@ss.hasPermi('api:supplier:export')")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ScmSupplier scmSupplier)
+ {
+ List list = scmSupplierService.selectScmSupplierList(scmSupplier);
+ ExcelUtil util = new ExcelUtil(ScmSupplier.class);
+ util.exportExcel(response, list, "【请填写功能名称】数据");
+ }
+
+ /**
+ * 获取【请填写功能名称】详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('api:supplier:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(scmSupplierService.selectScmSupplierById(id));
+ }
+
+ /**
+ * 新增【请填写功能名称】
+ */
+ @PreAuthorize("@ss.hasPermi('api:supplier:add')")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody ScmSupplier scmSupplier)
+ {
+ return toAjax(scmSupplierService.insertScmSupplier(scmSupplier));
+ }
+
+ /**
+ * 修改【请填写功能名称】
+ */
+ @PreAuthorize("@ss.hasPermi('api:supplier:edit')")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody ScmSupplier scmSupplier)
+ {
+ return toAjax(scmSupplierService.updateScmSupplier(scmSupplier));
+ }
+
+ /**
+ * 删除【请填写功能名称】
+ */
+ @PreAuthorize("@ss.hasPermi('api:supplier:remove')")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(scmSupplierService.deleteScmSupplierByIds(ids));
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ShipOrderAgentFeeController.java b/api/src/main/java/cn/qihangerp/api/controller/ShipOrderAgentFeeController.java
new file mode 100644
index 0000000..ff0b372
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ShipOrderAgentFeeController.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+
+import cn.qihangerp.api.domain.ErpShipOrderAgentFee;
+import cn.qihangerp.api.service.ErpShipOrderAgentFeeService;
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 财务管理-应付款-代发账单Controller
+ *
+ * @author qihang
+ * @date 2024-01-28
+ */
+@RestController
+@RequestMapping("/fms/agentShip")
+public class ShipOrderAgentFeeController extends BaseController
+{
+ @Autowired
+ private ErpShipOrderAgentFeeService agentFeeService;
+
+ /**
+ * 查询财务管理-应付款-代发账单列表
+ */
+ @PreAuthorize("@ss.hasPermi('fms:agentShip:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ErpShipOrderAgentFee bo, PageQuery pageQuery)
+ {
+ PageResult pageResult = agentFeeService.queryPageList(bo, pageQuery);
+ return getDataTable(pageResult);
+ }
+
+
+
+ /**
+ * 获取财务管理-应付款-代发账单详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('fms:agentShip:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(agentFeeService.getById(id));
+ }
+
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ShipOrderController.java b/api/src/main/java/cn/qihangerp/api/controller/ShipOrderController.java
new file mode 100644
index 0000000..2cbf730
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ShipOrderController.java
@@ -0,0 +1,91 @@
+package cn.qihangerp.api.controller;
+
+import cn.qihangerp.api.domain.ErpShipOrder;
+import cn.qihangerp.api.domain.bo.ShipOrderSupplierShipBo;
+import cn.qihangerp.api.domain.bo.StockOutEntryGenerateBo;
+import cn.qihangerp.api.mapper.ErpShipOrderMapper;
+import cn.qihangerp.api.service.ErpShipOrderService;
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import cn.qihangerp.common.enums.ErpOrderStatusEnum;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.core.page.TableDataInfo;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.domain.ErpOrderItem;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@AllArgsConstructor
+@RestController
+@RequestMapping("/shipping")
+public class ShipOrderController extends BaseController {
+ private final ErpShipOrderService shipOrderService;
+ /**
+ * 备货中-仓库发货
+ * @param bo
+ * @param pageQuery
+ * @return
+ */
+ @GetMapping("/ship_order")
+ public TableDataInfo stockShipList(ErpShipOrder bo, PageQuery pageQuery)
+ {
+ PageResult list = shipOrderService.queryPageList(bo, pageQuery);
+ return getDataTable(list);
+ }
+
+ /**
+ * 查询同订单itemList
+ * @param id
+ * @return
+ */
+ @GetMapping("/ship_order/{id}")
+ public TableDataInfo stockShipInfo(@PathVariable("id") Long id)
+ {
+ List list = shipOrderService.queryOrderListById(id);
+ return getDataTable(list);
+ }
+
+
+ /**
+ * 供应商代发订单发货
+ * @param bo
+ * @return
+ */
+ @PostMapping("/ship_order/supplier_ship")
+ public AjaxResult supplierShip(@RequestBody ShipOrderSupplierShipBo bo)
+ {
+ int result = shipOrderService.supplierShip(bo);
+ if(result == -1) return AjaxResult.error("参数错误:shipOrderId为空");
+ else if(result == -2) return AjaxResult.error("参数错误:erpOrderId为空");
+ else if(result == -3) return AjaxResult.error("参数错误:erpOrderId找不到数据");
+ else if(result == -1001) return AjaxResult.error("存在错误的shipOrderId:找不到数据");
+ else if(result == -1002) return AjaxResult.error("存在错误的shipOrder数据:不是供应商发货!");
+ else if(result == -1003) return AjaxResult.error("存在错误的shipOrder数据:发货状态不正确!");
+ //wmsStockOutEntryService.insertWmsStockOutEntry(wmsStockOutEntry)
+ return toAjax(1);
+ }
+
+ /**
+ * 仓库发货订单发货
+ * @param bo
+ * @return
+ */
+ @PostMapping("/ship_order/wms_ship")
+ public AjaxResult wmsShip(@RequestBody ShipOrderSupplierShipBo bo)
+ {
+ int result = shipOrderService.wmsShip(bo);
+ if(result == -1) return AjaxResult.error("参数错误:shipOrderId为空");
+ else if(result == -2) return AjaxResult.error("参数错误:erpOrderId为空");
+ else if(result == -3) return AjaxResult.error("参数错误:erpOrderId找不到数据");
+ else if(result == -1001) return AjaxResult.error("存在错误的shipOrderId:找不到数据");
+ else if(result == -1002) return AjaxResult.error("存在错误的shipOrder数据:不是供应商发货!");
+ else if(result == -1003) return AjaxResult.error("存在错误的shipOrder数据:发货状态不正确!");
+ //wmsStockOutEntryService.insertWmsStockOutEntry(wmsStockOutEntry)
+ return toAjax(1);
+ }
+
+
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ShipOrderFeeController.java b/api/src/main/java/cn/qihangerp/api/controller/ShipOrderFeeController.java
new file mode 100644
index 0000000..b36a7cc
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ShipOrderFeeController.java
@@ -0,0 +1,56 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+
+import cn.qihangerp.api.domain.ErpShipOrderFee;
+import cn.qihangerp.api.service.ErpShipOrderFeeService;
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 财务管理-应付款-物流费用Controller
+ *
+ * @author qihang
+ * @date 2024-01-28
+ */
+@RestController
+@RequestMapping("/fms/shipFee")
+public class ShipOrderFeeController extends BaseController
+{
+ @Autowired
+ private ErpShipOrderFeeService feeService;
+
+ /**
+ * 查询财务管理-应付款-物流费用列表
+ */
+ @PreAuthorize("@ss.hasPermi('fms:shipFee:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ErpShipOrderFee bo, PageQuery pageQuery)
+ {
+ PageResult pageResult = feeService.queryPageList(bo, pageQuery);
+ return getDataTable(pageResult);
+ }
+
+
+
+ /**
+ * 获取财务管理-应付款-物流费用详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('fms:shipFee:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(feeService.getById(id));
+ }
+
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ShipStockOutController.java b/api/src/main/java/cn/qihangerp/api/controller/ShipStockOutController.java
new file mode 100644
index 0000000..8c230cd
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ShipStockOutController.java
@@ -0,0 +1,57 @@
+package cn.qihangerp.api.controller;
+
+import cn.qihangerp.api.domain.WmsStockOutEntry;
+import cn.qihangerp.api.domain.WmsStockOutEntryItem;
+import cn.qihangerp.api.domain.bo.StockOutEntryGenerateBo;
+import cn.qihangerp.api.service.ErpOrderItemService;
+import cn.qihangerp.api.service.WmsStockOutEntryItemService;
+import cn.qihangerp.api.service.WmsStockOutEntryService;
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import cn.qihangerp.common.enums.ErpOrderStatusEnum;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.core.page.TableDataInfo;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.domain.ErpOrderItem;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+@AllArgsConstructor
+@RestController
+@RequestMapping("/shipping")
+public class ShipStockOutController extends BaseController {
+ private final ErpOrderItemService erpOrderItemService;
+ private final WmsStockOutEntryService stockOutEntryService;
+ private final WmsStockOutEntryItemService stockOutEntryItemService;
+
+
+ /**
+ * 订单待出库出库单list
+ * @param bo
+ * @param pageQuery
+ * @return
+ */
+ @GetMapping("/order_stock_out_entry_list")
+ public TableDataInfo stockOutEntryList(WmsStockOutEntry bo, PageQuery pageQuery)
+ {
+ bo.setStockOutType(1);
+ bo.setStatus(0);
+ PageResult list = stockOutEntryService.queryPageList(bo, pageQuery);
+ return getDataTable(list);
+ }
+
+ /**
+ * 订单待出库明细list
+ * @param bo
+ * @param pageQuery
+ * @return
+ */
+ @GetMapping("/order_stock_out_entry_item_list")
+ public TableDataInfo stockOutEntryItemList(WmsStockOutEntryItem bo, PageQuery pageQuery)
+ {
+ bo.setStockOutType(1);
+ bo.setStatus(0);
+ PageResult list = stockOutEntryItemService.queryPageList(bo, pageQuery);
+ return getDataTable(list);
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ShippingController.java b/api/src/main/java/cn/qihangerp/api/controller/ShippingController.java
new file mode 100644
index 0000000..31185ee
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ShippingController.java
@@ -0,0 +1,90 @@
+package cn.qihangerp.api.controller;
+
+import cn.qihangerp.api.domain.bo.OrderItemSpecIdUpdateBo;
+import cn.qihangerp.api.domain.bo.SupplierShipDistBo;
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import cn.qihangerp.common.enums.ErpOrderStatusEnum;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.core.page.TableDataInfo;
+import cn.qihangerp.domain.ErpOrderItem;
+import cn.qihangerp.api.domain.WmsStockOutEntry;
+import cn.qihangerp.api.domain.WmsStockOutEntryItem;
+import cn.qihangerp.api.domain.bo.StockOutEntryGenerateBo;
+import cn.qihangerp.api.service.ErpOrderItemService;
+
+import cn.qihangerp.api.service.WmsStockOutEntryItemService;
+import cn.qihangerp.api.service.WmsStockOutEntryService;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+@AllArgsConstructor
+@RestController
+@RequestMapping("/shipping")
+public class ShippingController extends BaseController {
+ private final ErpOrderItemService erpOrderItemService;
+ private final WmsStockOutEntryService stockOutEntryService;
+ private final WmsStockOutEntryItemService stockOutEntryItemService;
+
+
+ /**
+ * 备货中-仓库发货
+ * @param bo
+ * @param pageQuery
+ * @return
+ */
+ @GetMapping("/stock_ship_list")
+ public TableDataInfo stockShipList(ErpOrderItem bo, PageQuery pageQuery)
+ {
+ PageResult list = erpOrderItemService.queryPageList(ErpOrderStatusEnum.WAIT_SELLER_SEND_GOODS,0,bo, pageQuery);
+ return getDataTable(list);
+ }
+
+ /**
+ * 新增出库单
+ */
+ @PostMapping("/generate_stock_out_entry")
+ public AjaxResult generateStockOutEntry(@RequestBody StockOutEntryGenerateBo bo)
+ {
+ int result = stockOutEntryService.generateStockOutEntryForOrderItem(bo);
+ if(result == -1) return AjaxResult.error("参数错误:orderItemIds为空");
+ if(result == -2) return AjaxResult.error("参数错误:没有要添加的");
+ else if(result == -1001) return AjaxResult.error("存在错误的orderItemId:状态不对不能生成出库单");
+ else if(result == -1002) return AjaxResult.error("存在错误的订单数据:名单明细中没有skuId请修改!");
+ //wmsStockOutEntryService.insertWmsStockOutEntry(wmsStockOutEntry)
+ return toAjax(1);
+ }
+
+ @PostMapping("/supplier_ship_dist")
+ public AjaxResult SupplierShipDist(@RequestBody SupplierShipDistBo bo)
+ {
+ int result = erpOrderItemService.distributeSupplierShip(bo);
+ if(result == -1) return AjaxResult.error("参数错误:orderItemIds为空");
+ if(result == -2) return AjaxResult.error("参数错误:存在错误的orderItemId");
+ else if(result == -1001) return AjaxResult.error("存在错误的orderItemId:状态不对不能分配发货");
+ else if(result == -1002) return AjaxResult.error("存在错误的订单数据:名单明细中没有supplierId请修改!");
+
+ return toAjax(1);
+ }
+
+ /**
+ * 修改订单明细specId
+ * @param bo
+ * @return
+ */
+ @PostMapping("/order_item_spec_id_update")
+ public AjaxResult orderItemSpecIdUpdate(@RequestBody OrderItemSpecIdUpdateBo bo)
+ {
+ if(bo.getOrderItemId()==null || bo.getOrderItemId() ==0) return AjaxResult.error("参数错误:orderItemId为空");
+ if(bo.getErpGoodsSpecId()==null || bo.getErpGoodsSpecId() ==0) return AjaxResult.error("参数错误:ErpGoodsSpecId为空");
+
+ int result = erpOrderItemService.orderItemSpecIdUpdate(bo);
+ if(result == -1) return AjaxResult.error("参数错误:orderItemId错误");
+ else if(result == -2) return AjaxResult.error("参数错误:找不到ErpGoodsSpec");
+
+ return toAjax(1);
+ }
+
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ShopController.java b/api/src/main/java/cn/qihangerp/api/controller/ShopController.java
new file mode 100644
index 0000000..e5c35f3
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ShopController.java
@@ -0,0 +1,130 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+
+import cn.qihangerp.domain.ShopSetting;
+import cn.qihangerp.api.service.IShopSettingService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.domain.Shop;
+import cn.qihangerp.api.service.IShopService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 店铺Controller
+ *
+ * @author qihang
+ * @date 2023-12-31
+ */
+@RestController
+@RequestMapping("/shop/shop")
+public class ShopController extends BaseController
+{
+ @Autowired
+ private IShopService shopService;
+ @Autowired
+ private IShopSettingService shopSettingService;
+
+ /**
+ * 查询店铺列表
+ */
+ @PreAuthorize("@ss.hasPermi('shop:shop:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(Shop shop)
+ {
+ startPage();
+ List list = shopService.selectShopList(shop);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出店铺列表
+ */
+ @PreAuthorize("@ss.hasPermi('shop:shop:export')")
+ @Log(title = "店铺", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, Shop shop)
+ {
+ List list = shopService.selectShopList(shop);
+ ExcelUtil util = new ExcelUtil(Shop.class);
+ util.exportExcel(response, list, "店铺数据");
+ }
+
+ /**
+ * 获取店铺详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('shop:shop:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(shopService.selectShopById(id));
+ }
+
+ /**
+ * 新增店铺
+ */
+ @PreAuthorize("@ss.hasPermi('shop:shop:add')")
+ @Log(title = "店铺", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody Shop shop)
+ {
+ shop.setModifyOn(System.currentTimeMillis()/1000);
+ return toAjax(shopService.insertShop(shop));
+ }
+
+ /**
+ * 修改店铺
+ */
+ @PreAuthorize("@ss.hasPermi('shop:shop:edit')")
+ @Log(title = "店铺", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody Shop shop)
+ {
+ return toAjax(shopService.updateShop(shop));
+ }
+
+ /**
+ * 删除店铺
+ */
+ @PreAuthorize("@ss.hasPermi('shop:shop:remove')")
+ @Log(title = "店铺", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(shopService.deleteShopByIds(ids));
+ }
+
+
+ @GetMapping("/platformList")
+ public TableDataInfo platformList( ShopSetting bo)
+ {
+ List list = shopSettingService.selectShopSettingList(bo);
+ return getDataTable(list);
+ }
+
+ @GetMapping(value = "/platform/{id}")
+ public AjaxResult getPlatform(@PathVariable("id") Long id)
+ {
+ return success(shopSettingService.selectShopSettingById(id));
+ }
+
+ @PutMapping("/platform")
+ public AjaxResult edit(@RequestBody ShopSetting bo)
+ {
+ return toAjax(shopSettingService.updateShopSetting(bo));
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ShopGoodsController.java b/api/src/main/java/cn/qihangerp/api/controller/ShopGoodsController.java
new file mode 100644
index 0000000..9d5a8ad
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ShopGoodsController.java
@@ -0,0 +1,107 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.ShopGoods;
+import cn.qihangerp.api.service.IShopGoodsService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 店铺商品Controller
+ *
+ * @author qihang
+ * @date 2023-12-31
+ */
+@RestController
+@RequestMapping("/shop/goods")
+public class ShopGoodsController extends BaseController
+{
+ @Autowired
+ private IShopGoodsService shopGoodsService;
+
+ /**
+ * 查询店铺商品列表
+ */
+ @PreAuthorize("@ss.hasPermi('shop:goods:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ShopGoods shopGoods)
+ {
+ startPage();
+ List list = shopGoodsService.selectShopGoodsList(shopGoods);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出店铺商品列表
+ */
+ @PreAuthorize("@ss.hasPermi('shop:goods:export')")
+ @Log(title = "店铺商品", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ShopGoods shopGoods)
+ {
+ List list = shopGoodsService.selectShopGoodsList(shopGoods);
+ ExcelUtil util = new ExcelUtil(ShopGoods.class);
+ util.exportExcel(response, list, "店铺商品数据");
+ }
+
+ /**
+ * 获取店铺商品详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('shop:goods:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(shopGoodsService.selectShopGoodsById(id));
+ }
+
+ /**
+ * 新增店铺商品
+ */
+ @PreAuthorize("@ss.hasPermi('shop:goods:add')")
+ @Log(title = "店铺商品", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody ShopGoods shopGoods)
+ {
+ int result = shopGoodsService.insertShopGoods(shopGoods);
+ if(result==10020) return AjaxResult.error("缺少参数:ShopId");
+ else if(result==10021) return AjaxResult.error("找不到店铺");
+ return toAjax(result);
+ }
+
+ /**
+ * 修改店铺商品
+ */
+ @PreAuthorize("@ss.hasPermi('shop:goods:edit')")
+ @Log(title = "店铺商品", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody ShopGoods shopGoods)
+ {
+ return toAjax(shopGoodsService.updateShopGoods(shopGoods));
+ }
+
+ /**
+ * 删除店铺商品
+ */
+ @PreAuthorize("@ss.hasPermi('shop:goods:remove')")
+ @Log(title = "店铺商品", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids)
+ {
+ return toAjax(shopGoodsService.deleteShopGoodsByIds(ids));
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/ShopPullLogsController.java b/api/src/main/java/cn/qihangerp/api/controller/ShopPullLogsController.java
new file mode 100644
index 0000000..e1d0fbf
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/ShopPullLogsController.java
@@ -0,0 +1,26 @@
+package cn.qihangerp.api.controller;
+
+
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.core.page.TableDataInfo;
+import cn.qihangerp.api.domain.SShopPullLogs;
+import cn.qihangerp.api.service.SShopPullLogsService;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@AllArgsConstructor
+@RestController
+@RequestMapping("/shop")
+public class ShopPullLogsController extends BaseController {
+ private final SShopPullLogsService pullLogsService;
+
+ @GetMapping("/pull_logs_list")
+ public TableDataInfo list(SShopPullLogs logs, PageQuery pageQuery)
+ {
+ var pageList = pullLogsService.queryPageList(logs,pageQuery);
+ return getDataTable(pageList);
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/WmsStockInEntryController.java b/api/src/main/java/cn/qihangerp/api/controller/WmsStockInEntryController.java
new file mode 100644
index 0000000..961ea24
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/WmsStockInEntryController.java
@@ -0,0 +1,112 @@
+package cn.qihangerp.api.controller;
+
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.api.service.WmsStockInEntryService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.WmsStockInEntry;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 入库单Controller
+ *
+ * @author qihang
+ * @date 2023-12-31
+ */
+@RestController
+@RequestMapping("/wms/WmsStockInEntry")
+public class WmsStockInEntryController extends BaseController
+{
+ @Autowired
+ private WmsStockInEntryService wmsStockInEntryService;
+
+ /**
+ * 查询入库单列表
+ */
+ @PreAuthorize("@ss.hasPermi('wms:WmsStockInEntry:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(WmsStockInEntry bo, PageQuery pageQuery) {
+ var list = wmsStockInEntryService.queryPageList(bo, pageQuery);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出入库单列表
+ */
+// @PreAuthorize("@ss.hasPermi('wms:WmsStockInEntry:export')")
+// @Log(title = "入库单", businessType = BusinessType.EXPORT)
+// @PostMapping("/export")
+// public void export(HttpServletResponse response, WmsStockInEntry wmsStockInEntry)
+// {
+// List list = wmsStockInEntryService.selectWmsStockInEntryList(wmsStockInEntry);
+// ExcelUtil util = new ExcelUtil(WmsStockInEntry.class);
+// util.exportExcel(response, list, "入库单数据");
+// }
+
+ /**
+ * 获取入库单详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('wms:WmsStockInEntry:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(wmsStockInEntryService.getById(id));
+ }
+
+
+
+// /**
+// * 新增入库单
+// */
+// @PreAuthorize("@ss.hasPermi('wms:WmsStockInEntry:add')")
+// @Log(title = "入库单", businessType = BusinessType.INSERT)
+// @PostMapping
+// public AjaxResult add(@RequestBody WmsStockInEntry wmsStockInEntry)
+// {
+// return toAjax(wmsStockInEntryService.insertWmsStockInEntry(wmsStockInEntry));
+// }
+//
+ /**
+ * 修改入库单
+ */
+ @PreAuthorize("@ss.hasPermi('wms:WmsStockInEntry:edit')")
+ @Log(title = "入库单", businessType = BusinessType.UPDATE)
+ @PostMapping("/stockIn")
+ public AjaxResult stockIn(@RequestBody WmsStockInEntry wmsStockInEntry)
+ {
+ wmsStockInEntry.setUpdateBy(getUsername());
+ wmsStockInEntry.setStockInOperatorId(getUserId());
+ int result = wmsStockInEntryService.stockIn(wmsStockInEntry);
+ if(result == -1) return new AjaxResult(505,"入库单不存在");
+ else if(result == -2) return new AjaxResult(506,"请填写入库数据");
+ else if(result == -3) return new AjaxResult(507,"商品数据错误");
+ else if(result == -9) return new AjaxResult(509,"入库单已全部入库!无法操作!");
+ return toAjax(result);
+ }
+ @GetMapping("/complete/{id}")
+ public AjaxResult complete(@PathVariable Long id)
+ {
+ return toAjax(wmsStockInEntryService.complete(id,getUsername()));
+ }
+
+// /**
+// * 删除入库单
+// */
+// @PreAuthorize("@ss.hasPermi('wms:WmsStockInEntry:remove')")
+// @Log(title = "入库单", businessType = BusinessType.DELETE)
+// @DeleteMapping("/{ids}")
+// public AjaxResult remove(@PathVariable Long[] ids)
+// {
+// return toAjax(wmsStockInEntryService.deleteWmsStockInEntryByIds(ids));
+// }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/WmsStockLocationController.java b/api/src/main/java/cn/qihangerp/api/controller/WmsStockLocationController.java
new file mode 100644
index 0000000..1f08704
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/WmsStockLocationController.java
@@ -0,0 +1,111 @@
+package cn.qihangerp.api.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.WmsStockLocation;
+import cn.qihangerp.api.service.IWmsStockLocationService;
+import cn.qihangerp.common.utils.poi.ExcelUtil;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 仓库货架Controller
+ *
+ * @author qihang
+ * @date 2024-01-09
+ */
+@RestController
+@RequestMapping("/wms/location")
+public class WmsStockLocationController extends BaseController
+{
+ @Autowired
+ private IWmsStockLocationService wmsStockLocationService;
+
+ /**
+ * 查询仓库货架列表
+ */
+ @PreAuthorize("@ss.hasPermi('wms:location:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(WmsStockLocation wmsStockLocation)
+ {
+ startPage();
+ List list = wmsStockLocationService.selectWmsStockLocationList(wmsStockLocation);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出仓库货架列表
+ */
+ @PreAuthorize("@ss.hasPermi('wms:location:export')")
+ @Log(title = "仓库货架", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, WmsStockLocation wmsStockLocation)
+ {
+ List list = wmsStockLocationService.selectWmsStockLocationList(wmsStockLocation);
+ ExcelUtil util = new ExcelUtil(WmsStockLocation.class);
+ util.exportExcel(response, list, "仓库货架数据");
+ }
+
+ /**
+ * 获取仓库货架详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('wms:location:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+ return success(wmsStockLocationService.selectWmsStockLocationById(id));
+ }
+
+ /**
+ * 新增仓库货架
+ */
+ @PreAuthorize("@ss.hasPermi('wms:location:add')")
+ @Log(title = "仓库货架", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody WmsStockLocation wmsStockLocation)
+ {
+ return toAjax(wmsStockLocationService.insertWmsStockLocation(wmsStockLocation));
+ }
+
+ /**
+ * 修改仓库货架
+ */
+ @PreAuthorize("@ss.hasPermi('wms:location:edit')")
+ @Log(title = "仓库货架", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody WmsStockLocation wmsStockLocation)
+ {
+ return toAjax(wmsStockLocationService.updateWmsStockLocation(wmsStockLocation));
+ }
+
+ @GetMapping("/search")
+ public TableDataInfo searchBy(String number)
+ {
+ startPage();
+ List list = wmsStockLocationService.search(number);
+ return getDataTable(list);
+ }
+ /**
+ * 删除仓库货架
+ */
+// @PreAuthorize("@ss.hasPermi('wms:location:remove')")
+// @Log(title = "仓库货架", businessType = BusinessType.DELETE)
+// @DeleteMapping("/{ids}")
+// public AjaxResult remove(@PathVariable Long[] ids)
+// {
+// return toAjax(wmsStockLocationService.deleteWmsStockLocationByIds(ids));
+// }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/WmsStockOutEntryController.java b/api/src/main/java/cn/qihangerp/api/controller/WmsStockOutEntryController.java
new file mode 100644
index 0000000..df9f7fe
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/WmsStockOutEntryController.java
@@ -0,0 +1,137 @@
+package cn.qihangerp.api.controller;
+
+import cn.qihangerp.api.domain.WmsStockOutEntryItem;
+import cn.qihangerp.api.service.WmsStockOutEntryItemService;
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.api.domain.bo.StockOutBo;
+import cn.qihangerp.api.service.WmsStockOutEntryService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.api.domain.WmsStockOutEntry;
+//import cn.qihangerp.api.service.IWmsStockOutEntryService;
+import cn.qihangerp.core.page.TableDataInfo;
+
+/**
+ * 出库单Controller
+ *
+ * @author qihang
+ * @date 2024-01-10
+ */
+@RestController
+@RequestMapping("/wms/stockOutEntry")
+public class WmsStockOutEntryController extends BaseController
+{
+ @Autowired
+ private WmsStockOutEntryService wmsStockOutEntryService;
+ @Autowired
+ private WmsStockOutEntryItemService wmsStockOutEntryItemService;
+
+ /**
+ * 查询出库单列表
+ */
+ @PreAuthorize("@ss.hasPermi('wms:stockOutEntry:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(WmsStockOutEntry bo, PageQuery pageQuery)
+ {
+ var list = wmsStockOutEntryService.queryPageList(bo, pageQuery);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出出库单列表
+ */
+// @PreAuthorize("@ss.hasPermi('wms:stockOutEntry:export')")
+// @Log(title = "出库单", businessType = BusinessType.EXPORT)
+// @PostMapping("/export")
+// public void export(HttpServletResponse response, WmsStockOutEntry wmsStockOutEntry)
+// {
+// List list = wmsStockOutEntryService.selectWmsStockOutEntryList(wmsStockOutEntry);
+// ExcelUtil util = new ExcelUtil(WmsStockOutEntry.class);
+// util.exportExcel(response, list, "出库单数据");
+// }
+
+ /**
+ * 获取出库单详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('wms:stockOutEntry:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id)
+ {
+// WmsStockOutEntry entry = wmsStockOutEntryService.selectById(id);
+
+ return success(wmsStockOutEntryService.selectOutEntryItemInventoryDetailsByEntryId(id));
+ }
+ /**
+ * 获取出库明细详情详细信息
+ */
+
+ @GetMapping(value = "/item/{id}")
+ public AjaxResult getItemInfo(@PathVariable("id") Long id)
+ {
+ return success(wmsStockOutEntryItemService.getById(id));
+ }
+ /**
+ * 出库操作
+ * @param bo
+ * @return
+ */
+ @Log(title = "出库单", businessType = BusinessType.INSERT)
+ @PostMapping("/stockOut")
+ public AjaxResult stockOut(@RequestBody StockOutBo bo)
+ {
+ bo.setOperatorId(getUserId());
+ bo.setOperatorName(getUsername());
+ int result = wmsStockOutEntryService.stockOut(bo);
+ if(result == -5) return new AjaxResult(500,"参数错误!请填写出库数量!");
+ else if(result == -1) return new AjaxResult(501,"数据错误!");
+ else if(result == -2) return new AjaxResult(502,"状态错误!");
+ else if(result == -3) return new AjaxResult(503,"已全部出库!");
+ else if(result == -4) return new AjaxResult(504,"出库数量超出!");
+ else if(result == -11) return new AjaxResult(511,"库存数据不存在!");
+ else if(result == -12) return new AjaxResult(512,"仓位库存不足!");
+ return toAjax(1);
+ }
+
+// /**
+// * 新增出库单
+// */
+// @PreAuthorize("@ss.hasPermi('wms:stockOutEntry:add')")
+// @Log(title = "出库单", businessType = BusinessType.INSERT)
+// @PostMapping
+// public AjaxResult add(@RequestBody WmsStockOutEntry wmsStockOutEntry)
+// {
+// return toAjax(wmsStockOutEntryService.insertWmsStockOutEntry(wmsStockOutEntry));
+// }
+
+// /**
+// * 修改出库单
+// */
+// @PreAuthorize("@ss.hasPermi('wms:stockOutEntry:edit')")
+// @Log(title = "出库单", businessType = BusinessType.UPDATE)
+// @PutMapping
+// public AjaxResult edit(@RequestBody WmsStockOutEntry wmsStockOutEntry)
+// {
+// return toAjax(wmsStockOutEntryService.updateWmsStockOutEntry(wmsStockOutEntry));
+// }
+
+// /**
+// * 删除出库单
+// */
+// @PreAuthorize("@ss.hasPermi('wms:stockOutEntry:remove')")
+// @Log(title = "出库单", businessType = BusinessType.DELETE)
+// @DeleteMapping("/{ids}")
+// public AjaxResult remove(@PathVariable Long[] ids)
+// {
+// return toAjax(wmsStockOutEntryService.deleteWmsStockOutEntryByIds(ids));
+// }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/WmsStockOutEntryItemDetailController.java b/api/src/main/java/cn/qihangerp/api/controller/WmsStockOutEntryItemDetailController.java
new file mode 100644
index 0000000..b112ad1
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/WmsStockOutEntryItemDetailController.java
@@ -0,0 +1,104 @@
+//package cn.qihangerp.api.controller;
+//
+//import java.util.List;
+//import javax.servlet.http.HttpServletResponse;
+//import org.springframework.security.access.prepost.PreAuthorize;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.web.bind.annotation.GetMapping;
+//import org.springframework.web.bind.annotation.PostMapping;
+//import org.springframework.web.bind.annotation.PutMapping;
+//import org.springframework.web.bind.annotation.DeleteMapping;
+//import org.springframework.web.bind.annotation.PathVariable;
+//import org.springframework.web.bind.annotation.RequestBody;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RestController;
+//import com.qihang.common.annotation.Log;
+//import com.qihang.core.controller.BaseController;
+//import com.qihang.core.domain.AjaxResult;
+//import com.qihang.common.enums.BusinessType;
+//import cn.qihangerp.api.domain.WmsStockOutEntryItemDetail;
+//import cn.qihangerp.api.service.IWmsStockOutEntryItemDetailService;
+//import com.qihang.common.utils.poi.ExcelUtil;
+//import com.qihang.core.page.TableDataInfo;
+//
+///**
+// * 出库明细详情Controller
+// *
+// * @author qihang
+// * @date 2024-01-10
+// */
+//@RestController
+//@RequestMapping("/wms/stockOutEntryItemDetail")
+//public class WmsStockOutEntryItemDetailController extends BaseController
+//{
+// @Autowired
+// private IWmsStockOutEntryItemDetailService wmsStockOutEntryItemDetailService;
+//
+// /**
+// * 查询出库明细详情列表
+// */
+// @PreAuthorize("@ss.hasPermi('wms:stockOutEntryItemDetail:list')")
+// @GetMapping("/list")
+// public TableDataInfo list(WmsStockOutEntryItemDetail wmsStockOutEntryItemDetail)
+// {
+// startPage();
+// List list = wmsStockOutEntryItemDetailService.selectWmsStockOutEntryItemDetailList(wmsStockOutEntryItemDetail);
+// return getDataTable(list);
+// }
+//
+// /**
+// * 导出出库明细详情列表
+// */
+// @PreAuthorize("@ss.hasPermi('wms:stockOutEntryItemDetail:export')")
+// @Log(title = "出库明细详情", businessType = BusinessType.EXPORT)
+// @PostMapping("/export")
+// public void export(HttpServletResponse response, WmsStockOutEntryItemDetail wmsStockOutEntryItemDetail)
+// {
+// List list = wmsStockOutEntryItemDetailService.selectWmsStockOutEntryItemDetailList(wmsStockOutEntryItemDetail);
+// ExcelUtil util = new ExcelUtil(WmsStockOutEntryItemDetail.class);
+// util.exportExcel(response, list, "出库明细详情数据");
+// }
+//
+// /**
+// * 获取出库明细详情详细信息
+// */
+// @PreAuthorize("@ss.hasPermi('wms:stockOutEntryItemDetail:query')")
+// @GetMapping(value = "/{id}")
+// public AjaxResult getInfo(@PathVariable("id") Long id)
+// {
+// return success(wmsStockOutEntryItemDetailService.selectWmsStockOutEntryItemDetailById(id));
+// }
+//
+// /**
+// * 新增出库明细详情
+// */
+// @PreAuthorize("@ss.hasPermi('wms:stockOutEntryItemDetail:add')")
+// @Log(title = "出库明细详情", businessType = BusinessType.INSERT)
+// @PostMapping
+// public AjaxResult add(@RequestBody WmsStockOutEntryItemDetail wmsStockOutEntryItemDetail)
+// {
+// return toAjax(wmsStockOutEntryItemDetailService.insertWmsStockOutEntryItemDetail(wmsStockOutEntryItemDetail));
+// }
+//
+// /**
+// * 修改出库明细详情
+// */
+// @PreAuthorize("@ss.hasPermi('wms:stockOutEntryItemDetail:edit')")
+// @Log(title = "出库明细详情", businessType = BusinessType.UPDATE)
+// @PutMapping
+// public AjaxResult edit(@RequestBody WmsStockOutEntryItemDetail wmsStockOutEntryItemDetail)
+// {
+// return toAjax(wmsStockOutEntryItemDetailService.updateWmsStockOutEntryItemDetail(wmsStockOutEntryItemDetail));
+// }
+//
+// /**
+// * 删除出库明细详情
+// */
+// @PreAuthorize("@ss.hasPermi('wms:stockOutEntryItemDetail:remove')")
+// @Log(title = "出库明细详情", businessType = BusinessType.DELETE)
+// @DeleteMapping("/{ids}")
+// public AjaxResult remove(@PathVariable Long[] ids)
+// {
+// return toAjax(wmsStockOutEntryItemDetailService.deleteWmsStockOutEntryItemDetailByIds(ids));
+// }
+//}
diff --git a/api/src/main/java/cn/qihangerp/api/controller/system/SysMenuController.java b/api/src/main/java/cn/qihangerp/api/controller/system/SysMenuController.java
new file mode 100644
index 0000000..8591690
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/controller/system/SysMenuController.java
@@ -0,0 +1,142 @@
+package cn.qihangerp.api.controller.system;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.qihangerp.common.annotation.Log;
+import cn.qihangerp.common.constant.UserConstants;
+import cn.qihangerp.core.controller.BaseController;
+import cn.qihangerp.domain.AjaxResult;
+import cn.qihangerp.domain.SysMenu;
+import cn.qihangerp.common.enums.BusinessType;
+import cn.qihangerp.common.utils.StringUtils;
+import cn.qihangerp.service.ISysMenuService;
+
+/**
+ * 菜单信息
+ *
+ * @author qihang
+ */
+@RestController
+@RequestMapping("/system/menu")
+public class SysMenuController extends BaseController
+{
+ @Autowired
+ private ISysMenuService menuService;
+
+ /**
+ * 获取菜单列表
+ */
+ @PreAuthorize("@ss.hasPermi('system:menu:list')")
+ @GetMapping("/list")
+ public AjaxResult list(SysMenu menu)
+ {
+ List menus = menuService.selectMenuList(menu, getUserId());
+ return success(menus);
+ }
+
+ /**
+ * 根据菜单编号获取详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('system:menu:query')")
+ @GetMapping(value = "/{menuId}")
+ public AjaxResult getInfo(@PathVariable Long menuId)
+ {
+ return success(menuService.selectMenuById(menuId));
+ }
+
+ /**
+ * 获取菜单下拉树列表
+ */
+ @GetMapping("/treeselect")
+ public AjaxResult treeselect(SysMenu menu)
+ {
+ List menus = menuService.selectMenuList(menu, getUserId());
+ return success(menuService.buildMenuTreeSelect(menus));
+ }
+
+ /**
+ * 加载对应角色菜单列表树
+ */
+ @GetMapping(value = "/roleMenuTreeselect/{roleId}")
+ public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
+ {
+ List menus = menuService.selectMenuList(getUserId());
+ AjaxResult ajax = AjaxResult.success();
+ ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
+ ajax.put("menus", menuService.buildMenuTreeSelect(menus));
+ return ajax;
+ }
+
+ /**
+ * 新增菜单
+ */
+ @PreAuthorize("@ss.hasPermi('system:menu:add')")
+ @Log(title = "菜单管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@Validated @RequestBody SysMenu menu)
+ {
+ if (!menuService.checkMenuNameUnique(menu))
+ {
+ return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+ }
+ else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
+ {
+ return error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+ }
+ menu.setCreateBy(getUsername());
+ return toAjax(menuService.insertMenu(menu));
+ }
+
+ /**
+ * 修改菜单
+ */
+ @PreAuthorize("@ss.hasPermi('system:menu:edit')")
+ @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@Validated @RequestBody SysMenu menu)
+ {
+ if (!menuService.checkMenuNameUnique(menu))
+ {
+ return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+ }
+ else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
+ {
+ return error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+ }
+ else if (menu.getMenuId().equals(menu.getParentId()))
+ {
+ return error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
+ }
+ menu.setUpdateBy(getUsername());
+ return toAjax(menuService.updateMenu(menu));
+ }
+
+ /**
+ * 删除菜单
+ */
+ @PreAuthorize("@ss.hasPermi('system:menu:remove')")
+ @Log(title = "菜单管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{menuId}")
+ public AjaxResult remove(@PathVariable("menuId") Long menuId)
+ {
+ if (menuService.hasChildByMenuId(menuId))
+ {
+ return warn("存在子菜单,不允许删除");
+ }
+ if (menuService.checkMenuExistRole(menuId))
+ {
+ return warn("菜单已分配,不允许删除");
+ }
+ return toAjax(menuService.deleteMenuById(menuId));
+ }
+}
\ No newline at end of file
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ErpAfterSale.java b/api/src/main/java/cn/qihangerp/api/domain/ErpAfterSale.java
new file mode 100644
index 0000000..506c4c8
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ErpAfterSale.java
@@ -0,0 +1,182 @@
+//package cn.qihangerp.api.domain;
+//
+//import java.io.Serializable;
+//import java.util.Date;
+//
+//import com.baomidou.mybatisplus.annotation.TableName;
+//import lombok.Data;
+//
+///**
+// * 售后处理表
+// * @TableName erp_after_sale
+// */
+//@TableName("erp_sale_after")
+//@Data
+//public class ErpAfterSale implements Serializable {
+// /**
+// *
+// */
+// private String id;
+//
+// /**
+// * 类型(10退货;20换货;80补发;99订单拦截;)
+// */
+// private Integer type;
+//
+// /**
+// * 店铺id
+// */
+// private Integer shopId;
+//
+// /**
+// * 店铺类型
+// */
+// private Integer shopType;
+//
+// /**
+// * 售后单号
+// */
+// private String afterSaleOrderId;
+//
+// /**
+// * 订单号
+// */
+// private String orderId;
+//
+// /**
+// * 子订单号
+// */
+// private String subOrderId;
+//
+// /**
+// * 商品spuid
+// */
+// private String productId;
+//
+// /**
+// * 商品skuid
+// */
+// private String skuId;
+//
+// /**
+// * 数量
+// */
+// private Integer count;
+//
+// /**
+// * 商品标题
+// */
+// private String title;
+//
+// /**
+// * 商品图片
+// */
+// private String img;
+//
+// /**
+// * sku描述
+// */
+// private String skuInfo;
+//
+// /**
+// * sku编码
+// */
+// private String skuCode;
+//
+// /**
+// * ERP商品id
+// */
+// private Integer erpGoodsId;
+//
+// /**
+// * ERP商品skuId
+// */
+// private Integer erpSkuId;
+//
+// /**
+// * 退回人信息json
+// */
+// private String returnInfo;
+//
+// /**
+// * 退回快递单号
+// */
+// private String returnWaybillCode;
+//
+// /**
+// * 退回物流公司名称
+// */
+// private String returnCompany;
+//
+// /**
+// * 收件人姓名
+// */
+// private String receiverName;
+//
+// /**
+// * 收件人联系电话
+// */
+// private String receiverTel;
+//
+// /**
+// * 省
+// */
+// private String receiverProvince;
+//
+// /**
+// * 市
+// */
+// private String receiverCity;
+//
+// /**
+// * 区
+// */
+// private String receiverTown;
+//
+// /**
+// * 收件人详细地址
+// */
+// private String receiverAddress;
+//
+// /**
+// * 发货快递单号(补发、换货发货、拦截订单发货)
+// */
+// private String shipWaybillCode;
+//
+// /**
+// * 发货快递公司
+// */
+// private String shipCompany;
+//
+// /**
+// * 状态:1已发出;2已完成(已收货);3已入库
+// */
+// private Integer status;
+//
+// /**
+// * 备注
+// */
+// private String remark;
+//
+// /**
+// *
+// */
+// private Date createTime;
+//
+// /**
+// *
+// */
+// private String createBy;
+//
+// /**
+// *
+// */
+// private Date updateTime;
+//
+// /**
+// *
+// */
+// private String updateBy;
+//
+// private static final long serialVersionUID = 1L;
+//}
\ No newline at end of file
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsBrand.java b/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsBrand.java
new file mode 100644
index 0000000..b92d808
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsBrand.java
@@ -0,0 +1,55 @@
+package cn.qihangerp.api.domain;
+
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 商品品牌对象 erp_goods_brand
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class ErpGoodsBrand extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键ID */
+ private Long id;
+
+ /** 品牌名 */
+ @Excel(name = "品牌名")
+ private String name;
+
+ /** 状态 */
+ @Excel(name = "状态")
+ private Long status;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+ public void setStatus(Long status)
+ {
+ this.status = status;
+ }
+
+ public Long getStatus()
+ {
+ return status;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsCategory.java b/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsCategory.java
new file mode 100644
index 0000000..34b185a
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsCategory.java
@@ -0,0 +1,120 @@
+package cn.qihangerp.api.domain;
+
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 商品分类对象 erp_goods_category
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class ErpGoodsCategory extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** $column.columnComment */
+ private Long id;
+
+ /** 分类编码 */
+ @Excel(name = "分类编码")
+ private String number;
+
+ /** 分类名称 */
+ @Excel(name = "分类名称")
+ private String name;
+
+ /** 上架分类id */
+ @Excel(name = "上架分类id")
+ private Long parentId;
+
+ /** 分类路径 */
+ @Excel(name = "分类路径")
+ private String path;
+
+ /** 排序值 */
+ @Excel(name = "排序值")
+ private Long sort;
+
+ /** 图片 */
+ @Excel(name = "图片")
+ private String image;
+
+ /** 0正常 1删除 */
+ @Excel(name = "0正常 1删除")
+ private Integer isDelete;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setNumber(String number)
+ {
+ this.number = number;
+ }
+
+ public String getNumber()
+ {
+ return number;
+ }
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+ public void setParentId(Long parentId)
+ {
+ this.parentId = parentId;
+ }
+
+ public Long getParentId()
+ {
+ return parentId;
+ }
+ public void setPath(String path)
+ {
+ this.path = path;
+ }
+
+ public String getPath()
+ {
+ return path;
+ }
+ public void setSort(Long sort)
+ {
+ this.sort = sort;
+ }
+
+ public Long getSort()
+ {
+ return sort;
+ }
+ public void setImage(String image)
+ {
+ this.image = image;
+ }
+
+ public String getImage()
+ {
+ return image;
+ }
+ public void setIsDelete(Integer isDelete)
+ {
+ this.isDelete = isDelete;
+ }
+
+ public Integer getIsDelete()
+ {
+ return isDelete;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsCategoryAttribute.java b/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsCategoryAttribute.java
new file mode 100644
index 0000000..dc12b0f
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsCategoryAttribute.java
@@ -0,0 +1,81 @@
+package cn.qihangerp.api.domain;
+
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 商品分类属性对象 erp_goods_category_attribute
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class ErpGoodsCategoryAttribute extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键id */
+ private Long id;
+
+ /** 分类id(0为公共) */
+ @Excel(name = "分类id", readConverterExp = "0=为公共")
+ private Long categoryId;
+
+ /** 类型:0属性1规格 */
+ @Excel(name = "类型:0属性1规格")
+ private Long type;
+
+ /** '属性名' */
+ @Excel(name = "'属性名'")
+ private String title;
+
+ /** 固定值color颜色size尺码style款式 */
+ @Excel(name = "固定值color颜色size尺码style款式")
+ private String code;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setCategoryId(Long categoryId)
+ {
+ this.categoryId = categoryId;
+ }
+
+ public Long getCategoryId()
+ {
+ return categoryId;
+ }
+ public void setType(Long type)
+ {
+ this.type = type;
+ }
+
+ public Long getType()
+ {
+ return type;
+ }
+ public void setTitle(String title)
+ {
+ this.title = title;
+ }
+
+ public String getTitle()
+ {
+ return title;
+ }
+ public void setCode(String code)
+ {
+ this.code = code;
+ }
+
+ public String getCode()
+ {
+ return code;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsCategoryAttributeValue.java b/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsCategoryAttributeValue.java
new file mode 100644
index 0000000..d93d4ad
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsCategoryAttributeValue.java
@@ -0,0 +1,94 @@
+package cn.qihangerp.api.domain;
+
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 商品分类属性值对象 erp_goods_category_attribute_value
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class ErpGoodsCategoryAttributeValue extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键,属性值id */
+ private Long id;
+
+ /** 属性id */
+ @Excel(name = "属性id")
+ private Long categoryAttributeId;
+
+ /** 属性值文本 */
+ @Excel(name = "属性值文本")
+ private String value;
+
+ /** 生成SKU的编码 */
+ @Excel(name = "生成SKU的编码")
+ private String skuCode;
+
+ /** 排序 */
+ @Excel(name = "排序")
+ private Long orderNum;
+
+ /** 是否删除 */
+ @Excel(name = "是否删除")
+ private Long isDelete;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setCategoryAttributeId(Long categoryAttributeId)
+ {
+ this.categoryAttributeId = categoryAttributeId;
+ }
+
+ public Long getCategoryAttributeId()
+ {
+ return categoryAttributeId;
+ }
+ public void setValue(String value)
+ {
+ this.value = value;
+ }
+
+ public String getValue()
+ {
+ return value;
+ }
+ public void setSkuCode(String skuCode)
+ {
+ this.skuCode = skuCode;
+ }
+
+ public String getSkuCode()
+ {
+ return skuCode;
+ }
+ public void setOrderNum(Long orderNum)
+ {
+ this.orderNum = orderNum;
+ }
+
+ public Long getOrderNum()
+ {
+ return orderNum;
+ }
+ public void setIsDelete(Long isDelete)
+ {
+ this.isDelete = isDelete;
+ }
+
+ public Long getIsDelete()
+ {
+ return isDelete;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsInventory.java b/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsInventory.java
new file mode 100644
index 0000000..1f744bb
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsInventory.java
@@ -0,0 +1,134 @@
+package cn.qihangerp.api.domain;
+
+import java.util.List;
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 商品库存对象 erp_goods_inventory
+ *
+ * @author qihang
+ * @date 2024-01-09
+ */
+public class ErpGoodsInventory extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键ID */
+ private Long id;
+
+ /** 商品id */
+ @Excel(name = "商品id")
+ private Long goodsId;
+
+ /** 商品编码 */
+ @Excel(name = "商品编码")
+ private String goodsNumber;
+
+ /** 商品规格id */
+ @Excel(name = "商品规格id")
+ private Long specId;
+
+ /** 规格编码(唯一) */
+ @Excel(name = "规格编码", readConverterExp = "唯=一")
+ private String specNumber;
+
+ /** 当前库存 */
+ @Excel(name = "当前库存")
+ private Long currentQty;
+
+ /** 锁定库存 */
+ @Excel(name = "锁定库存")
+ private Long lockedQty;
+
+ /** 0正常 1删除 */
+ @Excel(name = "0正常 1删除")
+ private Integer isDelete;
+
+ /** 商品库存明细信息 */
+ private List erpGoodsInventoryDetailList;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setGoodsId(Long goodsId)
+ {
+ this.goodsId = goodsId;
+ }
+
+ public Long getGoodsId()
+ {
+ return goodsId;
+ }
+ public void setGoodsNumber(String goodsNumber)
+ {
+ this.goodsNumber = goodsNumber;
+ }
+
+ public String getGoodsNumber()
+ {
+ return goodsNumber;
+ }
+ public void setSpecId(Long specId)
+ {
+ this.specId = specId;
+ }
+
+ public Long getSpecId()
+ {
+ return specId;
+ }
+ public void setSpecNumber(String specNumber)
+ {
+ this.specNumber = specNumber;
+ }
+
+ public String getSpecNumber()
+ {
+ return specNumber;
+ }
+ public void setCurrentQty(Long currentQty)
+ {
+ this.currentQty = currentQty;
+ }
+
+ public Long getCurrentQty()
+ {
+ return currentQty;
+ }
+ public void setLockedQty(Long lockedQty)
+ {
+ this.lockedQty = lockedQty;
+ }
+
+ public Long getLockedQty()
+ {
+ return lockedQty;
+ }
+ public void setIsDelete(Integer isDelete)
+ {
+ this.isDelete = isDelete;
+ }
+
+ public Integer getIsDelete()
+ {
+ return isDelete;
+ }
+
+ public List getErpGoodsInventoryDetailList()
+ {
+ return erpGoodsInventoryDetailList;
+ }
+
+ public void setErpGoodsInventoryDetailList(List erpGoodsInventoryDetailList)
+ {
+ this.erpGoodsInventoryDetailList = erpGoodsInventoryDetailList;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsInventoryDetail.java b/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsInventoryDetail.java
new file mode 100644
index 0000000..ddcdc32
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ErpGoodsInventoryDetail.java
@@ -0,0 +1,169 @@
+package cn.qihangerp.api.domain;
+
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 商品库存明细对象 erp_goods_inventory_detail
+ *
+ * @author qihang
+ * @date 2024-01-09
+ */
+public class ErpGoodsInventoryDetail extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键ID */
+ private Long id;
+
+ /** 商品库存id */
+ @Excel(name = "商品库存id")
+ private Long inventoryId;
+
+ /** 入库数量 */
+ @Excel(name = "入库数量")
+ private Long inQty;
+
+ /** 入库前数量 */
+ @Excel(name = "入库前数量")
+ private Long originQty;
+
+ /** 当前库存数量 */
+ @Excel(name = "当前库存数量")
+ private Long currentQty;
+
+ /** 采购价 */
+ @Excel(name = "采购价")
+ private Long purPrice;
+
+ /** 入库单id */
+ @Excel(name = "入库单id")
+ private Long entryId;
+
+ /** 入库单itemId */
+ @Excel(name = "入库单itemId")
+ private Long entryItemId;
+
+ /** 规格id */
+ @Excel(name = "规格id")
+ private Long specId;
+
+ /** 商品id */
+ @Excel(name = "商品id")
+ private Long goodsId;
+
+ /** 入库仓位id */
+ @Excel(name = "入库仓位id")
+ private Long inLocation;
+ private String locationNum;
+
+ public String getLocationNum() {
+ return locationNum;
+ }
+
+ public void setLocationNum(String locationNum) {
+ this.locationNum = locationNum;
+ }
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setInventoryId(Long inventoryId)
+ {
+ this.inventoryId = inventoryId;
+ }
+
+ public Long getInventoryId()
+ {
+ return inventoryId;
+ }
+ public void setInQty(Long inQty)
+ {
+ this.inQty = inQty;
+ }
+
+ public Long getInQty()
+ {
+ return inQty;
+ }
+ public void setOriginQty(Long originQty)
+ {
+ this.originQty = originQty;
+ }
+
+ public Long getOriginQty()
+ {
+ return originQty;
+ }
+ public void setCurrentQty(Long currentQty)
+ {
+ this.currentQty = currentQty;
+ }
+
+ public Long getCurrentQty()
+ {
+ return currentQty;
+ }
+ public void setPurPrice(Long purPrice)
+ {
+ this.purPrice = purPrice;
+ }
+
+ public Long getPurPrice()
+ {
+ return purPrice;
+ }
+ public void setEntryId(Long entryId)
+ {
+ this.entryId = entryId;
+ }
+
+ public Long getEntryId()
+ {
+ return entryId;
+ }
+ public void setEntryItemId(Long entryItemId)
+ {
+ this.entryItemId = entryItemId;
+ }
+
+ public Long getEntryItemId()
+ {
+ return entryItemId;
+ }
+ public void setSpecId(Long specId)
+ {
+ this.specId = specId;
+ }
+
+ public Long getSpecId()
+ {
+ return specId;
+ }
+ public void setGoodsId(Long goodsId)
+ {
+ this.goodsId = goodsId;
+ }
+
+ public Long getGoodsId()
+ {
+ return goodsId;
+ }
+ public void setInLocation(Long inLocation)
+ {
+ this.inLocation = inLocation;
+ }
+
+ public Long getInLocation()
+ {
+ return inLocation;
+ }
+
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ErpSaleAfterInfo.java b/api/src/main/java/cn/qihangerp/api/domain/ErpSaleAfterInfo.java
new file mode 100644
index 0000000..32d89db
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ErpSaleAfterInfo.java
@@ -0,0 +1,179 @@
+package cn.qihangerp.api.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 售后处理表
+ * @TableName erp_sale_after_info
+ */
+@Data
+public class ErpSaleAfterInfo implements Serializable {
+ /**
+ *
+ */
+ private String id;
+
+ /**
+ * 类型(10退货;20换货;80补发;99订单拦截;)
+ */
+ private Integer type;
+
+ /**
+ * 店铺id
+ */
+ private Integer shopId;
+
+ /**
+ * 店铺类型
+ */
+ private Integer shopType;
+
+ /**
+ * 售后单号
+ */
+ private String afterSaleOrderId;
+
+ /**
+ * 订单号
+ */
+ private String orderId;
+
+ /**
+ * 子订单号
+ */
+ private String subOrderId;
+
+ /**
+ * 商品spuid
+ */
+ private String productId;
+
+ /**
+ * 商品skuid
+ */
+ private String skuId;
+
+ /**
+ * 数量
+ */
+ private Integer count;
+
+ /**
+ * 商品标题
+ */
+ private String title;
+
+ /**
+ * 商品图片
+ */
+ private String img;
+
+ /**
+ * sku描述
+ */
+ private String skuInfo;
+
+ /**
+ * sku编码
+ */
+ private String skuCode;
+
+ /**
+ * ERP商品id
+ */
+ private Integer erpGoodsId;
+
+ /**
+ * ERP商品skuId
+ */
+ private Integer erpSkuId;
+
+ /**
+ * 退回人信息json
+ */
+ private String returnInfo;
+
+ /**
+ * 退回快递单号
+ */
+ private String returnWaybillCode;
+
+ /**
+ * 退回物流公司名称
+ */
+ private String returnCompany;
+
+ /**
+ * 收件人姓名
+ */
+ private String receiverName;
+
+ /**
+ * 收件人联系电话
+ */
+ private String receiverTel;
+
+ /**
+ * 省
+ */
+ private String receiverProvince;
+
+ /**
+ * 市
+ */
+ private String receiverCity;
+
+ /**
+ * 区
+ */
+ private String receiverTown;
+
+ /**
+ * 收件人详细地址
+ */
+ private String receiverAddress;
+
+ /**
+ * 发货快递单号(补发、换货发货、拦截订单发货)
+ */
+ private String shipWaybillCode;
+
+ /**
+ * 发货快递公司
+ */
+ private String shipCompany;
+
+ /**
+ * 状态:1已发出;2已完成(已收货);3已入库
+ */
+ private Integer status;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ *
+ */
+ private Date createTime;
+
+ /**
+ *
+ */
+ private String createBy;
+
+ /**
+ *
+ */
+ private Date updateTime;
+
+ /**
+ *
+ */
+ private String updateBy;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ErpShipLogistics.java b/api/src/main/java/cn/qihangerp/api/domain/ErpShipLogistics.java
new file mode 100644
index 0000000..f37a956
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ErpShipLogistics.java
@@ -0,0 +1,77 @@
+package cn.qihangerp.api.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 物流公司对象 b_logistics_company
+ *
+ * @author qihang
+ * @date 2024-01-12
+ */
+@TableName("erp_ship_logistics")
+public class ErpShipLogistics extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** $column.columnComment */
+ private Long id;
+
+ /** 快递公司 */
+ @Excel(name = "快递公司")
+ private String name;
+
+ /** 快递公司编码 */
+ @Excel(name = "快递公司编码")
+ private String number;
+ private String remark;
+
+ private Integer status;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+ public void setNumber(String number)
+ {
+ this.number = number;
+ }
+
+ public String getNumber()
+ {
+ return number;
+ }
+
+ @Override
+ public String getRemark() {
+ return remark;
+ }
+
+ @Override
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public Integer getStatus() {
+ return status;
+ }
+
+ public void setStatus(Integer status) {
+ this.status = status;
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ErpShipOrder.java b/api/src/main/java/cn/qihangerp/api/domain/ErpShipOrder.java
new file mode 100644
index 0000000..849e888
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ErpShipOrder.java
@@ -0,0 +1,219 @@
+package cn.qihangerp.api.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 订单发货表
+ * @TableName erp_ship_order
+ */
+@Data
+public class ErpShipOrder implements Serializable {
+ /**
+ * 主键ID
+ */
+ private String id;
+
+ /**
+ * 店铺ID
+ */
+ private Long shopId;
+
+ /**
+ * 店铺平台
+ */
+ private Integer shopType;
+
+ /**
+ * erp系统商品id
+ */
+ private Long supplierId;
+
+ /**
+ * 订单编号
+ */
+ private String orderNum;
+
+ /**
+ * erp订单ID
+ */
+ private Long erpOrderId;
+
+ /**
+ * erp子订单ID
+ */
+ private String erpOrderItemId;
+
+ /**
+ * 订单日期
+ */
+ private String orderTime;
+
+ /**
+ * erp系统商品id
+ */
+ private Long goodsId;
+
+ /**
+ * erp系统商品规格id
+ */
+ private Long specId;
+
+ /**
+ * 商品规格编码
+ */
+ private String specNum;
+
+ /**
+ * 商品数量
+ */
+ private Integer quantity;
+
+ /**
+ * 说明
+ */
+ private String remark;
+
+ /**
+ * 物流公司
+ */
+ private String logisticsCompany;
+
+ /**
+ * 物流单号
+ */
+ private String logisticsCode;
+
+ /**
+ * 运费
+ */
+ private Float logisticsFee;
+
+ /**
+ * 发货时间
+ */
+ private String shipTime;
+
+ /**
+ * 发货人
+ */
+ private String shipMan;
+
+ /**
+ * 出库人
+ */
+ private String outOperator;
+
+ /**
+ * 出库仓位
+ */
+ private String outPosition;
+
+ /**
+ * 出库时间
+ */
+ private Date outTime;
+
+ /**
+ * 发货类型(0仓库发货;1供应商代发)
+ */
+ private Integer shipType;
+
+ /**
+ * 状态(1出库中2已出库3已发货)
+ */
+ private Integer shipStatus;
+
+ /**
+ * 包裹重量
+ */
+ private Double packageWeight;
+
+ /**
+ * 包裹长度
+ */
+ private Double packageLength;
+
+ /**
+ * 包裹宽度
+ */
+ private Double packageWidth;
+
+ /**
+ * 包裹高度
+ */
+ private Double packageHeight;
+
+ /**
+ * 打包操作人
+ */
+ private String packsgeOperator;
+
+ /**
+ * 打包时间
+ */
+ private Date packsgeTime;
+
+ /**
+ * 包裹内容JSON
+ */
+ private String packages;
+
+ /**
+ * 收件人姓名
+ */
+ private String receiverName;
+
+ /**
+ * 收件人手机号
+ */
+ private String receiverPhone;
+
+ /**
+ * 收件人地址
+ */
+ private String address;
+
+ /**
+ * 国家/地区
+ */
+ private String country;
+
+ /**
+ * 省
+ */
+ private String province;
+
+ /**
+ * 市
+ */
+ private String city;
+
+ /**
+ * 区
+ */
+ private String town;
+
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ErpShipOrderAgentFee.java b/api/src/main/java/cn/qihangerp/api/domain/ErpShipOrderAgentFee.java
new file mode 100644
index 0000000..e2001b4
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ErpShipOrderAgentFee.java
@@ -0,0 +1,100 @@
+package cn.qihangerp.api.domain;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 供应商代发账单
+ * @TableName erp_ship_order_agent_fee
+ */
+@Data
+public class ErpShipOrderAgentFee implements Serializable {
+ /**
+ *
+ */
+ private Long id;
+
+ /**
+ * 订单号
+ */
+ private String orderNum;
+
+ /**
+ * 店铺id
+ */
+ private Long shopId;
+
+ /**
+ * 供应商id
+ */
+ private Long supplierId;
+
+ /**
+ * 供应商名称
+ */
+ private String supplierName;
+
+ /**
+ * 日期
+ */
+ private Date date;
+
+ /**
+ * 物流公司
+ */
+ private String logisticsCompany;
+
+ /**
+ * 物流单号
+ */
+ private String logisticsCode;
+
+ /**
+ * 应付总金额
+ */
+ private Float totalAmount;
+
+ /**
+ * 物流费用
+ */
+ private Float shipAmount;
+
+ /**
+ * 商品金额
+ */
+ private Float goodsAmount;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 状态(0已生成1已结算)
+ */
+ private Integer status;
+
+ /**
+ * 订单创建时间
+ */
+ private Date createTime;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ErpShipOrderFee.java b/api/src/main/java/cn/qihangerp/api/domain/ErpShipOrderFee.java
new file mode 100644
index 0000000..4ba3404
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ErpShipOrderFee.java
@@ -0,0 +1,130 @@
+package cn.qihangerp.api.domain;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 订单发货物流费用
+ * @TableName erp_ship_order_fee
+ */
+@Data
+public class ErpShipOrderFee implements Serializable {
+ /**
+ *
+ */
+ private Long id;
+
+ /**
+ * 物流公司
+ */
+ private String logisticsCompany;
+
+ /**
+ * 物流公司id
+ */
+ private String logisticsCompanyId;
+
+ /**
+ * 物流单号
+ */
+ private String logisticsNum;
+
+ /**
+ * 订单号
+ */
+ private String orderNum;
+
+ /**
+ * 店铺id
+ */
+ private Long shopId;
+
+ /**
+ * 应付金额
+ */
+ private Float amount;
+
+ /**
+ * 应付日期
+ */
+ private Date date;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 状态(0已生成1已结算)
+ */
+ private Integer status;
+
+ /**
+ * 订单创建时间
+ */
+ private Date createTime;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 长
+ */
+ private Float length;
+
+ /**
+ * 宽
+ */
+ private Float width;
+
+ /**
+ * 高
+ */
+ private Float height;
+
+ /**
+ * 重量
+ */
+ private Float weight;
+
+ /**
+ * 收件人姓名
+ */
+ private String receiverName;
+
+ /**
+ * 收件人手机号
+ */
+ private String receiverPhone;
+
+ /**
+ * 省
+ */
+ private String province;
+
+ /**
+ * 市
+ */
+ private String city;
+
+ /**
+ * 区
+ */
+ private String town;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/api/src/main/java/cn/qihangerp/api/domain/FmsInventoryReport.java b/api/src/main/java/cn/qihangerp/api/domain/FmsInventoryReport.java
new file mode 100644
index 0000000..29fc641
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/FmsInventoryReport.java
@@ -0,0 +1,112 @@
+//package cn.qihangerp.api.domain;
+//
+//import java.math.BigDecimal;
+//import java.util.List;
+//import java.util.Date;
+//import com.fasterxml.jackson.annotation.JsonFormat;
+//import com.qihang.common.annotation.Excel;
+//import com.qihang.core.domain.BaseEntity;
+//
+///**
+// * 库存存货报对象 fms_inventory_report
+// *
+// * @author qihang
+// * @date 2024-01-28
+// */
+//public class FmsInventoryReport extends BaseEntity
+//{
+// private static final long serialVersionUID = 1L;
+//
+// /** $column.columnComment */
+// private Long id;
+//
+// /** 日期 */
+// @JsonFormat(pattern = "yyyy-MM-dd")
+// @Excel(name = "日期", width = 30, dateFormat = "yyyy-MM-dd")
+// private Date date;
+//
+// /** 库存总数量 */
+// @Excel(name = "库存总数量")
+// private Long total;
+//
+// /** 商品总数 */
+// @Excel(name = "商品总数")
+// private Long goodsCount;
+//
+// /** SKU总数 */
+// @Excel(name = "SKU总数")
+// private Long skuCount;
+//
+// /** 总货值 */
+// @Excel(name = "总货值")
+// private BigDecimal amount;
+//
+// /** 库存存货报明细信息 */
+// private List fmsInventoryReportDetailList;
+//
+// public void setId(Long id)
+// {
+// this.id = id;
+// }
+//
+// public Long getId()
+// {
+// return id;
+// }
+// public void setDate(Date date)
+// {
+// this.date = date;
+// }
+//
+// public Date getDate()
+// {
+// return date;
+// }
+// public void setTotal(Long total)
+// {
+// this.total = total;
+// }
+//
+// public Long getTotal()
+// {
+// return total;
+// }
+// public void setGoodsCount(Long goodsCount)
+// {
+// this.goodsCount = goodsCount;
+// }
+//
+// public Long getGoodsCount()
+// {
+// return goodsCount;
+// }
+// public void setSkuCount(Long skuCount)
+// {
+// this.skuCount = skuCount;
+// }
+//
+// public Long getSkuCount()
+// {
+// return skuCount;
+// }
+// public void setAmount(BigDecimal amount)
+// {
+// this.amount = amount;
+// }
+//
+// public BigDecimal getAmount()
+// {
+// return amount;
+// }
+//
+// public List getFmsInventoryReportDetailList()
+// {
+// return fmsInventoryReportDetailList;
+// }
+//
+// public void setFmsInventoryReportDetailList(List fmsInventoryReportDetailList)
+// {
+// this.fmsInventoryReportDetailList = fmsInventoryReportDetailList;
+// }
+//
+//}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/FmsInventoryReportDetail.java b/api/src/main/java/cn/qihangerp/api/domain/FmsInventoryReportDetail.java
new file mode 100644
index 0000000..73eb6f6
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/FmsInventoryReportDetail.java
@@ -0,0 +1,124 @@
+package cn.qihangerp.api.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 库存存货报明细对象 fms_inventory_report_detail
+ *
+ * @author qihang
+ * @date 2024-01-28
+ */
+public class FmsInventoryReportDetail extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** $column.columnComment */
+ private Long id;
+
+ /** Report外键ID */
+ @Excel(name = "Report外键ID")
+ private Long reportId;
+
+ /** 日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "日期", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date date;
+
+ /** 商品id */
+ @Excel(name = "商品id")
+ private Long goodsId;
+
+ /** 商品规格ID */
+ @Excel(name = "商品规格ID")
+ private Long specId;
+
+ /** 总数量 */
+ @Excel(name = "总数量")
+ private Long total;
+
+ /** 总货值 */
+ @Excel(name = "总货值")
+ private BigDecimal amount;
+
+ /** 库存分布 */
+ @Excel(name = "库存分布")
+ private String inventoryDist;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setReportId(Long reportId)
+ {
+ this.reportId = reportId;
+ }
+
+ public Long getReportId()
+ {
+ return reportId;
+ }
+ public void setDate(Date date)
+ {
+ this.date = date;
+ }
+
+ public Date getDate()
+ {
+ return date;
+ }
+ public void setGoodsId(Long goodsId)
+ {
+ this.goodsId = goodsId;
+ }
+
+ public Long getGoodsId()
+ {
+ return goodsId;
+ }
+ public void setSpecId(Long specId)
+ {
+ this.specId = specId;
+ }
+
+ public Long getSpecId()
+ {
+ return specId;
+ }
+ public void setTotal(Long total)
+ {
+ this.total = total;
+ }
+
+ public Long getTotal()
+ {
+ return total;
+ }
+ public void setAmount(BigDecimal amount)
+ {
+ this.amount = amount;
+ }
+
+ public BigDecimal getAmount()
+ {
+ return amount;
+ }
+ public void setInventoryDist(String inventoryDist)
+ {
+ this.inventoryDist = inventoryDist;
+ }
+
+ public String getInventoryDist()
+ {
+ return inventoryDist;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/FmsPayableAgentShip.java b/api/src/main/java/cn/qihangerp/api/domain/FmsPayableAgentShip.java
new file mode 100644
index 0000000..bd7f64a
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/FmsPayableAgentShip.java
@@ -0,0 +1,176 @@
+//package cn.qihangerp.api.domain;
+//
+//import java.math.BigDecimal;
+//import java.util.Date;
+//import com.fasterxml.jackson.annotation.JsonFormat;
+//import cn.qihangerp.common.annotation.Excel;
+//import cn.qihangerp.domain.BaseEntity;
+//
+///**
+// * 财务管理-应付款-代发账单对象 fms_payable_agent_ship
+// *
+// * @author qihang
+// * @date 2024-01-28
+// */
+//public class FmsPayableAgentShip extends BaseEntity
+//{
+// private static final long serialVersionUID = 1L;
+//
+// /** $column.columnComment */
+// private Long id;
+//
+// /** 订单号 */
+// @Excel(name = "订单号")
+// private String orderNum;
+//
+// /** 店铺id */
+// @Excel(name = "店铺id")
+// private Long shopId;
+//
+// /** 供应商id */
+// @Excel(name = "供应商id")
+// private Long supplierId;
+//
+// /** 供应商名称 */
+// @Excel(name = "供应商名称")
+// private String supplierName;
+//
+// /** 日期 */
+// @JsonFormat(pattern = "yyyy-MM-dd")
+// @Excel(name = "日期", width = 30, dateFormat = "yyyy-MM-dd")
+// private Date date;
+//
+// /** 物流公司 */
+// @Excel(name = "物流公司")
+// private String shipCompany;
+//
+// /** 物流单号 */
+// @Excel(name = "物流单号")
+// private String shipNo;
+//
+// /** 应付总金额 */
+// @Excel(name = "应付总金额")
+// private BigDecimal amount;
+//
+// /** 物流费用 */
+// @Excel(name = "物流费用")
+// private Float shipAmount;
+//
+// /** 商品金额 */
+// @Excel(name = "商品金额")
+// private BigDecimal goodsAmount;
+//
+// /** 状态(0已生成1已结算) */
+// @Excel(name = "状态", readConverterExp = "状态(0已生成1已结算)")
+// private Long status;
+//
+// public void setId(Long id)
+// {
+// this.id = id;
+// }
+//
+// public Long getId()
+// {
+// return id;
+// }
+// public void setOrderNum(String orderNum)
+// {
+// this.orderNum = orderNum;
+// }
+//
+// public String getOrderNum()
+// {
+// return orderNum;
+// }
+// public void setShopId(Long shopId)
+// {
+// this.shopId = shopId;
+// }
+//
+// public Long getShopId()
+// {
+// return shopId;
+// }
+// public void setSupplierId(Long supplierId)
+// {
+// this.supplierId = supplierId;
+// }
+//
+// public Long getSupplierId()
+// {
+// return supplierId;
+// }
+// public void setSupplierName(String supplierName)
+// {
+// this.supplierName = supplierName;
+// }
+//
+// public String getSupplierName()
+// {
+// return supplierName;
+// }
+// public void setDate(Date date)
+// {
+// this.date = date;
+// }
+//
+// public Date getDate()
+// {
+// return date;
+// }
+// public void setShipCompany(String shipCompany)
+// {
+// this.shipCompany = shipCompany;
+// }
+//
+// public String getShipCompany()
+// {
+// return shipCompany;
+// }
+// public void setShipNo(String shipNo)
+// {
+// this.shipNo = shipNo;
+// }
+//
+// public String getShipNo()
+// {
+// return shipNo;
+// }
+// public void setAmount(BigDecimal amount)
+// {
+// this.amount = amount;
+// }
+//
+// public BigDecimal getAmount()
+// {
+// return amount;
+// }
+// public void setShipAmount(Float shipAmount)
+// {
+// this.shipAmount = shipAmount;
+// }
+//
+// public Float getShipAmount()
+// {
+// return shipAmount;
+// }
+// public void setGoodsAmount(BigDecimal goodsAmount)
+// {
+// this.goodsAmount = goodsAmount;
+// }
+//
+// public BigDecimal getGoodsAmount()
+// {
+// return goodsAmount;
+// }
+// public void setStatus(Long status)
+// {
+// this.status = status;
+// }
+//
+// public Long getStatus()
+// {
+// return status;
+// }
+//
+//}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/FmsPayableShipFee.java b/api/src/main/java/cn/qihangerp/api/domain/FmsPayableShipFee.java
new file mode 100644
index 0000000..5c1fc40
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/FmsPayableShipFee.java
@@ -0,0 +1,254 @@
+//package cn.qihangerp.api.domain;
+//
+//import java.math.BigDecimal;
+//import java.util.Date;
+//import com.fasterxml.jackson.annotation.JsonFormat;
+//import cn.qihangerp.common.annotation.Excel;
+//import cn.qihangerp.domain.BaseEntity;
+//
+///**
+// * 财务管理-应付款-物流费用对象 fms_payable_ship_fee
+// *
+// * @author qihang
+// * @date 2024-01-28
+// */
+//public class FmsPayableShipFee extends BaseEntity
+//{
+// private static final long serialVersionUID = 1L;
+//
+// /** $column.columnComment */
+// private Long id;
+//
+// /** 物流公司 */
+// @Excel(name = "物流公司")
+// private String logisticsCompany;
+//
+// /** 物流公司id */
+// @Excel(name = "物流公司id")
+// private String logisticsCompanyId;
+//
+// /** 物流单号 */
+// @Excel(name = "物流单号")
+// private String logisticsNum;
+//
+// /** 订单号 */
+// @Excel(name = "订单号")
+// private String orderNum;
+//
+// /** 店铺id */
+// @Excel(name = "店铺id")
+// private Long shopId;
+//
+// /** 应付金额 */
+// @Excel(name = "应付金额")
+// private BigDecimal amount;
+//
+// /** 应付日期 */
+// @JsonFormat(pattern = "yyyy-MM-dd")
+// @Excel(name = "应付日期", width = 30, dateFormat = "yyyy-MM-dd")
+// private Date date;
+//
+// /** 状态(0已生成1已结算) */
+// @Excel(name = "状态", readConverterExp = "状态(0已生成1已结算)")
+// private Long status;
+//
+// /** 长 */
+// @Excel(name = "长")
+// private Float length;
+//
+// /** 宽 */
+// @Excel(name = "宽")
+// private Float width;
+//
+// /** 高 */
+// @Excel(name = "高")
+// private Float height;
+//
+// /** 重量 */
+// @Excel(name = "重量")
+// private Float weight;
+//
+// /** 收件人姓名 */
+// @Excel(name = "收件人姓名")
+// private String receiverName;
+//
+// /** 收件人手机号 */
+// @Excel(name = "收件人手机号")
+// private String receiverPhone;
+//
+// /** 省 */
+// @Excel(name = "省")
+// private String province;
+//
+// /** 市 */
+// @Excel(name = "市")
+// private String city;
+//
+// /** 区 */
+// @Excel(name = "区")
+// private String town;
+//
+// public void setId(Long id)
+// {
+// this.id = id;
+// }
+//
+// public Long getId()
+// {
+// return id;
+// }
+// public void setLogisticsCompany(String logisticsCompany)
+// {
+// this.logisticsCompany = logisticsCompany;
+// }
+//
+// public String getLogisticsCompany()
+// {
+// return logisticsCompany;
+// }
+// public void setLogisticsCompanyId(String logisticsCompanyId)
+// {
+// this.logisticsCompanyId = logisticsCompanyId;
+// }
+//
+// public String getLogisticsCompanyId()
+// {
+// return logisticsCompanyId;
+// }
+// public void setLogisticsNum(String logisticsNum)
+// {
+// this.logisticsNum = logisticsNum;
+// }
+//
+// public String getLogisticsNum()
+// {
+// return logisticsNum;
+// }
+// public void setOrderNum(String orderNum)
+// {
+// this.orderNum = orderNum;
+// }
+//
+// public String getOrderNum()
+// {
+// return orderNum;
+// }
+// public void setShopId(Long shopId)
+// {
+// this.shopId = shopId;
+// }
+//
+// public Long getShopId()
+// {
+// return shopId;
+// }
+// public void setAmount(BigDecimal amount)
+// {
+// this.amount = amount;
+// }
+//
+// public BigDecimal getAmount()
+// {
+// return amount;
+// }
+// public void setDate(Date date)
+// {
+// this.date = date;
+// }
+//
+// public Date getDate()
+// {
+// return date;
+// }
+// public void setStatus(Long status)
+// {
+// this.status = status;
+// }
+//
+// public Long getStatus()
+// {
+// return status;
+// }
+// public void setLength(Float length)
+// {
+// this.length = length;
+// }
+//
+// public Float getLength()
+// {
+// return length;
+// }
+// public void setWidth(Float width)
+// {
+// this.width = width;
+// }
+//
+// public Float getWidth()
+// {
+// return width;
+// }
+// public void setHeight(Float height)
+// {
+// this.height = height;
+// }
+//
+// public Float getHeight()
+// {
+// return height;
+// }
+// public void setWeight(Float weight)
+// {
+// this.weight = weight;
+// }
+//
+// public Float getWeight()
+// {
+// return weight;
+// }
+// public void setReceiverName(String receiverName)
+// {
+// this.receiverName = receiverName;
+// }
+//
+// public String getReceiverName()
+// {
+// return receiverName;
+// }
+// public void setReceiverPhone(String receiverPhone)
+// {
+// this.receiverPhone = receiverPhone;
+// }
+//
+// public String getReceiverPhone()
+// {
+// return receiverPhone;
+// }
+// public void setProvince(String province)
+// {
+// this.province = province;
+// }
+//
+// public String getProvince()
+// {
+// return province;
+// }
+// public void setCity(String city)
+// {
+// this.city = city;
+// }
+//
+// public String getCity()
+// {
+// return city;
+// }
+// public void setTown(String town)
+// {
+// this.town = town;
+// }
+//
+// public String getTown()
+// {
+// return town;
+// }
+//
+//}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/FmsReceivableOrder.java b/api/src/main/java/cn/qihangerp/api/domain/FmsReceivableOrder.java
new file mode 100644
index 0000000..98cc5fd
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/FmsReceivableOrder.java
@@ -0,0 +1,215 @@
+//package cn.qihangerp.api.domain;
+//
+//import java.math.BigDecimal;
+//import java.util.Date;
+//import com.fasterxml.jackson.annotation.JsonFormat;
+//import com.qihang.common.annotation.Excel;
+//import com.qihang.core.domain.BaseEntity;
+//
+///**
+// * 财务管理-应收款-订单收入对象 fms_receivable_order
+// *
+// * @author qihang
+// * @date 2024-01-28
+// */
+//public class FmsReceivableOrder extends BaseEntity
+//{
+// private static final long serialVersionUID = 1L;
+//
+// /** $column.columnComment */
+// private Long id;
+//
+// /** 日期 */
+// @JsonFormat(pattern = "yyyy-MM-dd")
+// @Excel(name = "日期", width = 30, dateFormat = "yyyy-MM-dd")
+// private Date date;
+//
+// /** 订单号 */
+// @Excel(name = "订单号")
+// private String orderNum;
+//
+// /** 订单id */
+// @Excel(name = "订单id")
+// private Long orderId;
+//
+// /** 子订单id */
+// @Excel(name = "子订单id")
+// private Long orderItemId;
+//
+// /** 商品id */
+// @Excel(name = "商品id")
+// private Long goodsId;
+//
+// /** 商品名称 */
+// @Excel(name = "商品名称")
+// private String goodsName;
+//
+// /** 规格id */
+// @Excel(name = "规格id")
+// private Long specId;
+//
+// /** 规格名称 */
+// @Excel(name = "规格名称")
+// private String specName;
+//
+// /** 单价 */
+// @Excel(name = "单价")
+// private Double price;
+//
+// /** 应收金额 */
+// @Excel(name = "应收金额")
+// private Double amount;
+//
+// /** 数量 */
+// @Excel(name = "数量")
+// private Long quantity;
+//
+// /** 发票号码 */
+// @Excel(name = "发票号码")
+// private String invoiceNo;
+//
+// /** 订单说明 */
+// @Excel(name = "订单说明")
+// private String orderDesc;
+//
+// /** 状态(0已生成1已结算) */
+// @Excel(name = "状态", readConverterExp = "状态(0已生成1已结算)")
+// private Long status;
+//
+// public void setId(Long id)
+// {
+// this.id = id;
+// }
+//
+// public Long getId()
+// {
+// return id;
+// }
+// public void setDate(Date date)
+// {
+// this.date = date;
+// }
+//
+// public Date getDate()
+// {
+// return date;
+// }
+// public void setOrderNum(String orderNum)
+// {
+// this.orderNum = orderNum;
+// }
+//
+// public String getOrderNum()
+// {
+// return orderNum;
+// }
+// public void setOrderId(Long orderId)
+// {
+// this.orderId = orderId;
+// }
+//
+// public Long getOrderId()
+// {
+// return orderId;
+// }
+// public void setOrderItemId(Long orderItemId)
+// {
+// this.orderItemId = orderItemId;
+// }
+//
+// public Long getOrderItemId()
+// {
+// return orderItemId;
+// }
+// public void setGoodsId(Long goodsId)
+// {
+// this.goodsId = goodsId;
+// }
+//
+// public Long getGoodsId()
+// {
+// return goodsId;
+// }
+// public void setGoodsName(String goodsName)
+// {
+// this.goodsName = goodsName;
+// }
+//
+// public String getGoodsName()
+// {
+// return goodsName;
+// }
+// public void setSpecId(Long specId)
+// {
+// this.specId = specId;
+// }
+//
+// public Long getSpecId()
+// {
+// return specId;
+// }
+// public void setSpecName(String specName)
+// {
+// this.specName = specName;
+// }
+//
+// public String getSpecName()
+// {
+// return specName;
+// }
+// public void setPrice(Double price)
+// {
+// this.price = price;
+// }
+//
+// public Double getPrice()
+// {
+// return price;
+// }
+// public void setAmount(Double amount)
+// {
+// this.amount = amount;
+// }
+//
+// public Double getAmount()
+// {
+// return amount;
+// }
+// public void setQuantity(Long quantity)
+// {
+// this.quantity = quantity;
+// }
+//
+// public Long getQuantity()
+// {
+// return quantity;
+// }
+// public void setInvoiceNo(String invoiceNo)
+// {
+// this.invoiceNo = invoiceNo;
+// }
+//
+// public String getInvoiceNo()
+// {
+// return invoiceNo;
+// }
+// public void setOrderDesc(String orderDesc)
+// {
+// this.orderDesc = orderDesc;
+// }
+//
+// public String getOrderDesc()
+// {
+// return orderDesc;
+// }
+// public void setStatus(Long status)
+// {
+// this.status = status;
+// }
+//
+// public Long getStatus()
+// {
+// return status;
+// }
+//
+//}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/Goods.java b/api/src/main/java/cn/qihangerp/api/domain/Goods.java
new file mode 100644
index 0000000..5a81d75
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/Goods.java
@@ -0,0 +1,471 @@
+package cn.qihangerp.api.domain;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+import cn.qihangerp.api.domain.bo.GoodsSpecAddBo;
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 商品管理对象 erp_goods
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class Goods extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键id */
+ private Long id;
+
+ /** 商品名称 */
+ @Excel(name = "商品名称")
+ private String name;
+
+ /** 商品图片地址 */
+ @Excel(name = "商品图片地址")
+ private String image;
+
+ /** 商品编号 */
+ @Excel(name = "商品编号")
+ private String number;
+
+ /** 单位名称 */
+ @Excel(name = "单位名称")
+ private String unitName;
+
+ /** 商品分类ID */
+ @Excel(name = "商品分类ID")
+ private Long categoryId;
+
+ /** 条码 */
+ @Excel(name = "条码")
+ private String barCode;
+
+ /** 状态1销售中2已下架 */
+ @Excel(name = "状态1销售中2已下架")
+ private Integer status;
+
+ /** 衣长/裙长/裤长 */
+ @Excel(name = "衣长/裙长/裤长")
+ private Long length;
+
+ /** 高度/袖长 */
+ @Excel(name = "高度/袖长")
+ private Long height;
+
+ /** 宽度/胸阔(围) */
+ @Excel(name = "宽度/胸阔(围)")
+ private Long width;
+
+ /** 肩阔 */
+ @Excel(name = "肩阔")
+ private Long width1;
+
+ /** 腰阔 */
+ @Excel(name = "腰阔")
+ private Long width2;
+
+ /** 臀阔 */
+ @Excel(name = "臀阔")
+ private Long width3;
+
+ /** 重量 */
+ @Excel(name = "重量")
+ private Long weight;
+
+ /** 0启用 1禁用 */
+ @Excel(name = "0启用 1禁用")
+ private Integer disable;
+
+ /** 保质期 */
+ @Excel(name = "保质期")
+ private String period;
+
+ /** 预计采购价格 */
+ @Excel(name = "预计采购价格")
+ private BigDecimal purPrice;
+
+ /** 建议批发价 */
+ @Excel(name = "建议批发价")
+ private BigDecimal wholePrice;
+
+ /** 建议零售价 */
+ @Excel(name = "建议零售价")
+ private BigDecimal retailPrice;
+
+ /** 单位成本 */
+ @Excel(name = "单位成本")
+ private BigDecimal unitCost;
+
+ /** 供应商id */
+ @Excel(name = "供应商id")
+ private Long supplierId;
+
+ /** 品牌id */
+ @Excel(name = "品牌id")
+ private Long brandId;
+
+ /** 属性1:季节 */
+ @Excel(name = "属性1:季节")
+ private String attr1;
+
+ /** 属性2:分类 */
+ @Excel(name = "属性2:分类")
+ private String attr2;
+
+ /** 属性3:风格 */
+ @Excel(name = "属性3:风格")
+ private String attr3;
+
+ /** 属性4:年份 */
+ @Excel(name = "属性4:年份")
+ private String attr4;
+
+ /** 属性5:面料 */
+ @Excel(name = "属性5:面料")
+ private String attr5;
+
+ /** 外链url */
+ @Excel(name = "外链url")
+ private String linkUrl;
+
+ /** 最低库存(预警) */
+ @Excel(name = "最低库存", readConverterExp = "预=警")
+ private Long lowQty;
+
+ /** 最高库存(预警) */
+ @Excel(name = "最高库存", readConverterExp = "预=警")
+ private Long highQty;
+
+ private Long[] colorValues;
+ private Map colorImages;
+// private Map colorNames;
+ private Long[] sizeValues;
+ private Long[] styleValues;
+ private List specList;
+
+ public Map getColorImages() {
+ return colorImages;
+ }
+
+ public void setColorImages(Map colorImages) {
+ this.colorImages = colorImages;
+ }
+
+ public Long[] getColorValues() {
+ return colorValues;
+ }
+
+ public void setColorValues(Long[] colorValues) {
+ this.colorValues = colorValues;
+ }
+
+ public Long[] getSizeValues() {
+ return sizeValues;
+ }
+
+ public void setSizeValues(Long[] sizeValues) {
+ this.sizeValues = sizeValues;
+ }
+
+ public Long[] getStyleValues() {
+ return styleValues;
+ }
+
+ public void setStyleValues(Long[] styleValues) {
+ this.styleValues = styleValues;
+ }
+
+ public List getSpecList() {
+ return specList;
+ }
+
+ public void setSpecList(List specList) {
+ this.specList = specList;
+ }
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+ public void setImage(String image)
+ {
+ this.image = image;
+ }
+
+ public String getImage()
+ {
+ return image;
+ }
+ public void setNumber(String number)
+ {
+ this.number = number;
+ }
+
+ public String getNumber()
+ {
+ return number;
+ }
+ public void setUnitName(String unitName)
+ {
+ this.unitName = unitName;
+ }
+
+ public String getUnitName()
+ {
+ return unitName;
+ }
+ public void setCategoryId(Long categoryId)
+ {
+ this.categoryId = categoryId;
+ }
+
+ public Long getCategoryId()
+ {
+ return categoryId;
+ }
+ public void setBarCode(String barCode)
+ {
+ this.barCode = barCode;
+ }
+
+ public String getBarCode()
+ {
+ return barCode;
+ }
+ public void setStatus(Integer status)
+ {
+ this.status = status;
+ }
+
+ public Integer getStatus()
+ {
+ return status;
+ }
+ public void setLength(Long length)
+ {
+ this.length = length;
+ }
+
+ public Long getLength()
+ {
+ return length;
+ }
+ public void setHeight(Long height)
+ {
+ this.height = height;
+ }
+
+ public Long getHeight()
+ {
+ return height;
+ }
+ public void setWidth(Long width)
+ {
+ this.width = width;
+ }
+
+ public Long getWidth()
+ {
+ return width;
+ }
+ public void setWidth1(Long width1)
+ {
+ this.width1 = width1;
+ }
+
+ public Long getWidth1()
+ {
+ return width1;
+ }
+ public void setWidth2(Long width2)
+ {
+ this.width2 = width2;
+ }
+
+ public Long getWidth2()
+ {
+ return width2;
+ }
+ public void setWidth3(Long width3)
+ {
+ this.width3 = width3;
+ }
+
+ public Long getWidth3()
+ {
+ return width3;
+ }
+ public void setWeight(Long weight)
+ {
+ this.weight = weight;
+ }
+
+ public Long getWeight()
+ {
+ return weight;
+ }
+ public void setDisable(Integer disable)
+ {
+ this.disable = disable;
+ }
+
+ public Integer getDisable()
+ {
+ return disable;
+ }
+ public void setPeriod(String period)
+ {
+ this.period = period;
+ }
+
+ public String getPeriod()
+ {
+ return period;
+ }
+ public void setPurPrice(BigDecimal purPrice)
+ {
+ this.purPrice = purPrice;
+ }
+
+ public BigDecimal getPurPrice()
+ {
+ return purPrice;
+ }
+ public void setWholePrice(BigDecimal wholePrice)
+ {
+ this.wholePrice = wholePrice;
+ }
+
+ public BigDecimal getWholePrice()
+ {
+ return wholePrice;
+ }
+ public void setRetailPrice(BigDecimal retailPrice)
+ {
+ this.retailPrice = retailPrice;
+ }
+
+ public BigDecimal getRetailPrice()
+ {
+ return retailPrice;
+ }
+ public void setUnitCost(BigDecimal unitCost)
+ {
+ this.unitCost = unitCost;
+ }
+
+ public BigDecimal getUnitCost()
+ {
+ return unitCost;
+ }
+ public void setSupplierId(Long supplierId)
+ {
+ this.supplierId = supplierId;
+ }
+
+ public Long getSupplierId()
+ {
+ return supplierId;
+ }
+ public void setBrandId(Long brandId)
+ {
+ this.brandId = brandId;
+ }
+
+ public Long getBrandId()
+ {
+ return brandId;
+ }
+ public void setAttr1(String attr1)
+ {
+ this.attr1 = attr1;
+ }
+
+ public String getAttr1()
+ {
+ return attr1;
+ }
+ public void setAttr2(String attr2)
+ {
+ this.attr2 = attr2;
+ }
+
+ public String getAttr2()
+ {
+ return attr2;
+ }
+ public void setAttr3(String attr3)
+ {
+ this.attr3 = attr3;
+ }
+
+ public String getAttr3()
+ {
+ return attr3;
+ }
+ public void setAttr4(String attr4)
+ {
+ this.attr4 = attr4;
+ }
+
+ public String getAttr4()
+ {
+ return attr4;
+ }
+ public void setAttr5(String attr5)
+ {
+ this.attr5 = attr5;
+ }
+
+ public String getAttr5()
+ {
+ return attr5;
+ }
+ public void setLinkUrl(String linkUrl)
+ {
+ this.linkUrl = linkUrl;
+ }
+
+ public String getLinkUrl()
+ {
+ return linkUrl;
+ }
+ public void setLowQty(Long lowQty)
+ {
+ this.lowQty = lowQty;
+ }
+
+ public Long getLowQty()
+ {
+ return lowQty;
+ }
+ public void setHighQty(Long highQty)
+ {
+ this.highQty = highQty;
+ }
+
+ public Long getHighQty()
+ {
+ return highQty;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/GoodsAttribute.java b/api/src/main/java/cn/qihangerp/api/domain/GoodsAttribute.java
new file mode 100644
index 0000000..c7a6fdc
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/GoodsAttribute.java
@@ -0,0 +1,81 @@
+package cn.qihangerp.api.domain;
+
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 商品属性对象 erp_goods_attribute
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class GoodsAttribute extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键id */
+ private Long id;
+
+ /** 商品id */
+ @Excel(name = "商品id")
+ private Long goodsId;
+
+ /** 属性id */
+ @Excel(name = "属性id")
+ private Long attributeId;
+
+ /** 属性名 */
+ @Excel(name = "属性名")
+ private String name;
+
+ /** 属性值 */
+ @Excel(name = "属性值")
+ private String value;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setGoodsId(Long goodsId)
+ {
+ this.goodsId = goodsId;
+ }
+
+ public Long getGoodsId()
+ {
+ return goodsId;
+ }
+ public void setAttributeId(Long attributeId)
+ {
+ this.attributeId = attributeId;
+ }
+
+ public Long getAttributeId()
+ {
+ return attributeId;
+ }
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+ public void setValue(String value)
+ {
+ this.value = value;
+ }
+
+ public String getValue()
+ {
+ return value;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/GoodsAttributeConfig.java b/api/src/main/java/cn/qihangerp/api/domain/GoodsAttributeConfig.java
new file mode 100644
index 0000000..c042d19
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/GoodsAttributeConfig.java
@@ -0,0 +1,68 @@
+package cn.qihangerp.api.domain;
+
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 商品属性配置对象 erp_goods_attribute_config
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class GoodsAttributeConfig extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键id */
+ private Long id;
+
+ /** 分类id(0为所有共用) */
+ @Excel(name = "分类id", readConverterExp = "0=为所有共用")
+ private Long categoryId;
+
+ /** 属性名 */
+ @Excel(name = "属性名")
+ private String name;
+
+ /** 属性值 */
+ @Excel(name = "属性值")
+ private String value;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setCategoryId(Long categoryId)
+ {
+ this.categoryId = categoryId;
+ }
+
+ public Long getCategoryId()
+ {
+ return categoryId;
+ }
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+ public void setValue(String value)
+ {
+ this.value = value;
+ }
+
+ public String getValue()
+ {
+ return value;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/GoodsImg.java b/api/src/main/java/cn/qihangerp/api/domain/GoodsImg.java
new file mode 100644
index 0000000..486033c
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/GoodsImg.java
@@ -0,0 +1,81 @@
+package cn.qihangerp.api.domain;
+
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 商品图片对象 erp_goods_img
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class GoodsImg extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** $column.columnComment */
+ private Long id;
+
+ /** 商品Id */
+ @Excel(name = "商品Id")
+ private Long goodsId;
+
+ /** 类型 */
+ @Excel(name = "类型")
+ private String type;
+
+ /** 图片url */
+ @Excel(name = "图片url")
+ private String url;
+
+ /** 排序 */
+ @Excel(name = "排序")
+ private Long sort;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setGoodsId(Long goodsId)
+ {
+ this.goodsId = goodsId;
+ }
+
+ public Long getGoodsId()
+ {
+ return goodsId;
+ }
+ public void setType(String type)
+ {
+ this.type = type;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+ public void setUrl(String url)
+ {
+ this.url = url;
+ }
+
+ public String getUrl()
+ {
+ return url;
+ }
+ public void setSort(Long sort)
+ {
+ this.sort = sort;
+ }
+
+ public Long getSort()
+ {
+ return sort;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/GoodsSpec.java b/api/src/main/java/cn/qihangerp/api/domain/GoodsSpec.java
new file mode 100644
index 0000000..4f41a2b
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/GoodsSpec.java
@@ -0,0 +1,277 @@
+package cn.qihangerp.api.domain;
+
+import java.math.BigDecimal;
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 商品规格对象 erp_goods_spec
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class GoodsSpec extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键id */
+ private Long id;
+
+ /** 商品id */
+ @Excel(name = "商品id")
+ private Long goodsId;
+
+ /** 规格名 */
+ @Excel(name = "规格名")
+ private String specName;
+
+ /** 规格编码 */
+ @Excel(name = "规格编码")
+ private String specNum;
+
+ /** 颜色id */
+ @Excel(name = "颜色id")
+ private Long colorId;
+
+ /** 颜色值 */
+ @Excel(name = "颜色值")
+ private String colorValue;
+
+ /** 颜色图片 */
+ @Excel(name = "颜色图片")
+ private String colorImage;
+
+ /** 尺码id */
+ @Excel(name = "尺码id")
+ private Long sizeId;
+
+ /** 尺码值 */
+ @Excel(name = "尺码值")
+ private String sizeValue;
+
+ /** 款式id */
+ @Excel(name = "款式id")
+ private Long styleId;
+
+ /** 款式值 */
+ @Excel(name = "款式值")
+ private String styleValue;
+
+ /** 库存条形码 */
+ @Excel(name = "库存条形码")
+ private String barCode;
+
+ /** 预计采购价 */
+ @Excel(name = "预计采购价")
+ private BigDecimal purPrice;
+
+ /** 建议批发价 */
+ @Excel(name = "建议批发价")
+ private BigDecimal wholePrice;
+
+ /** 建议零售价 */
+ @Excel(name = "建议零售价")
+ private BigDecimal retailPrice;
+
+ /** 单位成本 */
+ @Excel(name = "单位成本")
+ private BigDecimal unitCost;
+
+ /** 状态 */
+ @Excel(name = "状态")
+ private Integer status;
+
+ /** 最低库存(预警) */
+ @Excel(name = "最低库存", readConverterExp = "预=警")
+ private Long lowQty;
+
+ /** 最高库存(预警) */
+ @Excel(name = "最高库存", readConverterExp = "预=警")
+ private Long highQty;
+
+ /** 0启用 1禁用 */
+ @Excel(name = "0启用 1禁用")
+ private Integer disable;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setGoodsId(Long goodsId)
+ {
+ this.goodsId = goodsId;
+ }
+
+ public Long getGoodsId()
+ {
+ return goodsId;
+ }
+ public void setSpecName(String specName)
+ {
+ this.specName = specName;
+ }
+
+ public String getSpecName()
+ {
+ return specName;
+ }
+ public void setSpecNum(String specNum)
+ {
+ this.specNum = specNum;
+ }
+
+ public String getSpecNum()
+ {
+ return specNum;
+ }
+ public void setColorId(Long colorId)
+ {
+ this.colorId = colorId;
+ }
+
+ public Long getColorId()
+ {
+ return colorId;
+ }
+ public void setColorValue(String colorValue)
+ {
+ this.colorValue = colorValue;
+ }
+
+ public String getColorValue()
+ {
+ return colorValue;
+ }
+ public void setColorImage(String colorImage)
+ {
+ this.colorImage = colorImage;
+ }
+
+ public String getColorImage()
+ {
+ return colorImage;
+ }
+ public void setSizeId(Long sizeId)
+ {
+ this.sizeId = sizeId;
+ }
+
+ public Long getSizeId()
+ {
+ return sizeId;
+ }
+ public void setSizeValue(String sizeValue)
+ {
+ this.sizeValue = sizeValue;
+ }
+
+ public String getSizeValue()
+ {
+ return sizeValue;
+ }
+ public void setStyleId(Long styleId)
+ {
+ this.styleId = styleId;
+ }
+
+ public Long getStyleId()
+ {
+ return styleId;
+ }
+ public void setStyleValue(String styleValue)
+ {
+ this.styleValue = styleValue;
+ }
+
+ public String getStyleValue()
+ {
+ return styleValue;
+ }
+ public void setBarCode(String barCode)
+ {
+ this.barCode = barCode;
+ }
+
+ public String getBarCode()
+ {
+ return barCode;
+ }
+ public void setPurPrice(BigDecimal purPrice)
+ {
+ this.purPrice = purPrice;
+ }
+
+ public BigDecimal getPurPrice()
+ {
+ return purPrice;
+ }
+ public void setWholePrice(BigDecimal wholePrice)
+ {
+ this.wholePrice = wholePrice;
+ }
+
+ public BigDecimal getWholePrice()
+ {
+ return wholePrice;
+ }
+ public void setRetailPrice(BigDecimal retailPrice)
+ {
+ this.retailPrice = retailPrice;
+ }
+
+ public BigDecimal getRetailPrice()
+ {
+ return retailPrice;
+ }
+ public void setUnitCost(BigDecimal unitCost)
+ {
+ this.unitCost = unitCost;
+ }
+
+ public BigDecimal getUnitCost()
+ {
+ return unitCost;
+ }
+ public void setStatus(Integer status)
+ {
+ this.status = status;
+ }
+
+ public Integer getStatus()
+ {
+ return status;
+ }
+ public void setLowQty(Long lowQty)
+ {
+ this.lowQty = lowQty;
+ }
+
+ public Long getLowQty()
+ {
+ return lowQty;
+ }
+ public void setHighQty(Long highQty)
+ {
+ this.highQty = highQty;
+ }
+
+ public Long getHighQty()
+ {
+ return highQty;
+ }
+ public void setDisable(Integer disable)
+ {
+ this.disable = disable;
+ }
+
+ public Integer getDisable()
+ {
+ return disable;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/GoodsSpecAttr.java b/api/src/main/java/cn/qihangerp/api/domain/GoodsSpecAttr.java
new file mode 100644
index 0000000..5e78ea9
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/GoodsSpecAttr.java
@@ -0,0 +1,120 @@
+package cn.qihangerp.api.domain;
+
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 商品规格属性对象 erp_goods_spec_attr
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class GoodsSpecAttr extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** $column.columnComment */
+ private Long id;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private Long goodsId;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private String type;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private String k;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private Long kid;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private Long vid;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private String v;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private String img;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setGoodsId(Long goodsId)
+ {
+ this.goodsId = goodsId;
+ }
+
+ public Long getGoodsId()
+ {
+ return goodsId;
+ }
+ public void setType(String type)
+ {
+ this.type = type;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+ public void setK(String k)
+ {
+ this.k = k;
+ }
+
+ public String getK()
+ {
+ return k;
+ }
+ public void setKid(Long kid)
+ {
+ this.kid = kid;
+ }
+
+ public Long getKid()
+ {
+ return kid;
+ }
+ public void setVid(Long vid)
+ {
+ this.vid = vid;
+ }
+
+ public Long getVid()
+ {
+ return vid;
+ }
+ public void setV(String v)
+ {
+ this.v = v;
+ }
+
+ public String getV()
+ {
+ return v;
+ }
+ public void setImg(String img)
+ {
+ this.img = img;
+ }
+
+ public String getImg()
+ {
+ return img;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/Keyword.java b/api/src/main/java/cn/qihangerp/api/domain/Keyword.java
new file mode 100644
index 0000000..1b90c52
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/Keyword.java
@@ -0,0 +1,17 @@
+package cn.qihangerp.api.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("d_keyword")
+public class Keyword {
+ private String id;
+ private String source;
+ private String word;
+ private String remark;
+ private Date date;
+ private Date createTime;
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/SShopGoodsSku.java b/api/src/main/java/cn/qihangerp/api/domain/SShopGoodsSku.java
new file mode 100644
index 0000000..b815cb2
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/SShopGoodsSku.java
@@ -0,0 +1,250 @@
+package cn.qihangerp.api.domain;
+
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * ${subTable.functionName}对象 s_shop_goods_sku
+ *
+ * @author qihang
+ * @date 2023-12-31
+ */
+public class SShopGoodsSku extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键id */
+ private Long id;
+
+ /** 外键id */
+ @Excel(name = "外键id")
+ private Long shopGoodsId;
+
+ /** 商品id,阿里productID */
+ @Excel(name = "商品id,阿里productID")
+ private Long goodsId;
+
+ /** 商品skuid,阿里 */
+ @Excel(name = "商品skuid,阿里")
+ private Long skuId;
+
+ /** specId */
+ @Excel(name = "specId")
+ private String spec;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private Long erpGoodsSpecId;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private Long erpGoodsId;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private String erpGoodsSpecCode;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private Long skuQuantity;
+
+ /** 分销基准价。代销场景均使用该价格。无SKU商品查看saleInfo中的consignPrice */
+ @Excel(name = "分销基准价。代销场景均使用该价格。无SKU商品查看saleInfo中的consignPrice")
+ private Long consignPrice;
+
+ /** sku编码 */
+ @Excel(name = "sku编码")
+ private String outerId;
+
+ /** spu编码 */
+ @Excel(name = "spu编码")
+ private String outerGoodsId;
+
+ /** 报价时该规格的单价,国际站注意要点:含有SKU属性的在线批发产品设定具体价格时使用此值,若设置阶梯价格则使用priceRange */
+ @Excel(name = "报价时该规格的单价,国际站注意要点:含有SKU属性的在线批发产品设定具体价格时使用此值,若设置阶梯价格则使用priceRange")
+ private Long price;
+
+ /** 建议零售价 */
+ @Excel(name = "建议零售价")
+ private Long retailPrice;
+
+ /** 可销售数量 */
+ @Excel(name = "可销售数量")
+ private Long amountOnSale;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private Long isSkuOnsale;
+
+ /** 指定规格的货号,对应ERP系统商品specNumber */
+ @Excel(name = "指定规格的货号,对应ERP系统商品specNumber")
+ private String cargoNumber;
+
+ /** SKU属性值json */
+ @Excel(name = "SKU属性值json")
+ private String attributes;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setShopGoodsId(Long shopGoodsId)
+ {
+ this.shopGoodsId = shopGoodsId;
+ }
+
+ public Long getShopGoodsId()
+ {
+ return shopGoodsId;
+ }
+ public void setGoodsId(Long goodsId)
+ {
+ this.goodsId = goodsId;
+ }
+
+ public Long getGoodsId()
+ {
+ return goodsId;
+ }
+ public void setSkuId(Long skuId)
+ {
+ this.skuId = skuId;
+ }
+
+ public Long getSkuId()
+ {
+ return skuId;
+ }
+ public void setSpec(String spec)
+ {
+ this.spec = spec;
+ }
+
+ public String getSpec()
+ {
+ return spec;
+ }
+ public void setErpGoodsSpecId(Long erpGoodsSpecId)
+ {
+ this.erpGoodsSpecId = erpGoodsSpecId;
+ }
+
+ public Long getErpGoodsSpecId()
+ {
+ return erpGoodsSpecId;
+ }
+ public void setErpGoodsId(Long erpGoodsId)
+ {
+ this.erpGoodsId = erpGoodsId;
+ }
+
+ public Long getErpGoodsId()
+ {
+ return erpGoodsId;
+ }
+ public void setErpGoodsSpecCode(String erpGoodsSpecCode)
+ {
+ this.erpGoodsSpecCode = erpGoodsSpecCode;
+ }
+
+ public String getErpGoodsSpecCode()
+ {
+ return erpGoodsSpecCode;
+ }
+ public void setSkuQuantity(Long skuQuantity)
+ {
+ this.skuQuantity = skuQuantity;
+ }
+
+ public Long getSkuQuantity()
+ {
+ return skuQuantity;
+ }
+ public void setConsignPrice(Long consignPrice)
+ {
+ this.consignPrice = consignPrice;
+ }
+
+ public Long getConsignPrice()
+ {
+ return consignPrice;
+ }
+ public void setOuterId(String outerId)
+ {
+ this.outerId = outerId;
+ }
+
+ public String getOuterId()
+ {
+ return outerId;
+ }
+ public void setOuterGoodsId(String outerGoodsId)
+ {
+ this.outerGoodsId = outerGoodsId;
+ }
+
+ public String getOuterGoodsId()
+ {
+ return outerGoodsId;
+ }
+ public void setPrice(Long price)
+ {
+ this.price = price;
+ }
+
+ public Long getPrice()
+ {
+ return price;
+ }
+ public void setRetailPrice(Long retailPrice)
+ {
+ this.retailPrice = retailPrice;
+ }
+
+ public Long getRetailPrice()
+ {
+ return retailPrice;
+ }
+ public void setAmountOnSale(Long amountOnSale)
+ {
+ this.amountOnSale = amountOnSale;
+ }
+
+ public Long getAmountOnSale()
+ {
+ return amountOnSale;
+ }
+ public void setIsSkuOnsale(Long isSkuOnsale)
+ {
+ this.isSkuOnsale = isSkuOnsale;
+ }
+
+ public Long getIsSkuOnsale()
+ {
+ return isSkuOnsale;
+ }
+ public void setCargoNumber(String cargoNumber)
+ {
+ this.cargoNumber = cargoNumber;
+ }
+
+ public String getCargoNumber()
+ {
+ return cargoNumber;
+ }
+ public void setAttributes(String attributes)
+ {
+ this.attributes = attributes;
+ }
+
+ public String getAttributes()
+ {
+ return attributes;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/SShopPullLogs.java b/api/src/main/java/cn/qihangerp/api/domain/SShopPullLogs.java
new file mode 100644
index 0000000..5a30b4e
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/SShopPullLogs.java
@@ -0,0 +1,59 @@
+package cn.qihangerp.api.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 店铺更新日志表
+ * @TableName s_shop_pull_logs
+ */
+@Data
+public class SShopPullLogs implements Serializable {
+ /**
+ * 主键Id
+ */
+ private Long id;
+
+ /**
+ * 店铺id
+ */
+ private Integer shopId;
+
+ /**
+ * 平台id
+ */
+ private Integer shopType;
+
+ /**
+ * 类型(ORDER订单,GOODS商品,REFUND退款)
+ */
+ private String pullType;
+
+ /**
+ * 拉取方式(主动拉取、定时任务)
+ */
+ private String pullWay;
+
+ /**
+ * 拉取参数
+ */
+ private String pullParams;
+
+ /**
+ * 拉取结果
+ */
+ private String pullResult;
+
+ /**
+ * 拉取时间
+ */
+ private Date pullTime;
+
+ /**
+ * 耗时(毫秒)
+ */
+ private Long duration;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrder.java b/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrder.java
new file mode 100644
index 0000000..a4183b6
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrder.java
@@ -0,0 +1,214 @@
+package cn.qihangerp.api.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 采购订单对象 scm_purchase_order
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class ScmPurchaseOrder extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** $column.columnComment */
+ private Long id;
+
+ /** 供应商id */
+ @Excel(name = "供应商id")
+ private Long contactId;
+ @TableField(exist = false)
+ private String supplier;
+
+ /** 订单编号 */
+ @Excel(name = "订单编号")
+ private String orderNo;
+
+ /** 订单日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "订单日期", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date orderDate;
+
+ /** 订单创建时间 */
+ @Excel(name = "订单创建时间")
+ private Long orderTime;
+
+ /** 订单总金额 */
+ @Excel(name = "订单总金额")
+ private BigDecimal orderAmount;
+ private BigDecimal shipAmount;
+
+ /** 订单状态 0待审核1已审核101供应商已确认102供应商已发货200已入库 */
+ @Excel(name = "订单状态 0待审核1已审核101供应商已确认102供应商已发货200已入库")
+ private Integer status;
+
+ /** 采购单审核人 */
+ @Excel(name = "采购单审核人")
+ private String auditUser;
+
+ /** 审核时间 */
+ @Excel(name = "审核时间")
+ private Long auditTime;
+
+ /** 供应商确认时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "供应商确认时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date supplierConfirmTime;
+
+ /** 供应商发货时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "供应商发货时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date supplierDeliveryTime;
+
+ /** 收货时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "收货时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date receivedTime;
+
+ /** 入库时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "入库时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date stockInTime;
+
+ public String getSupplier() {
+ return supplier;
+ }
+
+ public void setSupplier(String supplier) {
+ this.supplier = supplier;
+ }
+
+ public BigDecimal getShipAmount() {
+ return shipAmount;
+ }
+
+ public void setShipAmount(BigDecimal shipAmount) {
+ this.shipAmount = shipAmount;
+ }
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setContactId(Long contactId)
+ {
+ this.contactId = contactId;
+ }
+
+ public Long getContactId()
+ {
+ return contactId;
+ }
+ public void setOrderNo(String orderNo)
+ {
+ this.orderNo = orderNo;
+ }
+
+ public String getOrderNo()
+ {
+ return orderNo;
+ }
+ public void setOrderDate(Date orderDate)
+ {
+ this.orderDate = orderDate;
+ }
+
+ public Date getOrderDate()
+ {
+ return orderDate;
+ }
+ public void setOrderTime(Long orderTime)
+ {
+ this.orderTime = orderTime;
+ }
+
+ public Long getOrderTime()
+ {
+ return orderTime;
+ }
+ public void setOrderAmount(BigDecimal orderAmount)
+ {
+ this.orderAmount = orderAmount;
+ }
+
+ public BigDecimal getOrderAmount()
+ {
+ return orderAmount;
+ }
+ public void setStatus(Integer status)
+ {
+ this.status = status;
+ }
+
+ public Integer getStatus()
+ {
+ return status;
+ }
+ public void setAuditUser(String auditUser)
+ {
+ this.auditUser = auditUser;
+ }
+
+ public String getAuditUser()
+ {
+ return auditUser;
+ }
+ public void setAuditTime(Long auditTime)
+ {
+ this.auditTime = auditTime;
+ }
+
+ public Long getAuditTime()
+ {
+ return auditTime;
+ }
+ public void setSupplierConfirmTime(Date supplierConfirmTime)
+ {
+ this.supplierConfirmTime = supplierConfirmTime;
+ }
+
+ public Date getSupplierConfirmTime()
+ {
+ return supplierConfirmTime;
+ }
+ public void setSupplierDeliveryTime(Date supplierDeliveryTime)
+ {
+ this.supplierDeliveryTime = supplierDeliveryTime;
+ }
+
+ public Date getSupplierDeliveryTime()
+ {
+ return supplierDeliveryTime;
+ }
+ public void setReceivedTime(Date receivedTime)
+ {
+ this.receivedTime = receivedTime;
+ }
+
+ public Date getReceivedTime()
+ {
+ return receivedTime;
+ }
+ public void setStockInTime(Date stockInTime)
+ {
+ this.stockInTime = stockInTime;
+ }
+
+ public Date getStockInTime()
+ {
+ return stockInTime;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrderCost.java b/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrderCost.java
new file mode 100644
index 0000000..c6041cf
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrderCost.java
@@ -0,0 +1,217 @@
+package cn.qihangerp.api.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 采购订单费用对象 scm_purchase_order_cost
+ *
+ * @author qihang
+ * @date 2023-12-31
+ */
+public class ScmPurchaseOrderCost extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 采购单ID(主键) */
+ private Long id;
+
+ /** 采购单金额 */
+ @Excel(name = "采购单金额")
+ private BigDecimal orderAmount;
+
+ /** 采购订单日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "采购订单日期", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date orderDate;
+
+ /** 采购订单编号 */
+ @Excel(name = "采购订单编号")
+ private String orderNo;
+
+ /** 采购订单商品规格数 */
+ @Excel(name = "采购订单商品规格数")
+ private Integer orderSpecUnit;
+
+ /** 采购订单商品数 */
+ @Excel(name = "采购订单商品数")
+ private Integer orderGoodsUnit;
+
+ /** 采购订单总件数 */
+ @Excel(name = "采购订单总件数")
+ private Long orderSpecUnitTotal;
+
+ /** 实际金额 */
+ @Excel(name = "实际金额")
+ private BigDecimal actualAmount;
+
+ /** 运费 */
+ @Excel(name = "运费")
+ private BigDecimal freight;
+
+ /** 确认人 */
+ @Excel(name = "确认人")
+ private String confirmUser;
+
+ /** 确认时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "确认时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date confirmTime;
+
+ /** 已支付金额 */
+ @Excel(name = "已支付金额")
+ private BigDecimal payAmount;
+
+ /** 支付时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date payTime;
+
+ /** 支付次数 */
+ @Excel(name = "支付次数")
+ private Long payCount;
+
+ /** 状态(0未支付1已支付) */
+ @Excel(name = "状态", readConverterExp = "0=未支付1已支付")
+ private Long status;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setOrderAmount(BigDecimal orderAmount)
+ {
+ this.orderAmount = orderAmount;
+ }
+
+ public BigDecimal getOrderAmount()
+ {
+ return orderAmount;
+ }
+ public void setOrderDate(Date orderDate)
+ {
+ this.orderDate = orderDate;
+ }
+
+ public Date getOrderDate()
+ {
+ return orderDate;
+ }
+ public void setOrderNo(String orderNo)
+ {
+ this.orderNo = orderNo;
+ }
+
+ public String getOrderNo()
+ {
+ return orderNo;
+ }
+ public void setOrderSpecUnit(Integer orderSpecUnit)
+ {
+ this.orderSpecUnit = orderSpecUnit;
+ }
+
+ public Integer getOrderSpecUnit()
+ {
+ return orderSpecUnit;
+ }
+ public void setOrderGoodsUnit(Integer orderGoodsUnit)
+ {
+ this.orderGoodsUnit = orderGoodsUnit;
+ }
+
+ public Integer getOrderGoodsUnit()
+ {
+ return orderGoodsUnit;
+ }
+ public void setOrderSpecUnitTotal(Long orderSpecUnitTotal)
+ {
+ this.orderSpecUnitTotal = orderSpecUnitTotal;
+ }
+
+ public Long getOrderSpecUnitTotal()
+ {
+ return orderSpecUnitTotal;
+ }
+ public void setActualAmount(BigDecimal actualAmount)
+ {
+ this.actualAmount = actualAmount;
+ }
+
+ public BigDecimal getActualAmount()
+ {
+ return actualAmount;
+ }
+ public void setFreight(BigDecimal freight)
+ {
+ this.freight = freight;
+ }
+
+ public BigDecimal getFreight()
+ {
+ return freight;
+ }
+ public void setConfirmUser(String confirmUser)
+ {
+ this.confirmUser = confirmUser;
+ }
+
+ public String getConfirmUser()
+ {
+ return confirmUser;
+ }
+ public void setConfirmTime(Date confirmTime)
+ {
+ this.confirmTime = confirmTime;
+ }
+
+ public Date getConfirmTime()
+ {
+ return confirmTime;
+ }
+ public void setPayAmount(BigDecimal payAmount)
+ {
+ this.payAmount = payAmount;
+ }
+
+ public BigDecimal getPayAmount()
+ {
+ return payAmount;
+ }
+ public void setPayTime(Date payTime)
+ {
+ this.payTime = payTime;
+ }
+
+ public Date getPayTime()
+ {
+ return payTime;
+ }
+ public void setPayCount(Long payCount)
+ {
+ this.payCount = payCount;
+ }
+
+ public Long getPayCount()
+ {
+ return payCount;
+ }
+ public void setStatus(Long status)
+ {
+ this.status = status;
+ }
+
+ public Long getStatus()
+ {
+ return status;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrderItem.java b/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrderItem.java
new file mode 100644
index 0000000..8298bd9
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrderItem.java
@@ -0,0 +1,301 @@
+package cn.qihangerp.api.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 采购订单明细对象 scm_purchase_order_item
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class ScmPurchaseOrderItem extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** $column.columnComment */
+ private Long id;
+
+ /** 订单id */
+ @Excel(name = "订单id")
+ private Long orderId;
+
+ /** 订单编号 */
+ @Excel(name = "订单编号")
+ private String orderNo;
+
+ /** 150501采购 150502退货 */
+ @Excel(name = "150501采购 150502退货")
+ private String transType;
+
+ /** 购货金额 */
+ @Excel(name = "购货金额")
+ private Double amount;
+
+ /** 订单日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "订单日期", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date orderDate;
+
+ /** 商品ID */
+ @Excel(name = "商品ID")
+ private Long goodsId;
+
+ /** 商品编码 */
+ @Excel(name = "商品编码")
+ private String goodsNum;
+
+ /** 商品规格id */
+ @Excel(name = "商品规格id")
+ private Long specId;
+
+ /** 商品规格编码 */
+ @Excel(name = "商品规格编码")
+ private String specNum;
+
+ private String goodsName;
+ private String colorValue;
+ private String colorImage;
+ private String sizeValue;
+ private String styleValue;
+
+
+ /** 单价 */
+ @Excel(name = "单价")
+ private BigDecimal price;
+
+ /** 折扣额 */
+ @Excel(name = "折扣额")
+ private BigDecimal disAmount;
+
+ /** 折扣率 */
+ @Excel(name = "折扣率")
+ private BigDecimal disRate;
+
+ /** 数量(采购单据) */
+ @Excel(name = "数量(采购单据)")
+ private Long quantity;
+
+ /** 已入库数量 */
+ @Excel(name = "已入库数量")
+ private Long inQty;
+
+ /** 入库的仓库id */
+ @Excel(name = "入库的仓库id")
+ private Long locationId;
+
+ /** 1删除 0正常 */
+ @Excel(name = "1删除 0正常")
+ private Integer isDelete;
+
+ /** 状态(同billStatus)0待审核1正常2已作废3已入库 */
+ @Excel(name = "状态", readConverterExp = "同=billStatus")
+ private Integer status;
+
+ public String getGoodsName() {
+ return goodsName;
+ }
+
+ public void setGoodsName(String goodsName) {
+ this.goodsName = goodsName;
+ }
+
+ public String getColorValue() {
+ return colorValue;
+ }
+
+ public void setColorValue(String colorValue) {
+ this.colorValue = colorValue;
+ }
+
+ public String getColorImage() {
+ return colorImage;
+ }
+
+ public void setColorImage(String colorImage) {
+ this.colorImage = colorImage;
+ }
+
+ public String getSizeValue() {
+ return sizeValue;
+ }
+
+ public void setSizeValue(String sizeValue) {
+ this.sizeValue = sizeValue;
+ }
+
+ public String getStyleValue() {
+ return styleValue;
+ }
+
+ public void setStyleValue(String styleValue) {
+ this.styleValue = styleValue;
+ }
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setOrderId(Long orderId)
+ {
+ this.orderId = orderId;
+ }
+
+ public Long getOrderId()
+ {
+ return orderId;
+ }
+ public void setOrderNo(String orderNo)
+ {
+ this.orderNo = orderNo;
+ }
+
+ public String getOrderNo()
+ {
+ return orderNo;
+ }
+ public void setTransType(String transType)
+ {
+ this.transType = transType;
+ }
+
+ public String getTransType()
+ {
+ return transType;
+ }
+ public void setAmount(Double amount)
+ {
+ this.amount = amount;
+ }
+
+ public Double getAmount()
+ {
+ return amount;
+ }
+ public void setOrderDate(Date orderDate)
+ {
+ this.orderDate = orderDate;
+ }
+
+ public Date getOrderDate()
+ {
+ return orderDate;
+ }
+ public void setGoodsId(Long goodsId)
+ {
+ this.goodsId = goodsId;
+ }
+
+ public Long getGoodsId()
+ {
+ return goodsId;
+ }
+ public void setGoodsNum(String goodsNum)
+ {
+ this.goodsNum = goodsNum;
+ }
+
+ public String getGoodsNum()
+ {
+ return goodsNum;
+ }
+ public void setSpecId(Long specId)
+ {
+ this.specId = specId;
+ }
+
+ public Long getSpecId()
+ {
+ return specId;
+ }
+ public void setSpecNum(String specNum)
+ {
+ this.specNum = specNum;
+ }
+
+ public String getSpecNum()
+ {
+ return specNum;
+ }
+ public void setPrice(BigDecimal price)
+ {
+ this.price = price;
+ }
+
+ public BigDecimal getPrice()
+ {
+ return price;
+ }
+ public void setDisAmount(BigDecimal disAmount)
+ {
+ this.disAmount = disAmount;
+ }
+
+ public BigDecimal getDisAmount()
+ {
+ return disAmount;
+ }
+ public void setDisRate(BigDecimal disRate)
+ {
+ this.disRate = disRate;
+ }
+
+ public BigDecimal getDisRate()
+ {
+ return disRate;
+ }
+ public void setQuantity(Long quantity)
+ {
+ this.quantity = quantity;
+ }
+
+ public Long getQuantity()
+ {
+ return quantity;
+ }
+ public void setInQty(Long inQty)
+ {
+ this.inQty = inQty;
+ }
+
+ public Long getInQty()
+ {
+ return inQty;
+ }
+ public void setLocationId(Long locationId)
+ {
+ this.locationId = locationId;
+ }
+
+ public Long getLocationId()
+ {
+ return locationId;
+ }
+ public void setIsDelete(Integer isDelete)
+ {
+ this.isDelete = isDelete;
+ }
+
+ public Integer getIsDelete()
+ {
+ return isDelete;
+ }
+ public void setStatus(Integer status)
+ {
+ this.status = status;
+ }
+
+ public Integer getStatus()
+ {
+ return status;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrderPayable.java b/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrderPayable.java
new file mode 100644
index 0000000..91a0c7d
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrderPayable.java
@@ -0,0 +1,137 @@
+package cn.qihangerp.api.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 财务管理-应付款-采购货款对象 fms_payable_purchase
+ *
+ * @author qihang
+ * @date 2024-01-28
+ */
+public class ScmPurchaseOrderPayable extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** $column.columnComment */
+ private Long id;
+
+ /** 供应商id */
+ @Excel(name = "供应商id")
+ private Long supplierId;
+
+ /** 供应商名称 */
+ @Excel(name = "供应商名称")
+ private String supplierName;
+
+ /** 应付金额 */
+ @Excel(name = "应付金额")
+ private BigDecimal amount;
+
+ /** 应付日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "应付日期", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date date;
+
+ /** 发票号码 */
+ @Excel(name = "发票号码")
+ private String invoiceNo;
+
+ /** 采购单号 */
+ @Excel(name = "采购单号")
+ private String purchaseOrderNo;
+
+ /** 采购说明 */
+ @Excel(name = "采购说明")
+ private String purchaseDesc;
+
+ /** 状态(0已生成1已结算) */
+ @Excel(name = "状态", readConverterExp = "状态(0已生成1已结算)")
+ private Long status;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setSupplierId(Long supplierId)
+ {
+ this.supplierId = supplierId;
+ }
+
+ public Long getSupplierId()
+ {
+ return supplierId;
+ }
+ public void setSupplierName(String supplierName)
+ {
+ this.supplierName = supplierName;
+ }
+
+ public String getSupplierName()
+ {
+ return supplierName;
+ }
+ public void setAmount(BigDecimal amount)
+ {
+ this.amount = amount;
+ }
+
+ public BigDecimal getAmount()
+ {
+ return amount;
+ }
+ public void setDate(Date date)
+ {
+ this.date = date;
+ }
+
+ public Date getDate()
+ {
+ return date;
+ }
+ public void setInvoiceNo(String invoiceNo)
+ {
+ this.invoiceNo = invoiceNo;
+ }
+
+ public String getInvoiceNo()
+ {
+ return invoiceNo;
+ }
+ public void setPurchaseOrderNo(String purchaseOrderNo)
+ {
+ this.purchaseOrderNo = purchaseOrderNo;
+ }
+
+ public String getPurchaseOrderNo()
+ {
+ return purchaseOrderNo;
+ }
+ public void setPurchaseDesc(String purchaseDesc)
+ {
+ this.purchaseDesc = purchaseDesc;
+ }
+
+ public String getPurchaseDesc()
+ {
+ return purchaseDesc;
+ }
+ public void setStatus(Long status)
+ {
+ this.status = status;
+ }
+
+ public Long getStatus()
+ {
+ return status;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrderShip.java b/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrderShip.java
new file mode 100644
index 0000000..49f61f7
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ScmPurchaseOrderShip.java
@@ -0,0 +1,209 @@
+package cn.qihangerp.api.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 采购订单物流对象 scm_purchase_order_ship
+ *
+ * @author qihang
+ * @date 2023-12-31
+ */
+public class ScmPurchaseOrderShip extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 采购单ID(主键) */
+ private Long id;
+
+ /** 物流公司 */
+ @Excel(name = "物流公司")
+ private String shipCompany;
+
+ /** 物流单号 */
+ @Excel(name = "物流单号")
+ private String shipNo;
+
+ /** 运费 */
+ @Excel(name = "运费")
+ private BigDecimal freight;
+
+ /** 运送时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "运送时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date shipTime;
+
+ private Date receiptTime;
+ private Date stockInTime;
+
+ public Date getReceiptTime() {
+ return receiptTime;
+ }
+
+ public void setReceiptTime(Date receiptTime) {
+ this.receiptTime = receiptTime;
+ }
+
+ public Date getStockInTime() {
+ return stockInTime;
+ }
+
+ public void setStockInTime(Date stockInTime) {
+ this.stockInTime = stockInTime;
+ }
+
+ /** 状态(0未收货1已收货2已入库) */
+ @Excel(name = "状态", readConverterExp = "0=未收货1已收货2已入库")
+ private Long status;
+
+ /** 退回数量 */
+ @Excel(name = "退回数量")
+ private Long backCount;
+
+ /** 入库数量 */
+ @Excel(name = "入库数量")
+ private Long stockInCount;
+
+ /** 采购订单日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "采购订单日期", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date orderDate;
+
+ /** 采购订单编号 */
+ @Excel(name = "采购订单编号")
+ private String orderNo;
+
+ /** 采购订单商品规格数 */
+ @Excel(name = "采购订单商品规格数")
+ private Integer orderSpecUnit;
+
+ /** 采购订单商品数 */
+ @Excel(name = "采购订单商品数")
+ private Integer orderGoodsUnit;
+
+ /** 采购订单总件数 */
+ @Excel(name = "采购订单总件数")
+ private Long orderSpecUnitTotal;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setShipCompany(String shipCompany)
+ {
+ this.shipCompany = shipCompany;
+ }
+
+ public String getShipCompany()
+ {
+ return shipCompany;
+ }
+ public void setShipNo(String shipNo)
+ {
+ this.shipNo = shipNo;
+ }
+
+ public String getShipNo()
+ {
+ return shipNo;
+ }
+ public void setFreight(BigDecimal freight)
+ {
+ this.freight = freight;
+ }
+
+ public BigDecimal getFreight()
+ {
+ return freight;
+ }
+ public void setShipTime(Date shipTime)
+ {
+ this.shipTime = shipTime;
+ }
+
+ public Date getShipTime()
+ {
+ return shipTime;
+ }
+ public void setStatus(Long status)
+ {
+ this.status = status;
+ }
+
+ public Long getStatus()
+ {
+ return status;
+ }
+ public void setBackCount(Long backCount)
+ {
+ this.backCount = backCount;
+ }
+
+ public Long getBackCount()
+ {
+ return backCount;
+ }
+ public void setStockInCount(Long stockInCount)
+ {
+ this.stockInCount = stockInCount;
+ }
+
+ public Long getStockInCount()
+ {
+ return stockInCount;
+ }
+ public void setOrderDate(Date orderDate)
+ {
+ this.orderDate = orderDate;
+ }
+
+ public Date getOrderDate()
+ {
+ return orderDate;
+ }
+ public void setOrderNo(String orderNo)
+ {
+ this.orderNo = orderNo;
+ }
+
+ public String getOrderNo()
+ {
+ return orderNo;
+ }
+ public void setOrderSpecUnit(Integer orderSpecUnit)
+ {
+ this.orderSpecUnit = orderSpecUnit;
+ }
+
+ public Integer getOrderSpecUnit()
+ {
+ return orderSpecUnit;
+ }
+ public void setOrderGoodsUnit(Integer orderGoodsUnit)
+ {
+ this.orderGoodsUnit = orderGoodsUnit;
+ }
+
+ public Integer getOrderGoodsUnit()
+ {
+ return orderGoodsUnit;
+ }
+ public void setOrderSpecUnitTotal(Long orderSpecUnitTotal)
+ {
+ this.orderSpecUnitTotal = orderSpecUnitTotal;
+ }
+
+ public Long getOrderSpecUnitTotal()
+ {
+ return orderSpecUnitTotal;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ScmSupplier.java b/api/src/main/java/cn/qihangerp/api/domain/ScmSupplier.java
new file mode 100644
index 0000000..0756f66
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ScmSupplier.java
@@ -0,0 +1,266 @@
+package cn.qihangerp.api.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 【请填写功能名称】对象 scm_supplier
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class ScmSupplier extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** $column.columnComment */
+ private Long id;
+
+ /** 供应商名称 */
+ @Excel(name = "供应商名称")
+ private String name;
+
+ /** 供应商编码 */
+ @Excel(name = "供应商编码")
+ private String number;
+
+ /** 税率 */
+ @Excel(name = "税率")
+ private Long taxRate;
+
+ /** 期初应付款 */
+ @Excel(name = "期初应付款")
+ private Long amount;
+
+ /** 期初预付款 */
+ @Excel(name = "期初预付款")
+ private Long periodMoney;
+
+ /** 初期往来余额 */
+ @Excel(name = "初期往来余额")
+ private Long difMoney;
+
+ /** 余额日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "余额日期", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date beginDate;
+
+ /** 职位 */
+ @Excel(name = "职位")
+ private String place;
+
+ /** 联系人 */
+ @Excel(name = "联系人")
+ private String linkMan;
+
+ /** 联系方式 */
+ @Excel(name = "联系方式")
+ private String contact;
+
+ /** 省 */
+ @Excel(name = "省")
+ private String province;
+
+ /** 市 */
+ @Excel(name = "市")
+ private String city;
+
+ /** 区县 */
+ @Excel(name = "区县")
+ private String county;
+
+ /** 收货地址详情 */
+ @Excel(name = "收货地址详情")
+ private String address;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private String pinYin;
+
+ /** 0启用 1禁用 */
+ @Excel(name = "0启用 1禁用")
+ private Integer disable;
+
+ /** 0正常 1删除 */
+ @Excel(name = "0正常 1删除")
+ private Integer isDelete;
+
+ /** 分管采购员 */
+ @Excel(name = "分管采购员")
+ private String purchaserName;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+ public void setNumber(String number)
+ {
+ this.number = number;
+ }
+
+ public String getNumber()
+ {
+ return number;
+ }
+ public void setTaxRate(Long taxRate)
+ {
+ this.taxRate = taxRate;
+ }
+
+ public Long getTaxRate()
+ {
+ return taxRate;
+ }
+ public void setAmount(Long amount)
+ {
+ this.amount = amount;
+ }
+
+ public Long getAmount()
+ {
+ return amount;
+ }
+ public void setPeriodMoney(Long periodMoney)
+ {
+ this.periodMoney = periodMoney;
+ }
+
+ public Long getPeriodMoney()
+ {
+ return periodMoney;
+ }
+ public void setDifMoney(Long difMoney)
+ {
+ this.difMoney = difMoney;
+ }
+
+ public Long getDifMoney()
+ {
+ return difMoney;
+ }
+ public void setBeginDate(Date beginDate)
+ {
+ this.beginDate = beginDate;
+ }
+
+ public Date getBeginDate()
+ {
+ return beginDate;
+ }
+ public void setPlace(String place)
+ {
+ this.place = place;
+ }
+
+ public String getPlace()
+ {
+ return place;
+ }
+ public void setLinkMan(String linkMan)
+ {
+ this.linkMan = linkMan;
+ }
+
+ public String getLinkMan()
+ {
+ return linkMan;
+ }
+ public void setContact(String contact)
+ {
+ this.contact = contact;
+ }
+
+ public String getContact()
+ {
+ return contact;
+ }
+ public void setProvince(String province)
+ {
+ this.province = province;
+ }
+
+ public String getProvince()
+ {
+ return province;
+ }
+ public void setCity(String city)
+ {
+ this.city = city;
+ }
+
+ public String getCity()
+ {
+ return city;
+ }
+ public void setCounty(String county)
+ {
+ this.county = county;
+ }
+
+ public String getCounty()
+ {
+ return county;
+ }
+ public void setAddress(String address)
+ {
+ this.address = address;
+ }
+
+ public String getAddress()
+ {
+ return address;
+ }
+ public void setPinYin(String pinYin)
+ {
+ this.pinYin = pinYin;
+ }
+
+ public String getPinYin()
+ {
+ return pinYin;
+ }
+ public void setDisable(Integer disable)
+ {
+ this.disable = disable;
+ }
+
+ public Integer getDisable()
+ {
+ return disable;
+ }
+ public void setIsDelete(Integer isDelete)
+ {
+ this.isDelete = isDelete;
+ }
+
+ public Integer getIsDelete()
+ {
+ return isDelete;
+ }
+ public void setPurchaserName(String purchaserName)
+ {
+ this.purchaserName = purchaserName;
+ }
+
+ public String getPurchaserName()
+ {
+ return purchaserName;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/ShopGoods.java b/api/src/main/java/cn/qihangerp/api/domain/ShopGoods.java
new file mode 100644
index 0000000..978207b
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/ShopGoods.java
@@ -0,0 +1,228 @@
+package cn.qihangerp.api.domain;
+
+import java.util.List;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 店铺商品对象 s_shop_goods
+ *
+ * @author qihang
+ * @date 2023-12-31
+ */
+public class ShopGoods extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** $column.columnComment */
+ private Long id;
+
+ /** 商品id,PDD商品id */
+ @Excel(name = "商品id,PDD商品id")
+ private Long goodsId;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private Long erpGoodsId;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private Long shopId;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private Long shopType;
+
+ /** 商品货号,erp系统商品编码 */
+ @Excel(name = "商品货号,erp系统商品编码")
+ private String goodsNum;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private String goodsName;
+
+ /** 参考价格,返回价格区间,可能为空 */
+ @Excel(name = "参考价格,返回价格区间,可能为空")
+ private String price;
+
+ /** 商品标题 */
+ @Excel(name = "商品标题")
+ private String title;
+
+ /** 主图 */
+ @Excel(name = "主图")
+ private String thumbUrl;
+
+ /** 商品图片json */
+ @Excel(name = "商品图片json")
+ private String imageUrl;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private Long isMoreSku;
+
+ /** $column.columnComment */
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+ private Long isOnsale;
+
+ /** 累计销量 */
+ @Excel(name = "累计销量")
+ private Long totalSales;
+
+ /** 发布日期 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "发布日期", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date publishTime;
+
+ /** $table.subTable.functionName信息 */
+ private List sShopGoodsSkuList;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setGoodsId(Long goodsId)
+ {
+ this.goodsId = goodsId;
+ }
+
+ public Long getGoodsId()
+ {
+ return goodsId;
+ }
+ public void setErpGoodsId(Long erpGoodsId)
+ {
+ this.erpGoodsId = erpGoodsId;
+ }
+
+ public Long getErpGoodsId()
+ {
+ return erpGoodsId;
+ }
+ public void setShopId(Long shopId)
+ {
+ this.shopId = shopId;
+ }
+
+ public Long getShopId()
+ {
+ return shopId;
+ }
+ public void setShopType(Long shopType)
+ {
+ this.shopType = shopType;
+ }
+
+ public Long getShopType()
+ {
+ return shopType;
+ }
+ public void setGoodsNum(String goodsNum)
+ {
+ this.goodsNum = goodsNum;
+ }
+
+ public String getGoodsNum()
+ {
+ return goodsNum;
+ }
+ public void setGoodsName(String goodsName)
+ {
+ this.goodsName = goodsName;
+ }
+
+ public String getGoodsName()
+ {
+ return goodsName;
+ }
+ public void setPrice(String price)
+ {
+ this.price = price;
+ }
+
+ public String getPrice()
+ {
+ return price;
+ }
+ public void setTitle(String title)
+ {
+ this.title = title;
+ }
+
+ public String getTitle()
+ {
+ return title;
+ }
+ public void setThumbUrl(String thumbUrl)
+ {
+ this.thumbUrl = thumbUrl;
+ }
+
+ public String getThumbUrl()
+ {
+ return thumbUrl;
+ }
+ public void setImageUrl(String imageUrl)
+ {
+ this.imageUrl = imageUrl;
+ }
+
+ public String getImageUrl()
+ {
+ return imageUrl;
+ }
+ public void setIsMoreSku(Long isMoreSku)
+ {
+ this.isMoreSku = isMoreSku;
+ }
+
+ public Long getIsMoreSku()
+ {
+ return isMoreSku;
+ }
+ public void setIsOnsale(Long isOnsale)
+ {
+ this.isOnsale = isOnsale;
+ }
+
+ public Long getIsOnsale()
+ {
+ return isOnsale;
+ }
+ public void setTotalSales(Long totalSales)
+ {
+ this.totalSales = totalSales;
+ }
+
+ public Long getTotalSales()
+ {
+ return totalSales;
+ }
+ public void setPublishTime(Date publishTime)
+ {
+ this.publishTime = publishTime;
+ }
+
+ public Date getPublishTime()
+ {
+ return publishTime;
+ }
+
+ public List getSShopGoodsSkuList()
+ {
+ return sShopGoodsSkuList;
+ }
+
+ public void setSShopGoodsSkuList(List sShopGoodsSkuList)
+ {
+ this.sShopGoodsSkuList = sShopGoodsSkuList;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/WmsStockInEntry.java b/api/src/main/java/cn/qihangerp/api/domain/WmsStockInEntry.java
new file mode 100644
index 0000000..776e96e
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/WmsStockInEntry.java
@@ -0,0 +1,105 @@
+package cn.qihangerp.api.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+/**
+ * 入库单
+ * @TableName wms_stock_in_entry
+ */
+@Data
+public class WmsStockInEntry implements Serializable {
+ /**
+ * 主键ID
+ */
+ private Long id;
+
+ /**
+ * 入库单据编号
+ */
+ private String stockInNum;
+
+ /**
+ * 来源单号
+ */
+ private String sourceNo;
+
+ /**
+ * 来源单id
+ */
+ private Long sourceId;
+
+ /**
+ * 来源类型(1采购订单2退货订单)
+ */
+ private Integer sourceType;
+
+ /**
+ * 采购订单商品数
+ */
+ private Integer sourceGoodsUnit;
+
+ /**
+ * 采购订单总件数
+ */
+ private Long sourceSpecUnitTotal;
+
+ /**
+ * 采购订单商品规格数
+ */
+ private Integer sourceSpecUnit;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 操作入库人id
+ */
+ private Long stockInOperatorId;
+
+ /**
+ * 操作入库人
+ */
+ private String stockInOperator;
+
+ /**
+ * 入库时间
+ */
+ private Date stockInTime;
+
+ /**
+ * 状态(0待入库1部分入库2全部入库)
+ */
+ private Integer status;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+
+ @TableField(exist = false)
+ private List wmsStockInEntryItemList;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/api/src/main/java/cn/qihangerp/api/domain/WmsStockInEntryItem.java b/api/src/main/java/cn/qihangerp/api/domain/WmsStockInEntryItem.java
new file mode 100644
index 0000000..91fdca5
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/WmsStockInEntryItem.java
@@ -0,0 +1,138 @@
+package cn.qihangerp.api.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+/**
+ * 入库单明细
+ * @TableName wms_stock_in_entry_item
+ */
+@Data
+public class WmsStockInEntryItem implements Serializable {
+ /**
+ *
+ */
+ private Long id;
+
+ /**
+ * 入库单id
+ */
+ private Long entryId;
+
+ /**
+ * 来源类型(1采购订单2退货订单)
+ */
+ private Integer sourceType;
+
+ /**
+ * 来源单id
+ */
+ private Long sourceId;
+
+ /**
+ * 来源单itemId
+ */
+ private Long sourceItemId;
+
+ /**
+ * 商品id
+ */
+ private Long goodsId;
+
+ /**
+ * 商品编码
+ */
+ private String goodsNum;
+
+ /**
+ * 商品名称
+ */
+ private String goodsName;
+
+ /**
+ * 商品规格id
+ */
+ private Long specId;
+
+ /**
+ * 商品规格编码
+ */
+ private String specNum;
+
+ /**
+ * 颜色
+ */
+ private String colorValue;
+
+ /**
+ * 图片
+ */
+ private String colorImage;
+
+ /**
+ * 尺码
+ */
+ private String sizeValue;
+
+ /**
+ * 款式
+ */
+ private String styleValue;
+
+ /**
+ * 原始数量
+ */
+ private Long originalQuantity;
+
+ /**
+ * 入库数量
+ */
+ private Long inQuantity;
+ @TableField(exist = false)
+ private Long quantity;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 入库仓位
+ */
+ private Long locationId;
+
+ /**
+ * 入库仓位编码
+ */
+ private String locationNum;
+
+ /**
+ * 状态(0待入库1部分入库2全部入库)
+ */
+ private Integer status;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/api/src/main/java/cn/qihangerp/api/domain/WmsStockLocation.java b/api/src/main/java/cn/qihangerp/api/domain/WmsStockLocation.java
new file mode 100644
index 0000000..22fd72f
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/WmsStockLocation.java
@@ -0,0 +1,133 @@
+package cn.qihangerp.api.domain;
+
+import cn.qihangerp.common.annotation.Excel;
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 仓库货架对象 wms_stock_location
+ *
+ * @author qihang
+ * @date 2024-01-09
+ */
+public class WmsStockLocation extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键ID */
+ private Long id;
+
+ /** 货架编号 */
+ @Excel(name = "货架编号")
+ private String number;
+
+ /** 货架名称 */
+ @Excel(name = "货架名称")
+ private String name;
+
+ /** 上级id */
+ @Excel(name = "上级id")
+ private Long parentId;
+
+ /** 层级深度1级2级3级 */
+ @Excel(name = "层级深度1级2级3级")
+ private Long depth;
+
+ /** 一级类目id */
+ @Excel(name = "一级类目id")
+ private Long parentId1;
+
+ /** 二级类目id */
+ @Excel(name = "二级类目id")
+ private Long parentId2;
+
+ /** 地址 */
+ @Excel(name = "地址")
+ private String address;
+
+ /** 0正常 1删除 */
+ @Excel(name = "0正常 1删除")
+ private Long isDelete;
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+ public void setNumber(String number)
+ {
+ this.number = number;
+ }
+
+ public String getNumber()
+ {
+ return number;
+ }
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+ public void setParentId(Long parentId)
+ {
+ this.parentId = parentId;
+ }
+
+ public Long getParentId()
+ {
+ return parentId;
+ }
+ public void setDepth(Long depth)
+ {
+ this.depth = depth;
+ }
+
+ public Long getDepth()
+ {
+ return depth;
+ }
+ public void setParentId1(Long parentId1)
+ {
+ this.parentId1 = parentId1;
+ }
+
+ public Long getParentId1()
+ {
+ return parentId1;
+ }
+ public void setParentId2(Long parentId2)
+ {
+ this.parentId2 = parentId2;
+ }
+
+ public Long getParentId2()
+ {
+ return parentId2;
+ }
+ public void setAddress(String address)
+ {
+ this.address = address;
+ }
+
+ public String getAddress()
+ {
+ return address;
+ }
+ public void setIsDelete(Long isDelete)
+ {
+ this.isDelete = isDelete;
+ }
+
+ public Long getIsDelete()
+ {
+ return isDelete;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/WmsStockOutEntry.java b/api/src/main/java/cn/qihangerp/api/domain/WmsStockOutEntry.java
new file mode 100644
index 0000000..11b3160
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/WmsStockOutEntry.java
@@ -0,0 +1,121 @@
+package cn.qihangerp.api.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+/**
+ * 出库单
+ * @TableName wms_stock_out_entry
+ */
+@Data
+public class WmsStockOutEntry implements Serializable {
+ /**
+ *
+ */
+ private String id;
+
+ /**
+ * 出库单编号
+ */
+ private String stockOutNum;
+
+ /**
+ * 来源单据号
+ */
+ private String sourceNum;
+
+ /**
+ * 来源单据Id
+ */
+ private Long sourceId;
+
+ /**
+ * 出库类型1订单拣货出库2采购退货出库3盘点出库4报损出库
+ */
+ private Integer stockOutType;
+
+ /**
+ * 商品数
+ */
+ private Integer goodsUnit;
+
+ /**
+ * 商品规格数
+ */
+ private Integer specUnit;
+
+ /**
+ * 总件数
+ */
+ private Integer specUnitTotal;
+ private int outTotal;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 状态:0待出库1部分出库2全部出库
+ */
+ private Integer status;
+
+ /**
+ * 打印状态:是否打印1已打印0未打印
+ */
+ private Integer printStatus;
+
+ /**
+ * 打印时间
+ */
+ private Date printTime;
+
+ /**
+ * 出库时间
+ */
+ private Date outTime;
+
+ /**
+ * 完成出库时间
+ */
+ private Date completeTime;
+
+ /**
+ * 出库操作人userid
+ */
+ private Long operatorId;
+
+ /**
+ * 出库操作人
+ */
+ private String operatorName;
+
+ /**
+ * 创建日期
+ */
+ private Date createTime;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ @TableField(exist = false)
+ private List items;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/api/src/main/java/cn/qihangerp/api/domain/WmsStockOutEntryItem.java b/api/src/main/java/cn/qihangerp/api/domain/WmsStockOutEntryItem.java
new file mode 100644
index 0000000..f1ab1f9
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/WmsStockOutEntryItem.java
@@ -0,0 +1,104 @@
+package cn.qihangerp.api.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+/**
+ * 出库单明细
+ * @TableName wms_stock_out_entry_item
+ */
+@Data
+public class WmsStockOutEntryItem implements Serializable {
+ /**
+ * 主键ID
+ */
+ private String id;
+
+ /**
+ * 出库类型1订单拣货出库2采购退货出库3盘点出库4报损出库
+ */
+ private Integer stockOutType;
+
+ /**
+ * 出库单id(外键)
+ */
+ private String entryId;
+
+ /**
+ * 来源订单id
+ */
+ private Long sourceOrderId;
+
+ /**
+ * 来源订单itemId出库对应的itemId,如:order_item表id、invoice_info表id
+ */
+ private Long sourceOrderItemId;
+
+ /**
+ * 来源订单号
+ */
+ private String sourceOrderNum;
+
+ /**
+ * 商品id
+ */
+ private Long goodsId;
+
+ /**
+ * 商品规格id
+ */
+ private Long specId;
+
+ /**
+ * 规格编码
+ */
+ private String specNum;
+
+ /**
+ * 总数量
+ */
+ private Integer originalQuantity;
+
+ /**
+ * 已出库数量
+ */
+ private Integer outQuantity;
+
+ /**
+ * 完成出库时间
+ */
+ private Date completeTime;
+
+ /**
+ * 完成拣货时间
+ */
+ private Date pickedTime;
+
+ /**
+ * 状态:0待出库1部分出库2全部出库
+ */
+ private Integer status;
+
+ /**
+ *
+ */
+ private Date createTime;
+
+ /**
+ *
+ */
+ private Date updateTime;
+
+ @TableField(exist = false)
+ private Long supplierId;
+ /**
+ * 库存详情
+ */
+ @TableField(exist = false)
+ List inventoryDetails;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/api/src/main/java/cn/qihangerp/api/domain/WmsStockOutEntryItemDetail.java b/api/src/main/java/cn/qihangerp/api/domain/WmsStockOutEntryItemDetail.java
new file mode 100644
index 0000000..aef701c
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/WmsStockOutEntryItemDetail.java
@@ -0,0 +1,64 @@
+package cn.qihangerp.api.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 出库明细详情
+ * @TableName wms_stock_out_entry_item_detail
+ */
+@Data
+public class WmsStockOutEntryItemDetail implements Serializable {
+ /**
+ * 主键ID
+ */
+ private Long id;
+
+ /**
+ * 出库单ID
+ */
+ private Long entryId;
+
+ /**
+ * 出库单ItemID
+ */
+ private Long entryItemId;
+
+ /**
+ * 库存ID
+ */
+ private Long goodsInventoryId;
+
+ /**
+ * 库存详情ID
+ */
+ private Long goodsInventoryDetailId;
+
+ /**
+ * 出库数量
+ */
+ private Integer quantity;
+
+ /**
+ * 出库仓位ID
+ */
+ private Integer locationId;
+
+ /**
+ * 出库操作人userid
+ */
+ private Long operatorId;
+
+ /**
+ * 出库操作人
+ */
+ private String operatorName;
+
+ /**
+ * 出库时间
+ */
+ private Date outTime;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/api/src/main/java/cn/qihangerp/api/domain/bo/GoodsSpecAddBo.java b/api/src/main/java/cn/qihangerp/api/domain/bo/GoodsSpecAddBo.java
new file mode 100644
index 0000000..5f40b64
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/bo/GoodsSpecAddBo.java
@@ -0,0 +1,80 @@
+package cn.qihangerp.api.domain.bo;
+
+import java.math.BigDecimal;
+
+public class GoodsSpecAddBo {
+ private Long colorId;
+ private String colorValue;
+ private Long sizeId;
+ private String sizeValue;
+ private Long styleId;
+ private String styleValue;
+
+ private String specNum;
+
+ private BigDecimal purPrice;
+
+ public Long getColorId() {
+ return colorId;
+ }
+
+ public void setColorId(Long colorId) {
+ this.colorId = colorId;
+ }
+
+ public String getColorValue() {
+ return colorValue;
+ }
+
+ public void setColorValue(String colorValue) {
+ this.colorValue = colorValue;
+ }
+
+ public Long getSizeId() {
+ return sizeId;
+ }
+
+ public void setSizeId(Long sizeId) {
+ this.sizeId = sizeId;
+ }
+
+ public String getSizeValue() {
+ return sizeValue;
+ }
+
+ public void setSizeValue(String sizeValue) {
+ this.sizeValue = sizeValue;
+ }
+
+ public Long getStyleId() {
+ return styleId;
+ }
+
+ public void setStyleId(Long styleId) {
+ this.styleId = styleId;
+ }
+
+ public String getStyleValue() {
+ return styleValue;
+ }
+
+ public void setStyleValue(String styleValue) {
+ this.styleValue = styleValue;
+ }
+
+ public String getSpecNum() {
+ return specNum;
+ }
+
+ public void setSpecNum(String specNum) {
+ this.specNum = specNum;
+ }
+
+ public BigDecimal getPurPrice() {
+ return purPrice;
+ }
+
+ public void setPurPrice(BigDecimal purPrice) {
+ this.purPrice = purPrice;
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/bo/OrderItemSpecIdUpdateBo.java b/api/src/main/java/cn/qihangerp/api/domain/bo/OrderItemSpecIdUpdateBo.java
new file mode 100644
index 0000000..ce07d2d
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/bo/OrderItemSpecIdUpdateBo.java
@@ -0,0 +1,9 @@
+package cn.qihangerp.api.domain.bo;
+
+import lombok.Data;
+
+@Data
+public class OrderItemSpecIdUpdateBo {
+ private Long orderItemId;
+ private Long erpGoodsSpecId;
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderAddBo.java b/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderAddBo.java
new file mode 100644
index 0000000..1f1367d
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderAddBo.java
@@ -0,0 +1,80 @@
+package cn.qihangerp.api.domain.bo;
+
+import cn.qihangerp.domain.BaseEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 采购订单对象 scm_purchase_order
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class PurchaseOrderAddBo extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+
+ /** 供应商id */
+ private Long contactId;
+
+ /** 订单编号 */
+ private String orderNo;
+
+ /** 订单日期 */
+ private Date orderDate;
+
+
+ /** 订单总金额 */
+ private BigDecimal orderAmount;
+
+ private List goodsList;
+
+ public List getGoodsList() {
+ return goodsList;
+ }
+
+ public void setGoodsList(List goodsList) {
+ this.goodsList = goodsList;
+ }
+
+ public void setContactId(Long contactId)
+ {
+ this.contactId = contactId;
+ }
+
+ public Long getContactId()
+ {
+ return contactId;
+ }
+ public void setOrderNo(String orderNo)
+ {
+ this.orderNo = orderNo;
+ }
+
+ public String getOrderNo()
+ {
+ return orderNo;
+ }
+ public void setOrderDate(Date orderDate)
+ {
+ this.orderDate = orderDate;
+ }
+
+ public Date getOrderDate()
+ {
+ return orderDate;
+ }
+ public void setOrderAmount(BigDecimal orderAmount)
+ {
+ this.orderAmount = orderAmount;
+ }
+
+ public BigDecimal getOrderAmount()
+ {
+ return orderAmount;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderAddItemBo.java b/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderAddItemBo.java
new file mode 100644
index 0000000..4dfc696
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderAddItemBo.java
@@ -0,0 +1,124 @@
+package cn.qihangerp.api.domain.bo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 采购订单对象 scm_purchase_order
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class PurchaseOrderAddItemBo {
+ private static final long serialVersionUID = 1L;
+
+
+ private Long id;
+ private String colorImage;
+ private String name;
+ private BigDecimal purPrice;
+ private Long qty;
+ private BigDecimal amount;
+ private Long goodsId;
+ private String colorValue;
+ private String number;
+ private String sizeValue;
+ private String specNum;
+ private String styleValue;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getColorImage() {
+ return colorImage;
+ }
+
+ public void setColorImage(String colorImage) {
+ this.colorImage = colorImage;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public BigDecimal getPurPrice() {
+ return purPrice;
+ }
+
+ public void setPurPrice(BigDecimal purPrice) {
+ this.purPrice = purPrice;
+ }
+
+ public Long getQty() {
+ return qty;
+ }
+
+ public void setQty(Long qty) {
+ this.qty = qty;
+ }
+
+ public BigDecimal getAmount() {
+ return amount;
+ }
+
+ public void setAmount(BigDecimal amount) {
+ this.amount = amount;
+ }
+
+ public Long getGoodsId() {
+ return goodsId;
+ }
+
+ public void setGoodsId(Long goodsId) {
+ this.goodsId = goodsId;
+ }
+
+ public String getColorValue() {
+ return colorValue;
+ }
+
+ public void setColorValue(String colorValue) {
+ this.colorValue = colorValue;
+ }
+
+ public String getNumber() {
+ return number;
+ }
+
+ public void setNumber(String number) {
+ this.number = number;
+ }
+
+ public String getSizeValue() {
+ return sizeValue;
+ }
+
+ public void setSizeValue(String sizeValue) {
+ this.sizeValue = sizeValue;
+ }
+
+ public String getSpecNum() {
+ return specNum;
+ }
+
+ public void setSpecNum(String specNum) {
+ this.specNum = specNum;
+ }
+
+ public String getStyleValue() {
+ return styleValue;
+ }
+
+ public void setStyleValue(String styleValue) {
+ this.styleValue = styleValue;
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderOptionBo.java b/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderOptionBo.java
new file mode 100644
index 0000000..3bd7170
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderOptionBo.java
@@ -0,0 +1,111 @@
+package cn.qihangerp.api.domain.bo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class PurchaseOrderOptionBo {
+ private Long id;
+ private String optionType;//操作类型(audit:审核;confirm:确认(和供应商确认成功);SupplierShip:供应商发货)
+ private String remark;
+ private String auditUser;
+
+ private String confirmUser;//采购单确认人
+
+ // 供应商发货
+ private Date supplierDeliveryTime;
+ private String shipCompany;
+ private String shipNo;
+
+ private BigDecimal shipCost;
+ private BigDecimal totalAmount;
+
+ private String updateBy;
+
+ public String getConfirmUser() {
+ return confirmUser;
+ }
+
+ public void setConfirmUser(String confirmUser) {
+ this.confirmUser = confirmUser;
+ }
+
+ public BigDecimal getShipCost() {
+ return shipCost;
+ }
+
+ public void setShipCost(BigDecimal shipCost) {
+ this.shipCost = shipCost;
+ }
+
+ public BigDecimal getTotalAmount() {
+ return totalAmount;
+ }
+
+ public void setTotalAmount(BigDecimal totalAmount) {
+ this.totalAmount = totalAmount;
+ }
+
+ public Date getSupplierDeliveryTime() {
+ return supplierDeliveryTime;
+ }
+
+ public void setSupplierDeliveryTime(Date supplierDeliveryTime) {
+ this.supplierDeliveryTime = supplierDeliveryTime;
+ }
+
+ public String getShipCompany() {
+ return shipCompany;
+ }
+
+ public void setShipCompany(String shipCompany) {
+ this.shipCompany = shipCompany;
+ }
+
+ public String getShipNo() {
+ return shipNo;
+ }
+
+ public void setShipNo(String shipNo) {
+ this.shipNo = shipNo;
+ }
+
+ public String getUpdateBy() {
+ return updateBy;
+ }
+
+ public void setUpdateBy(String updateBy) {
+ this.updateBy = updateBy;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getOptionType() {
+ return optionType;
+ }
+
+ public void setOptionType(String optionType) {
+ this.optionType = optionType;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getAuditUser() {
+ return auditUser;
+ }
+
+ public void setAuditUser(String auditUser) {
+ this.auditUser = auditUser;
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderStockInBo.java b/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderStockInBo.java
new file mode 100644
index 0000000..bab29bf
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderStockInBo.java
@@ -0,0 +1,37 @@
+package cn.qihangerp.api.domain.bo;
+
+import cn.qihangerp.domain.BaseEntity;
+
+import java.util.List;
+
+/**
+ * 采购订单对象 scm_purchase_order
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class PurchaseOrderStockInBo extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ private Long id;//采购单id
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ private List goodsList;
+
+ public List getGoodsList() {
+ return goodsList;
+ }
+
+ public void setGoodsList(List goodsList) {
+ this.goodsList = goodsList;
+ }
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderStockInItemBo.java b/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderStockInItemBo.java
new file mode 100644
index 0000000..fab3c25
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/bo/PurchaseOrderStockInItemBo.java
@@ -0,0 +1,131 @@
+package cn.qihangerp.api.domain.bo;
+
+import cn.qihangerp.domain.BaseEntity;
+
+/**
+ * 采购订单对象 scm_purchase_order
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public class PurchaseOrderStockInItemBo extends BaseEntity {
+ private static final long serialVersionUID = 1L;
+
+ private Long id;
+ private Long orderId;
+ private Long goodsId;
+ private String goodsNum;
+ private Long specId;
+ private String specNum;
+ private String goodsName;
+ private String colorValue;
+ private String colorImage;
+ private String sizeValue;
+ private String styleValue;
+ private Long quantity;
+ private Long inQty;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Long getOrderId() {
+ return orderId;
+ }
+
+ public void setOrderId(Long orderId) {
+ this.orderId = orderId;
+ }
+
+ public Long getGoodsId() {
+ return goodsId;
+ }
+
+ public void setGoodsId(Long goodsId) {
+ this.goodsId = goodsId;
+ }
+
+ public String getGoodsNum() {
+ return goodsNum;
+ }
+
+ public void setGoodsNum(String goodsNum) {
+ this.goodsNum = goodsNum;
+ }
+
+ public Long getSpecId() {
+ return specId;
+ }
+
+ public void setSpecId(Long specId) {
+ this.specId = specId;
+ }
+
+ public String getSpecNum() {
+ return specNum;
+ }
+
+ public void setSpecNum(String specNum) {
+ this.specNum = specNum;
+ }
+
+ public String getGoodsName() {
+ return goodsName;
+ }
+
+ public void setGoodsName(String goodsName) {
+ this.goodsName = goodsName;
+ }
+
+ public String getColorValue() {
+ return colorValue;
+ }
+
+ public void setColorValue(String colorValue) {
+ this.colorValue = colorValue;
+ }
+
+ public String getColorImage() {
+ return colorImage;
+ }
+
+ public void setColorImage(String colorImage) {
+ this.colorImage = colorImage;
+ }
+
+ public String getSizeValue() {
+ return sizeValue;
+ }
+
+ public void setSizeValue(String sizeValue) {
+ this.sizeValue = sizeValue;
+ }
+
+ public String getStyleValue() {
+ return styleValue;
+ }
+
+ public void setStyleValue(String styleValue) {
+ this.styleValue = styleValue;
+ }
+
+ public Long getQuantity() {
+ return quantity;
+ }
+
+ public void setQuantity(Long quantity) {
+ this.quantity = quantity;
+ }
+
+ public Long getInQty() {
+ return inQty;
+ }
+
+ public void setInQty(Long inQty) {
+ this.inQty = inQty;
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/bo/RefundBo.java b/api/src/main/java/cn/qihangerp/api/domain/bo/RefundBo.java
new file mode 100644
index 0000000..c774c7a
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/bo/RefundBo.java
@@ -0,0 +1,10 @@
+package cn.qihangerp.api.domain.bo;
+
+import lombok.Data;
+
+@Data
+public class RefundBo {
+ private Long shopId;
+ private String originalOrderId;
+ private Integer status;
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/bo/ShipOrderSupplierShipBo.java b/api/src/main/java/cn/qihangerp/api/domain/bo/ShipOrderSupplierShipBo.java
new file mode 100644
index 0000000..f1e5cc3
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/bo/ShipOrderSupplierShipBo.java
@@ -0,0 +1,16 @@
+package cn.qihangerp.api.domain.bo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ShipOrderSupplierShipBo {
+ private Long erpOrderId;
+ private String logisticsCompany;
+ private String logisticsCode;
+ private Float logisticsFee;
+ private String shipTime;
+ private String remark;
+ private List itemList;
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/bo/ShipOrderSupplierShipItemBo.java b/api/src/main/java/cn/qihangerp/api/domain/bo/ShipOrderSupplierShipItemBo.java
new file mode 100644
index 0000000..f93cc5e
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/bo/ShipOrderSupplierShipItemBo.java
@@ -0,0 +1,9 @@
+package cn.qihangerp.api.domain.bo;
+
+import lombok.Data;
+
+@Data
+public class ShipOrderSupplierShipItemBo {
+ private Long id;
+ private Float purAmount;
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/bo/StockOutBo.java b/api/src/main/java/cn/qihangerp/api/domain/bo/StockOutBo.java
new file mode 100644
index 0000000..4fe48c1
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/bo/StockOutBo.java
@@ -0,0 +1,74 @@
+package cn.qihangerp.api.domain.bo;
+
+public class StockOutBo {
+ /** entry_item 主键ID */
+ private Long entryItemId;
+
+ /** 出库单id */
+ private Long entryId;
+ /** 商品规格id */
+ private Long specId;
+ /** 库存详情id**/
+ private Long inventoryDetailId;
+ private Integer outQty;
+
+ private Long operatorId;
+ private String operatorName;
+
+ public Long getOperatorId() {
+ return operatorId;
+ }
+
+ public void setOperatorId(Long operatorId) {
+ this.operatorId = operatorId;
+ }
+
+ public String getOperatorName() {
+ return operatorName;
+ }
+
+ public void setOperatorName(String operatorName) {
+ this.operatorName = operatorName;
+ }
+
+ public Long getEntryItemId() {
+ return entryItemId;
+ }
+
+ public Long getInventoryDetailId() {
+ return inventoryDetailId;
+ }
+
+ public void setInventoryDetailId(Long inventoryDetailId) {
+ this.inventoryDetailId = inventoryDetailId;
+ }
+
+ public void setEntryItemId(Long entryItemId) {
+ this.entryItemId = entryItemId;
+ }
+
+ public Long getEntryId() {
+ return entryId;
+ }
+
+ public void setEntryId(Long entryId) {
+ this.entryId = entryId;
+ }
+
+ public Long getSpecId() {
+ return specId;
+ }
+
+ public void setSpecId(Long specId) {
+ this.specId = specId;
+ }
+
+
+ public Integer getOutQty() {
+ return outQty;
+ }
+
+ public void setOutQty(Integer outQty) {
+ this.outQty = outQty;
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/bo/StockOutEntryGenerateBo.java b/api/src/main/java/cn/qihangerp/api/domain/bo/StockOutEntryGenerateBo.java
new file mode 100644
index 0000000..a705577
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/bo/StockOutEntryGenerateBo.java
@@ -0,0 +1,12 @@
+package cn.qihangerp.api.domain.bo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class StockOutEntryGenerateBo {
+ private String stockOutNum;
+ private Date createTime;
+ private Long[] orderItemIds;
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/bo/StockingAddVo.java b/api/src/main/java/cn/qihangerp/api/domain/bo/StockingAddVo.java
new file mode 100644
index 0000000..0dd0bf2
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/bo/StockingAddVo.java
@@ -0,0 +1,42 @@
+package cn.qihangerp.api.domain.bo;
+
+import java.util.Date;
+
+public class StockingAddVo {
+ private String stockOutNum;
+ private Date createTime;
+ private String createBy;
+ private Long[] ids;
+
+ public String getCreateBy() {
+ return createBy;
+ }
+
+ public void setCreateBy(String createBy) {
+ this.createBy = createBy;
+ }
+
+ public String getStockOutNum() {
+ return stockOutNum;
+ }
+
+ public void setStockOutNum(String stockOutNum) {
+ this.stockOutNum = stockOutNum;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+
+ public Long[] getIds() {
+ return ids;
+ }
+
+ public void setIds(Long[] ids) {
+ this.ids = ids;
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/bo/SupplierShipDistBo.java b/api/src/main/java/cn/qihangerp/api/domain/bo/SupplierShipDistBo.java
new file mode 100644
index 0000000..f5076f1
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/bo/SupplierShipDistBo.java
@@ -0,0 +1,11 @@
+package cn.qihangerp.api.domain.bo;
+
+import lombok.Data;
+
+/**
+ * 分配给供应商发货
+ */
+@Data
+public class SupplierShipDistBo {
+ private Long[] orderItemIds;
+}
diff --git a/api/src/main/java/cn/qihangerp/api/domain/vo/GoodsSpecListVo.java b/api/src/main/java/cn/qihangerp/api/domain/vo/GoodsSpecListVo.java
new file mode 100644
index 0000000..738e077
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/domain/vo/GoodsSpecListVo.java
@@ -0,0 +1,112 @@
+package cn.qihangerp.api.domain.vo;
+
+
+import java.math.BigDecimal;
+
+public class GoodsSpecListVo {
+
+ private Long id;
+ private Long goodsId;
+ private Long supplierId;
+
+ /** 商品名称 */
+ private String name;
+
+ /** 商品编号 */
+ private String number;
+ private String specNum;
+ private String colorValue;
+ /** 商品图片地址 */
+ private String colorImage;
+ private String sizeValue;
+ private String styleValue;
+ private BigDecimal purPrice;
+
+ public Long getSupplierId() {
+ return supplierId;
+ }
+
+ public void setSupplierId(Long supplierId) {
+ this.supplierId = supplierId;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Long getGoodsId() {
+ return goodsId;
+ }
+
+ public void setGoodsId(Long goodsId) {
+ this.goodsId = goodsId;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getNumber() {
+ return number;
+ }
+
+ public void setNumber(String number) {
+ this.number = number;
+ }
+
+ public String getSpecNum() {
+ return specNum;
+ }
+
+ public void setSpecNum(String specNum) {
+ this.specNum = specNum;
+ }
+
+ public String getColorValue() {
+ return colorValue;
+ }
+
+ public void setColorValue(String colorValue) {
+ this.colorValue = colorValue;
+ }
+
+ public String getColorImage() {
+ return colorImage;
+ }
+
+ public void setColorImage(String colorImage) {
+ this.colorImage = colorImage;
+ }
+
+ public String getSizeValue() {
+ return sizeValue;
+ }
+
+ public void setSizeValue(String sizeValue) {
+ this.sizeValue = sizeValue;
+ }
+
+ public String getStyleValue() {
+ return styleValue;
+ }
+
+ public void setStyleValue(String styleValue) {
+ this.styleValue = styleValue;
+ }
+
+ public BigDecimal getPurPrice() {
+ return purPrice;
+ }
+
+ public void setPurPrice(BigDecimal purPrice) {
+ this.purPrice = purPrice;
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ErpAfterSaleMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ErpAfterSaleMapper.java
new file mode 100644
index 0000000..5ad6370
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ErpAfterSaleMapper.java
@@ -0,0 +1,18 @@
+//package cn.qihangerp.api.mapper;
+//
+//import cn.qihangerp.api.domain.ErpAfterSale;
+//import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+//
+///**
+//* @author TW
+//* @description 针对表【erp_after_sale(售后处理表)】的数据库操作Mapper
+//* @createDate 2024-04-15 14:30:34
+//* @Entity cn.qihangerp.api.domain.ErpAfterSale
+//*/
+//public interface ErpAfterSaleMapper extends BaseMapper {
+//
+//}
+//
+//
+//
+//
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsBrandMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsBrandMapper.java
new file mode 100644
index 0000000..2170b4d
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsBrandMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ErpGoodsBrand;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品品牌Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@Mapper
+public interface ErpGoodsBrandMapper
+{
+ /**
+ * 查询商品品牌
+ *
+ * @param id 商品品牌主键
+ * @return 商品品牌
+ */
+ public ErpGoodsBrand selectErpGoodsBrandById(Long id);
+
+ /**
+ * 查询商品品牌列表
+ *
+ * @param erpGoodsBrand 商品品牌
+ * @return 商品品牌集合
+ */
+ public List selectErpGoodsBrandList(ErpGoodsBrand erpGoodsBrand);
+
+ /**
+ * 新增商品品牌
+ *
+ * @param erpGoodsBrand 商品品牌
+ * @return 结果
+ */
+ public int insertErpGoodsBrand(ErpGoodsBrand erpGoodsBrand);
+
+ /**
+ * 修改商品品牌
+ *
+ * @param erpGoodsBrand 商品品牌
+ * @return 结果
+ */
+ public int updateErpGoodsBrand(ErpGoodsBrand erpGoodsBrand);
+
+ /**
+ * 删除商品品牌
+ *
+ * @param id 商品品牌主键
+ * @return 结果
+ */
+ public int deleteErpGoodsBrandById(Long id);
+
+ /**
+ * 批量删除商品品牌
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteErpGoodsBrandByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsCategoryAttributeMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsCategoryAttributeMapper.java
new file mode 100644
index 0000000..e9a6721
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsCategoryAttributeMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ErpGoodsCategoryAttribute;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品分类属性Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@Mapper
+public interface ErpGoodsCategoryAttributeMapper
+{
+ /**
+ * 查询商品分类属性
+ *
+ * @param id 商品分类属性主键
+ * @return 商品分类属性
+ */
+ public ErpGoodsCategoryAttribute selectErpGoodsCategoryAttributeById(Long id);
+
+ /**
+ * 查询商品分类属性列表
+ *
+ * @param erpGoodsCategoryAttribute 商品分类属性
+ * @return 商品分类属性集合
+ */
+ public List selectErpGoodsCategoryAttributeList(ErpGoodsCategoryAttribute erpGoodsCategoryAttribute);
+
+ /**
+ * 新增商品分类属性
+ *
+ * @param erpGoodsCategoryAttribute 商品分类属性
+ * @return 结果
+ */
+ public int insertErpGoodsCategoryAttribute(ErpGoodsCategoryAttribute erpGoodsCategoryAttribute);
+
+ /**
+ * 修改商品分类属性
+ *
+ * @param erpGoodsCategoryAttribute 商品分类属性
+ * @return 结果
+ */
+ public int updateErpGoodsCategoryAttribute(ErpGoodsCategoryAttribute erpGoodsCategoryAttribute);
+
+ /**
+ * 删除商品分类属性
+ *
+ * @param id 商品分类属性主键
+ * @return 结果
+ */
+ public int deleteErpGoodsCategoryAttributeById(Long id);
+
+ /**
+ * 批量删除商品分类属性
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteErpGoodsCategoryAttributeByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsCategoryAttributeValueMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsCategoryAttributeValueMapper.java
new file mode 100644
index 0000000..d3f5cc1
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsCategoryAttributeValueMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ErpGoodsCategoryAttributeValue;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品分类属性值Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@Mapper
+public interface ErpGoodsCategoryAttributeValueMapper
+{
+ /**
+ * 查询商品分类属性值
+ *
+ * @param id 商品分类属性值主键
+ * @return 商品分类属性值
+ */
+ public ErpGoodsCategoryAttributeValue selectErpGoodsCategoryAttributeValueById(Long id);
+
+ /**
+ * 查询商品分类属性值列表
+ *
+ * @param erpGoodsCategoryAttributeValue 商品分类属性值
+ * @return 商品分类属性值集合
+ */
+ public List selectErpGoodsCategoryAttributeValueList(ErpGoodsCategoryAttributeValue erpGoodsCategoryAttributeValue);
+
+ /**
+ * 新增商品分类属性值
+ *
+ * @param erpGoodsCategoryAttributeValue 商品分类属性值
+ * @return 结果
+ */
+ public int insertErpGoodsCategoryAttributeValue(ErpGoodsCategoryAttributeValue erpGoodsCategoryAttributeValue);
+
+ /**
+ * 修改商品分类属性值
+ *
+ * @param erpGoodsCategoryAttributeValue 商品分类属性值
+ * @return 结果
+ */
+ public int updateErpGoodsCategoryAttributeValue(ErpGoodsCategoryAttributeValue erpGoodsCategoryAttributeValue);
+
+ /**
+ * 删除商品分类属性值
+ *
+ * @param id 商品分类属性值主键
+ * @return 结果
+ */
+ public int deleteErpGoodsCategoryAttributeValueById(Long id);
+
+ /**
+ * 批量删除商品分类属性值
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteErpGoodsCategoryAttributeValueByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsCategoryMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsCategoryMapper.java
new file mode 100644
index 0000000..c98df82
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsCategoryMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ErpGoodsCategory;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品分类Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@Mapper
+public interface ErpGoodsCategoryMapper
+{
+ /**
+ * 查询商品分类
+ *
+ * @param id 商品分类主键
+ * @return 商品分类
+ */
+ public ErpGoodsCategory selectErpGoodsCategoryById(Long id);
+
+ /**
+ * 查询商品分类列表
+ *
+ * @param erpGoodsCategory 商品分类
+ * @return 商品分类集合
+ */
+ public List selectErpGoodsCategoryList(ErpGoodsCategory erpGoodsCategory);
+
+ /**
+ * 新增商品分类
+ *
+ * @param erpGoodsCategory 商品分类
+ * @return 结果
+ */
+ public int insertErpGoodsCategory(ErpGoodsCategory erpGoodsCategory);
+
+ /**
+ * 修改商品分类
+ *
+ * @param erpGoodsCategory 商品分类
+ * @return 结果
+ */
+ public int updateErpGoodsCategory(ErpGoodsCategory erpGoodsCategory);
+
+ /**
+ * 删除商品分类
+ *
+ * @param id 商品分类主键
+ * @return 结果
+ */
+ public int deleteErpGoodsCategoryById(Long id);
+
+ /**
+ * 批量删除商品分类
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteErpGoodsCategoryByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsInventoryMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsInventoryMapper.java
new file mode 100644
index 0000000..f4aed63
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ErpGoodsInventoryMapper.java
@@ -0,0 +1,94 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ErpGoodsInventory;
+import cn.qihangerp.api.domain.ErpGoodsInventoryDetail;
+import cn.qihangerp.api.domain.WmsStockOutEntryItem;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品库存Mapper接口
+ *
+ * @author qihang
+ * @date 2024-01-09
+ */
+@Mapper
+public interface ErpGoodsInventoryMapper
+{
+ /**
+ * 查询商品库存
+ *
+ * @param id 商品库存主键
+ * @return 商品库存
+ */
+ public ErpGoodsInventory selectErpGoodsInventoryById(Long id);
+ public ErpGoodsInventory selectErpGoodsInventoryBySpecId(Long id);
+ List selectErpGoodsInventoryDetailBySpecId(Long specId);
+ ErpGoodsInventoryDetail selectErpGoodsInventoryDetailById(Long id);
+
+ /**
+ * 查询商品库存列表
+ *
+ * @param erpGoodsInventory 商品库存
+ * @return 商品库存集合
+ */
+ public List selectErpGoodsInventoryList(ErpGoodsInventory erpGoodsInventory);
+
+ /**
+ * 新增商品库存
+ *
+ * @param erpGoodsInventory 商品库存
+ * @return 结果
+ */
+ public int insertErpGoodsInventory(ErpGoodsInventory erpGoodsInventory);
+
+ /**
+ * 修改商品库存
+ *
+ * @param erpGoodsInventory 商品库存
+ * @return 结果
+ */
+ public int updateErpGoodsInventory(ErpGoodsInventory erpGoodsInventory);
+ public int updateErpGoodsInventoryDetail(ErpGoodsInventoryDetail detail);
+
+ /**
+ * 删除商品库存
+ *
+ * @param id 商品库存主键
+ * @return 结果
+ */
+ public int deleteErpGoodsInventoryById(Long id);
+
+ /**
+ * 批量删除商品库存
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteErpGoodsInventoryByIds(Long[] ids);
+
+ /**
+ * 批量删除商品库存明细
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteErpGoodsInventoryDetailByInventoryIds(Long[] ids);
+
+ /**
+ * 批量新增商品库存明细
+ *
+ * @param erpGoodsInventoryDetailList 商品库存明细列表
+ * @return 结果
+ */
+ public int batchErpGoodsInventoryDetail(List erpGoodsInventoryDetailList);
+
+
+ /**
+ * 通过商品库存主键删除商品库存明细信息
+ *
+ * @param id 商品库存ID
+ * @return 结果
+ */
+ public int deleteErpGoodsInventoryDetailByInventoryId(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ErpOrderItemMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ErpOrderItemMapper.java
new file mode 100644
index 0000000..cb56103
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ErpOrderItemMapper.java
@@ -0,0 +1,20 @@
+package cn.qihangerp.api.mapper;
+
+import cn.qihangerp.domain.ErpOrderItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @author TW
+* @description 针对表【erp_order_item(订单明细表)】的数据库操作Mapper
+* @createDate 2024-04-15 13:35:02
+* @Entity cn.qihangerp.domain.ErpOrderItem
+*/
+@Mapper
+public interface ErpOrderItemMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ErpOrderMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ErpOrderMapper.java
new file mode 100644
index 0000000..9460760
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ErpOrderMapper.java
@@ -0,0 +1,95 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.domain.ErpOrder;
+import cn.qihangerp.domain.ErpOrderItem;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 订单Mapper接口
+ *
+ * @author qihang
+ * @date 2024-01-05
+ */
+@Mapper
+public interface ErpOrderMapper
+{
+ /**
+ * 查询订单
+ *
+ * @param id 订单主键
+ * @return 订单
+ */
+ public ErpOrder selectErpOrderById(Long id);
+ ErpOrder selectErpOrderByNum(String orderNum);
+
+ /**
+ * 查询订单列表
+ *
+ * @param erpOrder 订单
+ * @return 订单集合
+ */
+ public List selectErpOrderList(ErpOrder erpOrder);
+
+ List selectOrderItemByOrderId(Long orderId);
+
+ ErpOrderItem selectOrderItemByOrderItemNum(ErpOrderItem orderItem);
+
+ /**
+ * 新增订单
+ *
+ * @param erpOrder 订单
+ * @return 结果
+ */
+ public int insertErpOrder(ErpOrder erpOrder);
+
+ /**
+ * 修改订单
+ *
+ * @param erpOrder 订单
+ * @return 结果
+ */
+ public int updateErpOrder(ErpOrder erpOrder);
+
+ /**
+ * 删除订单
+ *
+ * @param id 订单主键
+ * @return 结果
+ */
+ public int deleteErpOrderById(Long id);
+
+ /**
+ * 批量删除订单
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteErpOrderByIds(Long[] ids);
+
+ /**
+ * 批量删除订单明细
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteErpOrderItemByOrderIds(Long[] ids);
+
+ /**
+ * 批量新增订单明细
+ *
+ * @param erpOrderItemList 订单明细列表
+ * @return 结果
+ */
+ public int batchErpOrderItem(List erpOrderItemList);
+ public int insertErpOrderItem(ErpOrderItem erpOrderItem);
+
+
+ /**
+ * 通过订单主键删除订单明细信息
+ *
+ * @param id 订单ID
+ * @return 结果
+ */
+ public int deleteErpOrderItemByOrderId(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ErpSaleAfterInfoMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ErpSaleAfterInfoMapper.java
new file mode 100644
index 0000000..6d15875
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ErpSaleAfterInfoMapper.java
@@ -0,0 +1,18 @@
+package cn.qihangerp.api.mapper;
+
+import cn.qihangerp.api.domain.ErpSaleAfterInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author qilip
+* @description 针对表【erp_sale_after_info(售后处理表)】的数据库操作Mapper
+* @createDate 2024-05-05 20:16:21
+* @Entity cn.qihangerp.api.domain.ErpSaleAfterInfo
+*/
+public interface ErpSaleAfterInfoMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ErpSaleAfterRefundMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ErpSaleAfterRefundMapper.java
new file mode 100644
index 0000000..f0002b5
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ErpSaleAfterRefundMapper.java
@@ -0,0 +1,18 @@
+package cn.qihangerp.api.mapper;
+
+import cn.qihangerp.domain.ErpSaleAfterRefund;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author qilip
+* @description 针对表【erp_sale_after_refund(售后退款表)】的数据库操作Mapper
+* @createDate 2024-05-04 19:53:00
+* @Entity cn.qihangerp.domain.ErpSaleAfterRefund
+*/
+public interface ErpSaleAfterRefundMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ErpShipLogisticsMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ErpShipLogisticsMapper.java
new file mode 100644
index 0000000..704a1e3
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ErpShipLogisticsMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ErpShipLogistics;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 物流公司Mapper接口
+ *
+ * @author qihang
+ * @date 2024-01-12
+ */
+@Mapper
+public interface ErpShipLogisticsMapper
+{
+ /**
+ * 查询物流公司
+ *
+ * @param id 物流公司主键
+ * @return 物流公司
+ */
+ public ErpShipLogistics selectBLogisticsCompanyById(Long id);
+
+ /**
+ * 查询物流公司列表
+ *
+ * @param bLogisticsCompany 物流公司
+ * @return 物流公司集合
+ */
+ public List selectBLogisticsCompanyList(ErpShipLogistics bLogisticsCompany);
+
+ /**
+ * 新增物流公司
+ *
+ * @param bLogisticsCompany 物流公司
+ * @return 结果
+ */
+ public int insertBLogisticsCompany(ErpShipLogistics bLogisticsCompany);
+
+ /**
+ * 修改物流公司
+ *
+ * @param bLogisticsCompany 物流公司
+ * @return 结果
+ */
+ public int updateBLogisticsCompany(ErpShipLogistics bLogisticsCompany);
+
+ /**
+ * 删除物流公司
+ *
+ * @param id 物流公司主键
+ * @return 结果
+ */
+ public int deleteBLogisticsCompanyById(Long id);
+
+ /**
+ * 批量删除物流公司
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteBLogisticsCompanyByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ErpShipOrderAgentFeeMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ErpShipOrderAgentFeeMapper.java
new file mode 100644
index 0000000..730dda0
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ErpShipOrderAgentFeeMapper.java
@@ -0,0 +1,18 @@
+package cn.qihangerp.api.mapper;
+
+import cn.qihangerp.api.domain.ErpShipOrderAgentFee;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author qilip
+* @description 针对表【erp_ship_order_agent_fee(供应商代发账单)】的数据库操作Mapper
+* @createDate 2024-05-02 14:58:16
+* @Entity cn.qihangerp.api.domain.ErpShipOrderAgentFee
+*/
+public interface ErpShipOrderAgentFeeMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ErpShipOrderFeeMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ErpShipOrderFeeMapper.java
new file mode 100644
index 0000000..0787eea
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ErpShipOrderFeeMapper.java
@@ -0,0 +1,18 @@
+package cn.qihangerp.api.mapper;
+
+import cn.qihangerp.api.domain.ErpShipOrderFee;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author qilip
+* @description 针对表【erp_ship_order_fee(订单发货物流费用)】的数据库操作Mapper
+* @createDate 2024-05-02 13:35:20
+* @Entity cn.qihangerp.api.domain.ErpShipOrderFee
+*/
+public interface ErpShipOrderFeeMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ErpShipOrderMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ErpShipOrderMapper.java
new file mode 100644
index 0000000..7f01416
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ErpShipOrderMapper.java
@@ -0,0 +1,18 @@
+package cn.qihangerp.api.mapper;
+
+import cn.qihangerp.api.domain.ErpShipOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author qilip
+* @description 针对表【erp_ship_order(订单发货表)】的数据库操作Mapper
+* @createDate 2024-05-02 10:15:15
+* @Entity cn.qihangerp.api.domain.ErpShipOrder
+*/
+public interface ErpShipOrderMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/GoodsAttributeConfigMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/GoodsAttributeConfigMapper.java
new file mode 100644
index 0000000..680df77
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/GoodsAttributeConfigMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.GoodsAttributeConfig;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品属性配置Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@Mapper
+public interface GoodsAttributeConfigMapper
+{
+ /**
+ * 查询商品属性配置
+ *
+ * @param id 商品属性配置主键
+ * @return 商品属性配置
+ */
+ public GoodsAttributeConfig selectGoodsAttributeConfigById(Long id);
+
+ /**
+ * 查询商品属性配置列表
+ *
+ * @param goodsAttributeConfig 商品属性配置
+ * @return 商品属性配置集合
+ */
+ public List selectGoodsAttributeConfigList(GoodsAttributeConfig goodsAttributeConfig);
+
+ /**
+ * 新增商品属性配置
+ *
+ * @param goodsAttributeConfig 商品属性配置
+ * @return 结果
+ */
+ public int insertGoodsAttributeConfig(GoodsAttributeConfig goodsAttributeConfig);
+
+ /**
+ * 修改商品属性配置
+ *
+ * @param goodsAttributeConfig 商品属性配置
+ * @return 结果
+ */
+ public int updateGoodsAttributeConfig(GoodsAttributeConfig goodsAttributeConfig);
+
+ /**
+ * 删除商品属性配置
+ *
+ * @param id 商品属性配置主键
+ * @return 结果
+ */
+ public int deleteGoodsAttributeConfigById(Long id);
+
+ /**
+ * 批量删除商品属性配置
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteGoodsAttributeConfigByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/GoodsAttributeMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/GoodsAttributeMapper.java
new file mode 100644
index 0000000..b9548f7
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/GoodsAttributeMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.GoodsAttribute;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品属性Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@Mapper
+public interface GoodsAttributeMapper
+{
+ /**
+ * 查询商品属性
+ *
+ * @param id 商品属性主键
+ * @return 商品属性
+ */
+ public GoodsAttribute selectGoodsAttributeById(Long id);
+
+ /**
+ * 查询商品属性列表
+ *
+ * @param goodsAttribute 商品属性
+ * @return 商品属性集合
+ */
+ public List selectGoodsAttributeList(GoodsAttribute goodsAttribute);
+
+ /**
+ * 新增商品属性
+ *
+ * @param goodsAttribute 商品属性
+ * @return 结果
+ */
+ public int insertGoodsAttribute(GoodsAttribute goodsAttribute);
+
+ /**
+ * 修改商品属性
+ *
+ * @param goodsAttribute 商品属性
+ * @return 结果
+ */
+ public int updateGoodsAttribute(GoodsAttribute goodsAttribute);
+
+ /**
+ * 删除商品属性
+ *
+ * @param id 商品属性主键
+ * @return 结果
+ */
+ public int deleteGoodsAttributeById(Long id);
+
+ /**
+ * 批量删除商品属性
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteGoodsAttributeByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/GoodsImgMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/GoodsImgMapper.java
new file mode 100644
index 0000000..fcf98aa
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/GoodsImgMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.GoodsImg;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品图片Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@Mapper
+public interface GoodsImgMapper
+{
+ /**
+ * 查询商品图片
+ *
+ * @param id 商品图片主键
+ * @return 商品图片
+ */
+ public GoodsImg selectGoodsImgById(Long id);
+
+ /**
+ * 查询商品图片列表
+ *
+ * @param goodsImg 商品图片
+ * @return 商品图片集合
+ */
+ public List selectGoodsImgList(GoodsImg goodsImg);
+
+ /**
+ * 新增商品图片
+ *
+ * @param goodsImg 商品图片
+ * @return 结果
+ */
+ public int insertGoodsImg(GoodsImg goodsImg);
+
+ /**
+ * 修改商品图片
+ *
+ * @param goodsImg 商品图片
+ * @return 结果
+ */
+ public int updateGoodsImg(GoodsImg goodsImg);
+
+ /**
+ * 删除商品图片
+ *
+ * @param id 商品图片主键
+ * @return 结果
+ */
+ public int deleteGoodsImgById(Long id);
+
+ /**
+ * 批量删除商品图片
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteGoodsImgByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/GoodsMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/GoodsMapper.java
new file mode 100644
index 0000000..30514f9
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/GoodsMapper.java
@@ -0,0 +1,67 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.Goods;
+import cn.qihangerp.api.domain.vo.GoodsSpecListVo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品管理Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@Mapper
+public interface GoodsMapper
+{
+ /**
+ * 查询商品管理
+ *
+ * @param id 商品管理主键
+ * @return 商品管理
+ */
+ public Goods selectGoodsById(Long id);
+ public Goods selectGoodsByNumber(String number);
+
+ /**
+ * 查询商品管理列表
+ *
+ * @param goods 商品管理
+ * @return 商品管理集合
+ */
+ public List selectGoodsList(Goods goods);
+
+ /**
+ * 新增商品管理
+ *
+ * @param goods 商品管理
+ * @return 结果
+ */
+ public int insertGoods(Goods goods);
+
+ /**
+ * 修改商品管理
+ *
+ * @param goods 商品管理
+ * @return 结果
+ */
+ public int updateGoods(Goods goods);
+
+ /**
+ * 删除商品管理
+ *
+ * @param id 商品管理主键
+ * @return 结果
+ */
+ public int deleteGoodsById(Long id);
+
+ /**
+ * 批量删除商品管理
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteGoodsByIds(Long[] ids);
+
+ List searchGoodsSpec(String keyword);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/GoodsSpecAttrMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/GoodsSpecAttrMapper.java
new file mode 100644
index 0000000..fbe84a9
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/GoodsSpecAttrMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.GoodsSpecAttr;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品规格属性Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@Mapper
+public interface GoodsSpecAttrMapper
+{
+ /**
+ * 查询商品规格属性
+ *
+ * @param id 商品规格属性主键
+ * @return 商品规格属性
+ */
+ public GoodsSpecAttr selectGoodsSpecAttrById(Long id);
+
+ /**
+ * 查询商品规格属性列表
+ *
+ * @param goodsSpecAttr 商品规格属性
+ * @return 商品规格属性集合
+ */
+ public List selectGoodsSpecAttrList(GoodsSpecAttr goodsSpecAttr);
+
+ /**
+ * 新增商品规格属性
+ *
+ * @param goodsSpecAttr 商品规格属性
+ * @return 结果
+ */
+ public int insertGoodsSpecAttr(GoodsSpecAttr goodsSpecAttr);
+
+ /**
+ * 修改商品规格属性
+ *
+ * @param goodsSpecAttr 商品规格属性
+ * @return 结果
+ */
+ public int updateGoodsSpecAttr(GoodsSpecAttr goodsSpecAttr);
+
+ /**
+ * 删除商品规格属性
+ *
+ * @param id 商品规格属性主键
+ * @return 结果
+ */
+ public int deleteGoodsSpecAttrById(Long id);
+
+ /**
+ * 批量删除商品规格属性
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteGoodsSpecAttrByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/GoodsSpecMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/GoodsSpecMapper.java
new file mode 100644
index 0000000..6444bae
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/GoodsSpecMapper.java
@@ -0,0 +1,64 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.GoodsSpec;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商品规格Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@Mapper
+public interface GoodsSpecMapper
+{
+ /**
+ * 查询商品规格
+ *
+ * @param id 商品规格主键
+ * @return 商品规格
+ */
+ public GoodsSpec selectGoodsSpecById(Long id);
+ public GoodsSpec selectGoodsSpecBySpecNum(String specNum);
+
+ /**
+ * 查询商品规格列表
+ *
+ * @param goodsSpec 商品规格
+ * @return 商品规格集合
+ */
+ public List selectGoodsSpecList(GoodsSpec goodsSpec);
+
+ /**
+ * 新增商品规格
+ *
+ * @param goodsSpec 商品规格
+ * @return 结果
+ */
+ public int insertGoodsSpec(GoodsSpec goodsSpec);
+
+ /**
+ * 修改商品规格
+ *
+ * @param goodsSpec 商品规格
+ * @return 结果
+ */
+ public int updateGoodsSpec(GoodsSpec goodsSpec);
+
+ /**
+ * 删除商品规格
+ *
+ * @param id 商品规格主键
+ * @return 结果
+ */
+ public int deleteGoodsSpecById(Long id);
+
+ /**
+ * 批量删除商品规格
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteGoodsSpecByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/KeywordMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/KeywordMapper.java
new file mode 100644
index 0000000..1d1306f
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/KeywordMapper.java
@@ -0,0 +1,9 @@
+package cn.qihangerp.api.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import cn.qihangerp.api.domain.Keyword;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface KeywordMapper extends BaseMapper {
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/SShopPullLogsMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/SShopPullLogsMapper.java
new file mode 100644
index 0000000..d1552c2
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/SShopPullLogsMapper.java
@@ -0,0 +1,18 @@
+package cn.qihangerp.api.mapper;
+
+import cn.qihangerp.api.domain.SShopPullLogs;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author TW
+* @description 针对表【s_shop_pull_logs(店铺更新日志表)】的数据库操作Mapper
+* @createDate 2024-04-25 10:08:31
+* @Entity cn.qihangerp.api.domain.SShopPullLogs
+*/
+public interface SShopPullLogsMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderCostMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderCostMapper.java
new file mode 100644
index 0000000..fecf89c
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderCostMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ScmPurchaseOrderCost;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 采购订单费用确认Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-30
+ */
+@Mapper
+public interface ScmPurchaseOrderCostMapper
+{
+ /**
+ * 查询采购订单费用确认
+ *
+ * @param id 采购订单费用确认主键
+ * @return 采购订单费用确认
+ */
+ public ScmPurchaseOrderCost selectScmPurchaseOrderCostById(Long id);
+
+ /**
+ * 查询采购订单费用确认列表
+ *
+ * @param scmPurchaseOrderCost 采购订单费用确认
+ * @return 采购订单费用确认集合
+ */
+ public List selectScmPurchaseOrderCostList(ScmPurchaseOrderCost scmPurchaseOrderCost);
+
+ /**
+ * 新增采购订单费用确认
+ *
+ * @param scmPurchaseOrderCost 采购订单费用确认
+ * @return 结果
+ */
+ public int insertScmPurchaseOrderCost(ScmPurchaseOrderCost scmPurchaseOrderCost);
+
+ /**
+ * 修改采购订单费用确认
+ *
+ * @param scmPurchaseOrderCost 采购订单费用确认
+ * @return 结果
+ */
+ public int updateScmPurchaseOrderCost(ScmPurchaseOrderCost scmPurchaseOrderCost);
+
+ /**
+ * 删除采购订单费用确认
+ *
+ * @param id 采购订单费用确认主键
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderCostById(Long id);
+
+ /**
+ * 批量删除采购订单费用确认
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderCostByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderItemMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderItemMapper.java
new file mode 100644
index 0000000..a432855
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderItemMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ScmPurchaseOrderItem;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 采购订单明细Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@Mapper
+public interface ScmPurchaseOrderItemMapper
+{
+ /**
+ * 查询采购订单明细
+ *
+ * @param id 采购订单明细主键
+ * @return 采购订单明细
+ */
+ public ScmPurchaseOrderItem selectScmPurchaseOrderItemById(Long id);
+
+ /**
+ * 查询采购订单明细列表
+ *
+ * @param scmPurchaseOrderItem 采购订单明细
+ * @return 采购订单明细集合
+ */
+ public List selectScmPurchaseOrderItemList(ScmPurchaseOrderItem scmPurchaseOrderItem);
+
+ /**
+ * 新增采购订单明细
+ *
+ * @param scmPurchaseOrderItem 采购订单明细
+ * @return 结果
+ */
+ public int insertScmPurchaseOrderItem(ScmPurchaseOrderItem scmPurchaseOrderItem);
+
+ /**
+ * 修改采购订单明细
+ *
+ * @param scmPurchaseOrderItem 采购订单明细
+ * @return 结果
+ */
+ public int updateScmPurchaseOrderItem(ScmPurchaseOrderItem scmPurchaseOrderItem);
+
+ /**
+ * 删除采购订单明细
+ *
+ * @param id 采购订单明细主键
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderItemById(Long id);
+
+ /**
+ * 批量删除采购订单明细
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderItemByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderMapper.java
new file mode 100644
index 0000000..df23c04
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ScmPurchaseOrder;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 采购订单Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@Mapper
+public interface ScmPurchaseOrderMapper
+{
+ /**
+ * 查询采购订单
+ *
+ * @param id 采购订单主键
+ * @return 采购订单
+ */
+ public ScmPurchaseOrder selectScmPurchaseOrderById(Long id);
+
+ /**
+ * 查询采购订单列表
+ *
+ * @param scmPurchaseOrder 采购订单
+ * @return 采购订单集合
+ */
+ public List selectScmPurchaseOrderList(ScmPurchaseOrder scmPurchaseOrder);
+
+ /**
+ * 新增采购订单
+ *
+ * @param scmPurchaseOrder 采购订单
+ * @return 结果
+ */
+ public int insertScmPurchaseOrder(ScmPurchaseOrder scmPurchaseOrder);
+
+ /**
+ * 修改采购订单
+ *
+ * @param scmPurchaseOrder 采购订单
+ * @return 结果
+ */
+ public int updateScmPurchaseOrder(ScmPurchaseOrder scmPurchaseOrder);
+
+ /**
+ * 删除采购订单
+ *
+ * @param id 采购订单主键
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderById(Long id);
+
+ /**
+ * 批量删除采购订单
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderPayableMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderPayableMapper.java
new file mode 100644
index 0000000..6e35354
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderPayableMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 财务管理-应付款-采购货款Mapper接口
+ *
+ * @author qihang
+ * @date 2024-01-28
+ */
+@Mapper
+public interface ScmPurchaseOrderPayableMapper
+{
+ /**
+ * 查询财务管理-应付款-采购货款
+ *
+ * @param id 财务管理-应付款-采购货款主键
+ * @return 财务管理-应付款-采购货款
+ */
+ public cn.qihangerp.api.domain.ScmPurchaseOrderPayable selectFmsPayablePurchaseById(Long id);
+
+ /**
+ * 查询财务管理-应付款-采购货款列表
+ *
+ * @param fmsPayablePurchase 财务管理-应付款-采购货款
+ * @return 财务管理-应付款-采购货款集合
+ */
+ public List selectFmsPayablePurchaseList(cn.qihangerp.api.domain.ScmPurchaseOrderPayable fmsPayablePurchase);
+
+ /**
+ * 新增财务管理-应付款-采购货款
+ *
+ * @param fmsPayablePurchase 财务管理-应付款-采购货款
+ * @return 结果
+ */
+ public int insertFmsPayablePurchase(cn.qihangerp.api.domain.ScmPurchaseOrderPayable fmsPayablePurchase);
+
+ /**
+ * 修改财务管理-应付款-采购货款
+ *
+ * @param fmsPayablePurchase 财务管理-应付款-采购货款
+ * @return 结果
+ */
+ public int updateFmsPayablePurchase(cn.qihangerp.api.domain.ScmPurchaseOrderPayable fmsPayablePurchase);
+
+ /**
+ * 删除财务管理-应付款-采购货款
+ *
+ * @param id 财务管理-应付款-采购货款主键
+ * @return 结果
+ */
+ public int deleteFmsPayablePurchaseById(Long id);
+
+ /**
+ * 批量删除财务管理-应付款-采购货款
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteFmsPayablePurchaseByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderShipMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderShipMapper.java
new file mode 100644
index 0000000..e110fee
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ScmPurchaseOrderShipMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ScmPurchaseOrderShip;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 采购订单物流Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-30
+ */
+@Mapper
+public interface ScmPurchaseOrderShipMapper
+{
+ /**
+ * 查询采购订单物流
+ *
+ * @param id 采购订单物流主键
+ * @return 采购订单物流
+ */
+ public ScmPurchaseOrderShip selectScmPurchaseOrderShipById(Long id);
+
+ /**
+ * 查询采购订单物流列表
+ *
+ * @param scmPurchaseOrderShip 采购订单物流
+ * @return 采购订单物流集合
+ */
+ public List selectScmPurchaseOrderShipList(ScmPurchaseOrderShip scmPurchaseOrderShip);
+
+ /**
+ * 新增采购订单物流
+ *
+ * @param scmPurchaseOrderShip 采购订单物流
+ * @return 结果
+ */
+ public int insertScmPurchaseOrderShip(ScmPurchaseOrderShip scmPurchaseOrderShip);
+
+ /**
+ * 修改采购订单物流
+ *
+ * @param scmPurchaseOrderShip 采购订单物流
+ * @return 结果
+ */
+ public int updateScmPurchaseOrderShip(ScmPurchaseOrderShip scmPurchaseOrderShip);
+
+ /**
+ * 删除采购订单物流
+ *
+ * @param id 采购订单物流主键
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderShipById(Long id);
+
+ /**
+ * 批量删除采购订单物流
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderShipByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ScmSupplierMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ScmSupplierMapper.java
new file mode 100644
index 0000000..34cbdc7
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ScmSupplierMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ScmSupplier;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 【请填写功能名称】Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+@Mapper
+public interface ScmSupplierMapper
+{
+ /**
+ * 查询【请填写功能名称】
+ *
+ * @param id 【请填写功能名称】主键
+ * @return 【请填写功能名称】
+ */
+ public ScmSupplier selectScmSupplierById(Long id);
+
+ /**
+ * 查询【请填写功能名称】列表
+ *
+ * @param scmSupplier 【请填写功能名称】
+ * @return 【请填写功能名称】集合
+ */
+ public List selectScmSupplierList(ScmSupplier scmSupplier);
+
+ /**
+ * 新增【请填写功能名称】
+ *
+ * @param scmSupplier 【请填写功能名称】
+ * @return 结果
+ */
+ public int insertScmSupplier(ScmSupplier scmSupplier);
+
+ /**
+ * 修改【请填写功能名称】
+ *
+ * @param scmSupplier 【请填写功能名称】
+ * @return 结果
+ */
+ public int updateScmSupplier(ScmSupplier scmSupplier);
+
+ /**
+ * 删除【请填写功能名称】
+ *
+ * @param id 【请填写功能名称】主键
+ * @return 结果
+ */
+ public int deleteScmSupplierById(Long id);
+
+ /**
+ * 批量删除【请填写功能名称】
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteScmSupplierByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ShopGoodsMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ShopGoodsMapper.java
new file mode 100644
index 0000000..6eef9c2
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ShopGoodsMapper.java
@@ -0,0 +1,89 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ShopGoods;
+import cn.qihangerp.api.domain.SShopGoodsSku;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 店铺商品Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-31
+ */
+@Mapper
+public interface ShopGoodsMapper
+{
+ /**
+ * 查询店铺商品
+ *
+ * @param id 店铺商品主键
+ * @return 店铺商品
+ */
+ public ShopGoods selectShopGoodsById(Long id);
+
+ /**
+ * 查询店铺商品列表
+ *
+ * @param shopGoods 店铺商品
+ * @return 店铺商品集合
+ */
+ public List selectShopGoodsList(ShopGoods shopGoods);
+
+ /**
+ * 新增店铺商品
+ *
+ * @param shopGoods 店铺商品
+ * @return 结果
+ */
+ public int insertShopGoods(ShopGoods shopGoods);
+
+ /**
+ * 修改店铺商品
+ *
+ * @param shopGoods 店铺商品
+ * @return 结果
+ */
+ public int updateShopGoods(ShopGoods shopGoods);
+
+ /**
+ * 删除店铺商品
+ *
+ * @param id 店铺商品主键
+ * @return 结果
+ */
+ public int deleteShopGoodsById(Long id);
+
+ /**
+ * 批量删除店铺商品
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteShopGoodsByIds(Long[] ids);
+
+ /**
+ * 批量删除${subTable.functionName}
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteSShopGoodsSkuByShopGoodsIds(Long[] ids);
+
+ /**
+ * 批量新增${subTable.functionName}
+ *
+ * @param sShopGoodsSkuList ${subTable.functionName}列表
+ * @return 结果
+ */
+ public int batchSShopGoodsSku(List sShopGoodsSkuList);
+
+
+ /**
+ * 通过店铺商品主键删除${subTable.functionName}信息
+ *
+ * @param id 店铺商品ID
+ * @return 结果
+ */
+ public int deleteSShopGoodsSkuByShopGoodsId(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ShopMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ShopMapper.java
new file mode 100644
index 0000000..0011e59
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ShopMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.domain.Shop;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 店铺Mapper接口
+ *
+ * @author qihang
+ * @date 2023-12-31
+ */
+@Mapper
+public interface ShopMapper
+{
+ /**
+ * 查询店铺
+ *
+ * @param id 店铺主键
+ * @return 店铺
+ */
+ public Shop selectShopById(Long id);
+
+ /**
+ * 查询店铺列表
+ *
+ * @param shop 店铺
+ * @return 店铺集合
+ */
+ public List selectShopList(Shop shop);
+
+ /**
+ * 新增店铺
+ *
+ * @param shop 店铺
+ * @return 结果
+ */
+ public int insertShop(Shop shop);
+
+ /**
+ * 修改店铺
+ *
+ * @param shop 店铺
+ * @return 结果
+ */
+ public int updateShop(Shop shop);
+
+ /**
+ * 删除店铺
+ *
+ * @param id 店铺主键
+ * @return 结果
+ */
+ public int deleteShopById(Long id);
+
+ /**
+ * 批量删除店铺
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteShopByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/ShopSettingMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/ShopSettingMapper.java
new file mode 100644
index 0000000..fe9c037
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/ShopSettingMapper.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.domain.ShopSetting;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 第三方平台设置Mapper接口
+ *
+ * @author qihang
+ * @date 2024-01-18
+ */
+@Mapper
+public interface ShopSettingMapper
+{
+ /**
+ * 查询第三方平台设置
+ *
+ * @param id 第三方平台设置主键
+ * @return 第三方平台设置
+ */
+ public ShopSetting selectShopSettingById(Long id);
+
+ /**
+ * 查询第三方平台设置列表
+ *
+ * @param shopSetting 第三方平台设置
+ * @return 第三方平台设置集合
+ */
+ public List selectShopSettingList(ShopSetting shopSetting);
+
+ /**
+ * 新增第三方平台设置
+ *
+ * @param shopSetting 第三方平台设置
+ * @return 结果
+ */
+ public int insertShopSetting(ShopSetting shopSetting);
+
+ /**
+ * 修改第三方平台设置
+ *
+ * @param shopSetting 第三方平台设置
+ * @return 结果
+ */
+ public int updateShopSetting(ShopSetting shopSetting);
+
+ /**
+ * 删除第三方平台设置
+ *
+ * @param id 第三方平台设置主键
+ * @return 结果
+ */
+ public int deleteShopSettingById(Long id);
+
+ /**
+ * 批量删除第三方平台设置
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteShopSettingByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/WmsStockInEntryItemMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/WmsStockInEntryItemMapper.java
new file mode 100644
index 0000000..e46af6e
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/WmsStockInEntryItemMapper.java
@@ -0,0 +1,18 @@
+package cn.qihangerp.api.mapper;
+
+import cn.qihangerp.api.domain.WmsStockInEntryItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author TW
+* @description 针对表【wms_stock_in_entry_item(入库单明细)】的数据库操作Mapper
+* @createDate 2024-04-26 14:59:58
+* @Entity cn.qihangerp.api.domain.WmsStockInEntryItem
+*/
+public interface WmsStockInEntryItemMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/WmsStockInEntryMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/WmsStockInEntryMapper.java
new file mode 100644
index 0000000..d75d7f4
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/WmsStockInEntryMapper.java
@@ -0,0 +1,20 @@
+package cn.qihangerp.api.mapper;
+
+import cn.qihangerp.api.domain.WmsStockInEntry;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @author TW
+* @description 针对表【wms_stock_in_entry(入库单)】的数据库操作Mapper
+* @createDate 2024-04-26 14:54:16
+* @Entity cn.qihangerp.api.domain.WmsStockInEntry
+*/
+@Mapper
+public interface WmsStockInEntryMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/WmsStockLocationMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/WmsStockLocationMapper.java
new file mode 100644
index 0000000..5a33b80
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/WmsStockLocationMapper.java
@@ -0,0 +1,64 @@
+package cn.qihangerp.api.mapper;
+
+import java.util.List;
+import cn.qihangerp.api.domain.WmsStockLocation;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 仓库货架Mapper接口
+ *
+ * @author qihang
+ * @date 2024-01-09
+ */
+@Mapper
+public interface WmsStockLocationMapper
+{
+ /**
+ * 查询仓库货架
+ *
+ * @param id 仓库货架主键
+ * @return 仓库货架
+ */
+ public WmsStockLocation selectWmsStockLocationById(Long id);
+
+ /**
+ * 查询仓库货架列表
+ *
+ * @param wmsStockLocation 仓库货架
+ * @return 仓库货架集合
+ */
+ public List selectWmsStockLocationList(WmsStockLocation wmsStockLocation);
+ public List search(String number);
+
+ /**
+ * 新增仓库货架
+ *
+ * @param wmsStockLocation 仓库货架
+ * @return 结果
+ */
+ public int insertWmsStockLocation(WmsStockLocation wmsStockLocation);
+
+ /**
+ * 修改仓库货架
+ *
+ * @param wmsStockLocation 仓库货架
+ * @return 结果
+ */
+ public int updateWmsStockLocation(WmsStockLocation wmsStockLocation);
+
+ /**
+ * 删除仓库货架
+ *
+ * @param id 仓库货架主键
+ * @return 结果
+ */
+ public int deleteWmsStockLocationById(Long id);
+
+ /**
+ * 批量删除仓库货架
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteWmsStockLocationByIds(Long[] ids);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/WmsStockOutEntryItemDetailMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/WmsStockOutEntryItemDetailMapper.java
new file mode 100644
index 0000000..179cadd
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/WmsStockOutEntryItemDetailMapper.java
@@ -0,0 +1,18 @@
+package cn.qihangerp.api.mapper;
+
+import cn.qihangerp.api.domain.WmsStockOutEntryItemDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author TW
+* @description 针对表【wms_stock_out_entry_item_detail(出库明细详情)】的数据库操作Mapper
+* @createDate 2024-04-26 11:31:15
+* @Entity cn.qihangerp.api.domain.WmsStockOutEntryItemDetail
+*/
+public interface WmsStockOutEntryItemDetailMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/WmsStockOutEntryItemMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/WmsStockOutEntryItemMapper.java
new file mode 100644
index 0000000..b50ce2a
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/WmsStockOutEntryItemMapper.java
@@ -0,0 +1,18 @@
+package cn.qihangerp.api.mapper;
+
+import cn.qihangerp.api.domain.WmsStockOutEntryItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author TW
+* @description 针对表【wms_stock_out_entry_item(出库单明细)】的数据库操作Mapper
+* @createDate 2024-04-26 13:57:35
+* @Entity cn.qihangerp.api.domain.WmsStockOutEntryItem
+*/
+public interface WmsStockOutEntryItemMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/api/src/main/java/cn/qihangerp/api/mapper/WmsStockOutEntryMapper.java b/api/src/main/java/cn/qihangerp/api/mapper/WmsStockOutEntryMapper.java
new file mode 100644
index 0000000..f618014
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/mapper/WmsStockOutEntryMapper.java
@@ -0,0 +1,18 @@
+package cn.qihangerp.api.mapper;
+
+import cn.qihangerp.api.domain.WmsStockOutEntry;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author TW
+* @description 针对表【wms_stock_out_entry(出库单)】的数据库操作Mapper
+* @createDate 2024-04-26 11:31:15
+* @Entity cn.qihangerp.api.domain.WmsStockOutEntry
+*/
+public interface WmsStockOutEntryMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/api/src/main/java/cn/qihangerp/api/req/KeyWordListReq.java b/api/src/main/java/cn/qihangerp/api/req/KeyWordListReq.java
new file mode 100644
index 0000000..c94b421
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/req/KeyWordListReq.java
@@ -0,0 +1,13 @@
+package cn.qihangerp.api.req;
+
+import cn.qihangerp.api.common.PageReq;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class KeyWordListReq extends PageReq {
+ private String word;
+ private String source;
+ private String date;
+}
diff --git a/api/src/main/java/cn/qihangerp/api/server/NettyServerHandler.java b/api/src/main/java/cn/qihangerp/api/server/NettyServerHandler.java
new file mode 100644
index 0000000..0aec634
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/server/NettyServerHandler.java
@@ -0,0 +1,70 @@
+//package cn.qihangerp.api.server;
+//
+//import cn.qihangerp.api.mapper.ErpOrderMapper;
+//import cn.qihangerp.common.utils.bean.BeanUtils;
+//import cn.qihangerp.common.utils.spring.SpringUtils;
+//import cn.qihangerp.domain.ErpOrder;
+//import cn.qihangerp.domain.ErpOrderReturned;
+//import io.netty.buffer.ByteBuf;
+//import io.netty.channel.ChannelHandlerContext;
+//import io.netty.channel.ChannelInboundHandlerAdapter;
+//import lombok.extern.java.Log;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.stereotype.Component;
+//
+//import java.io.IOException;
+//
+//@Log
+//@Component
+//public class NettyServerHandler extends ChannelInboundHandlerAdapter {
+// @Autowired
+// private ErpOrderMapper orderMapper;
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) {
+// log.info("=======Netty服务器接收消息");
+//// ErpOrder erpOrder = (ErpOrder) msg;
+//// System.out.println("Received order: " + erpOrder.getOrderNum());
+//
+// // 这里实现将ErpOrder保存到数据库的逻辑
+// // 示例代码省略
+//
+//// ByteBuf buf = (ByteBuf) msg;
+//// try {
+//// while (buf.isReadable()) {
+//// System.out.print((char) buf.readByte());
+//// System.out.flush();
+//// }
+//// } finally {
+//// buf.release();
+//// }
+//
+//
+// //判断消息类型并进行相应的处理
+// if (msg instanceof ErpOrder) {
+// // 处理实体类型A的消息
+// ErpOrder entityA = (ErpOrder) msg;
+// ErpOrderMapper bean = SpringUtils.getBean(ErpOrderMapper.class);
+//// bean.insertErpOrder(entityA);
+//// orderMapper.insertErpOrder(entityA);
+// System.out.println("Received EntityA: " + entityA.getAddress());
+// // 在这里添加处理实体类型A的业务逻辑
+// }else if (msg instanceof ErpOrderReturned) {
+// // 处理实体类型A的消息
+// ErpOrderReturned returned = (ErpOrderReturned) msg;
+// System.out.println("Received ErpOrderReturned: " + returned.getAddress());
+// // 在这里添加处理实体类型A的业务逻辑
+// } else {
+// // 未知的消息类型
+// System.err.println("Unknown message type: " + msg.getClass().getName());
+// }
+// // 实时响应客户端信息
+// ctx.writeAndFlush("{code:500,msg:'order_num不能为空'}");
+// }
+//
+// @Override
+// public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
+// cause.printStackTrace();
+// ctx.close();
+// }
+//}
diff --git a/api/src/main/java/cn/qihangerp/api/server/QiHangRpcServerConfig.java b/api/src/main/java/cn/qihangerp/api/server/QiHangRpcServerConfig.java
new file mode 100644
index 0000000..4734559
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/server/QiHangRpcServerConfig.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.server;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.serialization.ClassResolvers;
+import io.netty.handler.codec.serialization.ObjectDecoder;
+import io.netty.handler.codec.serialization.ObjectEncoder;
+import lombok.extern.java.Log;
+import org.springframework.stereotype.Component;
+
+import jakarta.annotation.PostConstruct;
+@Log
+@Component
+public class QiHangRpcServerConfig {
+
+// @Autowired
+// private NettyServerHandler nettyServerHandler;
+
+ @PostConstruct
+ public void startServer() {
+ log.info("Netty服务器初始化============");
+ new Thread(() -> {
+ // 初始化 Netty 服务器
+ EventLoopGroup bossGroup = new NioEventLoopGroup(1);
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+
+ try {
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap.group(bossGroup, workerGroup)
+ .channel(NioServerSocketChannel.class)
+ .childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+// ch.pipeline().addLast(new ObjectDecoder(ClassResolvers.cacheDisabled(null)));
+// ch.pipeline().addLast(new ObjectEncoder());
+ // 添加自定义的业务处理器
+ ch.pipeline().addLast(
+ new ObjectEncoder(),
+ new ObjectDecoder(ClassResolvers.cacheDisabled(null)),
+ new QiHangRpcSimpleServerHandler()
+ );
+ }
+ })
+ .option(ChannelOption.SO_BACKLOG, 128)
+ .childOption(ChannelOption.SO_KEEPALIVE, true);
+
+ ChannelFuture future = serverBootstrap.bind(9999).sync();
+ future.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ bossGroup.shutdownGracefully();
+ workerGroup.shutdownGracefully();
+ }
+ }).start();
+ }
+}
+
diff --git a/api/src/main/java/cn/qihangerp/api/server/QiHangRpcSimpleServerHandler.java b/api/src/main/java/cn/qihangerp/api/server/QiHangRpcSimpleServerHandler.java
new file mode 100644
index 0000000..1a9b28e
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/server/QiHangRpcSimpleServerHandler.java
@@ -0,0 +1,58 @@
+package cn.qihangerp.api.server;
+
+import cn.qihangerp.api.mapper.ErpOrderMapper;
+import cn.qihangerp.api.service.ErpSaleAfterRefundService;
+import cn.qihangerp.api.service.IErpOrderService;
+import cn.qihangerp.domain.ErpSaleAfterRefund;
+import cn.qihangerp.mq.MQRequest;
+import cn.qihangerp.common.ApiResult;
+import cn.qihangerp.common.ResultVo;
+import cn.qihangerp.common.ResultVoEnum;
+import cn.qihangerp.common.utils.spring.SpringUtils;
+import cn.qihangerp.domain.ErpOrder;
+import cn.qihangerp.mq.MQRequestType;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class QiHangRpcSimpleServerHandler extends SimpleChannelInboundHandler {
+
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, MQRequest request) {
+ // 处理客户端请求
+
+ //判断消息类型并进行相应的处理
+ if (request.getMqRequestType() == MQRequestType.ORDER_CONFIRM) {
+ // 确认订单
+ IErpOrderService orderService = SpringUtils.getBean(IErpOrderService.class);
+ ResultVo integerResultVo = orderService.taoOrderMessage((ErpOrder) request.getData());
+ if(integerResultVo.getCode() != ResultVoEnum.SUCCESS.getIndex()){
+ ApiResult response = ApiResult.error(integerResultVo.getMsg());
+ ctx.writeAndFlush(response);
+ return;
+ }
+
+ }else if (request.getMqRequestType() == MQRequestType.REFUND_PUSH) {
+ // 退款推送
+ ErpSaleAfterRefundService refundService = SpringUtils.getBean(ErpSaleAfterRefundService.class);
+ ResultVo integerResultVo = refundService.taoRefundMessage((ErpSaleAfterRefund) request.getData());
+ if(integerResultVo.getCode() != ResultVoEnum.SUCCESS.getIndex()){
+ ApiResult response = ApiResult.error(integerResultVo.getMsg());
+ ctx.writeAndFlush(response);
+ return;
+ }
+ } else {
+ // 未知的消息类型
+ System.err.println("Unknown type");
+ }
+
+// String responseMessage = "Hello, " + request;
+ ApiResult response = ApiResult.success();
+ ctx.writeAndFlush(response);
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/ErpAfterSaleService.java b/api/src/main/java/cn/qihangerp/api/service/ErpAfterSaleService.java
new file mode 100644
index 0000000..58c8c35
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/ErpAfterSaleService.java
@@ -0,0 +1,15 @@
+//package cn.qihangerp.api.service;
+//
+//import cn.qihangerp.common.PageQuery;
+//import cn.qihangerp.common.PageResult;
+//import cn.qihangerp.api.domain.ErpAfterSale;
+//import com.baomidou.mybatisplus.extension.service.IService;
+//
+///**
+//* @author TW
+//* @description 针对表【erp_after_sale(售后处理表)】的数据库操作Service
+//* @createDate 2024-04-15 14:30:34
+//*/
+//public interface ErpAfterSaleService extends IService {
+// PageResult queryPageList(ErpAfterSale bo, PageQuery pageQuery);
+//}
diff --git a/api/src/main/java/cn/qihangerp/api/service/ErpOrderItemService.java b/api/src/main/java/cn/qihangerp/api/service/ErpOrderItemService.java
new file mode 100644
index 0000000..333272f
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/ErpOrderItemService.java
@@ -0,0 +1,27 @@
+package cn.qihangerp.api.service;
+
+import cn.qihangerp.api.domain.bo.OrderItemSpecIdUpdateBo;
+import cn.qihangerp.api.domain.bo.SupplierShipDistBo;
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import cn.qihangerp.common.enums.ErpOrderStatusEnum;
+import cn.qihangerp.domain.ErpOrderItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author TW
+* @description 针对表【erp_order_item(订单明细表)】的数据库操作Service
+* @createDate 2024-04-15 13:35:02
+*/
+public interface ErpOrderItemService extends IService {
+ PageResult queryPageList(ErpOrderStatusEnum status, Integer shipStatus, ErpOrderItem bo, PageQuery pageQuery);
+
+ int orderItemSpecIdUpdate(OrderItemSpecIdUpdateBo bo);
+
+ /**
+ * 分配给供应商发货
+ * @param bo
+ * @return
+ */
+ int distributeSupplierShip(SupplierShipDistBo bo);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/ErpSaleAfterInfoService.java b/api/src/main/java/cn/qihangerp/api/service/ErpSaleAfterInfoService.java
new file mode 100644
index 0000000..a03cb15
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/ErpSaleAfterInfoService.java
@@ -0,0 +1,15 @@
+package cn.qihangerp.api.service;
+
+import cn.qihangerp.api.domain.ErpSaleAfterInfo;
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author qilip
+* @description 针对表【erp_sale_after_info(售后处理表)】的数据库操作Service
+* @createDate 2024-05-05 20:16:21
+*/
+public interface ErpSaleAfterInfoService extends IService {
+ PageResult queryPageList(ErpSaleAfterInfo bo, PageQuery pageQuery);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/ErpSaleAfterRefundService.java b/api/src/main/java/cn/qihangerp/api/service/ErpSaleAfterRefundService.java
new file mode 100644
index 0000000..3b32caa
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/ErpSaleAfterRefundService.java
@@ -0,0 +1,19 @@
+package cn.qihangerp.api.service;
+
+import cn.qihangerp.api.domain.bo.RefundBo;
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import cn.qihangerp.common.ResultVo;
+import cn.qihangerp.domain.ErpSaleAfterRefund;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author qilip
+* @description 针对表【erp_sale_after_refund(售后退款表)】的数据库操作Service
+* @createDate 2024-05-04 19:53:00
+*/
+public interface ErpSaleAfterRefundService extends IService {
+ ResultVo taoRefundMessage(ErpSaleAfterRefund refund);
+ PageResult queryPageList(RefundBo bo, PageQuery pageQuery);
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/ErpShipLogisticsService.java b/api/src/main/java/cn/qihangerp/api/service/ErpShipLogisticsService.java
new file mode 100644
index 0000000..dc5941d
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/ErpShipLogisticsService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ErpShipLogistics;
+
+/**
+ * 物流公司Service接口
+ *
+ * @author qihang
+ * @date 2024-01-12
+ */
+public interface ErpShipLogisticsService
+{
+ /**
+ * 查询物流公司
+ *
+ * @param id 物流公司主键
+ * @return 物流公司
+ */
+ public ErpShipLogistics selectBLogisticsCompanyById(Long id);
+
+ /**
+ * 查询物流公司列表
+ *
+ * @param bLogisticsCompany 物流公司
+ * @return 物流公司集合
+ */
+ public List selectBLogisticsCompanyList(ErpShipLogistics bLogisticsCompany);
+
+ /**
+ * 新增物流公司
+ *
+ * @param bLogisticsCompany 物流公司
+ * @return 结果
+ */
+ public int insertBLogisticsCompany(ErpShipLogistics bLogisticsCompany);
+
+ /**
+ * 修改物流公司
+ *
+ * @param bLogisticsCompany 物流公司
+ * @return 结果
+ */
+ public int updateBLogisticsCompany(ErpShipLogistics bLogisticsCompany);
+
+ /**
+ * 批量删除物流公司
+ *
+ * @param ids 需要删除的物流公司主键集合
+ * @return 结果
+ */
+ public int deleteBLogisticsCompanyByIds(Long[] ids);
+
+ /**
+ * 删除物流公司信息
+ *
+ * @param id 物流公司主键
+ * @return 结果
+ */
+ public int deleteBLogisticsCompanyById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/ErpShipOrderAgentFeeService.java b/api/src/main/java/cn/qihangerp/api/service/ErpShipOrderAgentFeeService.java
new file mode 100644
index 0000000..e4c7f31
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/ErpShipOrderAgentFeeService.java
@@ -0,0 +1,15 @@
+package cn.qihangerp.api.service;
+
+import cn.qihangerp.api.domain.ErpShipOrderAgentFee;
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author qilip
+* @description 针对表【erp_ship_order_agent_fee(供应商代发账单)】的数据库操作Service
+* @createDate 2024-05-02 14:58:16
+*/
+public interface ErpShipOrderAgentFeeService extends IService {
+ PageResult queryPageList(ErpShipOrderAgentFee bo, PageQuery pageQuery);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/ErpShipOrderFeeService.java b/api/src/main/java/cn/qihangerp/api/service/ErpShipOrderFeeService.java
new file mode 100644
index 0000000..1389fb2
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/ErpShipOrderFeeService.java
@@ -0,0 +1,16 @@
+package cn.qihangerp.api.service;
+
+import cn.qihangerp.api.domain.ErpShipOrder;
+import cn.qihangerp.api.domain.ErpShipOrderFee;
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author qilip
+* @description 针对表【erp_ship_order_fee(订单发货物流费用)】的数据库操作Service
+* @createDate 2024-05-02 13:35:20
+*/
+public interface ErpShipOrderFeeService extends IService {
+ PageResult queryPageList(ErpShipOrderFee bo, PageQuery pageQuery);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/ErpShipOrderService.java b/api/src/main/java/cn/qihangerp/api/service/ErpShipOrderService.java
new file mode 100644
index 0000000..e531a49
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/ErpShipOrderService.java
@@ -0,0 +1,28 @@
+package cn.qihangerp.api.service;
+
+import cn.qihangerp.api.domain.ErpShipOrder;
+import cn.qihangerp.api.domain.WmsStockOutEntry;
+import cn.qihangerp.api.domain.bo.ShipOrderSupplierShipBo;
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+* @author qilip
+* @description 针对表【erp_ship_order(订单发货表)】的数据库操作Service
+* @createDate 2024-05-02 10:15:15
+*/
+public interface ErpShipOrderService extends IService {
+ PageResult queryPageList(ErpShipOrder bo, PageQuery pageQuery);
+ List queryOrderListById(Long id);
+
+ /**
+ * 供应商发货
+ * @param bo
+ * @return
+ */
+ int supplierShip(ShipOrderSupplierShipBo bo);
+ int wmsShip(ShipOrderSupplierShipBo bo);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IErpGoodsBrandService.java b/api/src/main/java/cn/qihangerp/api/service/IErpGoodsBrandService.java
new file mode 100644
index 0000000..4c097ee
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IErpGoodsBrandService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ErpGoodsBrand;
+
+/**
+ * 商品品牌Service接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public interface IErpGoodsBrandService
+{
+ /**
+ * 查询商品品牌
+ *
+ * @param id 商品品牌主键
+ * @return 商品品牌
+ */
+ public ErpGoodsBrand selectErpGoodsBrandById(Long id);
+
+ /**
+ * 查询商品品牌列表
+ *
+ * @param erpGoodsBrand 商品品牌
+ * @return 商品品牌集合
+ */
+ public List selectErpGoodsBrandList(ErpGoodsBrand erpGoodsBrand);
+
+ /**
+ * 新增商品品牌
+ *
+ * @param erpGoodsBrand 商品品牌
+ * @return 结果
+ */
+ public int insertErpGoodsBrand(ErpGoodsBrand erpGoodsBrand);
+
+ /**
+ * 修改商品品牌
+ *
+ * @param erpGoodsBrand 商品品牌
+ * @return 结果
+ */
+ public int updateErpGoodsBrand(ErpGoodsBrand erpGoodsBrand);
+
+ /**
+ * 批量删除商品品牌
+ *
+ * @param ids 需要删除的商品品牌主键集合
+ * @return 结果
+ */
+ public int deleteErpGoodsBrandByIds(Long[] ids);
+
+ /**
+ * 删除商品品牌信息
+ *
+ * @param id 商品品牌主键
+ * @return 结果
+ */
+ public int deleteErpGoodsBrandById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IErpGoodsCategoryAttributeService.java b/api/src/main/java/cn/qihangerp/api/service/IErpGoodsCategoryAttributeService.java
new file mode 100644
index 0000000..3372f24
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IErpGoodsCategoryAttributeService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ErpGoodsCategoryAttribute;
+
+/**
+ * 商品分类属性Service接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public interface IErpGoodsCategoryAttributeService
+{
+ /**
+ * 查询商品分类属性
+ *
+ * @param id 商品分类属性主键
+ * @return 商品分类属性
+ */
+ public ErpGoodsCategoryAttribute selectErpGoodsCategoryAttributeById(Long id);
+
+ /**
+ * 查询商品分类属性列表
+ *
+ * @param erpGoodsCategoryAttribute 商品分类属性
+ * @return 商品分类属性集合
+ */
+ public List selectErpGoodsCategoryAttributeList(ErpGoodsCategoryAttribute erpGoodsCategoryAttribute);
+
+ /**
+ * 新增商品分类属性
+ *
+ * @param erpGoodsCategoryAttribute 商品分类属性
+ * @return 结果
+ */
+ public int insertErpGoodsCategoryAttribute(ErpGoodsCategoryAttribute erpGoodsCategoryAttribute);
+
+ /**
+ * 修改商品分类属性
+ *
+ * @param erpGoodsCategoryAttribute 商品分类属性
+ * @return 结果
+ */
+ public int updateErpGoodsCategoryAttribute(ErpGoodsCategoryAttribute erpGoodsCategoryAttribute);
+
+ /**
+ * 批量删除商品分类属性
+ *
+ * @param ids 需要删除的商品分类属性主键集合
+ * @return 结果
+ */
+ public int deleteErpGoodsCategoryAttributeByIds(Long[] ids);
+
+ /**
+ * 删除商品分类属性信息
+ *
+ * @param id 商品分类属性主键
+ * @return 结果
+ */
+ public int deleteErpGoodsCategoryAttributeById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IErpGoodsCategoryAttributeValueService.java b/api/src/main/java/cn/qihangerp/api/service/IErpGoodsCategoryAttributeValueService.java
new file mode 100644
index 0000000..5b76b71
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IErpGoodsCategoryAttributeValueService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ErpGoodsCategoryAttributeValue;
+
+/**
+ * 商品分类属性值Service接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public interface IErpGoodsCategoryAttributeValueService
+{
+ /**
+ * 查询商品分类属性值
+ *
+ * @param id 商品分类属性值主键
+ * @return 商品分类属性值
+ */
+ public ErpGoodsCategoryAttributeValue selectErpGoodsCategoryAttributeValueById(Long id);
+
+ /**
+ * 查询商品分类属性值列表
+ *
+ * @param erpGoodsCategoryAttributeValue 商品分类属性值
+ * @return 商品分类属性值集合
+ */
+ public List selectErpGoodsCategoryAttributeValueList(ErpGoodsCategoryAttributeValue erpGoodsCategoryAttributeValue);
+
+ /**
+ * 新增商品分类属性值
+ *
+ * @param erpGoodsCategoryAttributeValue 商品分类属性值
+ * @return 结果
+ */
+ public int insertErpGoodsCategoryAttributeValue(ErpGoodsCategoryAttributeValue erpGoodsCategoryAttributeValue);
+
+ /**
+ * 修改商品分类属性值
+ *
+ * @param erpGoodsCategoryAttributeValue 商品分类属性值
+ * @return 结果
+ */
+ public int updateErpGoodsCategoryAttributeValue(ErpGoodsCategoryAttributeValue erpGoodsCategoryAttributeValue);
+
+ /**
+ * 批量删除商品分类属性值
+ *
+ * @param ids 需要删除的商品分类属性值主键集合
+ * @return 结果
+ */
+ public int deleteErpGoodsCategoryAttributeValueByIds(Long[] ids);
+
+ /**
+ * 删除商品分类属性值信息
+ *
+ * @param id 商品分类属性值主键
+ * @return 结果
+ */
+ public int deleteErpGoodsCategoryAttributeValueById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IErpGoodsCategoryService.java b/api/src/main/java/cn/qihangerp/api/service/IErpGoodsCategoryService.java
new file mode 100644
index 0000000..65d63d2
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IErpGoodsCategoryService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ErpGoodsCategory;
+
+/**
+ * 商品分类Service接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public interface IErpGoodsCategoryService
+{
+ /**
+ * 查询商品分类
+ *
+ * @param id 商品分类主键
+ * @return 商品分类
+ */
+ public ErpGoodsCategory selectErpGoodsCategoryById(Long id);
+
+ /**
+ * 查询商品分类列表
+ *
+ * @param erpGoodsCategory 商品分类
+ * @return 商品分类集合
+ */
+ public List selectErpGoodsCategoryList(ErpGoodsCategory erpGoodsCategory);
+
+ /**
+ * 新增商品分类
+ *
+ * @param erpGoodsCategory 商品分类
+ * @return 结果
+ */
+ public int insertErpGoodsCategory(ErpGoodsCategory erpGoodsCategory);
+
+ /**
+ * 修改商品分类
+ *
+ * @param erpGoodsCategory 商品分类
+ * @return 结果
+ */
+ public int updateErpGoodsCategory(ErpGoodsCategory erpGoodsCategory);
+
+ /**
+ * 批量删除商品分类
+ *
+ * @param ids 需要删除的商品分类主键集合
+ * @return 结果
+ */
+ public int deleteErpGoodsCategoryByIds(Long[] ids);
+
+ /**
+ * 删除商品分类信息
+ *
+ * @param id 商品分类主键
+ * @return 结果
+ */
+ public int deleteErpGoodsCategoryById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IErpGoodsInventoryService.java b/api/src/main/java/cn/qihangerp/api/service/IErpGoodsInventoryService.java
new file mode 100644
index 0000000..dfbcac3
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IErpGoodsInventoryService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ErpGoodsInventory;
+
+/**
+ * 商品库存Service接口
+ *
+ * @author qihang
+ * @date 2024-01-09
+ */
+public interface IErpGoodsInventoryService
+{
+ /**
+ * 查询商品库存
+ *
+ * @param id 商品库存主键
+ * @return 商品库存
+ */
+ public ErpGoodsInventory selectErpGoodsInventoryById(Long id);
+
+ /**
+ * 查询商品库存列表
+ *
+ * @param erpGoodsInventory 商品库存
+ * @return 商品库存集合
+ */
+ public List selectErpGoodsInventoryList(ErpGoodsInventory erpGoodsInventory);
+
+ /**
+ * 新增商品库存
+ *
+ * @param erpGoodsInventory 商品库存
+ * @return 结果
+ */
+ public int insertErpGoodsInventory(ErpGoodsInventory erpGoodsInventory);
+
+ /**
+ * 修改商品库存
+ *
+ * @param erpGoodsInventory 商品库存
+ * @return 结果
+ */
+ public int updateErpGoodsInventory(ErpGoodsInventory erpGoodsInventory);
+
+ /**
+ * 批量删除商品库存
+ *
+ * @param ids 需要删除的商品库存主键集合
+ * @return 结果
+ */
+ public int deleteErpGoodsInventoryByIds(Long[] ids);
+
+ /**
+ * 删除商品库存信息
+ *
+ * @param id 商品库存主键
+ * @return 结果
+ */
+ public int deleteErpGoodsInventoryById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IErpOrderService.java b/api/src/main/java/cn/qihangerp/api/service/IErpOrderService.java
new file mode 100644
index 0000000..c04b71d
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IErpOrderService.java
@@ -0,0 +1,68 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+
+import cn.qihangerp.common.ResultVo;
+import cn.qihangerp.domain.ErpOrder;
+
+/**
+ * 订单Service接口
+ *
+ * @author qihang
+ * @date 2024-01-04
+ */
+public interface IErpOrderService
+{
+ /**
+ * 查询订单
+ *
+ * @param id 订单主键
+ * @return 订单
+ */
+ public ErpOrder selectErpOrderById(Long id);
+
+ /**
+ * 查询订单列表
+ *
+ * @param erpOrder 订单
+ * @return 订单集合
+ */
+ public List selectErpOrderList(ErpOrder erpOrder);
+
+ /**
+ * 新增订单
+ *
+ * @param erpOrder 订单
+ * @return 结果
+ */
+ public int insertErpOrder(ErpOrder erpOrder);
+ // 发货操作移动到erpShipOrder中
+// public int shipErpOrder(ErpOrder erpOrder);
+
+
+ /**
+ * 修改订单
+ *
+ * @param erpOrder 订单
+ * @return 结果
+ */
+ public int updateErpOrder(ErpOrder erpOrder);
+
+ /**
+ * 批量删除订单
+ *
+ * @param ids 需要删除的订单主键集合
+ * @return 结果
+ */
+ public int deleteErpOrderByIds(Long[] ids);
+
+ /**
+ * 删除订单信息
+ *
+ * @param id 订单主键
+ * @return 结果
+ */
+ public int deleteErpOrderById(Long id);
+
+ ResultVo taoOrderMessage(ErpOrder order);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IGoodsAttributeConfigService.java b/api/src/main/java/cn/qihangerp/api/service/IGoodsAttributeConfigService.java
new file mode 100644
index 0000000..ce349e9
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IGoodsAttributeConfigService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.GoodsAttributeConfig;
+
+/**
+ * 商品属性配置Service接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public interface IGoodsAttributeConfigService
+{
+ /**
+ * 查询商品属性配置
+ *
+ * @param id 商品属性配置主键
+ * @return 商品属性配置
+ */
+ public GoodsAttributeConfig selectGoodsAttributeConfigById(Long id);
+
+ /**
+ * 查询商品属性配置列表
+ *
+ * @param goodsAttributeConfig 商品属性配置
+ * @return 商品属性配置集合
+ */
+ public List selectGoodsAttributeConfigList(GoodsAttributeConfig goodsAttributeConfig);
+
+ /**
+ * 新增商品属性配置
+ *
+ * @param goodsAttributeConfig 商品属性配置
+ * @return 结果
+ */
+ public int insertGoodsAttributeConfig(GoodsAttributeConfig goodsAttributeConfig);
+
+ /**
+ * 修改商品属性配置
+ *
+ * @param goodsAttributeConfig 商品属性配置
+ * @return 结果
+ */
+ public int updateGoodsAttributeConfig(GoodsAttributeConfig goodsAttributeConfig);
+
+ /**
+ * 批量删除商品属性配置
+ *
+ * @param ids 需要删除的商品属性配置主键集合
+ * @return 结果
+ */
+ public int deleteGoodsAttributeConfigByIds(Long[] ids);
+
+ /**
+ * 删除商品属性配置信息
+ *
+ * @param id 商品属性配置主键
+ * @return 结果
+ */
+ public int deleteGoodsAttributeConfigById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IGoodsAttributeService.java b/api/src/main/java/cn/qihangerp/api/service/IGoodsAttributeService.java
new file mode 100644
index 0000000..75ec1b2
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IGoodsAttributeService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.GoodsAttribute;
+
+/**
+ * 商品属性Service接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public interface IGoodsAttributeService
+{
+ /**
+ * 查询商品属性
+ *
+ * @param id 商品属性主键
+ * @return 商品属性
+ */
+ public GoodsAttribute selectGoodsAttributeById(Long id);
+
+ /**
+ * 查询商品属性列表
+ *
+ * @param goodsAttribute 商品属性
+ * @return 商品属性集合
+ */
+ public List selectGoodsAttributeList(GoodsAttribute goodsAttribute);
+
+ /**
+ * 新增商品属性
+ *
+ * @param goodsAttribute 商品属性
+ * @return 结果
+ */
+ public int insertGoodsAttribute(GoodsAttribute goodsAttribute);
+
+ /**
+ * 修改商品属性
+ *
+ * @param goodsAttribute 商品属性
+ * @return 结果
+ */
+ public int updateGoodsAttribute(GoodsAttribute goodsAttribute);
+
+ /**
+ * 批量删除商品属性
+ *
+ * @param ids 需要删除的商品属性主键集合
+ * @return 结果
+ */
+ public int deleteGoodsAttributeByIds(Long[] ids);
+
+ /**
+ * 删除商品属性信息
+ *
+ * @param id 商品属性主键
+ * @return 结果
+ */
+ public int deleteGoodsAttributeById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IGoodsImgService.java b/api/src/main/java/cn/qihangerp/api/service/IGoodsImgService.java
new file mode 100644
index 0000000..d1e70c0
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IGoodsImgService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.GoodsImg;
+
+/**
+ * 商品图片Service接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public interface IGoodsImgService
+{
+ /**
+ * 查询商品图片
+ *
+ * @param id 商品图片主键
+ * @return 商品图片
+ */
+ public GoodsImg selectGoodsImgById(Long id);
+
+ /**
+ * 查询商品图片列表
+ *
+ * @param goodsImg 商品图片
+ * @return 商品图片集合
+ */
+ public List selectGoodsImgList(GoodsImg goodsImg);
+
+ /**
+ * 新增商品图片
+ *
+ * @param goodsImg 商品图片
+ * @return 结果
+ */
+ public int insertGoodsImg(GoodsImg goodsImg);
+
+ /**
+ * 修改商品图片
+ *
+ * @param goodsImg 商品图片
+ * @return 结果
+ */
+ public int updateGoodsImg(GoodsImg goodsImg);
+
+ /**
+ * 批量删除商品图片
+ *
+ * @param ids 需要删除的商品图片主键集合
+ * @return 结果
+ */
+ public int deleteGoodsImgByIds(Long[] ids);
+
+ /**
+ * 删除商品图片信息
+ *
+ * @param id 商品图片主键
+ * @return 结果
+ */
+ public int deleteGoodsImgById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IGoodsService.java b/api/src/main/java/cn/qihangerp/api/service/IGoodsService.java
new file mode 100644
index 0000000..7e615e6
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IGoodsService.java
@@ -0,0 +1,64 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.Goods;
+import cn.qihangerp.api.domain.vo.GoodsSpecListVo;
+
+/**
+ * 商品管理Service接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public interface IGoodsService
+{
+ /**
+ * 查询商品管理
+ *
+ * @param id 商品管理主键
+ * @return 商品管理
+ */
+ public Goods selectGoodsById(Long id);
+
+ /**
+ * 查询商品管理列表
+ *
+ * @param goods 商品管理
+ * @return 商品管理集合
+ */
+ public List selectGoodsList(Goods goods);
+
+ /**
+ * 新增商品管理
+ *
+ * @param goods 商品管理
+ * @return 结果
+ */
+ public int insertGoods(Goods goods);
+
+ /**
+ * 修改商品管理
+ *
+ * @param goods 商品管理
+ * @return 结果
+ */
+ public int updateGoods(Goods goods);
+
+ /**
+ * 批量删除商品管理
+ *
+ * @param ids 需要删除的商品管理主键集合
+ * @return 结果
+ */
+ public int deleteGoodsByIds(Long[] ids);
+
+ /**
+ * 删除商品管理信息
+ *
+ * @param id 商品管理主键
+ * @return 结果
+ */
+ public int deleteGoodsById(Long id);
+
+ List searchGoodsSpec(String keyword);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IGoodsSpecAttrService.java b/api/src/main/java/cn/qihangerp/api/service/IGoodsSpecAttrService.java
new file mode 100644
index 0000000..aa21383
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IGoodsSpecAttrService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.GoodsSpecAttr;
+
+/**
+ * 商品规格属性Service接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public interface IGoodsSpecAttrService
+{
+ /**
+ * 查询商品规格属性
+ *
+ * @param id 商品规格属性主键
+ * @return 商品规格属性
+ */
+ public GoodsSpecAttr selectGoodsSpecAttrById(Long id);
+
+ /**
+ * 查询商品规格属性列表
+ *
+ * @param goodsSpecAttr 商品规格属性
+ * @return 商品规格属性集合
+ */
+ public List selectGoodsSpecAttrList(GoodsSpecAttr goodsSpecAttr);
+
+ /**
+ * 新增商品规格属性
+ *
+ * @param goodsSpecAttr 商品规格属性
+ * @return 结果
+ */
+ public int insertGoodsSpecAttr(GoodsSpecAttr goodsSpecAttr);
+
+ /**
+ * 修改商品规格属性
+ *
+ * @param goodsSpecAttr 商品规格属性
+ * @return 结果
+ */
+ public int updateGoodsSpecAttr(GoodsSpecAttr goodsSpecAttr);
+
+ /**
+ * 批量删除商品规格属性
+ *
+ * @param ids 需要删除的商品规格属性主键集合
+ * @return 结果
+ */
+ public int deleteGoodsSpecAttrByIds(Long[] ids);
+
+ /**
+ * 删除商品规格属性信息
+ *
+ * @param id 商品规格属性主键
+ * @return 结果
+ */
+ public int deleteGoodsSpecAttrById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IGoodsSpecService.java b/api/src/main/java/cn/qihangerp/api/service/IGoodsSpecService.java
new file mode 100644
index 0000000..ba1dc42
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IGoodsSpecService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.GoodsSpec;
+
+/**
+ * 商品规格Service接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public interface IGoodsSpecService
+{
+ /**
+ * 查询商品规格
+ *
+ * @param id 商品规格主键
+ * @return 商品规格
+ */
+ public GoodsSpec selectGoodsSpecById(Long id);
+
+ /**
+ * 查询商品规格列表
+ *
+ * @param goodsSpec 商品规格
+ * @return 商品规格集合
+ */
+ public List selectGoodsSpecList(GoodsSpec goodsSpec);
+
+ /**
+ * 新增商品规格
+ *
+ * @param goodsSpec 商品规格
+ * @return 结果
+ */
+ public int insertGoodsSpec(GoodsSpec goodsSpec);
+
+ /**
+ * 修改商品规格
+ *
+ * @param goodsSpec 商品规格
+ * @return 结果
+ */
+ public int updateGoodsSpec(GoodsSpec goodsSpec);
+
+ /**
+ * 批量删除商品规格
+ *
+ * @param ids 需要删除的商品规格主键集合
+ * @return 结果
+ */
+ public int deleteGoodsSpecByIds(Long[] ids);
+
+ /**
+ * 删除商品规格信息
+ *
+ * @param id 商品规格主键
+ * @return 结果
+ */
+ public int deleteGoodsSpecById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IKeywordService.java b/api/src/main/java/cn/qihangerp/api/service/IKeywordService.java
new file mode 100644
index 0000000..9139d35
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IKeywordService.java
@@ -0,0 +1,14 @@
+package cn.qihangerp.api.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import cn.qihangerp.api.domain.Keyword;
+import cn.qihangerp.api.req.KeyWordListReq;
+
+import java.util.List;
+
+public interface IKeywordService {
+ void add(Keyword keyword);
+ void delById(String id);
+ void editById(Keyword keyword);
+ Page getPageList(KeyWordListReq req);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderCostService.java b/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderCostService.java
new file mode 100644
index 0000000..692ee6e
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderCostService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ScmPurchaseOrderCost;
+
+/**
+ * 采购订单费用确认Service接口
+ *
+ * @author qihang
+ * @date 2023-12-30
+ */
+public interface IScmPurchaseOrderCostService
+{
+ /**
+ * 查询采购订单费用确认
+ *
+ * @param id 采购订单费用确认主键
+ * @return 采购订单费用确认
+ */
+ public ScmPurchaseOrderCost selectScmPurchaseOrderCostById(Long id);
+
+ /**
+ * 查询采购订单费用确认列表
+ *
+ * @param scmPurchaseOrderCost 采购订单费用确认
+ * @return 采购订单费用确认集合
+ */
+ public List selectScmPurchaseOrderCostList(ScmPurchaseOrderCost scmPurchaseOrderCost);
+
+ /**
+ * 新增采购订单费用确认
+ *
+ * @param scmPurchaseOrderCost 采购订单费用确认
+ * @return 结果
+ */
+ public int insertScmPurchaseOrderCost(ScmPurchaseOrderCost scmPurchaseOrderCost);
+
+ /**
+ * 修改采购订单费用确认
+ *
+ * @param scmPurchaseOrderCost 采购订单费用确认
+ * @return 结果
+ */
+ public int updateScmPurchaseOrderCost(ScmPurchaseOrderCost scmPurchaseOrderCost);
+
+ /**
+ * 批量删除采购订单费用确认
+ *
+ * @param ids 需要删除的采购订单费用确认主键集合
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderCostByIds(Long[] ids);
+
+ /**
+ * 删除采购订单费用确认信息
+ *
+ * @param id 采购订单费用确认主键
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderCostById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderItemService.java b/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderItemService.java
new file mode 100644
index 0000000..1ae4dee
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderItemService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ScmPurchaseOrderItem;
+
+/**
+ * 采购订单明细Service接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public interface IScmPurchaseOrderItemService
+{
+ /**
+ * 查询采购订单明细
+ *
+ * @param id 采购订单明细主键
+ * @return 采购订单明细
+ */
+ public ScmPurchaseOrderItem selectScmPurchaseOrderItemById(Long id);
+
+ /**
+ * 查询采购订单明细列表
+ *
+ * @param scmPurchaseOrderItem 采购订单明细
+ * @return 采购订单明细集合
+ */
+ public List selectScmPurchaseOrderItemList(ScmPurchaseOrderItem scmPurchaseOrderItem);
+
+ /**
+ * 新增采购订单明细
+ *
+ * @param scmPurchaseOrderItem 采购订单明细
+ * @return 结果
+ */
+ public int insertScmPurchaseOrderItem(ScmPurchaseOrderItem scmPurchaseOrderItem);
+
+ /**
+ * 修改采购订单明细
+ *
+ * @param scmPurchaseOrderItem 采购订单明细
+ * @return 结果
+ */
+ public int updateScmPurchaseOrderItem(ScmPurchaseOrderItem scmPurchaseOrderItem);
+
+ /**
+ * 批量删除采购订单明细
+ *
+ * @param ids 需要删除的采购订单明细主键集合
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderItemByIds(Long[] ids);
+
+ /**
+ * 删除采购订单明细信息
+ *
+ * @param id 采购订单明细主键
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderItemById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderPayableService.java b/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderPayableService.java
new file mode 100644
index 0000000..94b1bd8
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderPayableService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ScmPurchaseOrderPayable;
+
+/**
+ * 财务管理-应付款-采购货款Service接口
+ *
+ * @author qihang
+ * @date 2024-01-28
+ */
+public interface IScmPurchaseOrderPayableService
+{
+ /**
+ * 查询财务管理-应付款-采购货款
+ *
+ * @param id 财务管理-应付款-采购货款主键
+ * @return 财务管理-应付款-采购货款
+ */
+ public ScmPurchaseOrderPayable selectFmsPayablePurchaseById(Long id);
+
+ /**
+ * 查询财务管理-应付款-采购货款列表
+ *
+ * @param fmsPayablePurchase 财务管理-应付款-采购货款
+ * @return 财务管理-应付款-采购货款集合
+ */
+ public List selectFmsPayablePurchaseList(ScmPurchaseOrderPayable fmsPayablePurchase);
+
+ /**
+ * 新增财务管理-应付款-采购货款
+ *
+ * @param fmsPayablePurchase 财务管理-应付款-采购货款
+ * @return 结果
+ */
+ public int insertFmsPayablePurchase(ScmPurchaseOrderPayable fmsPayablePurchase);
+
+ /**
+ * 修改财务管理-应付款-采购货款
+ *
+ * @param fmsPayablePurchase 财务管理-应付款-采购货款
+ * @return 结果
+ */
+ public int updateFmsPayablePurchase(ScmPurchaseOrderPayable fmsPayablePurchase);
+
+ /**
+ * 批量删除财务管理-应付款-采购货款
+ *
+ * @param ids 需要删除的财务管理-应付款-采购货款主键集合
+ * @return 结果
+ */
+ public int deleteFmsPayablePurchaseByIds(Long[] ids);
+
+ /**
+ * 删除财务管理-应付款-采购货款信息
+ *
+ * @param id 财务管理-应付款-采购货款主键
+ * @return 结果
+ */
+ public int deleteFmsPayablePurchaseById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderService.java b/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderService.java
new file mode 100644
index 0000000..b53a544
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderService.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ScmPurchaseOrder;
+import cn.qihangerp.api.domain.bo.PurchaseOrderAddBo;
+import cn.qihangerp.api.domain.bo.PurchaseOrderOptionBo;
+
+/**
+ * 采购订单Service接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public interface IScmPurchaseOrderService
+{
+ /**
+ * 查询采购订单
+ *
+ * @param id 采购订单主键
+ * @return 采购订单
+ */
+ public ScmPurchaseOrder selectScmPurchaseOrderById(Long id);
+
+ /**
+ * 查询采购订单列表
+ *
+ * @param scmPurchaseOrder 采购订单
+ * @return 采购订单集合
+ */
+ public List selectScmPurchaseOrderList(ScmPurchaseOrder scmPurchaseOrder);
+
+ /**
+ * 新增采购订单
+ *
+ * @param scmPurchaseOrder 采购订单
+ * @return 结果
+ */
+ public int insertScmPurchaseOrder(PurchaseOrderAddBo addBo);
+
+ /**
+ * 修改采购订单
+ *
+ * @param scmPurchaseOrder 采购订单
+ * @return 结果
+ */
+ public int updateScmPurchaseOrder(PurchaseOrderOptionBo scmPurchaseOrder);
+
+ /**
+ * 批量删除采购订单
+ *
+ * @param ids 需要删除的采购订单主键集合
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderByIds(Long[] ids);
+
+ /**
+ * 删除采购订单信息
+ *
+ * @param id 采购订单主键
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderShipService.java b/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderShipService.java
new file mode 100644
index 0000000..481c463
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IScmPurchaseOrderShipService.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ScmPurchaseOrderShip;
+import cn.qihangerp.api.domain.bo.PurchaseOrderStockInBo;
+
+/**
+ * 采购订单物流Service接口
+ *
+ * @author qihang
+ * @date 2023-12-30
+ */
+public interface IScmPurchaseOrderShipService
+{
+ /**
+ * 查询采购订单物流
+ *
+ * @param id 采购订单物流主键
+ * @return 采购订单物流
+ */
+ public ScmPurchaseOrderShip selectScmPurchaseOrderShipById(Long id);
+
+ /**
+ * 查询采购订单物流列表
+ *
+ * @param scmPurchaseOrderShip 采购订单物流
+ * @return 采购订单物流集合
+ */
+ public List selectScmPurchaseOrderShipList(ScmPurchaseOrderShip scmPurchaseOrderShip);
+
+ /**
+ * 新增采购订单物流
+ *
+ * @param scmPurchaseOrderShip 采购订单物流
+ * @return 结果
+ */
+ public int insertScmPurchaseOrderShip(ScmPurchaseOrderShip scmPurchaseOrderShip);
+
+ /**
+ * 修改采购订单物流
+ *
+ * @param scmPurchaseOrderShip 采购订单物流
+ * @return 结果
+ */
+ public int updateScmPurchaseOrderShip(ScmPurchaseOrderShip scmPurchaseOrderShip);
+ public int createStockInEntry(PurchaseOrderStockInBo bo);
+
+ /**
+ * 批量删除采购订单物流
+ *
+ * @param ids 需要删除的采购订单物流主键集合
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderShipByIds(Long[] ids);
+
+ /**
+ * 删除采购订单物流信息
+ *
+ * @param id 采购订单物流主键
+ * @return 结果
+ */
+ public int deleteScmPurchaseOrderShipById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IScmSupplierService.java b/api/src/main/java/cn/qihangerp/api/service/IScmSupplierService.java
new file mode 100644
index 0000000..58d5a1f
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IScmSupplierService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ScmSupplier;
+
+/**
+ * 【请填写功能名称】Service接口
+ *
+ * @author qihang
+ * @date 2023-12-29
+ */
+public interface IScmSupplierService
+{
+ /**
+ * 查询【请填写功能名称】
+ *
+ * @param id 【请填写功能名称】主键
+ * @return 【请填写功能名称】
+ */
+ public ScmSupplier selectScmSupplierById(Long id);
+
+ /**
+ * 查询【请填写功能名称】列表
+ *
+ * @param scmSupplier 【请填写功能名称】
+ * @return 【请填写功能名称】集合
+ */
+ public List selectScmSupplierList(ScmSupplier scmSupplier);
+
+ /**
+ * 新增【请填写功能名称】
+ *
+ * @param scmSupplier 【请填写功能名称】
+ * @return 结果
+ */
+ public int insertScmSupplier(ScmSupplier scmSupplier);
+
+ /**
+ * 修改【请填写功能名称】
+ *
+ * @param scmSupplier 【请填写功能名称】
+ * @return 结果
+ */
+ public int updateScmSupplier(ScmSupplier scmSupplier);
+
+ /**
+ * 批量删除【请填写功能名称】
+ *
+ * @param ids 需要删除的【请填写功能名称】主键集合
+ * @return 结果
+ */
+ public int deleteScmSupplierByIds(Long[] ids);
+
+ /**
+ * 删除【请填写功能名称】信息
+ *
+ * @param id 【请填写功能名称】主键
+ * @return 结果
+ */
+ public int deleteScmSupplierById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IShopGoodsService.java b/api/src/main/java/cn/qihangerp/api/service/IShopGoodsService.java
new file mode 100644
index 0000000..5dbe2b9
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IShopGoodsService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.ShopGoods;
+
+/**
+ * 店铺商品Service接口
+ *
+ * @author qihang
+ * @date 2023-12-31
+ */
+public interface IShopGoodsService
+{
+ /**
+ * 查询店铺商品
+ *
+ * @param id 店铺商品主键
+ * @return 店铺商品
+ */
+ public ShopGoods selectShopGoodsById(Long id);
+
+ /**
+ * 查询店铺商品列表
+ *
+ * @param shopGoods 店铺商品
+ * @return 店铺商品集合
+ */
+ public List selectShopGoodsList(ShopGoods shopGoods);
+
+ /**
+ * 新增店铺商品
+ *
+ * @param shopGoods 店铺商品
+ * @return 结果
+ */
+ public int insertShopGoods(ShopGoods shopGoods);
+
+ /**
+ * 修改店铺商品
+ *
+ * @param shopGoods 店铺商品
+ * @return 结果
+ */
+ public int updateShopGoods(ShopGoods shopGoods);
+
+ /**
+ * 批量删除店铺商品
+ *
+ * @param ids 需要删除的店铺商品主键集合
+ * @return 结果
+ */
+ public int deleteShopGoodsByIds(Long[] ids);
+
+ /**
+ * 删除店铺商品信息
+ *
+ * @param id 店铺商品主键
+ * @return 结果
+ */
+ public int deleteShopGoodsById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IShopService.java b/api/src/main/java/cn/qihangerp/api/service/IShopService.java
new file mode 100644
index 0000000..b8d561a
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IShopService.java
@@ -0,0 +1,63 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.domain.Shop;
+
+/**
+ * 店铺Service接口
+ *
+ * @author qihang
+ * @date 2023-12-31
+ */
+public interface IShopService
+{
+ /**
+ * 查询店铺
+ *
+ * @param id 店铺主键
+ * @return 店铺
+ */
+ public Shop selectShopById(Long id);
+
+ /**
+ * 查询店铺列表
+ *
+ * @param shop 店铺
+ * @return 店铺集合
+ */
+ public List selectShopList(Shop shop);
+
+ /**
+ * 新增店铺
+ *
+ * @param shop 店铺
+ * @return 结果
+ */
+ public int insertShop(Shop shop);
+
+ /**
+ * 修改店铺
+ *
+ * @param shop 店铺
+ * @return 结果
+ */
+ public int updateShop(Shop shop);
+
+ /**
+ * 批量删除店铺
+ *
+ * @param ids 需要删除的店铺主键集合
+ * @return 结果
+ */
+ public int deleteShopByIds(Long[] ids);
+
+ /**
+ * 删除店铺信息
+ *
+ * @param id 店铺主键
+ * @return 结果
+ */
+ public int deleteShopById(Long id);
+
+ void updateSessionKey(Long shopId, Long mallId, String sessionKey);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IShopSettingService.java b/api/src/main/java/cn/qihangerp/api/service/IShopSettingService.java
new file mode 100644
index 0000000..48a1ebc
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IShopSettingService.java
@@ -0,0 +1,61 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.domain.ShopSetting;
+
+/**
+ * 第三方平台设置Service接口
+ *
+ * @author qihang
+ * @date 2024-01-18
+ */
+public interface IShopSettingService
+{
+ /**
+ * 查询第三方平台设置
+ *
+ * @param id 第三方平台设置主键
+ * @return 第三方平台设置
+ */
+ public ShopSetting selectShopSettingById(Long id);
+
+ /**
+ * 查询第三方平台设置列表
+ *
+ * @param shopSetting 第三方平台设置
+ * @return 第三方平台设置集合
+ */
+ public List selectShopSettingList(ShopSetting shopSetting);
+
+ /**
+ * 新增第三方平台设置
+ *
+ * @param shopSetting 第三方平台设置
+ * @return 结果
+ */
+ public int insertShopSetting(ShopSetting shopSetting);
+
+ /**
+ * 修改第三方平台设置
+ *
+ * @param shopSetting 第三方平台设置
+ * @return 结果
+ */
+ public int updateShopSetting(ShopSetting shopSetting);
+
+ /**
+ * 批量删除第三方平台设置
+ *
+ * @param ids 需要删除的第三方平台设置主键集合
+ * @return 结果
+ */
+ public int deleteShopSettingByIds(Long[] ids);
+
+ /**
+ * 删除第三方平台设置信息
+ *
+ * @param id 第三方平台设置主键
+ * @return 结果
+ */
+ public int deleteShopSettingById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IWmsStockInEntryService.java b/api/src/main/java/cn/qihangerp/api/service/IWmsStockInEntryService.java
new file mode 100644
index 0000000..539b7f4
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IWmsStockInEntryService.java
@@ -0,0 +1,62 @@
+//package cn.qihangerp.api.service;
+//
+//import java.util.List;
+//import cn.qihangerp.api.domain.WmsStockInEntry;
+//
+///**
+// * 入库单Service接口
+// *
+// * @author qihang
+// * @date 2023-12-31
+// */
+//public interface IWmsStockInEntryService
+//{
+// /**
+// * 查询入库单
+// *
+// * @param id 入库单主键
+// * @return 入库单
+// */
+// public WmsStockInEntry selectWmsStockInEntryById(Long id);
+//
+// /**
+// * 查询入库单列表
+// *
+// * @param wmsStockInEntry 入库单
+// * @return 入库单集合
+// */
+// public List selectWmsStockInEntryList(WmsStockInEntry wmsStockInEntry);
+//
+// /**
+// * 新增入库单
+// *
+// * @param wmsStockInEntry 入库单
+// * @return 结果
+// */
+// public int insertWmsStockInEntry(WmsStockInEntry wmsStockInEntry);
+//
+// /**
+// * 入库操作
+// *
+// * @param wmsStockInEntry 入库单
+// * @return 结果
+// */
+// public int stockIn(WmsStockInEntry wmsStockInEntry);
+// public int complete(Long id,String updateBy);
+//
+// /**
+// * 批量删除入库单
+// *
+// * @param ids 需要删除的入库单主键集合
+// * @return 结果
+// */
+// public int deleteWmsStockInEntryByIds(Long[] ids);
+//
+// /**
+// * 删除入库单信息
+// *
+// * @param id 入库单主键
+// * @return 结果
+// */
+// public int deleteWmsStockInEntryById(Long id);
+//}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IWmsStockLocationService.java b/api/src/main/java/cn/qihangerp/api/service/IWmsStockLocationService.java
new file mode 100644
index 0000000..fad8b42
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IWmsStockLocationService.java
@@ -0,0 +1,62 @@
+package cn.qihangerp.api.service;
+
+import java.util.List;
+import cn.qihangerp.api.domain.WmsStockLocation;
+
+/**
+ * 仓库货架Service接口
+ *
+ * @author qihang
+ * @date 2024-01-09
+ */
+public interface IWmsStockLocationService
+{
+ /**
+ * 查询仓库货架
+ *
+ * @param id 仓库货架主键
+ * @return 仓库货架
+ */
+ public WmsStockLocation selectWmsStockLocationById(Long id);
+
+ /**
+ * 查询仓库货架列表
+ *
+ * @param wmsStockLocation 仓库货架
+ * @return 仓库货架集合
+ */
+ public List selectWmsStockLocationList(WmsStockLocation wmsStockLocation);
+ public List search(String number);
+
+ /**
+ * 新增仓库货架
+ *
+ * @param wmsStockLocation 仓库货架
+ * @return 结果
+ */
+ public int insertWmsStockLocation(WmsStockLocation wmsStockLocation);
+
+ /**
+ * 修改仓库货架
+ *
+ * @param wmsStockLocation 仓库货架
+ * @return 结果
+ */
+ public int updateWmsStockLocation(WmsStockLocation wmsStockLocation);
+
+ /**
+ * 批量删除仓库货架
+ *
+ * @param ids 需要删除的仓库货架主键集合
+ * @return 结果
+ */
+ public int deleteWmsStockLocationByIds(Long[] ids);
+
+ /**
+ * 删除仓库货架信息
+ *
+ * @param id 仓库货架主键
+ * @return 结果
+ */
+ public int deleteWmsStockLocationById(Long id);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IWmsStockOutEntryItemDetailService.java b/api/src/main/java/cn/qihangerp/api/service/IWmsStockOutEntryItemDetailService.java
new file mode 100644
index 0000000..27c142a
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IWmsStockOutEntryItemDetailService.java
@@ -0,0 +1,61 @@
+//package cn.qihangerp.api.service;
+//
+//import java.util.List;
+//import cn.qihangerp.api.domain.WmsStockOutEntryItemDetail;
+//
+///**
+// * 出库明细详情Service接口
+// *
+// * @author qihang
+// * @date 2024-01-10
+// */
+//public interface IWmsStockOutEntryItemDetailService
+//{
+// /**
+// * 查询出库明细详情
+// *
+// * @param id 出库明细详情主键
+// * @return 出库明细详情
+// */
+// public WmsStockOutEntryItemDetail selectWmsStockOutEntryItemDetailById(Long id);
+//
+// /**
+// * 查询出库明细详情列表
+// *
+// * @param wmsStockOutEntryItemDetail 出库明细详情
+// * @return 出库明细详情集合
+// */
+// public List selectWmsStockOutEntryItemDetailList(WmsStockOutEntryItemDetail wmsStockOutEntryItemDetail);
+//
+// /**
+// * 新增出库明细详情
+// *
+// * @param wmsStockOutEntryItemDetail 出库明细详情
+// * @return 结果
+// */
+// public int insertWmsStockOutEntryItemDetail(WmsStockOutEntryItemDetail wmsStockOutEntryItemDetail);
+//
+// /**
+// * 修改出库明细详情
+// *
+// * @param wmsStockOutEntryItemDetail 出库明细详情
+// * @return 结果
+// */
+// public int updateWmsStockOutEntryItemDetail(WmsStockOutEntryItemDetail wmsStockOutEntryItemDetail);
+//
+// /**
+// * 批量删除出库明细详情
+// *
+// * @param ids 需要删除的出库明细详情主键集合
+// * @return 结果
+// */
+// public int deleteWmsStockOutEntryItemDetailByIds(Long[] ids);
+//
+// /**
+// * 删除出库明细详情信息
+// *
+// * @param id 出库明细详情主键
+// * @return 结果
+// */
+// public int deleteWmsStockOutEntryItemDetailById(Long id);
+//}
diff --git a/api/src/main/java/cn/qihangerp/api/service/IWmsStockOutEntryService.java b/api/src/main/java/cn/qihangerp/api/service/IWmsStockOutEntryService.java
new file mode 100644
index 0000000..37740aa
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/IWmsStockOutEntryService.java
@@ -0,0 +1,71 @@
+//package cn.qihangerp.api.service;
+//
+//import java.util.List;
+//import cn.qihangerp.api.domain.WmsStockOutEntry;
+//import cn.qihangerp.api.domain.bo.StockOutBo;
+//import cn.qihangerp.api.domain.bo.StockOutEntryGenerateBo;
+//
+///**
+// * 出库单Service接口
+// *
+// * @author qihang
+// * @date 2024-01-10
+// */
+//public interface IWmsStockOutEntryService
+//{
+// /**
+// * 查询出库单
+// *
+// * @param id 出库单主键
+// * @return 出库单
+// */
+// public WmsStockOutEntry selectWmsStockOutEntryById(Long id);
+//
+// /**
+// * 查询出库单列表
+// *
+// * @param wmsStockOutEntry 出库单
+// * @return 出库单集合
+// */
+// public List selectWmsStockOutEntryList(WmsStockOutEntry wmsStockOutEntry);
+//
+// /**
+// * 新增出库单
+// *
+// * @param wmsStockOutEntry 出库单
+// * @return 结果
+// */
+// public int insertWmsStockOutEntry(WmsStockOutEntry wmsStockOutEntry);
+// public int stockOut(StockOutBo bo);
+//
+// /**
+// * 修改出库单
+// *
+// * @param wmsStockOutEntry 出库单
+// * @return 结果
+// */
+// public int updateWmsStockOutEntry(WmsStockOutEntry wmsStockOutEntry);
+//
+// /**
+// * 批量删除出库单
+// *
+// * @param ids 需要删除的出库单主键集合
+// * @return 结果
+// */
+// public int deleteWmsStockOutEntryByIds(Long[] ids);
+//
+// /**
+// * 删除出库单信息
+// *
+// * @param id 出库单主键
+// * @return 结果
+// */
+// public int deleteWmsStockOutEntryById(Long id);
+//
+// /**
+// * 订单明细生成出库单
+// * @param bo
+// * @return
+// */
+// int generateStockOutEntryForOrderItem(StockOutEntryGenerateBo bo);
+//}
diff --git a/api/src/main/java/cn/qihangerp/api/service/SShopPullLogsService.java b/api/src/main/java/cn/qihangerp/api/service/SShopPullLogsService.java
new file mode 100644
index 0000000..e7b1beb
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/SShopPullLogsService.java
@@ -0,0 +1,15 @@
+package cn.qihangerp.api.service;
+
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import cn.qihangerp.api.domain.SShopPullLogs;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author TW
+* @description 针对表【s_shop_pull_logs(店铺更新日志表)】的数据库操作Service
+* @createDate 2024-04-25 10:08:31
+*/
+public interface SShopPullLogsService extends IService {
+ PageResult queryPageList(SShopPullLogs bo, PageQuery pageQuery);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/WmsStockInEntryItemService.java b/api/src/main/java/cn/qihangerp/api/service/WmsStockInEntryItemService.java
new file mode 100644
index 0000000..82d10ba
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/WmsStockInEntryItemService.java
@@ -0,0 +1,13 @@
+package cn.qihangerp.api.service;
+
+import cn.qihangerp.api.domain.WmsStockInEntryItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author TW
+* @description 针对表【wms_stock_in_entry_item(入库单明细)】的数据库操作Service
+* @createDate 2024-04-26 14:59:58
+*/
+public interface WmsStockInEntryItemService extends IService {
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/WmsStockInEntryService.java b/api/src/main/java/cn/qihangerp/api/service/WmsStockInEntryService.java
new file mode 100644
index 0000000..5d1156f
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/WmsStockInEntryService.java
@@ -0,0 +1,17 @@
+package cn.qihangerp.api.service;
+
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import cn.qihangerp.api.domain.WmsStockInEntry;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author TW
+* @description 针对表【wms_stock_in_entry(入库单)】的数据库操作Service
+* @createDate 2024-04-26 14:54:16
+*/
+public interface WmsStockInEntryService extends IService {
+ PageResult queryPageList(WmsStockInEntry bo, PageQuery pageQuery);
+ int stockIn(WmsStockInEntry wmsStockInEntry);
+ int complete(Long id,String updateBy);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/WmsStockOutEntryItemDetailService.java b/api/src/main/java/cn/qihangerp/api/service/WmsStockOutEntryItemDetailService.java
new file mode 100644
index 0000000..eaad53d
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/WmsStockOutEntryItemDetailService.java
@@ -0,0 +1,13 @@
+package cn.qihangerp.api.service;
+
+import cn.qihangerp.api.domain.WmsStockOutEntryItemDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author TW
+* @description 针对表【wms_stock_out_entry_item_detail(出库明细详情)】的数据库操作Service
+* @createDate 2024-04-26 11:31:15
+*/
+public interface WmsStockOutEntryItemDetailService extends IService {
+
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/WmsStockOutEntryItemService.java b/api/src/main/java/cn/qihangerp/api/service/WmsStockOutEntryItemService.java
new file mode 100644
index 0000000..53f7d31
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/WmsStockOutEntryItemService.java
@@ -0,0 +1,15 @@
+package cn.qihangerp.api.service;
+
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import cn.qihangerp.api.domain.WmsStockOutEntryItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author TW
+* @description 针对表【wms_stock_out_entry_item(出库单明细)】的数据库操作Service
+* @createDate 2024-04-26 13:57:35
+*/
+public interface WmsStockOutEntryItemService extends IService {
+ PageResult queryPageList(WmsStockOutEntryItem bo, PageQuery pageQuery);
+}
diff --git a/api/src/main/java/cn/qihangerp/api/service/WmsStockOutEntryService.java b/api/src/main/java/cn/qihangerp/api/service/WmsStockOutEntryService.java
new file mode 100644
index 0000000..23d0cdf
--- /dev/null
+++ b/api/src/main/java/cn/qihangerp/api/service/WmsStockOutEntryService.java
@@ -0,0 +1,24 @@
+package cn.qihangerp.api.service;
+
+import cn.qihangerp.common.PageQuery;
+import cn.qihangerp.common.PageResult;
+import cn.qihangerp.api.domain.WmsStockOutEntry;
+import com.baomidou.mybatisplus.extension.service.IService;
+import cn.qihangerp.api.domain.bo.StockOutBo;
+import cn.qihangerp.api.domain.bo.StockOutEntryGenerateBo;
+
+/**
+* @author TW
+* @description 针对表【wms_stock_out_entry(出库单)】的数据库操作Service
+* @createDate 2024-04-26 11:31:15
+*/
+public interface WmsStockOutEntryService extends IService