Commit 80a38000 by zhangxingmin

Initial commit

parents
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/../../../../../../:\soft\ideaproject\v2\yd-product\.idea/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectStorage">
<option name="path" value="项目群组-&gt;银盾-微服务" />
<option name="projectId" value="4cc05386e898000" />
</component>
</project>
\ No newline at end of file
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="yd-product-api" />
<module name="yd-product-feign" />
<module name="yd-product-service" />
</profile>
</annotationProcessing>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/yd-product-api/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yd-product-api/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yd-product-feign/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yd-product-feign/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yd-product-service/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yd-product-service/src/main/resources" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="yd-releases" />
<option name="name" value="yd-releases" />
<option name="url" value="http://139.224.145.34:8081/repository/yd-maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="http://139.224.145.34:8081/repository/yd-maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="yd-snapshots" />
<option name="name" value="yd-snapshots" />
<option name="url" value="http://139.224.145.34:8081/repository/yd-maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GitSharedSettings">
<option name="FORCE_PUSH_PROHIBITED_PATTERNS">
<list />
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.yd</groupId>
<artifactId>yd-parent-pom</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.yd</groupId>
<artifactId>yd-product</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<description>产品服务</description>
<modules>
<module>yd-product-api</module>
<module>yd-product-feign</module>
<module>yd-product-service</module>
</modules>
<dependencyManagement>
<dependencies>
<!-- 实体类模块 -->
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-product-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-product-feign</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-product-service</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 部署到Nexus -->
<distributionManagement>
<repository>
<id>yd-releases</id>
<url>http://139.224.145.34:8081/repository/yd-project-releases/</url>
</repository>
<snapshotRepository>
<id>yd-snapshots</id>
<url>http://139.224.145.34:8081/repository/yd-project-snapshots/</url>
</snapshotRepository>
</distributionManagement>
<repositories>
<!-- 配置Nexus快照仓库,用于拉取快照版本依赖 -->
<repository>
<id>yd-snapshots</id>
<url>http://139.224.145.34:8081/repository/yd-project-snapshots/</url>
<snapshots>
<enabled>true</enabled> <!-- 允许拉取快照版本 -->
</snapshots>
<releases>
<enabled>false</enabled> <!-- 不启用正式版仓库(按需调整) -->
</releases>
</repository>
</repositories>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>yd-product</artifactId>
<groupId>com.yd</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yd-product-api</artifactId>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<!--对于bootstrap.properties/bootstrap.yaml配置文件(我们合起来成为Bootstrap配置文件)的支持,需要导入如下的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- Jackson 数据绑定库 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- Jackson 注解支持 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<!-- Java 8 时间类型支持 -->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<!-- 实体类模块 -->
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-product-service</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${springboot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
<mainClass>com.yd.product.api.ProductApiApplication</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package com.yd.product.api;
import com.yd.common.constant.ServerNameConstants;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication(scanBasePackages = "com.yd")
@MapperScan("com.yd.**.dao")
@EnableFeignClients(basePackages = "com.yd")
public class ProductApiApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ProductApiApplication.class)
.properties("spring.application.name="+ ServerNameConstants.ydProductApi)
.build().run(args);
System.out.println("(♥◠‿◠)ノ゙ yd-product-api启动成功 ლ(´ڡ`ლ)゙ ");
}
}
package com.yd.product.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 附加产品基础表(原有表) 前端控制器
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/additionalProduct")
public class AdditionalProductController {
}
package com.yd.product.api.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.common.result.Result;
import com.yd.product.api.service.ApiProductService;
import com.yd.product.feign.client.product.ApiProductFeignClient;
import com.yd.product.feign.request.product.ApiProductAddRequest;
import com.yd.product.feign.request.product.ApiProductEditRequest;
import com.yd.product.feign.request.product.ApiProductPageRequest;
import com.yd.product.feign.response.product.ApiProductDetailResponse;
import com.yd.product.feign.response.product.ApiProductPageResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 产品基础信息
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/product")
@Validated
public class ApiProductController implements ApiProductFeignClient {
@Autowired
private ApiProductService apiProductService;
/**
* 分页列表查询-产品基础信息
* @param request
* @return
*/
@Override
public Result<IPage<ApiProductPageResponse>> page(ApiProductPageRequest request) {
return apiProductService.page(request);
}
//
// /**
// * 编辑-产品基础信息
// * @param request
// * @return
// */
// @Override
// public Result edit(ApiProductEditRequest request) {
// return apiProductService.edit(request);
// }
//
// /**
// * 详情-产品基础信息
// * @param productBizId 产品基础信息表唯一业务ID
// * @return
// */
// @Override
// public Result<ApiProductDetailResponse> detail(String productBizId) {
// return apiProductService.detail(productBizId);
// }
//
// /**
// * 删除-产品基础信息 TODO
// * @param productBizId 产品基础信息表唯一业务ID
// * @return
// */
// @Override
// public Result del(String productBizId) {
// return apiProductService.del(productBizId);
// }
}
package com.yd.product.api.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.common.result.Result;
import com.yd.product.api.service.ApiProductLaunchService;
import com.yd.product.feign.client.productlaunch.ApiProductLaunchFeignClient;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchCategoryAddRequest;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchPageRequest;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchSaveRequest;
import com.yd.product.feign.response.productlaunch.ApiProductLaunchCategoryAddResponse;
import com.yd.product.feign.response.productlaunch.ApiProductLaunchDetailResponse;
import com.yd.product.feign.response.productlaunch.ApiProductLaunchPageResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 产品上架信息
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/productLaunch")
@Validated
public class ApiProductLaunchController implements ApiProductLaunchFeignClient {
@Autowired
private ApiProductLaunchService apiProductLaunchService;
/**
* 分页列表查询-产品上架信息
* @param request
* @return
*/
@Override
public Result<IPage<ApiProductLaunchPageResponse>> page(ApiProductLaunchPageRequest request) {
return apiProductLaunchService.page(request);
}
/**
* 添加-产品上架类目信息
* @param request
* @return
*/
@Override
public Result<ApiProductLaunchCategoryAddResponse> addCategory(ApiProductLaunchCategoryAddRequest request) {
return apiProductLaunchService.addCategory(request);
}
/**
* 详情-产品上架信息
* @param productLaunchBizId 产品上架信息表唯一业务ID
* @return
*/
@Override
public Result<ApiProductLaunchDetailResponse> detail(String productLaunchBizId) {
return apiProductLaunchService.detail(productLaunchBizId);
}
/**
* 保存-产品上架信息
* @param request
* @return
*/
@Override
public Result save(ApiProductLaunchSaveRequest request) {
return apiProductLaunchService.save(request);
}
}
package com.yd.product.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 上架产品属性(参数)配置表(新表) 前端控制器
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/attributeSetting")
public class AttributeSettingController {
}
package com.yd.product.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 预计来佣比率表(新表) 前端控制器
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/expectedCommissionRatio")
public class ExpectedCommissionRatioController {
}
package com.yd.product.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 文件表(新表) 前端控制器
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/file")
public class FileController {
}
package com.yd.product.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 产品-附加产品关系表(原有表) 前端控制器
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/relAdditionalProduct")
public class RelAdditionalProductController {
}
package com.yd.product.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 附加产品-部门关系表(多对多关系)(原有表) 前端控制器
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/relAdditionalProductDept")
public class RelAdditionalProductDeptController {
}
package com.yd.product.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 产品和公告比例关系表(原有表) 前端控制器
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/relProductAnnouncement")
public class RelProductAnnouncementController {
}
package com.yd.product.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 产品-部门关系表(多对多关系)(原有表) 前端控制器
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/relProductDept")
public class RelProductDeptController {
}
package com.yd.product.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 项目-产品关系表(原有表) 前端控制器
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/relProjectProduct")
public class RelProjectProductController {
}
package com.yd.product.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 项目-产品上架信息关系表(新表) 前端控制器
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/relProjectProductLaunch")
public class RelProjectProductLaunchController {
}
package com.yd.product.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 租户-产品关系表(原有表) 前端控制器
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/relTenantProduct")
public class RelTenantProductController {
}
package com.yd.product.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 租户-产品上架信息关系表(新表) 前端控制器
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/relTenantProductLaunch")
public class RelTenantProductLaunchController {
}
package com.yd.product.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 上架产品规格价格维护表(新表) 前端控制器
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/speciesPrice")
public class SpeciesPriceController {
}
package com.yd.product.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 上架产品规格配置表(新表) 前端控制器
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@RestController
@RequestMapping("/speciesSetting")
public class SpeciesSettingController {
}
package com.yd.product.api.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.common.result.Result;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchCategoryAddRequest;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchPageRequest;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchSaveRequest;
import com.yd.product.feign.response.productlaunch.ApiProductLaunchCategoryAddResponse;
import com.yd.product.feign.response.productlaunch.ApiProductLaunchDetailResponse;
import com.yd.product.feign.response.productlaunch.ApiProductLaunchPageResponse;
public interface ApiProductLaunchService {
Result<IPage<ApiProductLaunchPageResponse>> page(ApiProductLaunchPageRequest request);
Result<ApiProductLaunchCategoryAddResponse> addCategory(ApiProductLaunchCategoryAddRequest request);
Result<ApiProductLaunchDetailResponse> detail(String productLaunchBizId);
Result save(ApiProductLaunchSaveRequest request);
}
package com.yd.product.api.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.common.result.Result;
import com.yd.product.feign.request.product.ApiProductAddRequest;
import com.yd.product.feign.request.product.ApiProductEditRequest;
import com.yd.product.feign.request.product.ApiProductPageRequest;
import com.yd.product.feign.response.product.ApiProductDetailResponse;
import com.yd.product.feign.response.product.ApiProductPageResponse;
import com.yd.product.service.model.Product;
public interface ApiProductService {
Result<IPage<ApiProductPageResponse>> page(ApiProductPageRequest request);
Result<String> add(ApiProductAddRequest request);
Result<String> edit(ApiProductEditRequest request);
Result<ApiProductDetailResponse> detail(String productBizId);
Result del(String productBizId);
Result<Product> checkProductIsExist(String productBizId);
}
package com.yd.product.api.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.base.feign.client.relobjectcategory.ApiRelObjectCategoryFeignClient;
import com.yd.base.feign.request.relobjectcategory.ApiRelObjectCategoryListAddRequest;
import com.yd.common.enums.CommonEnum;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.product.api.service.ApiProductLaunchService;
import com.yd.product.api.service.ApiProductService;
import com.yd.product.feign.dto.ApiProductLaunchDto;
import com.yd.product.feign.dto.ApiSpeciesPriceDto;
import com.yd.product.feign.dto.ApiSpeciesTypeDto;
import com.yd.product.feign.request.product.ApiProductAddRequest;
import com.yd.product.feign.request.product.ApiProductEditRequest;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchCategoryAddRequest;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchPageRequest;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchSaveRequest;
import com.yd.product.feign.response.productlaunch.ApiAttributeSettingDto;
import com.yd.product.feign.response.productlaunch.ApiProductLaunchCategoryAddResponse;
import com.yd.product.feign.response.productlaunch.ApiProductLaunchDetailResponse;
import com.yd.product.feign.response.productlaunch.ApiProductLaunchPageResponse;
import com.yd.product.service.dto.AttributeSettingDto;
import com.yd.product.service.dto.SpeciesPriceDto;
import com.yd.product.service.dto.SpeciesSettingDto;
import com.yd.product.service.model.*;
import com.yd.product.service.service.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Slf4j
@Service
public class ApiProductLaunchServiceImpl implements ApiProductLaunchService {
@Autowired
private IProductLaunchService iProductLaunchService;
@Autowired
private ApiProductService apiProductService;
@Autowired
private IProductService iProductService;
@Autowired
private IAttributeSettingService iAttributeSettingService;
@Autowired
private ISpeciesSettingService iSpeciesSettingService;
@Autowired
private ISpeciesPriceService iSpeciesPriceService;
@Autowired
private ApiRelObjectCategoryFeignClient apiRelObjectCategoryFeignClient;
@Override
public Result<IPage<ApiProductLaunchPageResponse>> page(ApiProductLaunchPageRequest request) {
Page<ApiProductLaunchPageResponse> page = new Page<ApiProductLaunchPageResponse>(request.getPageNo(), request.getPageSize());
IPage<ApiProductLaunchPageResponse> iPage = iProductLaunchService.page(page, request);
return Result.success(iPage);
}
/**
* 添加-产品上架类目信息
* @param request
* @return
*/
@Override
public Result<ApiProductLaunchCategoryAddResponse> addCategory(ApiProductLaunchCategoryAddRequest request) {
ApiProductLaunchCategoryAddResponse response = new ApiProductLaunchCategoryAddResponse();
if (StringUtils.isNotBlank(request.getProductBizId())) {
//产品唯一业务ID不为空,校验产品信息是否存在
Product product = iProductService.queryOne(request.getProductBizId());
if (Objects.isNull(product)) {
//数据不存在
throw new BusinessException("产品信息数据不存在");
}
}
String productBizId = "";
//保存产品基础信息
if (Objects.isNull(request.getProductBizId())) {
//新增产品基础信息
Result<String> result = apiProductService.add(ApiProductAddRequest.builder()
.productName(request.getProductName())
.build());
productBizId = result.getData();
}else {
//编辑产品基础信息
Result<String> result = apiProductService.edit(ApiProductEditRequest.builder()
.productName(request.getProductName())
.build());
productBizId = result.getData();
}
//添加产品上架信息
ProductLaunch productLaunch = new ProductLaunch();
productLaunch.setTitle(request.getProductName());
productLaunch.setMainUrls(String.join(";",request.getMainUrlsList()));
productLaunch.setProductBizId(productBizId);
//产品上架信息表唯一业务ID
productLaunch.setProductLaunchBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_PRODUCT_LAUNCH.getCode()));
//待审核
productLaunch.setStatus(0);
iProductLaunchService.saveOrUpdate(productLaunch);
//添加产品上架对象分类关系信息
ApiRelObjectCategoryListAddRequest addRequest = new ApiRelObjectCategoryListAddRequest();
addRequest.setCategoryBizIdList(request.getCategoryBizIdList());
addRequest.setObjectBizId(productLaunch.getProductLaunchBizId());
addRequest.setObjectName(productLaunch.getTitle());
addRequest.setObjectTableName(CommonEnum.UID_TYPE_PRODUCT_LAUNCH.getCode());
addRequest.setObjectType(CommonEnum.UID_TYPE_PRODUCT_LAUNCH.getCode());
apiRelObjectCategoryFeignClient.addRelObjectCategoryList(addRequest);
response.setProductBizId(productBizId);
response.setProductLaunchBizId(productLaunch.getProductLaunchBizId());
return Result.success();
}
/**
* 详情-产品上架信息
* @param productLaunchBizId 产品上架信息表唯一业务ID
* @return
*/
@Override
public Result<ApiProductLaunchDetailResponse> detail(String productLaunchBizId) {
ApiProductLaunchDetailResponse response = new ApiProductLaunchDetailResponse();
ProductLaunch productLaunch = iProductLaunchService.queryOne(productLaunchBizId);
if (Objects.isNull(productLaunch)) {
throw new BusinessException("产品上架信息不存在");
}
//产品上架主信息
ApiProductLaunchDto apiProductLaunchDto = new ApiProductLaunchDto();
BeanUtils.copyProperties(productLaunch,apiProductLaunchDto);
//详情图列表
apiProductLaunchDto.setDetailUrlsList(StringUtils.isNotBlank(productLaunch.getDetailUrls()) ? Arrays.asList(productLaunch.getDetailUrls().split(";").clone()) : new ArrayList<>());
//主图url列表
apiProductLaunchDto.setMainUrlsList(StringUtils.isNotBlank(productLaunch.getMainUrls()) ? Arrays.asList(productLaunch.getMainUrls().split(";").clone()) : new ArrayList<>());
response.setApiProductLaunchDto(apiProductLaunchDto);
//设置的产品上架信息的参数列表
List<ApiAttributeSettingDto> apiAttributeSettingDtoList = new ArrayList<>();
List<AttributeSetting> attributeSettingList = iAttributeSettingService.queryList(AttributeSettingDto.builder()
.productLaunchBizId(productLaunchBizId)
.build());
if (!CollectionUtils.isEmpty(attributeSettingList)) {
apiAttributeSettingDtoList = attributeSettingList.stream().map(dto -> {
ApiAttributeSettingDto settingDto = new ApiAttributeSettingDto();
BeanUtils.copyProperties(dto,settingDto);
return settingDto;
}).collect(Collectors.toList());
}
response.setApiAttributeSettingDtoList(apiAttributeSettingDtoList);
//规格信息配置列表
List<ApiSpeciesTypeDto> apiSpeciesTypeDtoList = new ArrayList<>();
List<SpeciesSetting> speciesSettingList = iSpeciesSettingService.queryList(SpeciesSettingDto.builder().productLaunchBizId(productLaunchBizId).build());
if (!CollectionUtils.isEmpty(speciesSettingList)) {
apiSpeciesTypeDtoList = speciesSettingList.stream().map(dto -> {
ApiSpeciesTypeDto typeDto = new ApiSpeciesTypeDto();
BeanUtils.copyProperties(dto,typeDto);
return typeDto;
}).collect(Collectors.toList());
}
response.setApiSpeciesTypeDtoList(apiSpeciesTypeDtoList);
//规格价格配置列表
List<ApiSpeciesPriceDto> apiSpeciesPriceDtoList = new ArrayList<>();
List<SpeciesPrice> speciesPriceList = iSpeciesPriceService.queryList(SpeciesPriceDto.builder().productLaunchBizId(productLaunchBizId).build());
if (!CollectionUtils.isEmpty(speciesPriceList)) {
apiSpeciesPriceDtoList = speciesPriceList.stream().map(dto -> {
ApiSpeciesPriceDto priceDto = new ApiSpeciesPriceDto();
BeanUtils.copyProperties(dto,priceDto);
return priceDto;
}).collect(Collectors.toList());
}
response.setApiSpeciesPriceDtoList(apiSpeciesPriceDtoList);
return Result.success(response);
}
/**
* 保存-产品上架信息
* @param request
* @return
*/
@Override
public Result save(ApiProductLaunchSaveRequest request) {
return null;
}
}
package com.yd.product.api.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.common.constant.CodeGeneratorConstants;
import com.yd.common.enums.CommonEnum;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.common.utils.CodeGenerator;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.product.api.service.ApiProductService;
import com.yd.product.feign.request.product.ApiProductAddRequest;
import com.yd.product.feign.request.product.ApiProductEditRequest;
import com.yd.product.feign.request.product.ApiProductPageRequest;
import com.yd.product.feign.response.product.ApiProductDetailResponse;
import com.yd.product.feign.response.product.ApiProductPageResponse;
import com.yd.product.service.dto.ProductDto;
import com.yd.product.service.model.Product;
import com.yd.product.service.model.RelProjectProduct;
import com.yd.product.service.model.RelTenantProduct;
import com.yd.product.service.service.IProductService;
import com.yd.product.service.service.IRelProjectProductService;
import com.yd.product.service.service.IRelTenantProductService;
import com.yd.user.feign.client.reltenantproject.ApiRelTenantProjectFeignClient;
import com.yd.user.feign.request.reltenantproject.QueryRelTenantProjectListRequest;
import com.yd.user.feign.response.reltenantproject.QueryRelTenantProjectListResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Slf4j
@Service
public class ApiProductServiceImpl implements ApiProductService {
@Autowired
private IProductService iProductService;
@Autowired
private IRelTenantProductService iRelTenantProductService;
@Autowired
private IRelProjectProductService iRelProjectProductService;
@Autowired
private ApiRelTenantProjectFeignClient apiRelTenantProjectFeignClient;
/**
* 分页列表查询-产品基础信息
* @param request
* @return
*/
@Override
public Result<IPage<ApiProductPageResponse>> page(ApiProductPageRequest request) {
Page<ApiProductPageResponse> page = new Page<>(request.getPageNo(), request.getPageSize());
IPage<ApiProductPageResponse> iPage = iProductService.page(page, request);
return Result.success(iPage);
}
/**
* 添加-产品基础信息
* @param request
* @return
*/
@Override
public Result<String> add(ApiProductAddRequest request) {
//校验产品名称的唯一性
List<Product> productList = iProductService.queryList(ProductDto.builder()
.productName(request.getProductName())
.build());
if (!CollectionUtils.isEmpty(productList)) {
throw new BusinessException("产品名称已存在");
}
Product product = new Product();
BeanUtils.copyProperties(request,product);
product.setProductBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_PRODUCT.getCode()));
product.setProductCode(CodeGenerator.generate10Code(CodeGeneratorConstants.PREFIX_PRODUCT_CODE));
iProductService.saveOrUpdate(product);
return Result.success(product.getProductBizId());
}
/**
* 编辑-产品基础信息
* @param request
* @return
*/
@Override
public Result<String> edit(ApiProductEditRequest request) {
//校验产品信息是否存在
Result<Product> productResult = checkProductIsExist(request.getProductBizId());
Product product = productResult.getData();
//校验产品名称的唯一性
List<Product> productList = iProductService.queryList(ProductDto.builder()
.productName(request.getProductName())
.productBizId(request.getProductBizId())
.isExcludeMy(true)
.build());
if (!CollectionUtils.isEmpty(productList)) {
throw new BusinessException("产品名称已存在");
}
BeanUtils.copyProperties(request,product);
iProductService.saveOrUpdate(product);
return Result.success(product.getProductBizId());
}
/**
* 详情-产品基础信息
* @param productBizId 产品基础信息表唯一业务ID
* @return
*/
@Override
public Result<ApiProductDetailResponse> detail(String productBizId) {
//校验产品信息是否存在
Result<Product> productResult = checkProductIsExist(productBizId);
Product product = productResult.getData();
ApiProductDetailResponse response = new ApiProductDetailResponse();
BeanUtils.copyProperties(product,response);
return Result.success(response);
}
/**
* 删除-产品基础信息
* @param productBizId 产品基础信息表唯一业务ID
* @return
*/
@Override
public Result del(String productBizId) {
return null;
}
/**
* 根据项目业务ID列表查询租户项目关系列表
* @return
*/
public Result<List<QueryRelTenantProjectListResponse>> queryRelTenantProjectList(List<String> projectBizIdList) {
QueryRelTenantProjectListRequest request = new QueryRelTenantProjectListRequest();
request.setProjectBizIdList(projectBizIdList);
return apiRelTenantProjectFeignClient.queryRelTenantProjectList(request);
}
/**
* 保存租户产品关系列表
* @return
*/
public Result saveRelTenantProductList(List<QueryRelTenantProjectListResponse> responses,String productBizId) {
//先删后新增
//根据产品业务ID删除租户产品关系
iRelTenantProductService.delByProductBizId(productBizId);
//新增租户产品关系
if (!CollectionUtils.isEmpty(responses)) {
List<RelTenantProduct> saveList = responses.stream().map(dto -> {
RelTenantProduct relTenantProduct = new RelTenantProduct();
relTenantProduct.setProductBizId(productBizId);
relTenantProduct.setTenantBizId(dto.getTenantBizId());
return relTenantProduct;
}).collect(Collectors.toList());
iRelTenantProductService.saveOrUpdateBatch(saveList);
}
return Result.success();
}
/**
* 保存项目产品关系列表
* @return
*/
public Result saveRelProjectProductList(List<QueryRelTenantProjectListResponse> responses,String productBizId) {
//先删后新增
//根据产品业务ID删除项目产品关系
iRelProjectProductService.delByProductBizId(productBizId);
//新增项目产品关系
if (!CollectionUtils.isEmpty(responses)) {
List<RelProjectProduct> saveList = responses.stream().map(dto -> {
RelProjectProduct relProjectProduct = new RelProjectProduct();
relProjectProduct.setProductBizId(productBizId);
relProjectProduct.setTenantBizId(dto.getTenantBizId());
relProjectProduct.setProjectBizId(dto.getProjectBizId());
return relProjectProduct;
}).collect(Collectors.toList());
iRelProjectProductService.saveOrUpdateBatch(saveList);
}
return Result.success();
}
/**
* 校验产品信息是否存在
* @param productBizId
* @return
*/
@Override
public Result<Product> checkProductIsExist(String productBizId) {
Product product = iProductService.queryOne(productBizId);
if (Objects.isNull(product)) {
//数据不存在
throw new BusinessException("产品信息数据不存在");
}
return Result.success(product);
}
}
${AnsiColor.GREEN}
_ _ _ __ __ ____ _ _ _ _
| | (_)_ __ | | _\ \ / /__ / ___| |__ __ _| |_ / \ _ __ (_)
| | | | '_ \| |/ /\ \ /\ / / _ \ | | '_ \ / _` | __| / _ \ | '_ \| |
| |___| | | | | < \ V V / __/ |___| | | | (_| | |_ / ___ \| |_) | |
|_____|_|_| |_|_|\_\ \_/\_/ \___|\____|_| |_|\__,_|\__/_/ \_\ .__/|_|
|_|
${AnsiColor.BRIGHT_WHITE}
Spring Boot Version: ${spring-boot.version}
\ No newline at end of file
spring:
profiles:
active: test
# active: '@spring.profiles.active@'
---
spring:
application:
name: yd-product-api
profiles: dev
main:
allow-bean-definition-overriding: true
allow-circular-references: true
cloud:
nacos:
# 配置中心
config:
# 命名空间id(此处不用public,因public初始化的空间, id为空) 4e237601-cea8-414d-b7b9-d7adc8cbcf95
namespace: 22f9d61e-9011-4d45-88cb-24f9857e3eec
# nacos的ip地址和端口 120.79.64.17:10848
server-addr: 127.0.0.1:8848
# 这个就表示 在我们nacos命名空间id为 dev中 有一个data-id 为 demo-service.yml 的配置文件 读取这个里面的配置
file-extension: yml
config-retry-time: 300000
# 共享配置, 可以把公共配置放在同个命名空间下,然后创建一个 common.yml 文件 ,里面可以放共用的配置
shared-configs[0]:
dataId: linkwe-common.yml
refresh: true
# 发布到注册中心 (如果没有使用可以不配)
discovery:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace: ${spring.cloud.nacos.config.namespace}
# nacos的ip地址和端口
server-addr: ${spring.cloud.nacos.config.server-addr}
---
spring:
application:
name: yd-product-api
profiles: test
main:
allow-bean-definition-overriding: true
allow-circular-references: true
cloud:
nacos:
# 配置中心
config:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace: b3b01715-eb85-4242-992a-5aff03d864d4
# nacos的ip地址和端口
server-addr: 139.224.145.34:8848
# 这个就表示 在我们nacos命名空间id为 dev中 有一个data-id 为 demo-service.yml 的配置文件 读取这个里面的配置
file-extension: yml
config-retry-time: 300000
# 共享配置, 可以把公共配置放在同个命名空间下,然后创建一个 common.yml 文件 ,里面可以放共用的配置
shared-configs[0]:
dataId: yd-common.yml
group: YD_GROUP
refresh: true
extension-configs: # 扩展配置
- data-id: yd-product-api.yml
group: YD_GROUP
refresh: true
# 发布到注册中心 (如果没有使用可以不配)
discovery:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace: ${spring.cloud.nacos.config.namespace}
# nacos的ip地址和端口
server-addr: ${spring.cloud.nacos.config.server-addr}
group: YD_GROUP
---
spring:
profiles: prod
main:
allow-bean-definition-overriding: true
allow-circular-references: true
cloud:
nacos:
# 配置中心
config:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace: cb587d6d-d3b2-45ca-a3ef-5b5c80ece5b3
# nacos的ip地址和端口
server-addr: 139.224.150.79:8848
# 这个就表示 在我们nacos命名空间id为 dev中 有一个data-id 为 demo-service.yml 的配置文件 读取这个里面的配置
file-extension: yml
config-retry-time: 300000
# 共享配置, 可以把公共配置放在同个命名空间下,然后创建一个 common.yml 文件 ,里面可以放共用的配置
shared-configs[0]:
dataId: yd-common.yml
group: YD_GROUP
refresh: true
extension-configs: # 扩展配置
- data-id: yd-product-api.yml
group: YD_GROUP
refresh: true
# 发布到注册中心 (如果没有使用可以不配)
discovery:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace: ${spring.cloud.nacos.config.namespace}
# nacos的ip地址和端口
server-addr: ${spring.cloud.nacos.config.server-addr}
group: YD_GROUP
#3.2.1\u4EE5\u4E0A\u4F7F\u7528
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
#3.2.1\u4EE5\u4E0B\u4F7F\u7528\u6216\u8005\u4E0D\u914D\u7F6E
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# \u81EA\u5B9A\u4E49\u65E5\u5FD7\u6253\u5370
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#\u65E5\u5FD7\u8F93\u51FA\u5230\u63A7\u5236\u53F0
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# \u4F7F\u7528\u65E5\u5FD7\u7CFB\u7EDF\u8BB0\u5F55 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# \u8BBE\u7F6E p6spy driver \u4EE3\u7406
deregisterdrivers=true
# \u53D6\u6D88JDBC URL\u524D\u7F00
useprefix=true
# \u914D\u7F6E\u8BB0\u5F55 Log \u4F8B\u5916,\u53EF\u53BB\u6389\u7684\u7ED3\u679C\u96C6\u6709error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# \u65E5\u671F\u683C\u5F0F
dateformat=yyyy-MM-dd HH:mm:ss
# \u5B9E\u9645\u9A71\u52A8\u53EF\u591A\u4E2A
#driverlist=org.h2.Driver
# \u662F\u5426\u5F00\u542F\u6162SQL\u8BB0\u5F55
outagedetection=true
# \u6162SQL\u8BB0\u5F55\u6807\u51C6 2 \u79D2
outagedetectioninterval=2
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4" />
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>yd-product</artifactId>
<groupId>com.yd</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yd-product-feign</artifactId>
<dependencies>
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-feign</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-base-feign</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.yd.product.feign.client.product;
import com.yd.common.result.Result;
import com.yd.product.feign.fallback.product.ApiProductFeignFallbackFactory;
import com.yd.product.feign.request.product.ApiProductEditRequest;
import com.yd.product.feign.request.product.ApiProductPageRequest;
import com.yd.product.feign.response.product.ApiProductDetailResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
/**
* 产品服务-产品基础信息Feign客户端
*/
@FeignClient(name = "yd-product-api", fallbackFactory = ApiProductFeignFallbackFactory.class)
public interface ApiProductFeignClient {
/**
* 分页列表查询-产品基础信息
* @param request
* @return
*/
@PostMapping("/page")
Result page(@RequestBody ApiProductPageRequest request);
// /**
// * 编辑-产品基础信息
// * @param request
// * @return
// */
// @PutMapping("/edit")
// Result edit(@Validated @RequestBody ApiProductEditRequest request);
//
// /**
// * 详情-产品基础信息
// * @param productBizId 产品基础信息表唯一业务ID
// * @return
// */
// @GetMapping("/detail")
// Result<ApiProductDetailResponse> detail(@NotBlank(message = "产品基础信息表唯一业务ID能为空") @RequestParam(value = "productBizId") String productBizId);
//
// /**
// * 删除-产品基础信息
// * @param productBizId 产品基础信息表唯一业务ID
// * @return
// */
// @DeleteMapping("/del")
// Result del(@NotBlank(message = "产品基础信息表唯一业务ID能为空") @RequestParam(value = "productBizId") String productBizId);
}
package com.yd.product.feign.client.productattribute;
import com.yd.common.result.Result;
import com.yd.product.feign.fallback.productattribute.ApiProductAttributeFeignFallbackFactory;
import com.yd.product.feign.request.product.ApiProductAddRequest;
import com.yd.product.feign.request.productattribute.ApiProductAttributeSaveRequest;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* 产品服务-产品属性信息Feign客户端
*/
@FeignClient(name = "yd-product-api", fallbackFactory = ApiProductAttributeFeignFallbackFactory.class)
public interface ApiProductAttributeFeignClient {
/**
* 保存-产品属性信息
* @param request
* @return
*/
@PostMapping("/save")
Result save(@Validated @RequestBody ApiProductAttributeSaveRequest request);
}
package com.yd.product.feign.client.productlaunch;
import com.yd.common.result.Result;
import com.yd.product.feign.fallback.productlaunch.ApiProductLaunchFeignFallbackFactory;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchCategoryAddRequest;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchPageRequest;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchSaveRequest;
import com.yd.product.feign.response.productlaunch.ApiProductLaunchCategoryAddResponse;
import com.yd.product.feign.response.productlaunch.ApiProductLaunchDetailResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotBlank;
/**
* 产品服务-产品上架信息Feign客户端
*/
@FeignClient(name = "yd-product-api", fallbackFactory = ApiProductLaunchFeignFallbackFactory.class)
public interface ApiProductLaunchFeignClient {
/**
* 分页列表查询-产品上架信息
* @param request
* @return
*/
@PostMapping("/page")
Result page(@RequestBody ApiProductLaunchPageRequest request);
/**
* 添加-产品上架类目信息
* @param request
* @return
*/
@PostMapping("/add/category")
Result<ApiProductLaunchCategoryAddResponse> addCategory(@Validated @RequestBody ApiProductLaunchCategoryAddRequest request);
/**
* 详情-产品上架信息
* @param productLaunchBizId 产品上架信息表唯一业务ID
* @return
*/
@GetMapping("/detail")
Result<ApiProductLaunchDetailResponse> detail(@NotBlank(message = "产品上架信息表唯一业务ID唯一业务ID能为空") @RequestParam(value = "productLaunchBizId") String productLaunchBizId);
/**
* 保存-产品上架信息
* @param request
* @return
*/
@PostMapping("/save")
Result save(@Validated @RequestBody ApiProductLaunchSaveRequest request);
}
package com.yd.product.feign.dto;
import lombok.Data;
import java.util.List;
@Data
public class ApiProductLaunchDto {
/**
* 产品上架信息表唯一业务ID
*/
private String productLaunchBizId;
/**
* 关联产品表唯一业务ID(上架的产品)
*/
private String productBizId;
/**
* 标题
*/
private String title;
/**
* 短标题
*/
private String shortTitle;
/**
* 主图url列表
*/
private List<String> mainUrlsList;
/**
* 详情图列表
*/
private List<String> detailUrlsList;
/**
* 详情描述
*/
private String detailDescription;
/**
* 状态:0-待审核 1-审核成功 2-审核失败 3-在售 4-停售 5-下架 6-预售
*/
private Integer status;
}
package com.yd.product.feign.dto;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
public class ApiRelObjectFieldDto {
/**
* 字段表唯一业务ID
*/
@NotBlank(message = "字段表唯一业务ID不能为空")
private String fieldBizId;
/**
* 字段值表唯一业务ID
*/
private String fieldValueBizId;
/**
* 字段值
*/
private String value;
}
package com.yd.product.feign.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ApiSpeciesPriceDto {
/**
* 规格价格维护表唯一业务ID
*/
private String speciesPriceBizId;
/**
* 产品上架信息表唯一业务ID(冗余)
*/
private String productLaunchBizId;
/**
* 上架产品规格配置表信息JSON串
*/
private String speciesJson;
/**
* 价格
*/
private BigDecimal price;
/**
* 库存
*/
private BigDecimal inventory;
/**
* 配图url
*/
private String illustrationUrl;
/**
* 状态:0=下架,1=上架
*/
private Integer status;
/**
* 通用备注
*/
private String remark;
}
package com.yd.product.feign.dto;
import lombok.Data;
@Data
public class ApiSpeciesSettingDto {
/**
* 产品上架规格配置表唯一业务ID
*/
private String speciesSettingBizId;
/**
* 产品上架信息表唯一业务ID(冗余)
*/
private String productLaunchBizId;
/**
* 规格表唯一业务ID(冗余)
*/
private String speciesBizId;
/**
* 规格类型表唯一业务ID
*/
private String speciesTypeBizId;
/**
* 规格类型编码
*/
private String typeCode;
/**
* 规格类型名称
*/
private String typeName;
/**
* 规格值
*/
private String value;
/**
* 是否配图 0-否 1-是
*/
private String isIllustration;
/**
* 配图url
*/
private String illustrationUrl;
/**
* 是否自定义 0-否 1-是
*/
private String isCustomize;
/**
* 通用备注
*/
private String remark;
}
package com.yd.product.feign.dto;
import lombok.Data;
import java.util.List;
@Data
public class ApiSpeciesTypeDto {
/**
* 规格类型表唯一业务ID
*/
private String speciesTypeBizId;
/**
* 规格类型编码
*/
private String typeCode;
/**
* 规格类型名称
*/
private String typeName;
/**
* 上架产品规格配置列表
*/
private List<ApiSpeciesSettingDto> apiSpeciesSettingDtoList;
}
package com.yd.product.feign.fallback.product;
import com.yd.common.result.Result;
import com.yd.product.feign.client.product.ApiProductFeignClient;
import com.yd.product.feign.request.product.ApiProductAddRequest;
import com.yd.product.feign.request.product.ApiProductEditRequest;
import com.yd.product.feign.request.product.ApiProductPageRequest;
import com.yd.product.feign.response.product.ApiProductDetailResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* 产品服务-产品基础信息Feign降级处理
*/
@Slf4j
@Component
public class ApiProductFeignFallbackFactory implements FallbackFactory<ApiProductFeignClient> {
@Override
public ApiProductFeignClient create(Throwable cause) {
return new ApiProductFeignClient() {
@Override
public Result page(ApiProductPageRequest request) {
return null;
}
// @Override
// public Result edit(ApiProductEditRequest request) {
// return null;
// }
//
// @Override
// public Result<ApiProductDetailResponse> detail(String productBizId) {
// return null;
// }
//
// @Override
// public Result del(String productBizId) {
// return null;
// }
};
}
}
package com.yd.product.feign.fallback.productattribute;
import com.yd.common.result.Result;
import com.yd.product.feign.client.productattribute.ApiProductAttributeFeignClient;
import com.yd.product.feign.request.productattribute.ApiProductAttributeSaveRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* 产品服务-产品属性信息Feign降级处理
*/
@Slf4j
@Component
public class ApiProductAttributeFeignFallbackFactory implements FallbackFactory<ApiProductAttributeFeignClient> {
@Override
public ApiProductAttributeFeignClient create(Throwable cause) {
return new ApiProductAttributeFeignClient() {
@Override
public Result save(ApiProductAttributeSaveRequest request) {
return null;
}
};
}
}
package com.yd.product.feign.fallback.productlaunch;
import com.yd.common.result.Result;
import com.yd.product.feign.client.productlaunch.ApiProductLaunchFeignClient;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchCategoryAddRequest;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchPageRequest;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchSaveRequest;
import com.yd.product.feign.response.productlaunch.ApiProductLaunchCategoryAddResponse;
import com.yd.product.feign.response.productlaunch.ApiProductLaunchDetailResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* 产品服务-产品上架信息Feign降级处理
*/
@Slf4j
@Component
public class ApiProductLaunchFeignFallbackFactory implements FallbackFactory<ApiProductLaunchFeignClient> {
@Override
public ApiProductLaunchFeignClient create(Throwable cause) {
return new ApiProductLaunchFeignClient() {
@Override
public Result page(ApiProductLaunchPageRequest request) {
return null;
}
@Override
public Result<ApiProductLaunchCategoryAddResponse> addCategory(ApiProductLaunchCategoryAddRequest request) {
return null;
}
@Override
public Result<ApiProductLaunchDetailResponse> detail(String productLaunchBizId) {
return null;
}
@Override
public Result save(ApiProductLaunchSaveRequest request) {
return null;
}
};
}
}
package com.yd.product.feign.request.product;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ApiProductAddRequest {
/**
* 产品名称
*/
@NotBlank(message = "产品名称不能为空")
private String productName;
/**
* 支持货币
*/
private String currency;
/**
* 销售方式
*/
private String salesMethod;
/**
* 开售时间
*/
private LocalDateTime saleStartTime;
/**
* 停售时间
*/
private LocalDateTime discontinuationTime;
/**
* 产品图片
*/
private String picture;
/**
* 通用备注
*/
private String remark;
}
package com.yd.product.feign.request.product;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ApiProductEditRequest {
/**
* 产品唯一业务ID
*/
@NotBlank(message = "产品唯一业务ID不能为空")
private String productBizId;
/**
* 产品名称
*/
@NotBlank(message = "产品名称不能为空")
private String productName;
/**
* 支持货币
*/
private String currency;
/**
* 销售方式
*/
private String salesMethod;
/**
* 开售时间
*/
private LocalDateTime saleStartTime;
/**
* 停售时间
*/
private LocalDateTime discontinuationTime;
/**
* 产品图片
*/
private String picture;
/**
* 通用备注
*/
private String remark;
}
package com.yd.product.feign.request.product;
import com.yd.common.dto.PageDto;
import lombok.Data;
@Data
public class ApiProductPageRequest extends PageDto {
/**
* 产品名称
*/
private String productName;
/**
* 状态
*/
private Integer status;
}
package com.yd.product.feign.request.productattribute;
import com.yd.product.feign.dto.ApiRelObjectFieldDto;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Data
public class ApiProductAttributeSaveRequest {
/**
* 产品唯一业务ID
*/
@NotBlank(message = "产品唯一业务ID不能为空")
private String productBizId;
/**
* 产品绑定的分类表唯一业务ID列表(产品绑定多级分类)
*/
@NotEmpty(message = "产品绑定的分类表唯一业务ID列表不能为空")
private List<String> categoryBizIdList;
/**
* 产品绑定的属性列表集合(含录入值)
*/
@NotEmpty(message = "产品绑定的属性列表集合(含录入值)不能为空")
private List<ApiRelObjectFieldDto> apiRelObjectFieldDtoList;
}
package com.yd.product.feign.request.productlaunch;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Data
public class ApiProductLaunchCategoryAddRequest {
/**
* 产品唯一业务ID(搜索的产品,有数据选择带入产品唯一业务ID和产品名称,不选择->自定义产品名称不带入产品唯一业务ID)
*/
private String productBizId;
/**
* 产品名称
*/
@NotBlank(message = "产品名称不能为空")
private String productName;
/**
* 主图和视频url列表
*/
@NotEmpty(message = "主图和视频url列表不能为空")
private List<String> mainUrlsList;
/**
* 分类表唯一业务ID列表
*/
@NotEmpty(message = "分类表唯一业务ID列表不能为空")
private List<String> categoryBizIdList;
}
package com.yd.product.feign.request.productlaunch;
import com.yd.common.dto.PageDto;
import lombok.Data;
@Data
public class ApiProductLaunchPageRequest extends PageDto {
/**
* 标题
*/
private String title;
}
package com.yd.product.feign.request.productlaunch;
import com.yd.product.feign.dto.ApiProductLaunchDto;
import com.yd.product.feign.dto.ApiSpeciesPriceDto;
import com.yd.product.feign.dto.ApiSpeciesTypeDto;
import com.yd.product.feign.response.productlaunch.ApiAttributeSettingDto;
import lombok.Data;
import java.util.List;
@Data
public class ApiProductLaunchSaveRequest {
/**
* 产品上架主信息
*/
private ApiProductLaunchDto apiProductLaunchDto;
/**
* 设置的产品参数列表
*/
private List<ApiAttributeSettingDto> apiAttributeSettingDtoList;
/**
* 规格信息配置列表
*/
private List<ApiSpeciesTypeDto> apiSpeciesTypeDtoList;
/**
* 规格价格配置列表
*/
private List<ApiSpeciesPriceDto> apiSpeciesPriceDtoList;
}
package com.yd.product.feign.response.product;
import lombok.Data;
@Data
public class ApiProductDetailResponse {
}
package com.yd.product.feign.response.product;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class ApiProductPageResponse {
/**
* 产品基础信息表主键ID
*/
private Long id;
/**
* 产品唯一业务ID
*/
private String productBizId;
/**
* 产品名称
*/
private String productName;
/**
* 产品代码
*/
private String productCode;
/**
* 产品状态:0=下架,1=在售 2=预售 3=停售
*/
private Integer productStatus;
/**
* 支持货币
*/
private String currency;
/**
* 销售方式
*/
private String salesMethod;
/**
* 开售时间
*/
private LocalDateTime saleStartTime;
/**
* 停售时间
*/
private LocalDateTime discontinuationTime;
/**
* 产品图片
*/
private String picture;
/**
* 产品所属公司的所在地
*/
private String location;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package com.yd.product.feign.response.productlaunch;
import lombok.Data;
@Data
public class ApiAttributeSettingDto {
/**
* 产品属性(参数)配置表唯一业务ID
*/
private String attributeSettingBizId;
/**
* 产品上架信息表唯一业务ID
*/
private String productLaunchBizId;
/**
* 字段表唯一业务ID
*/
private String fieldBizId;
/**
* 字段值表唯一业务ID
*/
private String fieldValueBizId;
/**
* 字段名称
*/
private String name;
/**
* 字段值
*/
private String value;
/**
* 是否自定义 0-否 1-是
*/
private String isCustomize;
/**
* 通用备注
*/
private String remark;
}
package com.yd.product.feign.response.productlaunch;
import lombok.Data;
@Data
public class ApiProductLaunchCategoryAddResponse {
/**
* 产品上架信息表唯一业务ID
*/
private String productLaunchBizId;
/**
* 关联产品表唯一业务ID(上架的产品)
*/
private String productBizId;
}
package com.yd.product.feign.response.productlaunch;
import com.yd.product.feign.dto.ApiProductLaunchDto;
import com.yd.product.feign.dto.ApiSpeciesPriceDto;
import com.yd.product.feign.dto.ApiSpeciesTypeDto;
import lombok.Data;
import java.util.List;
@Data
public class ApiProductLaunchDetailResponse {
/**
* 产品上架主信息
*/
private ApiProductLaunchDto apiProductLaunchDto;
/**
* 设置的产品参数列表
*/
private List<ApiAttributeSettingDto> apiAttributeSettingDtoList;
/**
* 规格信息配置列表
*/
private List<ApiSpeciesTypeDto> apiSpeciesTypeDtoList;
/**
* 规格价格配置列表
*/
private List<ApiSpeciesPriceDto> apiSpeciesPriceDtoList;
}
package com.yd.product.feign.response.productlaunch;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class ApiProductLaunchPageResponse {
/**
* 产品上架信息表主键ID
*/
private Long id;
/**
* 产品上架信息表唯一业务ID
*/
private String productLaunchBizId;
/**
* 关联产品表唯一业务ID(上架的产品)
*/
private String productBizId;
/**
* 标题
*/
private String title;
/**
* 短标题
*/
private String shortTitle;
/**
* 主图url(多个url用分号分隔)
*/
private String mainUrls;
/**
* 状态
*/
private Integer status;
/**
* 创建时间
*/
private LocalDateTime createTime;
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>yd-product</artifactId>
<groupId>com.yd</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yd-product-service</artifactId>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
</dependency>
<!-- MyBatis Plus 扩展功能 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
</dependency>
<!-- 阿里数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-product-feign</artifactId>
</dependency>
<!-- 认证模块 -->
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-auth-core</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 框架配置模块 -->
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-framework</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.yd.product.service.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.LocalDateTime;
@Configuration
public class ProductMybatisPlusConfig {
/**
* 分页插件配置(必须)
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 使用正确的枚举值 DbType.MYSQL
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
/**
* 自动填充字段配置(如创建时间、更新时间)
*/
@Bean
public MetaObjectHandler metaObjectHandler() {
return new MetaObjectHandler() {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
};
}
}
package com.yd.product.service.dao;
import com.yd.product.service.model.AdditionalProduct;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 附加产品基础表(原有表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface AdditionalProductMapper extends BaseMapper<AdditionalProduct> {
}
package com.yd.product.service.dao;
import com.yd.product.service.model.AttributeSetting;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 上架产品属性(参数)配置表(新表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface AttributeSettingMapper extends BaseMapper<AttributeSetting> {
}
package com.yd.product.service.dao;
import com.yd.product.service.model.ExpectedCommissionRatio;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 预计来佣比率表(新表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface ExpectedCommissionRatioMapper extends BaseMapper<ExpectedCommissionRatio> {
}
package com.yd.product.service.dao;
import com.yd.product.service.model.File;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 文件表(新表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface FileMapper extends BaseMapper<File> {
}
package com.yd.product.service.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchPageRequest;
import com.yd.product.feign.response.productlaunch.ApiProductLaunchPageResponse;
import com.yd.product.service.model.ProductLaunch;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
/**
* <p>
* 产品上架信息表(新表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface ProductLaunchMapper extends BaseMapper<ProductLaunch> {
IPage<ApiProductLaunchPageResponse> page(@Param("page") Page<ApiProductLaunchPageResponse> page,
@Param("request") ApiProductLaunchPageRequest request);
}
package com.yd.product.service.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.product.feign.request.product.ApiProductPageRequest;
import com.yd.product.feign.response.product.ApiProductPageResponse;
import com.yd.product.service.model.Product;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
/**
* <p>
* 产品基础表 Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface ProductMapper extends BaseMapper<Product> {
IPage<ApiProductPageResponse> page(@Param("page") Page<ApiProductPageResponse> page,
@Param("request") ApiProductPageRequest request);
}
package com.yd.product.service.dao;
import com.yd.product.service.model.RelAdditionalProductDept;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 附加产品-部门关系表(多对多关系)(原有表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface RelAdditionalProductDeptMapper extends BaseMapper<RelAdditionalProductDept> {
}
package com.yd.product.service.dao;
import com.yd.product.service.model.RelAdditionalProduct;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 产品-附加产品关系表(原有表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface RelAdditionalProductMapper extends BaseMapper<RelAdditionalProduct> {
}
package com.yd.product.service.dao;
import com.yd.product.service.model.RelProductAnnouncement;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 产品和公告比例关系表(原有表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface RelProductAnnouncementMapper extends BaseMapper<RelProductAnnouncement> {
}
package com.yd.product.service.dao;
import com.yd.product.service.model.RelProductDept;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 产品-部门关系表(多对多关系)(原有表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface RelProductDeptMapper extends BaseMapper<RelProductDept> {
}
package com.yd.product.service.dao;
import com.yd.product.service.model.RelProjectProductLaunch;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 项目-产品上架信息关系表(新表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface RelProjectProductLaunchMapper extends BaseMapper<RelProjectProductLaunch> {
}
package com.yd.product.service.dao;
import com.yd.product.service.model.RelProjectProduct;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 项目-产品关系表(原有表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface RelProjectProductMapper extends BaseMapper<RelProjectProduct> {
}
package com.yd.product.service.dao;
import com.yd.product.service.model.RelTenantProductLaunch;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 租户-产品上架信息关系表(新表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface RelTenantProductLaunchMapper extends BaseMapper<RelTenantProductLaunch> {
}
package com.yd.product.service.dao;
import com.yd.product.service.model.RelTenantProduct;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 租户-产品关系表(原有表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface RelTenantProductMapper extends BaseMapper<RelTenantProduct> {
}
package com.yd.product.service.dao;
import com.yd.product.service.model.SpeciesPrice;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 上架产品规格价格维护表(新表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface SpeciesPriceMapper extends BaseMapper<SpeciesPrice> {
}
package com.yd.product.service.dao;
import com.yd.product.service.model.SpeciesSetting;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 上架产品规格配置表(新表) Mapper 接口
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface SpeciesSettingMapper extends BaseMapper<SpeciesSetting> {
}
package com.yd.product.service.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AttributeSettingDto {
/**
* 产品上架信息表唯一业务ID
*/
private String productLaunchBizId;
}
package com.yd.product.service.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductDto {
/**
* 产品唯一业务ID
*/
private String productBizId;
/**
* 产品名称
*/
private String productName;
@Builder.Default
private Boolean isExcludeMy = false;
}
package com.yd.product.service.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SpeciesPriceDto {
/**
* 产品上架信息表唯一业务ID(冗余)
*/
private String productLaunchBizId;
}
package com.yd.product.service.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SpeciesSettingDto {
/**
* 产品上架信息表唯一业务ID(冗余)
*/
private String productLaunchBizId;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 附加产品基础表(原有表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("additional_product")
public class AdditionalProduct implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 附加产品唯一业务ID
*/
@TableField("additional_product_biz_id")
private String additionalProductBizId;
/**
* 附加产品名称
*/
@TableField("product_name")
private String productName;
/**
* 附加产品代码
*/
@TableField("product_code")
private String productCode;
/**
* 附加产品状态:0=下架,1=在售 2=预售 3=停售
*/
@TableField("product_status")
private Integer productStatus;
/**
* 支持货币
*/
@TableField("currency")
private String currency;
/**
* 销售方式
*/
@TableField("sales_method")
private String salesMethod;
/**
* 开售时间
*/
@TableField("sale_start_time")
private LocalDateTime saleStartTime;
/**
* 停售时间
*/
@TableField("discontinuation_time")
private LocalDateTime discontinuationTime;
/**
* 作用域(1:系统级(全局) 2:租户级 3:项目级)
*/
@TableField("scope")
private Integer scope;
/**
* 所属租户ID(业务id)
*/
@TableField("tenant_biz_id")
private String tenantBizId;
/**
* 所属项目ID(业务id)
*/
@TableField("project_biz_id")
private String projectBizId;
/**
* 附加产品图片
*/
@TableField("picture")
private String picture;
/**
* 附加产品所属公司的所在地
*/
@TableField("location")
private String location;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 上架产品属性(参数)配置表(新表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("attribute_setting")
public class AttributeSetting implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 产品属性(参数)配置表唯一业务ID
*/
@TableField("attribute_setting_biz_id")
private String attributeSettingBizId;
/**
* 产品上架信息表唯一业务ID
*/
@TableField("product_launch_biz_id")
private String productLaunchBizId;
/**
* 字段表唯一业务ID
*/
@TableField("field_biz_id")
private String fieldBizId;
/**
* 字段值表唯一业务ID
*/
@TableField("field_value_biz_id")
private String fieldValueBizId;
/**
* 字段名称
*/
@TableField("name")
private String name;
/**
* 字段值
*/
@TableField("value")
private String value;
/**
* 是否自定义 0-否 1-是
*/
@TableField("is_customize")
private String isCustomize;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 预计来佣比率表(新表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("expected_commission_ratio")
public class ExpectedCommissionRatio implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 预计来佣比率表唯一业务ID
*/
@TableField("expected_commission_ratio_biz_id")
private String expectedCommissionRatioBizId;
/**
* 产品上架信息表唯一业务ID
*/
@TableField("product_launch_biz_id")
private String productLaunchBizId;
/**
* 产品唯一业务ID
*/
@TableField("product_biz_id")
private String productBizId;
/**
* 规格表唯一业务ID(冗余)
*/
@TableField("species_biz_id")
private String speciesBizId;
/**
* 保障年限
*/
@TableField("warranty_period")
private String warrantyPeriod;
/**
* 缴费年限(起)
*/
@TableField("start_period")
private String startPeriod;
/**
* 缴费年限(止)
*/
@TableField("end_period")
private String endPeriod;
/**
* 标保折算比例
*/
@TableField("discount_ratio")
private BigDecimal discountRatio;
/**
* 计算基数(保费/保费*折算比例)
*/
@TableField("cardinal_number")
private BigDecimal cardinalNumber;
/**W
* 来佣类型
*/
@TableField("commission_type")
private String commissionType;
/**
* 来佣比例
*/
@TableField("commission_ratio")
private BigDecimal commissionRatio;
/**
* 出单渠道
*/
@TableField("channel")
private String channel;
/**
* 有效开始时间
*/
@TableField("effective_start")
private LocalDateTime effectiveStart;
/**
* 有效结束时间
*/
@TableField("effective_end")
private LocalDateTime effectiveEnd;
/**
* 来佣日规则
*/
@TableField("rules")
private String rules;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 文件表(新表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("file")
public class File implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 对象类型
*/
@TableField("object_type")
private String objectType;
/**
* 对象所属表名(产品表等)
*/
@TableField("object_table_name")
private String objectTableName;
/**
* 对象名
*/
@TableField("object_name")
private String objectName;
/**
* 对象业务ID
*/
@TableField("object_biz_id")
private String objectBizId;
/**
* 文件类型
*/
@TableField("type")
private String type;
/**
* 文件名称
*/
@TableField("name")
private String name;
/**
* 文件URL
*/
@TableField("url")
private String url;
/**
* 状态 0-隐藏 1-展示
*/
@TableField("status")
private Integer status;
/**
* 排序
*/
@TableField("sort")
private Integer sort;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 产品基础表
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("product")
public class Product implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 产品唯一业务ID
*/
@TableField("product_biz_id")
private String productBizId;
/**
* 产品名称
*/
@TableField("product_name")
private String productName;
/**
* 产品代码
*/
@TableField("product_code")
private String productCode;
/**
* 状态:0=下架,1=在售 2=预售 3=停售
*/
@TableField("status")
private Integer status;
/**
* 支持货币
*/
@TableField("currency")
private String currency;
/**
* 销售方式
*/
@TableField("sales_method")
private String salesMethod;
/**
* 开售时间
*/
@TableField("sale_start_time")
private LocalDateTime saleStartTime;
/**
* 停售时间
*/
@TableField("discontinuation_time")
private LocalDateTime discontinuationTime;
/**
* 作用域(1:系统级(全局) 2:租户级 3:项目级)
*/
@TableField("scope")
private Integer scope;
/**
* 所属租户ID(业务id)
*/
@TableField("tenant_biz_id")
private String tenantBizId;
/**
* 所属项目ID(业务id)
*/
@TableField("project_biz_id")
private String projectBizId;
/**
* 产品图片
*/
@TableField("picture")
private String picture;
/**
* 产品所属公司的所在地
*/
@TableField("location")
private String location;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 产品上架信息表(新表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("product_launch")
public class ProductLaunch implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 产品上架信息表唯一业务ID
*/
@TableField("product_launch_biz_id")
private String productLaunchBizId;
/**
* 关联产品表唯一业务ID(上架的产品)
*/
@TableField("product_biz_id")
private String productBizId;
/**
* 标题
*/
@TableField("title")
private String title;
/**
* 短标题
*/
@TableField("short_title")
private String shortTitle;
/**
* 主图url(多个url用分号分隔)
*/
@TableField("main_urls")
private String mainUrls;
/**
* 详情图(多个url用分号分隔)
*/
@TableField("detail_urls")
private String detailUrls;
/**
* 详情描述
*/
@TableField("detail_description")
private String detailDescription;
/**
* 作用域(1:系统级(全局) 2:租户级 3:项目级)
*/
@TableField("scope")
private Integer scope;
/**
* 所属租户ID(业务id)
*/
@TableField("tenant_biz_id")
private String tenantBizId;
/**
* 所属项目ID(业务id)
*/
@TableField("project_biz_id")
private String projectBizId;
/**
* 状态:0-待审核 1-审核成功 2-审核失败 3-在售 4-停售 5-下架 6-预售
*/
@TableField("status")
private Integer status;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 产品-附加产品关系表(原有表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("rel_additional_product")
public class RelAdditionalProduct implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 产品唯一业务ID
*/
@TableField("product_biz_id")
private String productBizId;
/**
* 附加产品唯一业务ID
*/
@TableField("additional_product_biz_id")
private String additionalProductBizId;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 附加产品-部门关系表(多对多关系)(原有表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("rel_additional_product_dept")
public class RelAdditionalProductDept implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 附加产品ID(业务id)
*/
@TableField("additional_product_biz_id")
private String additionalProductBizId;
/**
* 部门唯一标识(业务ID)
*/
@TableField("dept_biz_id")
private String deptBizId;
/**
* 类型(1-所属公司 2-出单公司)
*/
@TableField("type")
private Integer type;
/**
* 状态(0:禁用 1:启用)
*/
@TableField("status")
private Integer status;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 产品和公告比例关系表(原有表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("rel_product_announcement")
public class RelProductAnnouncement implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 产品唯一业务ID
*/
@TableField("product_biz_id")
private String productBizId;
/**
* 产品代码
*/
@TableField("product_code")
private String productCode;
/**
* 供款年期(产品有5年期的有10年期等)
*/
@TableField("term")
private Integer term;
/**
* 期数(数字代表第几年)
*/
@TableField("issue_number")
private Integer issueNumber;
/**
* 公告比例
*/
@TableField("announcement_ratio")
private BigDecimal announcementRatio;
/**
* 有效开始时间
*/
@TableField("effective_start")
private LocalDateTime effectiveStart;
/**
* 有效结束时间(不在这个时间区间内,公告比例按照announcement_ratio算,在这个区间内公告比例按照有效期内公告比例算)
*/
@TableField("effective_end")
private LocalDateTime effectiveEnd;
/**
* 有效期内公告比例
*/
@TableField("ratio")
private BigDecimal ratio;
/**
* 状态(0:停用 1:启用)
*/
@TableField("status")
private Integer status;
/**
* 所属租户唯一业务ID(冗余)
*/
@TableField("tenant_biz_id")
private String tenantBizId;
/**
* 所属项目唯一业务ID(冗余)
*/
@TableField("project_biz_id")
private String projectBizId;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 产品-部门关系表(多对多关系)(原有表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("rel_product_dept")
public class RelProductDept implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 产品ID(业务id)
*/
@TableField("product_biz_id")
private String productBizId;
/**
* 部门唯一标识(业务ID)
*/
@TableField("dept_biz_id")
private String deptBizId;
/**
* 类型(1-所属公司 2-出单公司)
*/
@TableField("type")
private Integer type;
/**
* 状态(0:禁用 1:启用)
*/
@TableField("status")
private Integer status;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 项目-产品关系表(原有表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("rel_project_product")
public class RelProjectProduct implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 租户ID(业务id)
*/
@TableField("tenant_biz_id")
private String tenantBizId;
/**
* 项目ID(业务id)
*/
@TableField("project_biz_id")
private String projectBizId;
/**
* 产品唯一业务ID
*/
@TableField("product_biz_id")
private String productBizId;
/**
* 状态(0:禁用 1:启用)
*/
@TableField("status")
private Integer status;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 项目-产品上架信息关系表(新表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("rel_project_product_launch")
public class RelProjectProductLaunch implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 租户ID(业务id)
*/
@TableField("tenant_biz_id")
private String tenantBizId;
/**
* 项目ID(业务id)
*/
@TableField("project_biz_id")
private String projectBizId;
/**
* 产品上架信息表唯一业务ID
*/
@TableField("product_launch_biz_id")
private String productLaunchBizId;
/**
* 状态(0:禁用 1:启用)
*/
@TableField("status")
private Integer status;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 租户-产品关系表(原有表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("rel_tenant_product")
public class RelTenantProduct implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 租户ID(业务id)
*/
@TableField("tenant_biz_id")
private String tenantBizId;
/**
* 产品唯一业务ID
*/
@TableField("product_biz_id")
private String productBizId;
/**
* 状态(0:禁用 1:启用)
*/
@TableField("status")
private Integer status;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 租户-产品上架信息关系表(新表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("rel_tenant_product_launch")
public class RelTenantProductLaunch implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 租户ID(业务id)
*/
@TableField("tenant_biz_id")
private String tenantBizId;
/**
* 产品上架信息表唯一业务ID
*/
@TableField("product_launch_biz_id")
private String productLaunchBizId;
/**
* 状态(0:禁用 1:启用)
*/
@TableField("status")
private Integer status;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 上架产品规格价格维护表(新表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("species_price")
public class SpeciesPrice implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 规格价格维护表唯一业务ID
*/
@TableField("species_price_biz_id")
private String speciesPriceBizId;
/**
* 产品上架信息表唯一业务ID(冗余)
*/
@TableField("product_launch_biz_id")
private String productLaunchBizId;
/**
* 上架产品规格配置表信息JSON串
*/
@TableField("species_json")
private String speciesJson;
/**
* 价格
*/
@TableField("price")
private BigDecimal price;
/**
* 库存
*/
@TableField("inventory")
private BigDecimal inventory;
/**
* 配图url
*/
@TableField("illustration_url")
private String illustrationUrl;
/**
* 状态:0=下架,1=上架
*/
@TableField("status")
private Integer status;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 上架产品规格配置表(新表)
* </p>
*
* @author zxm
* @since 2025-11-20
*/
@Getter
@Setter
@TableName("species_setting")
public class SpeciesSetting implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 产品上架规格配置表唯一业务ID
*/
@TableField("species_setting_biz_id")
private String speciesSettingBizId;
/**
* 产品上架信息表唯一业务ID(冗余)
*/
@TableField("product_launch_biz_id")
private String productLaunchBizId;
/**
* 规格表唯一业务ID(冗余)
*/
@TableField("species_biz_id")
private String speciesBizId;
/**
* 规格类型表唯一业务ID
*/
@TableField("species_type_biz_id")
private String speciesTypeBizId;
/**
* 规格类型编码
*/
@TableField("type_code")
private String typeCode;
/**
* 规格类型名称
*/
@TableField("type_name")
private String typeName;
/**
* 规格值
*/
@TableField("value")
private String value;
/**
* 是否配图 0-否 1-是
*/
@TableField("is_illustration")
private String isIllustration;
/**
* 配图url
*/
@TableField("illustration_url")
private String illustrationUrl;
/**
* 是否自定义 0-否 1-是
*/
@TableField("is_customize")
private String isCustomize;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.product.service.service;
import com.yd.product.service.model.AdditionalProduct;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 附加产品基础表(原有表) 服务类
* </p>
*
* @author zxm
* @since 2025-11-20
*/
public interface IAdditionalProductService extends IService<AdditionalProduct> {
}
This diff is collapsed. Click to expand it.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment