diff --git a/pom.xml b/pom.xml
index 900b61b..227fb74 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,6 +52,8 @@
1.2.83
7.0.0
+
+ 7.10.2
3.2.2
@@ -338,7 +340,16 @@
fastjson
${fastjson.version}
-
+
+ org.elasticsearch
+ elasticsearch
+ ${elasticsearch.version}
+
+
+ org.elasticsearch.client
+ elasticsearch-rest-high-level-client
+ ${elasticsearch.version}
+
org.dromara
ruoyi-system
@@ -369,7 +380,12 @@
ruoyi-workflow
${revision}
-
+
+
+ org.dromara
+ zaojia-productManagement
+ ${revision}
+
@@ -378,6 +394,7 @@
ruoyi-common
ruoyi-extend
ruoyi-modules
+ zaojiaManagement
pom
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 610e9d7..4b9702f 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -97,6 +97,10 @@
test
+
+ org.dromara
+ zaojia-productManagement
+
diff --git a/ruoyi-common/guoyan-common-elasticsearch/pom.xml b/ruoyi-common/guoyan-common-elasticsearch/pom.xml
new file mode 100644
index 0000000..c530c80
--- /dev/null
+++ b/ruoyi-common/guoyan-common-elasticsearch/pom.xml
@@ -0,0 +1,32 @@
+
+
+
+
+ org.dromara
+ ruoyi-common
+ ${revision}
+
+ 4.0.0
+
+ guoyan-common-elasticsearch
+
+ guoyan-common-elasticsearch elasticsearch模块
+
+
+
+ org.elasticsearch
+ elasticsearch
+
+
+ org.elasticsearch.client
+ elasticsearch-rest-high-level-client
+
+
+
+ org.dromara
+ ruoyi-common-json
+
+
+
diff --git a/ruoyi-common/guoyan-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/ElasticSearchConfig.java b/ruoyi-common/guoyan-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/ElasticSearchConfig.java
new file mode 100644
index 0000000..9d46dc4
--- /dev/null
+++ b/ruoyi-common/guoyan-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/ElasticSearchConfig.java
@@ -0,0 +1,209 @@
+package org.dromara.common.elasticsearch.config;
+
+import org.apache.http.HttpHost;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.elasticsearch.client.RestClient;
+import org.elasticsearch.client.RestClientBuilder;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * ElasticSearch 配置
+ *
+ * @author wqliu
+ * @date 2024-02-21
+ */
+@Configuration
+
+public class ElasticSearchConfig {
+ @Value("${elasticsearch.uris}")
+ private String hosts;
+
+ @Value("${elasticsearch.username}")
+ private String userName;
+
+ @Value("${elasticsearch.password}")
+ private String password;
+
+ /**
+ * es 请求方式
+ */
+ @Value("${elasticsearch.scheme}")
+ private String scheme;
+ /**
+ * es 连接超时时间
+ */
+ @Value("${elasticsearch.connectTimeOut}")
+
+ private int connectTimeOut;
+ /**
+ * es socket 连接超时时间
+ */
+ @Value("${elasticsearch.socketTimeOut}")
+
+ private int socketTimeOut;
+ /**
+ * es 请求超时时间
+ */
+ @Value("${elasticsearch.connectionRequestTimeOut}")
+ private int connectionRequestTimeOut;
+ /**
+ * es 最大连接数
+ */
+ @Value("${elasticsearch.maxConnectNum}")
+ private int maxConnectNum;
+ /**
+ * es 每个路由的最大连接数
+ */
+ @Value("${elasticsearch.maxConnectNumPerRoute}")
+ private int maxConnectNumPerRoute;
+
+
+ /**
+ * 如果@Bean没有指定bean的名称,那么方法名就是bean的名称
+ */
+ @Bean
+ public RestHighLevelClient restHighLevelClient() {
+ // 构建连接对象
+ RestClientBuilder builder = RestClient.builder(getEsHost());
+
+ // 连接延时配置
+ builder.setRequestConfigCallback(requestConfigBuilder -> {
+ requestConfigBuilder.setConnectTimeout(connectTimeOut);
+ requestConfigBuilder.setSocketTimeout(socketTimeOut);
+ requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut);
+ return requestConfigBuilder;
+ });
+
+ // 连接数配置
+ builder.setHttpClientConfigCallback(httpClientBuilder -> {
+ httpClientBuilder.setMaxConnTotal(maxConnectNum);
+ httpClientBuilder.setMaxConnPerRoute(maxConnectNumPerRoute);
+ httpClientBuilder.setDefaultCredentialsProvider(getCredentialsProvider());
+
+ return httpClientBuilder;
+ });
+ return new RestHighLevelClient(builder);
+ }
+
+ private HttpHost[] getEsHost() {
+ // 拆分地址(es为多节点时,不同host以逗号间隔)
+ List hostLists = new ArrayList<>();
+ String[] hostList = hosts.split(",");
+ for (String addr : hostList) {
+ String host = addr.split(":")[0];
+ String port = addr.split(":")[1];
+ hostLists.add(new HttpHost(host, Integer.parseInt(port), scheme));
+ }
+ // 转换成 HttpHost 数组
+ return hostLists.toArray(new HttpHost[]{});
+ }
+
+ private CredentialsProvider getCredentialsProvider() {
+ // 设置用户名、密码
+ CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
+ credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
+ return credentialsProvider;
+ }
+
+ /**
+ * 同步方式
+ *
+ * @return
+ */
+// @Bean
+// public ElasticsearchClient elasticsearchClient() throws Exception {
+//// HttpHost[] httpHosts = toHttpHost();
+// final CredentialsProvider credentialsProvider =
+// new BasicCredentialsProvider();
+// credentialsProvider.setCredentials(AuthScope.ANY,
+// new UsernamePasswordCredentials(userName, passWord));
+//
+// ClassPathResource resource = new ClassPathResource("http_ca.crt");
+// CertificateFactory factory =
+// CertificateFactory.getInstance("X.509");
+// Certificate trustedCa;
+// try (InputStream is = resource.getInputStream()) {
+// trustedCa = factory.generateCertificate(is);
+// }
+// KeyStore trustStore = KeyStore.getInstance("pkcs12");
+// trustStore.load(null, null);
+// trustStore.setCertificateEntry("ca", trustedCa);
+// SSLContextBuilder sslContextBuilder = SSLContexts.custom()
+// .loadTrustMaterial(trustStore, null);
+// final SSLContext sslContext = sslContextBuilder.build();
+//
+// RestClientBuilder builder = RestClient.builder(
+// new HttpHost("localhost", 9200, "https"))
+// .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
+// @Override
+// public HttpAsyncClientBuilder customizeHttpClient(
+// HttpAsyncClientBuilder httpClientBuilder) {
+// return httpClientBuilder.setSSLContext(sslContext)
+// .setDefaultCredentialsProvider(credentialsProvider);
+// }
+// });
+//
+// RestClient restClient = builder.build();
+//
+// // Create the transport with a Jackson mapper
+// ElasticsearchTransport transport = new RestClientTransport(
+// restClient, new JacksonJsonpMapper());
+//
+// return new ElasticsearchClient(transport);
+//// asyncClient = new ElasticsearchAsyncClient(transport);
+//
+// }
+
+// /**
+// * 解析配置的字符串hosts,转为HttpHost对象数组
+// *
+// * @return
+// */
+// private HttpHost[] toHttpHost() {
+// if (!StringUtils.hasLength(hosts)) {
+// throw new RuntimeException("invalid elasticsearch configuration. elasticsearch.hosts不能为空!");
+// }
+// // 多个IP逗号隔开
+// String[] hostArray = hosts.split(",");
+// HttpHost[] httpHosts = new HttpHost[hostArray.length];
+// HttpHost httpHost;
+// for (int i = 0; i < hostArray.length; i++) {
+// String[] strings = hostArray[i].split(":");
+// httpHost = new HttpHost(strings[0], Integer.parseInt(strings[1]), "https");
+// httpHosts[i] = httpHost;
+// }
+// return httpHosts;
+// }
+
+// @Bean
+// ElasticsearchConverter elasticsearchConverter(SimpleElasticsearchMappingContext mappingContext) {
+// DefaultConversionService defaultConversionService = new DefaultConversionService();
+// defaultConversionService.addConverter(LongToLocalDateTimeConverter.INSTANCE);
+// return new MappingElasticsearchConverter(mappingContext, defaultConversionService);
+// }
+//
+// @ReadingConverter
+// static enum LongToLocalDateTimeConverter implements Converter {
+// /**
+// * 单例模式
+// */
+// INSTANCE;
+//
+// private LongToLocalDateTimeConverter() {
+// }
+//
+// @Override
+// public LocalDateTime convert(Long source) {
+// return Instant.ofEpochMilli(source).atZone(ZoneId.systemDefault()).toLocalDateTime();
+// }
+// }
+}
diff --git a/ruoyi-common/guoyan-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/entity/SupplierProductsDTO.java b/ruoyi-common/guoyan-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/entity/SupplierProductsDTO.java
new file mode 100644
index 0000000..79c391e
--- /dev/null
+++ b/ruoyi-common/guoyan-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/entity/SupplierProductsDTO.java
@@ -0,0 +1,147 @@
+package org.dromara.common.elasticsearch.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 实体类
+ *
+ * @author ZHB
+ * @date 2024-05-08
+ *
+ */
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class SupplierProductsDTO {
+
+ /**
+ * 供应商id
+ */
+ @JsonProperty(value ="supplier_information_id")
+ private String supplierInformationId;
+
+ /**
+ * 厂商产品型号id
+ */
+ @JsonProperty(value ="model_id")
+ private String modelId;
+
+ /**
+ * 个人产品规格
+ */
+ @JsonProperty(value ="product_specifications")
+ private String productSpecifications;
+
+ /**
+ * 产品名称
+ */
+ @JsonProperty(value ="product_name")
+ private String productName;
+
+ /**
+ * 产品标识(型号)
+ */
+ @JsonProperty(value ="product_identity")
+ private String productIdentity;
+
+ /**
+ * 产品价格
+ */
+ @JsonProperty(value ="product_price")
+ private BigDecimal productPrice;
+
+ /**
+ * 信息来源
+ */
+ @JsonProperty(value ="source_information")
+ private String sourceInformation;
+
+ /**
+ * 备注
+ */
+ @JsonProperty(value ="remarks")
+ private String remarks;
+ /**
+ * 产品图片
+ */
+ @JsonProperty(value ="image")
+ private String image;
+
+ /**
+ * 产品品牌
+ */
+ @JsonProperty(value ="brand")
+ private String brand;
+
+ /**
+ * 产品单位*/
+ @JsonProperty(value ="unit")
+ private String unit;
+
+ /**
+ * 除税价格
+ */
+ @JsonProperty(value ="ex_tax_price")
+ private BigDecimal exTaxPrice;
+
+ /**
+ * 税率
+ */
+ @JsonProperty(value ="taxrate")
+ private BigDecimal taxrate;
+ /**
+ * 分类id
+ */
+ @JsonProperty(value ="category_id")
+ private String categoryId;
+
+ /**
+ * 逻辑删除
+ */
+ @JsonProperty(value ="delete_flag")
+ protected String deleteFlag;
+ /**
+ * 创建人标识
+ */
+
+ @JsonProperty(value ="create_id")
+ private String createId;
+
+ /**
+ * 创建时间
+ */
+// @JsonProperty(value ="create_time")
+// @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
+// @DateTimeFormat(pattern = "yyyy-MM-dd")
+// private Date createTime;
+
+ /**
+ * 更新人标识
+ */
+
+ @JsonProperty(value ="update_id")
+ private String updateId;
+
+ /**
+ * 更新时间
+ */
+// @JsonProperty(value ="update_time")
+// @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
+// @DateTimeFormat(pattern = "yyyy-MM-dd")
+// private Date updateTime;
+
+ /**
+ * 版本
+ */
+
+ @JsonProperty(value ="version")
+ private Integer version;
+ /********非库表存储属性*****/
+}
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 45493d3..facbb36 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -33,6 +33,7 @@
ruoyi-common-encrypt
ruoyi-common-tenant
ruoyi-common-websocket
+ guoyan-common-elasticsearch
ruoyi-common
diff --git a/ruoyi-common/ruoyi-common-bom/pom.xml b/ruoyi-common/ruoyi-common-bom/pom.xml
index d546275..cb0bf07 100644
--- a/ruoyi-common/ruoyi-common-bom/pom.xml
+++ b/ruoyi-common/ruoyi-common-bom/pom.xml
@@ -171,7 +171,12 @@
ruoyi-common-websocket
${revision}
-
+
+
+ org.dromara
+ guoyan-common-elasticsearch
+ ${revision}
+
diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/EasyExcelUtils.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/EasyExcelUtils.java
new file mode 100644
index 0000000..dccccf7
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/EasyExcelUtils.java
@@ -0,0 +1,231 @@
+package org.dromara.common.excel.utils;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import org.springframework.util.CollectionUtils;
+
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * EasyExcel工具类
+ */
+public class EasyExcelUtils {
+
+
+ /**
+ * 注入的具有排序功能的handle
+ */
+// private static final SortRowWriteHandler SORT_ROW_WRITE_HANDLER = new SortRowWriteHandler();
+
+ /**
+ * 导出excel-按指定顺序
+ *
+ * @param 类(必须是小写,并遵守阿里开发规范)
+ * @param list 列表数据
+ * @param fileName 文件名称
+ * @param useDefaultStyle 是否使用默认样式
+ * @param response 响应
+ */
+ public static Map exportExcelInclude(List list, String fileName,Boolean useDefaultStyle, HttpServletResponse response) throws IOException {
+ Map resultMap = new HashMap<>();
+ if (list.size() == 0) {
+ resultMap.put("msg", "数据长度为空");
+ resultMap.put("result", -1);
+ return resultMap;
+ }
+
+ Class> clazz = list.get(0).getClass();
+
+ /*定义编码,格式*/
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("utf-8");
+ String exportFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
+ response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + exportFileName + ".xlsx");
+ response.setHeader("filename", exportFileName + ".xlsx");
+ response.setHeader("Access-Control-Expose-Headers", "filename");
+ /**
+ * .head(head(headNameList))
+ * 改行代码不可以用ExcelWriterSheetBuilder类型的变量单独写,否则会包错:表头长度与字段列表长度不符
+ */
+ /*导出表格*/
+ ExcelWriterSheetBuilder excelWriterSheetBuilder = EasyExcel.write(response.getOutputStream(), clazz)
+ .useDefaultStyle(useDefaultStyle)
+ .sheet(fileName);
+ excelWriterSheetBuilder.doWrite(list);
+
+ resultMap.put("msg", "excel export success");
+ resultMap.put("result", 0);
+ return resultMap;
+ }
+
+
+ /**
+ * 导出excel-默认顺序
+ *
+ * @param 类(必须是小写,并遵守阿里开发规范)
+ * @param list 列表数据
+ * @param fileName 文件名称
+ * @param useDefaultStyle 是否使用默认样式
+ * @param response 响应
+ * @param headNameList
+ * @param columnList 设置列字段(必须是小写)
+ */
+ public static Map exportExcelInclude(List list, String fileName,Boolean useDefaultStyle, HttpServletResponse response, List columnList, List headNameList) throws IOException {
+ Map resultMap = new HashMap<>();
+ if (list.size() == 0) {
+ resultMap.put("msg", "数据长度为空");
+ resultMap.put("result", -1);
+ return resultMap;
+ }
+
+ if (CollectionUtils.isEmpty(headNameList)) {
+ /*设置表头*/
+ resultMap.put("msg", "表头长度为空");
+ resultMap.put("result", -2);
+ return resultMap;
+ }
+
+ if (CollectionUtils.isEmpty(columnList)) {
+ /*设置列字段*/
+ resultMap.put("msg", "列字段长度为空");
+ resultMap.put("result", -3);
+ return resultMap;
+ }
+
+ Class> clazz = list.get(0).getClass();
+
+ /*定义编码,格式*/
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("utf-8");
+ String exportFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
+ response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + exportFileName + ".xlsx");
+ response.setHeader("filename", exportFileName + ".xlsx");
+ response.setHeader("Access-Control-Expose-Headers", "filename");
+ /**
+ * .head(head(headNameList))
+ * 改行代码不可以用ExcelWriterSheetBuilder类型的变量单独写,否则会包错:表头长度与字段列表长度不符
+ */
+ /*导出表格*/
+ ExcelWriterSheetBuilder excelWriterSheetBuilder = EasyExcel.write(response.getOutputStream(), clazz)
+ .head(head(headNameList))
+ /*设置列字段(会按顺序)*/
+ .includeColumnFiledNames(columnList)
+ /*注入的具有排序功能的handle*/
+// .registerWriteHandler(SORT_ROW_WRITE_HANDLER)
+ .useDefaultStyle(useDefaultStyle)
+ .sheet(fileName);
+ excelWriterSheetBuilder.doWrite(list);
+
+ resultMap.put("msg", "excel export success");
+ resultMap.put("result", 0);
+ return resultMap;
+ }
+
+
+ /**
+ * 支持动态头,行列合并导出
+ *
+ * @param response web响应
+ * @param headList 动态头
+ * @param dataList 数据列表
+ * @param columnMergeHandler 注入列合并
+ * @param rowMergeHandler 注入行合并
+ * @throws IOException
+ */
+ public static Map writeDynamicExcel(HttpServletResponse response, @NotEmpty List> headList, @NotEmpty List> dataList, @NotNull ExcelColumnMergeHandler columnMergeHandler, @NotNull ExcelRowMergeHandler rowMergeHandler) throws IOException {
+ Map resultMap = new HashMap<>();
+ if (dataList.size() == 0) {
+ resultMap.put("msg", "数据长度为空");
+ resultMap.put("result", -1);
+ return resultMap;
+ }
+
+ if (CollectionUtils.isEmpty(headList)) {
+ /*设置表头*/
+ resultMap.put("msg", "表头长度为空");
+ resultMap.put("result", -2);
+ return resultMap;
+ }
+
+ if (columnMergeHandler == null || rowMergeHandler == null) {
+ /*设置列字段*/
+ resultMap.put("msg", "行列处理器为空");
+ resultMap.put("result", -3);
+ return resultMap;
+ }
+
+ EasyExcel.write(response.getOutputStream())
+ // 设置动态头
+ .head(headList)
+ .sheet("模板")
+ /*注入列合并*/
+ .registerWriteHandler(columnMergeHandler)
+ /*注入行合并*/
+ .registerWriteHandler(rowMergeHandler)
+ /*传需要写入的数据,类型List>*/
+ .doWrite(dataList);
+
+ resultMap.put("msg", "excel export success");
+ resultMap.put("result", 0);
+ return resultMap;
+ }
+
+
+ /**
+ * 支持动态头导出
+ *
+ * @param response web响应
+ * @param headList 动态头
+ * @param dataList 数据列表
+ * @throws IOException
+ */
+ public static void writeDynamicExcel(HttpServletResponse response,List> headList, List> dataList) throws IOException {
+ EasyExcel.write(response.getOutputStream())
+ // 设置动态头
+ .head(headList)
+ .sheet("模板")
+ /*传需要写入的数据,类型List>*/
+ .doWrite(dataList);
+ }
+
+
+ /**
+ * 设置Excel头
+ *
+ * @param headList Excel头信息
+ * @return
+ */
+ public static List> head(List headList) {
+ List> list = new ArrayList<>();
+ for (String value : headList) {
+ List head = new ArrayList<>();
+ head.add(value);
+ list.add(head);
+ }
+ return list;
+ }
+
+ /**
+ * Excel头对应的字段转换小写
+ *
+ * @param ColumnListTemp Excel字段
+ * @return
+ */
+ public static List castLowerCase(List ColumnListTemp) {
+ List ColumnList = new ArrayList<>();
+ for (String name : ColumnListTemp) {
+ ColumnList.add(StrUtil.lowerFirst(name));
+ }
+ return ColumnList;
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelColumnMergeHandler.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelColumnMergeHandler.java
new file mode 100644
index 0000000..f2b6b8b
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelColumnMergeHandler.java
@@ -0,0 +1,108 @@
+package org.dromara.common.excel.utils;
+
+import com.alibaba.excel.metadata.Head;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.write.handler.CellWriteHandler;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
+import lombok.Data;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.util.CellRangeAddress;
+
+import java.util.List;
+
+/***
+ * 列合并处理器
+ *
+ */
+@Data
+public class ExcelColumnMergeHandler implements CellWriteHandler {
+ /**
+ * 合并字段的下标,如new int[]{0,1,2,3,4,10},0-4合并,10合并
+ */
+ private int[] mergeColumnIndex;
+ /**
+ * 从第几行开始合并,如果表头占两行,这个数字就是2
+ */
+ private int mergeRowIndex;
+
+ public ExcelColumnMergeHandler() {
+ }
+
+ public ExcelColumnMergeHandler(int mergeRowIndex, int[] mergeColumnIndex) {
+ this.mergeRowIndex = mergeRowIndex;
+ this.mergeColumnIndex = mergeColumnIndex;
+ }
+
+ @Override
+ public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row,
+ Head head, Integer integer, Integer integer1, Boolean aBoolean) {
+
+ }
+
+ @Override
+ public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell,
+ Head head, Integer integer, Boolean aBoolean) {
+
+ }
+
+ @Override
+ public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
+ WriteCellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) {
+
+ }
+
+ @Override
+ public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
+ List> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
+ //当前行
+ int curRowIndex = cell.getRowIndex();
+ //当前列
+ int curColIndex = cell.getColumnIndex();
+
+ if (curRowIndex > mergeRowIndex) {
+ for (int i = 0; i < mergeColumnIndex.length; i++) {
+ if (curColIndex == mergeColumnIndex[i]) {
+ mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex);
+ break;
+ }
+ }
+ }
+ }
+
+ private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex) {
+ //获取当前行的当前列的数据和上一行的当前列列数据,通过上一行数据是否相同进行合并
+ Object curData = cell.getCellType() == CellType.STRING ? cell.getStringCellValue() :
+ cell.getNumericCellValue();
+ Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex);
+ Object preData = preCell.getCellType() == CellType.STRING ? preCell.getStringCellValue() :
+ preCell.getNumericCellValue();
+ // 比较当前行的第一列的单元格与上一行是否相同,相同合并当前单元格与上一行
+ //
+ if (curData.equals(preData)) {
+ Sheet sheet = writeSheetHolder.getSheet();
+ List mergeRegions = sheet.getMergedRegions();
+ boolean isMerged = false;
+ for (int i = 0; i < mergeRegions.size() && !isMerged; i++) {
+ CellRangeAddress cellRangeAddr = mergeRegions.get(i);
+ // 若上一个单元格已经被合并,则先移出原有的合并单元,再重新添加合并单元
+ if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) {
+ sheet.removeMergedRegion(i);
+ cellRangeAddr.setLastRow(curRowIndex);
+ sheet.addMergedRegion(cellRangeAddr);
+ isMerged = true;
+ }
+ }
+ // 若上一个单元格未被合并,则新增合并单元
+ if (!isMerged) {
+ CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex,
+ curColIndex);
+ sheet.addMergedRegion(cellRangeAddress);
+ }
+ }
+ }
+}
+
diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelRowMergeHandler.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelRowMergeHandler.java
new file mode 100644
index 0000000..01ad49c
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelRowMergeHandler.java
@@ -0,0 +1,87 @@
+package org.dromara.common.excel.utils;
+
+import com.alibaba.excel.metadata.Head;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.write.handler.CellWriteHandler;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.util.CellRangeAddress;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 行合并处理器
+ *
+ */
+public class ExcelRowMergeHandler implements CellWriteHandler {
+ private static final String KEY ="%s-%s";
+ //所有的合并信息都存在了这个map里面
+ Map mergeInfo = new HashMap<>();
+
+ public ExcelRowMergeHandler() {
+ }
+ public ExcelRowMergeHandler(Map mergeInfo) {
+ this.mergeInfo = mergeInfo;
+ }
+
+ @Override
+ public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {
+
+ }
+
+ @Override
+ public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) {
+
+ }
+
+ @Override
+ public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, WriteCellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) {
+
+ }
+
+ @Override
+ public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
+ //当前行
+ int curRowIndex = cell.getRowIndex();
+ //当前列
+ int curColIndex = cell.getColumnIndex();
+
+ Integer num = mergeInfo.get(String.format(KEY, curRowIndex, curColIndex));
+ if(null != num){
+ // 合并最后一行 ,列
+ mergeWithPrevCol(writeSheetHolder, cell, curRowIndex, curColIndex,num);
+ }
+ }
+
+ public void mergeWithPrevCol(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex, int num) {
+ Sheet sheet = writeSheetHolder.getSheet();
+ CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex, curRowIndex, curColIndex, curColIndex + num);
+ sheet.addMergedRegion(cellRangeAddress);
+ }
+
+
+ /**
+ * 添加合并行
+ * 比如参数:(3,0,2)
+ * 从第三行的地0列开始向右合并2格
+ * 这样,第三行的地0列到第2列就会合并
+ *
+ * 注意:
+ * 合并不能冲突,如果合并到已经被合并的地方会报一个POI错误
+ * (java.lang.IllegalStateException: Cannot add merged region B3:B6 to sheet because it overlaps with an existing merged region (A6:C6).)
+ *
+ * @param curRowIndex 当前行: 需要合并的哪一行(一般用数据List的“index”+“表头的行数”,表头站的行数是1就+1,是2就+2)
+ * @param curColIndex 合并开始列:从第几行开始合并
+ * @param num 合并列的数量:从第curColIndex行开始,向右合并多少格
+ */
+ public void add (int curRowIndex, int curColIndex , int num){
+ mergeInfo.put(String.format(KEY, curRowIndex, curColIndex),num);
+ }
+
+}
+
diff --git a/zaojiaManagement/pom.xml b/zaojiaManagement/pom.xml
new file mode 100644
index 0000000..a926ed8
--- /dev/null
+++ b/zaojiaManagement/pom.xml
@@ -0,0 +1,22 @@
+
+
+
+ ruoyi-vue-plus
+ org.dromara
+ ${revision}
+
+
+ zaojia-productManagement
+
+ 4.0.0
+
+ zaojiaManagement
+ pom
+
+
+ zaojiaManagement相关业务模块
+
+
+
diff --git a/zaojiaManagement/zaojia-productManagement/pom.xml b/zaojiaManagement/zaojia-productManagement/pom.xml
new file mode 100644
index 0000000..d287224
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/pom.xml
@@ -0,0 +1,81 @@
+
+
+
+ org.dromara
+ zaojiaManagement
+ ${revision}
+
+ 4.0.0
+ jar
+
+ zaojia-productManagement
+
+
+ 产品管理模块
+
+
+
+ org.dromara
+ ruoyi-common-websocket
+
+
+
+ org.dromara
+ ruoyi-common-mail
+
+
+
+ org.dromara
+ ruoyi-common-sms
+
+
+
+ org.dromara
+ ruoyi-common-mybatis
+
+
+ org.dromara
+ ruoyi-common-web
+
+
+ org.dromara
+ ruoyi-common-log
+
+
+ org.dromara
+ ruoyi-common-idempotent
+
+
+ org.dromara
+ ruoyi-common-excel
+
+
+ org.dromara
+ ruoyi-common-translation
+
+
+ org.dromara
+ ruoyi-common-tenant
+
+
+ org.dromara
+ ruoyi-common-security
+
+
+ org.dromara
+ ruoyi-common-encrypt
+
+
+ org.dromara
+ ruoyi-common-excel
+
+
+ org.dromara
+ guoyan-common-elasticsearch
+
+
+
+
+
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/CmgCostItemDetailController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/CmgCostItemDetailController.java
new file mode 100644
index 0000000..418e0ca
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/CmgCostItemDetailController.java
@@ -0,0 +1,122 @@
+package org.dromara.productManagement.controller;
+
+import java.util.List;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.productManagement.domain.bo.PmgPersonProductsBo;
+import org.dromara.productManagement.domain.bo.ProductsBo;
+import org.dromara.productManagement.domain.vo.ProductsVo;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.productManagement.domain.vo.CmgCostItemDetailVo;
+import org.dromara.productManagement.domain.bo.CmgCostItemDetailBo;
+import org.dromara.productManagement.service.ICmgCostItemDetailService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 造价编制详情
+ *
+ * @author Lion Li
+ * @date 2024-06-29
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/productManagement/costItemDetail")
+public class CmgCostItemDetailController extends BaseController {
+
+ private final ICmgCostItemDetailService cmgCostItemDetailService;
+
+ /**
+ * 获取产品类型列表根据不同的分类
+ * @param bo
+ * @param pageQuery
+ * @return
+ */
+ @GetMapping("/getProductsPageByType")
+ public TableDataInfo getProductsPageByType(ProductsBo bo, PageQuery pageQuery) {
+ //查询数据
+ TableDataInfo pageVO =cmgCostItemDetailService.getProductsPageByType(bo, pageQuery);
+ return pageVO;
+ }
+ /**
+ * 查询造价编制详情列表
+ */
+ @SaCheckPermission("productManagement:costItemDetail:list")
+ @GetMapping("/list")
+ public TableDataInfo list(CmgCostItemDetailBo bo, PageQuery pageQuery) {
+ return cmgCostItemDetailService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出造价编制详情列表
+ */
+ @SaCheckPermission("productManagement:costItemDetail:export")
+ @Log(title = "造价编制详情", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(CmgCostItemDetailBo bo, HttpServletResponse response) {
+ List list = cmgCostItemDetailService.queryList(bo);
+ ExcelUtil.exportExcel(list, "造价编制详情", CmgCostItemDetailVo.class, response);
+ }
+
+ /**
+ * 获取造价编制详情详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("productManagement:costItemDetail:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(cmgCostItemDetailService.queryById(id));
+ }
+
+ /**
+ * 新增造价编制详情
+ */
+ @SaCheckPermission("productManagement:costItemDetail:add")
+ @Log(title = "造价编制详情", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody CmgCostItemDetailBo bo) {
+ return toAjax(cmgCostItemDetailService.insertByBo(bo));
+ }
+
+ /**
+ * 修改造价编制详情
+ */
+ @SaCheckPermission("productManagement:costItemDetail:edit")
+ @Log(title = "造价编制详情", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody CmgCostItemDetailBo bo) {
+ return toAjax(cmgCostItemDetailService.updateByBo(bo));
+ }
+
+ /**
+ * 删除造价编制详情
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("productManagement:costItemDetail:remove")
+ @Log(title = "造价编制详情", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(cmgCostItemDetailService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/CmgCostTableController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/CmgCostTableController.java
new file mode 100644
index 0000000..617992e
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/CmgCostTableController.java
@@ -0,0 +1,148 @@
+package org.dromara.productManagement.controller;
+
+import java.io.IOException;
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.productManagement.domain.vo.CostDetailViewVo;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.productManagement.domain.vo.CmgCostTableVo;
+import org.dromara.productManagement.domain.bo.CmgCostTableBo;
+import org.dromara.productManagement.service.ICmgCostTableService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 造价编制信息
+ *
+ * @author Lion Li
+ * @date 2024-06-29
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/productManagement/costTable")
+public class CmgCostTableController extends BaseController {
+
+ private final ICmgCostTableService cmgCostTableService;
+ /**
+ * 新增
+ */
+ @PostMapping("/addCostTable")
+ @RepeatSubmit()
+ @Log(title = "新增造价编制信息", businessType = BusinessType.INSERT)
+ @SaCheckPermission("productManagement:costTable:add")
+
+ public R addCostTable(@Validated @RequestBody CostDetailViewVo vo) {
+ cmgCostTableService.addCostTable(vo);
+ return R.ok();
+ }
+ /**
+ * 修改
+ */
+ @PutMapping("/modifyCostTable")
+ @RepeatSubmit()
+ @Log(title = "修改造价编制信息", businessType = BusinessType.UPDATE)
+ @SaCheckPermission("productManagement:costTable:edit")
+
+ public R modifyCostTable(@Validated @RequestBody CostDetailViewVo vo) {
+ cmgCostTableService.modifyCostTable(vo);
+ return R.ok();
+ }
+ /**
+ * 获取单条数据
+ */
+ @GetMapping("/getCostTableDetail/{id}")
+ @SaCheckPermission("productManagement:costTable:query")
+ public R getCostTableDetail(@PathVariable("id") String id) {
+ CostDetailViewVo vo = cmgCostTableService.getCostTableDetail(id);
+ return R.ok(vo);
+ }
+ /**
+ * 导出单条数据表格文件
+ */
+ @PostMapping("/exportData")
+ @SaCheckPermission("productManagement:costTable:export")
+ public void exportData( String id, HttpServletResponse response) throws IOException {
+ cmgCostTableService.exportData(id,response);
+ }
+ /**
+ * 查询造价编制信息列表
+ */
+ @SaCheckPermission("productManagement:costTable:list")
+ @GetMapping("/list")
+ public TableDataInfo list(CmgCostTableBo bo, PageQuery pageQuery) {
+ return cmgCostTableService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出造价编制信息列表
+ */
+ @SaCheckPermission("productManagement:costTable:export")
+ @Log(title = "造价编制信息", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(CmgCostTableBo bo, HttpServletResponse response) {
+ List list = cmgCostTableService.queryList(bo);
+ ExcelUtil.exportExcel(list, "造价编制信息", CmgCostTableVo.class, response);
+ }
+
+ /**
+ * 获取造价编制信息详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("productManagement:costTable:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(cmgCostTableService.queryById(id));
+ }
+
+ /**
+ * 新增造价编制信息
+ */
+ @SaCheckPermission("productManagement:costTable:add")
+ @Log(title = "造价编制信息", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody CmgCostTableBo bo) {
+ return toAjax(cmgCostTableService.insertByBo(bo));
+ }
+
+ /**
+ * 修改造价编制信息
+ */
+ @SaCheckPermission("productManagement:costTable:edit")
+ @Log(title = "造价编制信息", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody CmgCostTableBo bo) {
+ return toAjax(cmgCostTableService.updateByBo(bo));
+ }
+
+ /**
+ * 删除造价编制信息
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("productManagement:costTable:remove")
+ @Log(title = "造价编制信息", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(cmgCostTableService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgCompanyProductModelController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgCompanyProductModelController.java
new file mode 100644
index 0000000..2b298a5
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgCompanyProductModelController.java
@@ -0,0 +1,140 @@
+package org.dromara.productManagement.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.productManagement.domain.bo.PmgCompanyProductModelDetailsBo;
+import org.dromara.productManagement.domain.bo.ProductModelViewBo;
+import org.dromara.productManagement.domain.vo.PmgCompanyProductModelDetailsVo;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.productManagement.domain.vo.PmgCompanyProductModelVo;
+import org.dromara.productManagement.domain.bo.PmgCompanyProductModelBo;
+import org.dromara.productManagement.service.IPmgCompanyProductModelService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 公司产品模型
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/productManagement/companyProductModel")
+public class PmgCompanyProductModelController extends BaseController {
+
+ private final IPmgCompanyProductModelService pmgCompanyProductModelService;
+ /**
+ * 新增个人产品模型及其详情
+ */
+ @PostMapping("/addModel")
+ @SaCheckPermission("productManagement:companyProductModel:add")
+ @Log(title = "个人产品新增模型", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ public R addModel(@Validated @RequestBody ProductModelViewBo bo) {
+ String id = pmgCompanyProductModelService.addModel(bo);
+ return R.ok("新增成功",id);
+ }
+ /**
+ * 修改个人产品模型及其详情
+ */
+ @PutMapping("/editModel")
+ @SaCheckPermission("productManagement:companyProductModel:edit")
+ @Log(title = "个人产品修改模型", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ public R editModel(@Validated @RequestBody ProductModelViewBo bo) {
+ String id = pmgCompanyProductModelService.editModel(bo);
+ return R.ok("修改成功",id);
+ }
+ /**
+ * 根据id查询个人产品模型详情
+ * @param id 个人产品模型表id
+ * @return
+ */
+ @GetMapping("/getModelDetails/{id}")
+ @SaCheckPermission("productManagement:companyProductModel:query")
+ public R> getModelDetails(@PathVariable("id") String id) {
+ List detailsList=pmgCompanyProductModelService.getModelDetails(id);
+ return R.ok(detailsList);
+ }
+ /**
+ * 查询公司产品模型列表
+ */
+ @SaCheckPermission("productManagement:companyProductModel:list")
+ @GetMapping("/list")
+ public TableDataInfo list(PmgCompanyProductModelBo bo, PageQuery pageQuery) {
+ return pmgCompanyProductModelService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出公司产品模型列表
+ */
+ @SaCheckPermission("productManagement:companyProductModel:export")
+ @Log(title = "公司产品模型", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PmgCompanyProductModelBo bo, HttpServletResponse response) {
+ List list = pmgCompanyProductModelService.queryList(bo);
+ ExcelUtil.exportExcel(list, "公司产品模型", PmgCompanyProductModelVo.class, response);
+ }
+
+ /**
+ * 获取公司产品模型详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("productManagement:companyProductModel:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(pmgCompanyProductModelService.queryById(id));
+ }
+
+ /**
+ * 新增公司产品模型
+ */
+ @SaCheckPermission("productManagement:companyProductModel:add")
+ @Log(title = "公司产品模型", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PmgCompanyProductModelBo bo) {
+ return toAjax(pmgCompanyProductModelService.insertByBo(bo));
+ }
+
+ /**
+ * 修改公司产品模型
+ */
+ @SaCheckPermission("productManagement:companyProductModel:edit")
+ @Log(title = "公司产品模型", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PmgCompanyProductModelBo bo) {
+ return toAjax(pmgCompanyProductModelService.updateByBo(bo));
+ }
+
+ /**
+ * 删除公司产品模型
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("productManagement:companyProductModel:remove")
+ @Log(title = "公司产品模型", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(pmgCompanyProductModelService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgCompanyProductModelDetailsController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgCompanyProductModelDetailsController.java
new file mode 100644
index 0000000..9f4ec40
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgCompanyProductModelDetailsController.java
@@ -0,0 +1,105 @@
+package org.dromara.productManagement.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.productManagement.domain.vo.PmgCompanyProductModelDetailsVo;
+import org.dromara.productManagement.domain.bo.PmgCompanyProductModelDetailsBo;
+import org.dromara.productManagement.service.IPmgCompanyProductModelDetailsService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 公司产品模型详情表
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/productManagement/companyProductModelDetails")
+public class PmgCompanyProductModelDetailsController extends BaseController {
+
+ private final IPmgCompanyProductModelDetailsService pmgCompanyProductModelDetailsService;
+
+ /**
+ * 查询公司产品模型详情表列表
+ */
+ @SaCheckPermission("productManagement:companyProductModelDetails:list")
+ @GetMapping("/list")
+ public TableDataInfo list(PmgCompanyProductModelDetailsBo bo, PageQuery pageQuery) {
+ return pmgCompanyProductModelDetailsService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出公司产品模型详情表列表
+ */
+ @SaCheckPermission("productManagement:companyProductModelDetails:export")
+ @Log(title = "公司产品模型详情表", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PmgCompanyProductModelDetailsBo bo, HttpServletResponse response) {
+ List list = pmgCompanyProductModelDetailsService.queryList(bo);
+ ExcelUtil.exportExcel(list, "公司产品模型详情表", PmgCompanyProductModelDetailsVo.class, response);
+ }
+
+ /**
+ * 获取公司产品模型详情表详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("productManagement:companyProductModelDetails:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(pmgCompanyProductModelDetailsService.queryById(id));
+ }
+
+ /**
+ * 新增公司产品模型详情表
+ */
+ @SaCheckPermission("productManagement:companyProductModelDetails:add")
+ @Log(title = "公司产品模型详情表", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PmgCompanyProductModelDetailsBo bo) {
+ return toAjax(pmgCompanyProductModelDetailsService.insertByBo(bo));
+ }
+
+ /**
+ * 修改公司产品模型详情表
+ */
+ @SaCheckPermission("productManagement:companyProductModelDetails:edit")
+ @Log(title = "公司产品模型详情表", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PmgCompanyProductModelDetailsBo bo) {
+ return toAjax(pmgCompanyProductModelDetailsService.updateByBo(bo));
+ }
+
+ /**
+ * 删除公司产品模型详情表
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("productManagement:companyProductModelDetails:remove")
+ @Log(title = "公司产品模型详情表", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(pmgCompanyProductModelDetailsService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgCompanyProductsController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgCompanyProductsController.java
new file mode 100644
index 0000000..9fdd08c
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgCompanyProductsController.java
@@ -0,0 +1,105 @@
+package org.dromara.productManagement.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.productManagement.domain.vo.PmgCompanyProductsVo;
+import org.dromara.productManagement.domain.bo.PmgCompanyProductsBo;
+import org.dromara.productManagement.service.IPmgCompanyProductsService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 公司产品管理
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/productManagement/companyProducts")
+public class PmgCompanyProductsController extends BaseController {
+
+ private final IPmgCompanyProductsService pmgCompanyProductsService;
+
+ /**
+ * 查询公司产品管理列表
+ */
+ @SaCheckPermission("productManagement:companyProducts:list")
+ @GetMapping("/list")
+ public TableDataInfo list(PmgCompanyProductsBo bo, PageQuery pageQuery) {
+ return pmgCompanyProductsService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出公司产品管理列表
+ */
+ @SaCheckPermission("productManagement:companyProducts:export")
+ @Log(title = "公司产品管理", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PmgCompanyProductsBo bo, HttpServletResponse response) {
+ List list = pmgCompanyProductsService.queryList(bo);
+ ExcelUtil.exportExcel(list, "公司产品管理", PmgCompanyProductsVo.class, response);
+ }
+
+ /**
+ * 获取公司产品管理详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("productManagement:companyProducts:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(pmgCompanyProductsService.queryById(id));
+ }
+
+ /**
+ * 新增公司产品管理
+ */
+ @SaCheckPermission("productManagement:companyProducts:add")
+ @Log(title = "公司产品管理", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PmgCompanyProductsBo bo) {
+ return toAjax(pmgCompanyProductsService.insertByBo(bo));
+ }
+
+ /**
+ * 修改公司产品管理
+ */
+ @SaCheckPermission("productManagement:companyProducts:edit")
+ @Log(title = "公司产品管理", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PmgCompanyProductsBo bo) {
+ return toAjax(pmgCompanyProductsService.updateByBo(bo));
+ }
+
+ /**
+ * 删除公司产品管理
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("productManagement:companyProducts:remove")
+ @Log(title = "公司产品管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(pmgCompanyProductsService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgPersonProductModelController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgPersonProductModelController.java
new file mode 100644
index 0000000..b995d99
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgPersonProductModelController.java
@@ -0,0 +1,141 @@
+package org.dromara.productManagement.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.productManagement.domain.bo.PmgPersonProductModelDetailsBo;
+import org.dromara.productManagement.domain.bo.ProductModelViewBo;
+import org.dromara.productManagement.domain.vo.PmgPersonProductModelDetailsVo;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.productManagement.domain.vo.PmgPersonProductModelVo;
+import org.dromara.productManagement.domain.bo.PmgPersonProductModelBo;
+import org.dromara.productManagement.service.IPmgPersonProductModelService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 个人产品模型
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/productManagement/personProductModel")
+public class PmgPersonProductModelController extends BaseController {
+
+ private final IPmgPersonProductModelService pmgPersonProductModelService;
+ /**
+ * 新增个人产品模型及其详情
+ */
+ @PostMapping("/addModel")
+ @SaCheckPermission("productManagement:personProductModel:add")
+ @Log(title = "个人产品新增模型", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ public R addModel(@Validated @RequestBody ProductModelViewBo bo) {
+ String id = pmgPersonProductModelService.addModel(bo);
+ return R.ok("新增成功",id);
+ }
+ /**
+ * 修改个人产品模型及其详情
+ */
+ @PutMapping("/editModel")
+ @SaCheckPermission("productManagement:personProductModel:edit")
+ @Log(title = "个人产品修改模型", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ public R editModel(@Validated @RequestBody ProductModelViewBo bo) {
+ String id = pmgPersonProductModelService.editModel(bo);
+ return R.ok("修改成功",id);
+ }
+ /**
+ * 根据id查询个人产品模型详情
+ * @param id 个人产品模型表id
+ * @return
+ */
+ @GetMapping("/getModelDetails/{id}")
+ @SaCheckPermission("productManagement:personProductModel:query")
+ public R> getModelDetails(@PathVariable("id") String id) {
+ List detailsList=pmgPersonProductModelService.getModelDetails(id);
+ return R.ok(detailsList);
+ }
+ /**
+ * 查询个人产品模型列表
+ */
+ @SaCheckPermission("productManagement:personProductModel:list")
+ @GetMapping("/list")
+ public TableDataInfo list(PmgPersonProductModelBo bo, PageQuery pageQuery) {
+ return pmgPersonProductModelService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出个人产品模型列表
+ */
+ @SaCheckPermission("productManagement:personProductModel:export")
+ @Log(title = "个人产品模型", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PmgPersonProductModelBo bo, HttpServletResponse response) {
+ List list = pmgPersonProductModelService.queryList(bo);
+ ExcelUtil.exportExcel(list, "个人产品模型", PmgPersonProductModelVo.class, response);
+ }
+
+ /**
+ * 获取个人产品模型详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("productManagement:personProductModel:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(pmgPersonProductModelService.queryById(id));
+ }
+
+ /**
+ * 新增个人产品模型
+ */
+ @SaCheckPermission("productManagement:personProductModel:add")
+ @Log(title = "个人产品模型", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PmgPersonProductModelBo bo) {
+ return toAjax(pmgPersonProductModelService.insertByBo(bo));
+ }
+
+ /**
+ * 修改个人产品模型
+ */
+ @SaCheckPermission("productManagement:personProductModel:edit")
+ @Log(title = "个人产品模型", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PmgPersonProductModelBo bo) {
+ return toAjax(pmgPersonProductModelService.updateByBo(bo));
+ }
+
+ /**
+ * 删除个人产品模型
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("productManagement:personProductModel:remove")
+ @Log(title = "个人产品模型", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(pmgPersonProductModelService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgPersonProductModelDetailsController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgPersonProductModelDetailsController.java
new file mode 100644
index 0000000..fd54d6c
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgPersonProductModelDetailsController.java
@@ -0,0 +1,105 @@
+package org.dromara.productManagement.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.productManagement.domain.vo.PmgPersonProductModelDetailsVo;
+import org.dromara.productManagement.domain.bo.PmgPersonProductModelDetailsBo;
+import org.dromara.productManagement.service.IPmgPersonProductModelDetailsService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 个人产品模型详情
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/productManagement/personProductModelDetails")
+public class PmgPersonProductModelDetailsController extends BaseController {
+
+ private final IPmgPersonProductModelDetailsService pmgPersonProductModelDetailsService;
+
+ /**
+ * 查询个人产品模型详情列表
+ */
+ @SaCheckPermission("productManagement:personProductModelDetails:list")
+ @GetMapping("/list")
+ public TableDataInfo list(PmgPersonProductModelDetailsBo bo, PageQuery pageQuery) {
+ return pmgPersonProductModelDetailsService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出个人产品模型详情列表
+ */
+ @SaCheckPermission("productManagement:personProductModelDetails:export")
+ @Log(title = "个人产品模型详情", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PmgPersonProductModelDetailsBo bo, HttpServletResponse response) {
+ List list = pmgPersonProductModelDetailsService.queryList(bo);
+ ExcelUtil.exportExcel(list, "个人产品模型详情", PmgPersonProductModelDetailsVo.class, response);
+ }
+
+ /**
+ * 获取个人产品模型详情详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("productManagement:personProductModelDetails:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(pmgPersonProductModelDetailsService.queryById(id));
+ }
+
+ /**
+ * 新增个人产品模型详情
+ */
+ @SaCheckPermission("productManagement:personProductModelDetails:add")
+ @Log(title = "个人产品模型详情", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PmgPersonProductModelDetailsBo bo) {
+ return toAjax(pmgPersonProductModelDetailsService.insertByBo(bo));
+ }
+
+ /**
+ * 修改个人产品模型详情
+ */
+ @SaCheckPermission("productManagement:personProductModelDetails:edit")
+ @Log(title = "个人产品模型详情", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PmgPersonProductModelDetailsBo bo) {
+ return toAjax(pmgPersonProductModelDetailsService.updateByBo(bo));
+ }
+
+ /**
+ * 删除个人产品模型详情
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("productManagement:personProductModelDetails:remove")
+ @Log(title = "个人产品模型详情", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(pmgPersonProductModelDetailsService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgPersonProductsController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgPersonProductsController.java
new file mode 100644
index 0000000..7b50eac
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgPersonProductsController.java
@@ -0,0 +1,105 @@
+package org.dromara.productManagement.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.productManagement.domain.vo.PmgPersonProductsVo;
+import org.dromara.productManagement.domain.bo.PmgPersonProductsBo;
+import org.dromara.productManagement.service.IPmgPersonProductsService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 个人产品管理
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/productManagement/personProducts")
+public class PmgPersonProductsController extends BaseController {
+
+ private final IPmgPersonProductsService pmgPersonProductsService;
+
+ /**
+ * 查询个人产品管理列表
+ */
+ @SaCheckPermission("productManagement:personProducts:list")
+ @GetMapping("/list")
+ public TableDataInfo list(PmgPersonProductsBo bo, PageQuery pageQuery) {
+ return pmgPersonProductsService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出个人产品管理列表
+ */
+ @SaCheckPermission("productManagement:personProducts:export")
+ @Log(title = "个人产品管理", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PmgPersonProductsBo bo, HttpServletResponse response) {
+ List list = pmgPersonProductsService.queryList(bo);
+ ExcelUtil.exportExcel(list, "个人产品管理", PmgPersonProductsVo.class, response);
+ }
+
+ /**
+ * 获取个人产品管理详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("productManagement:personProducts:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(pmgPersonProductsService.queryById(id));
+ }
+
+ /**
+ * 新增个人产品管理
+ */
+ @SaCheckPermission("productManagement:personProducts:add")
+ @Log(title = "个人产品管理", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PmgPersonProductsBo bo) {
+ return toAjax(pmgPersonProductsService.insertByBo(bo));
+ }
+
+ /**
+ * 修改个人产品管理
+ */
+ @SaCheckPermission("productManagement:personProducts:edit")
+ @Log(title = "个人产品管理", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PmgPersonProductsBo bo) {
+ return toAjax(pmgPersonProductsService.updateByBo(bo));
+ }
+
+ /**
+ * 删除个人产品管理
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("productManagement:personProducts:remove")
+ @Log(title = "个人产品管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(pmgPersonProductsService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgSupplierInformationController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgSupplierInformationController.java
new file mode 100644
index 0000000..df25c0d
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgSupplierInformationController.java
@@ -0,0 +1,105 @@
+package org.dromara.productManagement.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.productManagement.domain.vo.PmgSupplierInformationVo;
+import org.dromara.productManagement.domain.bo.PmgSupplierInformationBo;
+import org.dromara.productManagement.service.IPmgSupplierInformationService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 供应商信息管理
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/productManagement/supplierInformation")
+public class PmgSupplierInformationController extends BaseController {
+
+ private final IPmgSupplierInformationService pmgSupplierInformationService;
+
+ /**
+ * 查询供应商信息管理列表
+ */
+ @SaCheckPermission("productManagement:supplierInformation:list")
+ @GetMapping("/list")
+ public TableDataInfo list(PmgSupplierInformationBo bo, PageQuery pageQuery) {
+ return pmgSupplierInformationService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出供应商信息管理列表
+ */
+ @SaCheckPermission("productManagement:supplierInformation:export")
+ @Log(title = "供应商信息管理", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PmgSupplierInformationBo bo, HttpServletResponse response) {
+ List list = pmgSupplierInformationService.queryList(bo);
+ ExcelUtil.exportExcel(list, "供应商信息管理", PmgSupplierInformationVo.class, response);
+ }
+
+ /**
+ * 获取供应商信息管理详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("productManagement:supplierInformation:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(pmgSupplierInformationService.queryById(id));
+ }
+
+ /**
+ * 新增供应商信息管理
+ */
+ @SaCheckPermission("productManagement:supplierInformation:add")
+ @Log(title = "供应商信息管理", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PmgSupplierInformationBo bo) {
+ return toAjax(pmgSupplierInformationService.insertByBo(bo));
+ }
+
+ /**
+ * 修改供应商信息管理
+ */
+ @SaCheckPermission("productManagement:supplierInformation:edit")
+ @Log(title = "供应商信息管理", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PmgSupplierInformationBo bo) {
+ return toAjax(pmgSupplierInformationService.updateByBo(bo));
+ }
+
+ /**
+ * 删除供应商信息管理
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("productManagement:supplierInformation:remove")
+ @Log(title = "供应商信息管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(pmgSupplierInformationService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgSupplierProductModelController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgSupplierProductModelController.java
new file mode 100644
index 0000000..53697a8
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgSupplierProductModelController.java
@@ -0,0 +1,140 @@
+package org.dromara.productManagement.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.productManagement.domain.bo.PmgSupplierProductModelDetailsBo;
+import org.dromara.productManagement.domain.bo.ProductModelViewBo;
+import org.dromara.productManagement.domain.vo.PmgSupplierProductModelDetailsVo;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.productManagement.domain.vo.PmgSupplierProductModelVo;
+import org.dromara.productManagement.domain.bo.PmgSupplierProductModelBo;
+import org.dromara.productManagement.service.IPmgSupplierProductModelService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 供应商产品模型
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/productManagement/supplierProductModel")
+public class PmgSupplierProductModelController extends BaseController {
+
+ private final IPmgSupplierProductModelService pmgSupplierProductModelService;
+ /**
+ * 新增供应商产品模型及其详情
+ */
+ @PostMapping("/addModel")
+ @SaCheckPermission("productManagement:supplierProductModel:add")
+ @Log(title = "个人产品新增模型", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ public R addModel(@Validated @RequestBody ProductModelViewBo bo) {
+ String id = pmgSupplierProductModelService.addModel(bo);
+ return R.ok("新增成功",id);
+ }
+ /**
+ * 修改供应商产品模型及其详情
+ */
+ @PutMapping("/editModel")
+ @SaCheckPermission("productManagement:supplierProductModel:edit")
+ @Log(title = "个人产品修改模型", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ public R editModel(@Validated @RequestBody ProductModelViewBo bo) {
+ String id = pmgSupplierProductModelService.editModel(bo);
+ return R.ok("修改成功",id);
+ }
+ /**
+ * 根据id查询供应商产品模型详情
+ * @param id 个人产品模型表id
+ * @return
+ */
+ @GetMapping("/getModelDetails/{id}")
+ @SaCheckPermission("productManagement:supplierProductModel:query")
+ public R> getModelDetails(@PathVariable("id") String id) {
+ List detailsList=pmgSupplierProductModelService.getModelDetails(id);
+ return R.ok(detailsList);
+ }
+ /**
+ * 查询供应商产品模型列表
+ */
+ @SaCheckPermission("productManagement:supplierProductModel:list")
+ @GetMapping("/list")
+ public TableDataInfo list(PmgSupplierProductModelBo bo, PageQuery pageQuery) {
+ return pmgSupplierProductModelService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出供应商产品模型列表
+ */
+ @SaCheckPermission("productManagement:supplierProductModel:export")
+ @Log(title = "供应商产品模型", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PmgSupplierProductModelBo bo, HttpServletResponse response) {
+ List list = pmgSupplierProductModelService.queryList(bo);
+ ExcelUtil.exportExcel(list, "供应商产品模型", PmgSupplierProductModelVo.class, response);
+ }
+
+ /**
+ * 获取供应商产品模型详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("productManagement:supplierProductModel:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(pmgSupplierProductModelService.queryById(id));
+ }
+
+ /**
+ * 新增供应商产品模型
+ */
+ @SaCheckPermission("productManagement:supplierProductModel:add")
+ @Log(title = "供应商产品模型", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PmgSupplierProductModelBo bo) {
+ return toAjax(pmgSupplierProductModelService.insertByBo(bo));
+ }
+
+ /**
+ * 修改供应商产品模型
+ */
+ @SaCheckPermission("productManagement:supplierProductModel:edit")
+ @Log(title = "供应商产品模型", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PmgSupplierProductModelBo bo) {
+ return toAjax(pmgSupplierProductModelService.updateByBo(bo));
+ }
+
+ /**
+ * 删除供应商产品模型
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("productManagement:supplierProductModel:remove")
+ @Log(title = "供应商产品模型", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(pmgSupplierProductModelService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgSupplierProductModelDetailsController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgSupplierProductModelDetailsController.java
new file mode 100644
index 0000000..763b921
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgSupplierProductModelDetailsController.java
@@ -0,0 +1,105 @@
+package org.dromara.productManagement.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.productManagement.domain.vo.PmgSupplierProductModelDetailsVo;
+import org.dromara.productManagement.domain.bo.PmgSupplierProductModelDetailsBo;
+import org.dromara.productManagement.service.IPmgSupplierProductModelDetailsService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 供应商产品模型详细
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/productManagement/supplierProductModelDetails")
+public class PmgSupplierProductModelDetailsController extends BaseController {
+
+ private final IPmgSupplierProductModelDetailsService pmgSupplierProductModelDetailsService;
+
+ /**
+ * 查询供应商产品模型详细列表
+ */
+ @SaCheckPermission("productManagement:supplierProductModelDetails:list")
+ @GetMapping("/list")
+ public TableDataInfo list(PmgSupplierProductModelDetailsBo bo, PageQuery pageQuery) {
+ return pmgSupplierProductModelDetailsService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出供应商产品模型详细列表
+ */
+ @SaCheckPermission("productManagement:supplierProductModelDetails:export")
+ @Log(title = "供应商产品模型详细", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PmgSupplierProductModelDetailsBo bo, HttpServletResponse response) {
+ List list = pmgSupplierProductModelDetailsService.queryList(bo);
+ ExcelUtil.exportExcel(list, "供应商产品模型详细", PmgSupplierProductModelDetailsVo.class, response);
+ }
+
+ /**
+ * 获取供应商产品模型详细详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("productManagement:supplierProductModelDetails:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(pmgSupplierProductModelDetailsService.queryById(id));
+ }
+
+ /**
+ * 新增供应商产品模型详细
+ */
+ @SaCheckPermission("productManagement:supplierProductModelDetails:add")
+ @Log(title = "供应商产品模型详细", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PmgSupplierProductModelDetailsBo bo) {
+ return toAjax(pmgSupplierProductModelDetailsService.insertByBo(bo));
+ }
+
+ /**
+ * 修改供应商产品模型详细
+ */
+ @SaCheckPermission("productManagement:supplierProductModelDetails:edit")
+ @Log(title = "供应商产品模型详细", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PmgSupplierProductModelDetailsBo bo) {
+ return toAjax(pmgSupplierProductModelDetailsService.updateByBo(bo));
+ }
+
+ /**
+ * 删除供应商产品模型详细
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("productManagement:supplierProductModelDetails:remove")
+ @Log(title = "供应商产品模型详细", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(pmgSupplierProductModelDetailsService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgSupplierProductsController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgSupplierProductsController.java
new file mode 100644
index 0000000..c7c7ffa
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/PmgSupplierProductsController.java
@@ -0,0 +1,107 @@
+package org.dromara.productManagement.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.common.encrypt.annotation.ApiEncrypt;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.productManagement.domain.vo.PmgSupplierProductsVo;
+import org.dromara.productManagement.domain.bo.PmgSupplierProductsBo;
+import org.dromara.productManagement.service.IPmgSupplierProductsService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 供应商产品管理
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/productManagement/supplierProducts")
+public class PmgSupplierProductsController extends BaseController {
+
+ private final IPmgSupplierProductsService pmgSupplierProductsService;
+
+ /**
+ * 查询供应商产品管理列表
+ */
+ @SaCheckPermission("productManagement:supplierProducts:list")
+ @ApiEncrypt(response = true)
+ @GetMapping("/list")
+ public TableDataInfo list(PmgSupplierProductsBo bo, PageQuery pageQuery) {
+ return pmgSupplierProductsService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出供应商产品管理列表
+ */
+ @SaCheckPermission("supplierProducts:supplierProducts:export")
+ @Log(title = "供应商产品管理", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PmgSupplierProductsBo bo, HttpServletResponse response) {
+ List list = pmgSupplierProductsService.queryList(bo);
+ ExcelUtil.exportExcel(list, "供应商产品管理", PmgSupplierProductsVo.class, response);
+ }
+
+ /**
+ * 获取供应商产品管理详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("supplierProducts:supplierProducts:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(pmgSupplierProductsService.queryById(id));
+ }
+
+ /**
+ * 新增供应商产品管理
+ */
+ @SaCheckPermission("supplierProducts:supplierProducts:add")
+ @Log(title = "供应商产品管理", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PmgSupplierProductsBo bo) {
+ return toAjax(pmgSupplierProductsService.insertByBo(bo));
+ }
+
+ /**
+ * 修改供应商产品管理
+ */
+ @SaCheckPermission("supplierProducts:supplierProducts:edit")
+ @Log(title = "供应商产品管理", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PmgSupplierProductsBo bo) {
+ return toAjax(pmgSupplierProductsService.updateByBo(bo));
+ }
+
+ /**
+ * 删除供应商产品管理
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("supplierProducts:supplierProducts:remove")
+ @Log(title = "供应商产品管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(pmgSupplierProductsService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/CmgCostItemDetail.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/CmgCostItemDetail.java
new file mode 100644
index 0000000..d3ea5be
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/CmgCostItemDetail.java
@@ -0,0 +1,108 @@
+package org.dromara.productManagement.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+
+import java.io.Serial;
+
+/**
+ * 造价编制详情对象 cmg_cost_item_detail
+ *
+ * @author Lion Li
+ * @date 2024-06-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("cmg_cost_item_detail")
+public class CmgCostItemDetail extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ private String id;
+
+ /**
+ * 造价表id
+ */
+ private String costTableId;
+
+ /**
+ * 父类id
+ */
+ private String parentId;
+
+ /**
+ * 费用类型
+ */
+ private String costType;
+
+ /**
+ * 建设内容
+ */
+ private String constructContent;
+
+ /**
+ * 费用名称
+ */
+ private String costName;
+
+ /**
+ * 费用描述
+ */
+ private String costDescribe;
+
+ /**
+ * 单位
+ */
+ private String unit;
+
+ /**
+ * 数量
+ */
+ private Long quantity;
+
+ /**
+ * 单价
+ */
+ private BigDecimal unitPrice;
+
+ /**
+ * 总价
+ */
+ private BigDecimal totalPrice;
+
+ /**
+ * 是否明细
+ */
+ private String isDetail;
+
+ /**
+ * 备注
+ */
+ private String remarks;
+
+ /**
+ * 排序
+ */
+ private String orderNo;
+
+ /**
+ *
+ */
+// @TableLogic
+ private String delFlag;
+
+ /**
+ * 版本号
+ */
+ @Version
+ private Long version;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/CmgCostTable.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/CmgCostTable.java
new file mode 100644
index 0000000..5c20ce6
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/CmgCostTable.java
@@ -0,0 +1,61 @@
+package org.dromara.productManagement.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * 造价编制信息对象 cmg_cost_table
+ *
+ * @author Lion Li
+ * @date 2024-06-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("cmg_cost_table")
+public class CmgCostTable extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id")
+ private String id;
+
+ /**
+ * 项目名称
+ */
+ private String projectName;
+
+ /**
+ * 造价日期
+ */
+ private Date costDate;
+
+ /**
+ * 总投资
+ */
+ private BigDecimal totalInvestment;
+
+ /**
+ *
+ */
+// @TableLogic
+ private String delFlag;
+
+ /**
+ * 版本号
+ */
+ @Version
+ private Long version;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgCompanyProductModel.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgCompanyProductModel.java
new file mode 100644
index 0000000..528006e
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgCompanyProductModel.java
@@ -0,0 +1,58 @@
+package org.dromara.productManagement.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 公司产品模型对象 pmg_company_product_model
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("pmg_company_product_model")
+public class PmgCompanyProductModel extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id")
+ private String id;
+
+ /**
+ * 公司产品指标描述
+ */
+ private String description;
+
+ /**
+ * 产品型号模板id
+ */
+ private String productModelTemplateId;
+
+ /**
+ * 是否临时数据
+ */
+ private String isTemporary;
+
+ /**
+ *
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 版本号
+ */
+ @Version
+ private Long version;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgCompanyProductModelDetails.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgCompanyProductModelDetails.java
new file mode 100644
index 0000000..f98d594
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgCompanyProductModelDetails.java
@@ -0,0 +1,68 @@
+package org.dromara.productManagement.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 公司产品模型详情表对象 pmg_company_product_model_details
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("pmg_company_product_model_details")
+public class PmgCompanyProductModelDetails extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id")
+ private String id;
+
+ /**
+ * 公司产品型号表id
+ */
+ private String modelId;
+
+ /**
+ * 指标名称
+ */
+ private String paramName;
+
+ /**
+ * 指标参数
+ */
+ private String parameterValue;
+
+ /**
+ * 是否关键指标
+ */
+ private String isKeyParameter;
+
+ /**
+ * 是否临时数据
+ */
+ private String isTemporary;
+
+ /**
+ *
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 版本号
+ */
+ @Version
+ private Long version;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgCompanyProducts.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgCompanyProducts.java
new file mode 100644
index 0000000..6ff1a47
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgCompanyProducts.java
@@ -0,0 +1,118 @@
+package org.dromara.productManagement.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+
+import java.io.Serial;
+
+/**
+ * 公司产品管理对象 pmg_company_products
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("pmg_company_products")
+public class PmgCompanyProducts extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+ /**
+ * 主键
+ */
+ @TableId(value = "id")
+ private String id;
+
+ /**
+ * 关联厂商产品id
+ */
+ private String supplierProductsId;
+
+ /**
+ * 供应商id
+ */
+ private String supplierInformationId;
+
+ /**
+ * 公司产品规格
+ */
+ private String productSpecifications;
+
+ /**
+ * 产品名称
+ */
+ private String productName;
+
+ /**
+ * 产品标识(型号)
+ */
+ private String productIdentity;
+
+ /**
+ * 产品价格
+ */
+ private BigDecimal productPrice;
+
+ /**
+ * 信息来源
+ */
+ private String sourceInformation;
+
+ /**
+ * 备注
+ */
+ private String remarks;
+
+ /**
+ *
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 版本号
+ */
+ @Version
+ private Long version;
+
+ /**
+ * 图片
+ */
+ private String image;
+
+ /**
+ * 品牌
+ */
+ private String brand;
+
+ /**
+ * 单位
+ */
+ private String unit;
+
+ /**
+ * 除税价
+ */
+ private BigDecimal exTaxPrice;
+
+ /**
+ * 税率
+ */
+ private Long taxrate;
+
+ /**
+ * 分类id
+ */
+ private String categoryId;
+
+ /**
+ * 型号id
+ */
+ private String modelId;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgPersonProductModel.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgPersonProductModel.java
new file mode 100644
index 0000000..d05957d
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgPersonProductModel.java
@@ -0,0 +1,58 @@
+package org.dromara.productManagement.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 个人产品模型对象 pmg_person_product_model
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("pmg_person_product_model")
+public class PmgPersonProductModel extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id")
+ private String id;
+
+ /**
+ * 个人产品指标描述
+ */
+ private String description;
+
+ /**
+ * 产品型号模板id
+ */
+ private String productModelTemplateId;
+
+ /**
+ * 是否临时数据
+ */
+ private String isTemporary;
+
+ /**
+ *
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 版本号
+ */
+ @Version
+ private Long version;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgPersonProductModelDetails.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgPersonProductModelDetails.java
new file mode 100644
index 0000000..315ba03
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgPersonProductModelDetails.java
@@ -0,0 +1,68 @@
+package org.dromara.productManagement.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 个人产品模型详情对象 pmg_person_product_model_details
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("pmg_person_product_model_details")
+public class PmgPersonProductModelDetails extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id")
+ private String id;
+
+ /**
+ * 个人产品型号表id
+ */
+ private String modelId;
+
+ /**
+ * 指标名称
+ */
+ private String paramName;
+
+ /**
+ * 指标参数
+ */
+ private String parameterValue;
+
+ /**
+ * 是否关键指标
+ */
+ private String isKeyParameter;
+
+ /**
+ * 是否临时数据
+ */
+ private String isTemporary;
+
+ /**
+ *
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 版本号
+ */
+ @Version
+ private Long version;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgPersonProducts.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgPersonProducts.java
new file mode 100644
index 0000000..466b39c
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgPersonProducts.java
@@ -0,0 +1,119 @@
+package org.dromara.productManagement.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+
+import java.io.Serial;
+
+/**
+ * 个人产品管理对象 pmg_person_products
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("pmg_person_products")
+public class PmgPersonProducts extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id")
+ private String id;
+
+ /**
+ * 供应商id
+ */
+ private String supplierInformationId;
+
+ /**
+ * 产品名称
+ */
+ private String productName;
+
+ /**
+ * 产品标识(型号)
+ */
+ private String productIdentity;
+
+ /**
+ * 产品价格
+ */
+ private BigDecimal productPrice;
+
+ /**
+ * 信息来源
+ */
+ private String sourceInformation;
+
+ /**
+ * 个人产品规格
+ */
+ private String productSpecifications;
+
+ /**
+ * 关联厂商产品id
+ */
+ private String supplierProductsId;
+
+ /**
+ * 备注
+ */
+ private String remarks;
+
+ /**
+ *
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 版本号
+ */
+ @Version
+ private Long version;
+
+ /**
+ * 图片
+ */
+ private String image;
+
+ /**
+ * 品牌
+ */
+ private String brand;
+
+ /**
+ * 单位
+ */
+ private String unit;
+
+ /**
+ * 除税价
+ */
+ private BigDecimal exTaxPrice;
+
+ /**
+ * 税率
+ */
+ private Long taxrate;
+
+ /**
+ * 分类id
+ */
+ private String categoryId;
+
+ /**
+ * 型号id
+ */
+ private String modelId;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgSupplierInformation.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgSupplierInformation.java
new file mode 100644
index 0000000..01fe2b5
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgSupplierInformation.java
@@ -0,0 +1,68 @@
+package org.dromara.productManagement.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 供应商信息管理对象 pmg_supplier_information
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("pmg_supplier_information")
+public class PmgSupplierInformation extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id")
+ private String id;
+
+ /**
+ * 供应商名称
+ */
+ private String supplierName;
+
+ /**
+ * 供应商联系人
+ */
+ private String supplierContacts;
+
+ /**
+ * 职位
+ */
+ private String position;
+
+ /**
+ * 供应商联系电话
+ */
+ private String supplierContactsPhone;
+
+ /**
+ * 供应商类型
+ */
+ private String supplierType;
+
+ /**
+ *
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 版本号
+ */
+ @Version
+ private Long version;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgSupplierProductModel.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgSupplierProductModel.java
new file mode 100644
index 0000000..9816c96
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgSupplierProductModel.java
@@ -0,0 +1,58 @@
+package org.dromara.productManagement.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 供应商产品模型对象 pmg_supplier_product_model
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("pmg_supplier_product_model")
+public class PmgSupplierProductModel extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id")
+ private String id;
+
+ /**
+ * 供应商产品指标描述
+ */
+ private String description;
+
+ /**
+ * 产品型号模板id
+ */
+ private String productModelTemplateId;
+
+ /**
+ * 是否临时数据
+ */
+ private String isTemporary;
+
+ /**
+ *
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 版本号
+ */
+ @Version
+ private Long version;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgSupplierProductModelDetails.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgSupplierProductModelDetails.java
new file mode 100644
index 0000000..5eac8f3
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgSupplierProductModelDetails.java
@@ -0,0 +1,68 @@
+package org.dromara.productManagement.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 供应商产品模型详细对象 pmg_supplier_product_model_details
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("pmg_supplier_product_model_details")
+public class PmgSupplierProductModelDetails extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id")
+ private String id;
+
+ /**
+ * 供应商产品型号表id
+ */
+ private String modelId;
+
+ /**
+ * 指标名称
+ */
+ private String paramName;
+
+ /**
+ * 指标参数
+ */
+ private String parameterValue;
+
+ /**
+ * 是否关键指标
+ */
+ private String isKeyParameter;
+
+ /**
+ * 是否临时数据
+ */
+ private String isTemporary;
+
+ /**
+ *
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 版本号
+ */
+ @Version
+ private Long version;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgSupplierProducts.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgSupplierProducts.java
new file mode 100644
index 0000000..b2a9cf2
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/PmgSupplierProducts.java
@@ -0,0 +1,119 @@
+package org.dromara.productManagement.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+
+import java.io.Serial;
+
+/**
+ * 供应商产品管理对象 pmg_supplier_products
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("pmg_supplier_products")
+public class PmgSupplierProducts extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id")
+ private String id;
+
+ /**
+ * 关联厂商产品id
+ */
+ private String supplierProductsId;
+
+ /**
+ * 供应商id
+ */
+ private String supplierInformationId;
+
+ /**
+ * 供应商产品规格
+ */
+ private String productSpecifications;
+
+ /**
+ * 产品名称
+ */
+ private String productName;
+
+ /**
+ * 产品标识(型号)
+ */
+ private String productIdentity;
+
+ /**
+ * 产品价格
+ */
+ private BigDecimal productPrice;
+
+ /**
+ * 信息来源
+ */
+ private String sourceInformation;
+
+ /**
+ * 备注
+ */
+ private String remarks;
+
+ /**
+ *
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 版本号
+ */
+ @Version
+ private Long version;
+
+ /**
+ * 图片
+ */
+ private String image;
+
+ /**
+ * 品牌
+ */
+ private String brand;
+
+ /**
+ * 单位
+ */
+ private String unit;
+
+ /**
+ * 除税价
+ */
+ private BigDecimal exTaxPrice;
+
+ /**
+ * 税率
+ */
+ private Long taxrate;
+
+ /**
+ * 分类id
+ */
+ private String categoryId;
+
+ /**
+ * 型号id
+ */
+ private String modelId;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/CmgCostItemDetailBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/CmgCostItemDetailBo.java
new file mode 100644
index 0000000..08fb211
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/CmgCostItemDetailBo.java
@@ -0,0 +1,97 @@
+package org.dromara.productManagement.domain.bo;
+
+import org.dromara.productManagement.domain.CmgCostItemDetail;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.math.BigDecimal;
+
+/**
+ * 造价编制详情业务对象 cmg_cost_item_detail
+ *
+ * @author Lion Li
+ * @date 2024-06-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = CmgCostItemDetail.class, reverseConvertGenerate = false)
+public class CmgCostItemDetailBo extends BaseEntity {
+
+ /**
+ * 主键
+ */
+ @NotBlank(message = "主键不能为空", groups = { EditGroup.class })
+ private String id;
+
+ /**
+ * 造价表id
+ */
+ @NotBlank(message = "造价表id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String costTableId;
+
+ /**
+ * 父类id
+ */
+ private String parentId;
+
+ /**
+ * 费用类型
+ */
+ private String costType;
+
+ /**
+ * 建设内容
+ */
+ private String constructContent;
+
+ /**
+ * 费用名称
+ */
+ private String costName;
+
+ /**
+ * 费用描述
+ */
+ private String costDescribe;
+
+ /**
+ * 单位
+ */
+ private String unit;
+
+ /**
+ * 数量
+ */
+ private Long quantity;
+
+ /**
+ * 单价
+ */
+ private BigDecimal unitPrice;
+
+ /**
+ * 总价
+ */
+ private BigDecimal totalPrice;
+
+ /**
+ * 是否明细
+ */
+ private String isDetail;
+
+ /**
+ * 备注
+ */
+ private String remarks;
+
+ /**
+ * 排序
+ */
+ private String orderNo;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/CmgCostTableBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/CmgCostTableBo.java
new file mode 100644
index 0000000..481bfca
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/CmgCostTableBo.java
@@ -0,0 +1,51 @@
+package org.dromara.productManagement.domain.bo;
+
+import org.dromara.productManagement.domain.CmgCostTable;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 造价编制信息业务对象 cmg_cost_table
+ *
+ * @author Lion Li
+ * @date 2024-06-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = CmgCostTable.class, reverseConvertGenerate = false)
+public class CmgCostTableBo extends BaseEntity {
+
+ /**
+ * 主键
+ */
+ @NotBlank(message = "主键不能为空", groups = { EditGroup.class })
+ private String id;
+
+ /**
+ * 项目名称
+ */
+ @NotBlank(message = "项目名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String projectName;
+
+ /**
+ * 造价日期
+ */
+ @NotNull(message = "造价日期不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Date costDate;
+
+ /**
+ * 总投资
+ */
+ @NotNull(message = "总投资不能为空", groups = { AddGroup.class, EditGroup.class })
+ private BigDecimal totalInvestment;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgCompanyProductModelBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgCompanyProductModelBo.java
new file mode 100644
index 0000000..8b04871
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgCompanyProductModelBo.java
@@ -0,0 +1,46 @@
+package org.dromara.productManagement.domain.bo;
+
+import org.dromara.productManagement.domain.PmgCompanyProductModel;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 公司产品模型业务对象 pmg_company_product_model
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PmgCompanyProductModel.class, reverseConvertGenerate = false)
+public class PmgCompanyProductModelBo extends BaseEntity {
+
+ /**
+ * 主键
+ */
+ private String id;
+
+ /**
+ * 公司产品指标描述
+ */
+ @NotBlank(message = "公司产品指标描述不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String description;
+
+ /**
+ * 产品型号模板id
+ */
+ @NotBlank(message = "产品型号模板id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String productModelTemplateId;
+
+ /**
+ * 是否临时数据
+ */
+ private String isTemporary;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgCompanyProductModelDetailsBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgCompanyProductModelDetailsBo.java
new file mode 100644
index 0000000..2d0ab4d
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgCompanyProductModelDetailsBo.java
@@ -0,0 +1,58 @@
+package org.dromara.productManagement.domain.bo;
+
+import org.dromara.productManagement.domain.PmgCompanyProductModelDetails;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 公司产品模型详情表业务对象 pmg_company_product_model_details
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PmgCompanyProductModelDetails.class, reverseConvertGenerate = false)
+public class PmgCompanyProductModelDetailsBo extends BaseEntity {
+
+ /**
+ * 主键
+ */
+ private String id;
+
+ /**
+ * 公司产品型号表id
+ */
+ @NotBlank(message = "公司产品型号表id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String modelId;
+
+ /**
+ * 指标名称
+ */
+ @NotBlank(message = "指标名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String paramName;
+
+ /**
+ * 指标参数
+ */
+ @NotBlank(message = "指标参数不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String parameterValue;
+
+ /**
+ * 是否关键指标
+ */
+ @NotBlank(message = "是否关键指标不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String isKeyParameter;
+
+ /**
+ * 是否临时数据
+ */
+ private String isTemporary;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgCompanyProductsBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgCompanyProductsBo.java
new file mode 100644
index 0000000..4a55c30
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgCompanyProductsBo.java
@@ -0,0 +1,109 @@
+package org.dromara.productManagement.domain.bo;
+
+import org.dromara.productManagement.domain.PmgCompanyProducts;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.math.BigDecimal;
+
+/**
+ * 公司产品管理业务对象 pmg_company_products
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PmgCompanyProducts.class, reverseConvertGenerate = false)
+public class PmgCompanyProductsBo extends BaseEntity {
+
+ /**
+ * 主键
+ */
+ private String id;
+
+ /**
+ * 关联厂商产品id
+ */
+ private String supplierProductsId;
+
+ /**
+ * 供应商id
+ */
+ private String supplierInformationId;
+
+ /**
+ * 公司产品规格
+ */
+ private String productSpecifications;
+
+ /**
+ * 产品名称
+ */
+ @NotBlank(message = "产品名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String productName;
+
+ /**
+ * 产品标识(型号)
+ */
+ private String productIdentity;
+
+ /**
+ * 产品价格
+ */
+ @NotNull(message = "产品价格不能为空", groups = { AddGroup.class, EditGroup.class })
+ private BigDecimal productPrice;
+
+ /**
+ * 信息来源
+ */
+ private String sourceInformation;
+
+ /**
+ * 备注
+ */
+ private String remarks;
+
+ /**
+ * 图片
+ */
+ private String image;
+
+ /**
+ * 品牌
+ */
+ private String brand;
+
+ /**
+ * 单位
+ */
+ private String unit;
+
+ /**
+ * 除税价
+ */
+ private BigDecimal exTaxPrice;
+
+ /**
+ * 税率
+ */
+ private Long taxrate;
+
+ /**
+ * 分类id
+ */
+ private String categoryId;
+
+ @NotBlank(message = "公司产品规格不能为空", groups = { AddGroup.class, EditGroup.class })
+
+ /**
+ * 型号id
+ */
+ private String modelId;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgPersonProductModelBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgPersonProductModelBo.java
new file mode 100644
index 0000000..f3fe5db
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgPersonProductModelBo.java
@@ -0,0 +1,46 @@
+package org.dromara.productManagement.domain.bo;
+
+import org.dromara.productManagement.domain.PmgPersonProductModel;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 个人产品模型业务对象 pmg_person_product_model
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PmgPersonProductModel.class, reverseConvertGenerate = false)
+public class PmgPersonProductModelBo extends BaseEntity {
+
+ /**
+ * 主键
+ */
+ private String id;
+
+ /**
+ * 个人产品指标描述
+ */
+ @NotBlank(message = "个人产品指标描述不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String description;
+
+ /**
+ * 产品型号模板id
+ */
+ @NotBlank(message = "产品型号模板id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String productModelTemplateId;
+
+ /**
+ * 是否临时数据
+ */
+ private String isTemporary;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgPersonProductModelDetailsBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgPersonProductModelDetailsBo.java
new file mode 100644
index 0000000..12122c9
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgPersonProductModelDetailsBo.java
@@ -0,0 +1,58 @@
+package org.dromara.productManagement.domain.bo;
+
+import org.dromara.productManagement.domain.PmgPersonProductModelDetails;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 个人产品模型详情业务对象 pmg_person_product_model_details
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PmgPersonProductModelDetails.class, reverseConvertGenerate = false)
+public class PmgPersonProductModelDetailsBo extends BaseEntity {
+
+ /**
+ * 主键
+ */
+ private String id;
+
+ /**
+ * 个人产品型号表id
+ */
+ @NotBlank(message = "个人产品型号表id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String modelId;
+
+ /**
+ * 指标名称
+ */
+ @NotBlank(message = "指标名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String paramName;
+
+ /**
+ * 指标参数
+ */
+ @NotBlank(message = "指标参数不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String parameterValue;
+
+ /**
+ * 是否关键指标
+ */
+ @NotBlank(message = "是否关键指标不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String isKeyParameter;
+
+ /**
+ * 是否临时数据
+ */
+ private String isTemporary;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgPersonProductsBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgPersonProductsBo.java
new file mode 100644
index 0000000..451a71d
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgPersonProductsBo.java
@@ -0,0 +1,108 @@
+package org.dromara.productManagement.domain.bo;
+
+import org.dromara.productManagement.domain.PmgPersonProducts;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.math.BigDecimal;
+
+/**
+ * 个人产品管理业务对象 pmg_person_products
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PmgPersonProducts.class, reverseConvertGenerate = false)
+public class PmgPersonProductsBo extends BaseEntity {
+
+ /**
+ * 主键
+ */
+ private String id;
+
+ /**
+ * 供应商id
+ */
+ private String supplierInformationId;
+
+ /**
+ * 产品名称
+ */
+ @NotBlank(message = "产品名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String productName;
+
+ /**
+ * 产品标识(型号)
+ */
+ private String productIdentity;
+
+ /**
+ * 产品价格
+ */
+ @NotNull(message = "产品价格不能为空", groups = { AddGroup.class, EditGroup.class })
+ private BigDecimal productPrice;
+
+ /**
+ * 信息来源
+ */
+ private String sourceInformation;
+
+ /**
+ * 个人产品规格
+ */
+ private String productSpecifications;
+
+ /**
+ * 关联厂商产品id
+ */
+ private String supplierProductsId;
+
+ /**
+ * 备注
+ */
+ private String remarks;
+
+ /**
+ * 图片
+ */
+ private String image;
+
+ /**
+ * 品牌
+ */
+ private String brand;
+
+ /**
+ * 单位
+ */
+ private String unit;
+
+ /**
+ * 除税价
+ */
+ private BigDecimal exTaxPrice;
+
+ /**
+ * 税率
+ */
+ private Long taxrate;
+
+ /**
+ * 分类id
+ */
+ private String categoryId;
+ @NotBlank(message = "个人产品规格不能为空", groups = { AddGroup.class, EditGroup.class })
+
+ /**
+ * 型号id
+ */
+ private String modelId;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgSupplierInformationBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgSupplierInformationBo.java
new file mode 100644
index 0000000..318ecde
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgSupplierInformationBo.java
@@ -0,0 +1,59 @@
+package org.dromara.productManagement.domain.bo;
+
+import org.dromara.productManagement.domain.PmgSupplierInformation;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 供应商信息管理业务对象 pmg_supplier_information
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PmgSupplierInformation.class, reverseConvertGenerate = false)
+public class PmgSupplierInformationBo extends BaseEntity {
+
+ /**
+ * 主键
+ */
+// @NotBlank(message = "主键不能为空", groups = { EditGroup.class })
+ private String id;
+
+ /**
+ * 供应商名称
+ */
+ @NotBlank(message = "供应商名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String supplierName;
+
+ /**
+ * 供应商联系人
+ */
+ @NotBlank(message = "供应商联系人不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String supplierContacts;
+
+ /**
+ * 职位
+ */
+ private String position;
+
+ /**
+ * 供应商联系电话
+ */
+ @NotBlank(message = "供应商联系电话不能为空", groups = { AddGroup.class, EditGroup.class })
+
+ private String supplierContactsPhone;
+
+ /**
+ * 供应商类型
+ */
+ private String supplierType;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgSupplierProductModelBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgSupplierProductModelBo.java
new file mode 100644
index 0000000..1f9731a
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgSupplierProductModelBo.java
@@ -0,0 +1,46 @@
+package org.dromara.productManagement.domain.bo;
+
+import org.dromara.productManagement.domain.PmgSupplierProductModel;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 供应商产品模型业务对象 pmg_supplier_product_model
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PmgSupplierProductModel.class, reverseConvertGenerate = false)
+public class PmgSupplierProductModelBo extends BaseEntity {
+
+ /**
+ * 主键
+ */
+ private String id;
+
+ /**
+ * 供应商产品指标描述
+ */
+ @NotBlank(message = "供应商产品指标描述不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String description;
+
+ /**
+ * 产品型号模板id
+ */
+ @NotBlank(message = "产品型号模板id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String productModelTemplateId;
+
+ /**
+ * 是否临时数据
+ */
+ private String isTemporary;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgSupplierProductModelDetailsBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgSupplierProductModelDetailsBo.java
new file mode 100644
index 0000000..f550a6e
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgSupplierProductModelDetailsBo.java
@@ -0,0 +1,58 @@
+package org.dromara.productManagement.domain.bo;
+
+import org.dromara.productManagement.domain.PmgSupplierProductModelDetails;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 供应商产品模型详细业务对象 pmg_supplier_product_model_details
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PmgSupplierProductModelDetails.class, reverseConvertGenerate = false)
+public class PmgSupplierProductModelDetailsBo extends BaseEntity {
+
+ /**
+ * 主键
+ */
+ private String id;
+
+ /**
+ * 供应商产品型号表id
+ */
+ @NotBlank(message = "供应商产品型号表id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String modelId;
+
+ /**
+ * 指标名称
+ */
+ @NotBlank(message = "指标名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String paramName;
+
+ /**
+ * 指标参数
+ */
+ @NotBlank(message = "指标参数不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String parameterValue;
+
+ /**
+ * 是否关键指标
+ */
+ @NotBlank(message = "是否关键指标不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String isKeyParameter;
+
+ /**
+ * 是否临时数据
+ */
+ private String isTemporary;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgSupplierProductsBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgSupplierProductsBo.java
new file mode 100644
index 0000000..4e6e693
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/PmgSupplierProductsBo.java
@@ -0,0 +1,101 @@
+package org.dromara.productManagement.domain.bo;
+
+import org.dromara.productManagement.domain.PmgSupplierProducts;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.math.BigDecimal;
+
+/**
+ * 供应商产品管理业务对象 pmg_supplier_products
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PmgSupplierProducts.class, reverseConvertGenerate = false)
+public class PmgSupplierProductsBo extends BaseEntity {
+ private String id;
+
+ /**
+ * 供应商id
+ */
+ @NotBlank(message = "供应商id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String supplierInformationId;
+
+ /**
+ * 供应商产品规格
+ */
+ private String productSpecifications;
+
+ /**
+ * 产品名称
+ */
+ @NotBlank(message = "产品名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String productName;
+
+ /**
+ * 产品标识(型号)
+ */
+ private String productIdentity;
+
+ /**
+ * 产品价格
+ */
+ @NotNull(message = "产品价格不能为空", groups = { AddGroup.class, EditGroup.class })
+ private BigDecimal productPrice;
+
+ /**
+ * 信息来源
+ */
+ private String sourceInformation;
+
+ /**
+ * 备注
+ */
+ private String remarks;
+
+ /**
+ * 图片
+ */
+ private String image;
+
+ /**
+ * 品牌
+ */
+ private String brand;
+
+ /**
+ * 单位
+ */
+ @NotBlank(message = "单位不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String unit;
+
+ /**
+ * 除税价
+ */
+ private BigDecimal exTaxPrice;
+
+ /**
+ * 税率
+ */
+ private Long taxrate;
+
+ /**
+ * 分类id
+ */
+ private String categoryId;
+ @NotBlank(message = "供应商产品规格不能为空", groups = { AddGroup.class, EditGroup.class })
+
+ /**
+ * 型号id
+ */
+ private String modelId;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ProductModelViewBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ProductModelViewBo.java
new file mode 100644
index 0000000..33dc909
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ProductModelViewBo.java
@@ -0,0 +1,52 @@
+package org.dromara.productManagement.domain.bo;
+
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.List;
+
+/**
+* 视图对象类
+*
+* @author ZHB
+* @date 2024-05-14
+*/
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class ProductModelViewBo extends BaseEntity {
+ private String id;
+ /**
+ * 厂商产品型号描述
+ */
+ private String description;
+
+ /**
+ * 产品型号模板id
+ */
+ private String productModelTemplateId;
+
+ private List modelDeatils;
+
+
+ /********非库表存储属性*****/
+
+
+
+ /********字典类*****/
+
+ /********实体类、用户单选、组织机构单选*****/
+
+ /********范围查询*****/
+
+ /********自定义扩展*****/
+
+ /********子对象*****/
+
+
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ProductsBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ProductsBo.java
new file mode 100644
index 0000000..41d1b47
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ProductsBo.java
@@ -0,0 +1,89 @@
+package org.dromara.productManagement.domain.bo;
+
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.math.BigDecimal;
+
+/**
+ * 视图对象类
+ *
+ * @author ZHB
+ * @date 2024-05-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class ProductsBo extends BaseEntity {
+ private String id;
+ /**
+ * 个人产品型号id
+ */
+ private String modelId;
+
+ /**
+ * 供应商id
+ */
+ private String supplierInformationId;
+
+ /**
+ * 产品名称
+ */
+ private String productName;
+
+ private String image;
+
+ /**
+ * 产品标识(型号)
+ */
+ private String productIdentity;
+
+ /**
+ * 产品价格
+ */
+ private BigDecimal productPrice;
+
+ /**
+ * 信息来源
+ */
+ private String sourceInformation;
+
+ /**
+ * 备注
+ */
+ private String remarks;
+
+ /**
+ * 关联厂商产品id
+ */
+ private String supplierProductsId;
+ /**
+ * 产品描述
+ */
+ private String productSpecifications;
+
+ /**
+ * 产品类型 (-1:全部, 0:供应商产品库, 1:公司产品库,2:个人产品库)
+ */
+ private String productType;
+ /********非库表存储属性*****/
+
+
+
+ /********字典类*****/
+
+ /********实体类、用户单选、组织机构单选*****/
+
+ /********范围查询*****/
+
+ /********自定义扩展*****/
+
+ /********子对象*****/
+
+
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/CmgCostItemDetailVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/CmgCostItemDetailVo.java
new file mode 100644
index 0000000..1e7c567
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/CmgCostItemDetailVo.java
@@ -0,0 +1,117 @@
+package org.dromara.productManagement.domain.vo;
+
+import java.math.BigDecimal;
+import org.dromara.productManagement.domain.CmgCostItemDetail;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 造价编制详情视图对象 cmg_cost_item_detail
+ *
+ * @author Lion Li
+ * @date 2024-06-29
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = CmgCostItemDetail.class)
+public class CmgCostItemDetailVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ExcelProperty(value = "主键")
+ private String id;
+
+ /**
+ * 造价表id
+ */
+ @ExcelProperty(value = "造价表id")
+ private String costTableId;
+
+ /**
+ * 父类id
+ */
+ @ExcelProperty(value = "父类id")
+ private String parentId;
+
+ /**
+ * 费用类型
+ */
+ @ExcelProperty(value = "费用类型")
+ private String costType;
+
+ /**
+ * 建设内容
+ */
+ @ExcelProperty(value = "建设内容")
+ private String constructContent;
+
+ /**
+ * 费用名称
+ */
+ @ExcelProperty(value = "费用名称")
+ private String costName;
+
+ /**
+ * 费用描述
+ */
+ @ExcelProperty(value = "费用描述")
+ private String costDescribe;
+
+ /**
+ * 单位
+ */
+ @ExcelProperty(value = "单位")
+ private String unit;
+
+ /**
+ * 数量
+ */
+ @ExcelProperty(value = "数量")
+ private Long quantity;
+
+ /**
+ * 单价
+ */
+ @ExcelProperty(value = "单价")
+ private BigDecimal unitPrice;
+
+ /**
+ * 总价
+ */
+ @ExcelProperty(value = "总价")
+ private BigDecimal totalPrice;
+
+ /**
+ * 是否明细
+ */
+ @ExcelProperty(value = "是否明细")
+ private String isDetail;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remarks;
+
+ /**
+ * 排序
+ */
+ @ExcelProperty(value = "排序")
+ private String orderNo;
+
+ private List children;
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/CmgCostTableVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/CmgCostTableVo.java
new file mode 100644
index 0000000..889b275
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/CmgCostTableVo.java
@@ -0,0 +1,59 @@
+package org.dromara.productManagement.domain.vo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.productManagement.domain.CmgCostTable;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 造价编制信息视图对象 cmg_cost_table
+ *
+ * @author Lion Li
+ * @date 2024-06-29
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = CmgCostTable.class)
+public class CmgCostTableVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ExcelProperty(value = "主键")
+ private String id;
+
+ /**
+ * 项目名称
+ */
+ @ExcelProperty(value = "项目名称")
+ private String projectName;
+
+ /**
+ * 造价日期
+ */
+ @ExcelProperty(value = "造价日期")
+ private Date costDate;
+
+ /**
+ * 总投资
+ */
+ @ExcelProperty(value = "总投资")
+ private BigDecimal totalInvestment;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/CostDetailViewVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/CostDetailViewVo.java
new file mode 100644
index 0000000..ed8b84e
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/CostDetailViewVo.java
@@ -0,0 +1,21 @@
+package org.dromara.productManagement.domain.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+@Data
+
+public class CostDetailViewVo {
+ private String id;
+ private String projectName;
+
+ private Date costDate;
+
+
+ private BigDecimal totalInvestment;
+ private List costItemDetailList;
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgCompanyProductModelDetailsVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgCompanyProductModelDetailsVo.java
new file mode 100644
index 0000000..1d495d9
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgCompanyProductModelDetailsVo.java
@@ -0,0 +1,68 @@
+package org.dromara.productManagement.domain.vo;
+
+import org.dromara.productManagement.domain.PmgCompanyProductModelDetails;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 公司产品模型详情表视图对象 pmg_company_product_model_details
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PmgCompanyProductModelDetails.class)
+public class PmgCompanyProductModelDetailsVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ExcelProperty(value = "主键")
+ private String id;
+
+ /**
+ * 公司产品型号表id
+ */
+ @ExcelProperty(value = "公司产品型号表id")
+ private String modelId;
+
+ /**
+ * 指标名称
+ */
+ @ExcelProperty(value = "指标名称")
+ private String paramName;
+
+ /**
+ * 指标参数
+ */
+ @ExcelProperty(value = "指标参数")
+ private String parameterValue;
+
+ /**
+ * 是否关键指标
+ */
+ @ExcelProperty(value = "是否关键指标")
+ private String isKeyParameter;
+
+ /**
+ * 是否临时数据
+ */
+ @ExcelProperty(value = "是否临时数据")
+ private String isTemporary;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgCompanyProductModelVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgCompanyProductModelVo.java
new file mode 100644
index 0000000..3d02b3b
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgCompanyProductModelVo.java
@@ -0,0 +1,56 @@
+package org.dromara.productManagement.domain.vo;
+
+import org.dromara.productManagement.domain.PmgCompanyProductModel;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 公司产品模型视图对象 pmg_company_product_model
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PmgCompanyProductModel.class)
+public class PmgCompanyProductModelVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ExcelProperty(value = "主键")
+ private String id;
+
+ /**
+ * 公司产品指标描述
+ */
+ @ExcelProperty(value = "公司产品指标描述")
+ private String description;
+
+ /**
+ * 产品型号模板id
+ */
+ @ExcelProperty(value = "产品型号模板id")
+ private String productModelTemplateId;
+
+ /**
+ * 是否临时数据
+ */
+ @ExcelProperty(value = "是否临时数据")
+ private String isTemporary;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgCompanyProductsVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgCompanyProductsVo.java
new file mode 100644
index 0000000..0d939f3
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgCompanyProductsVo.java
@@ -0,0 +1,124 @@
+package org.dromara.productManagement.domain.vo;
+
+import java.math.BigDecimal;
+import org.dromara.productManagement.domain.PmgCompanyProducts;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 公司产品管理视图对象 pmg_company_products
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PmgCompanyProducts.class)
+public class PmgCompanyProductsVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+ private String id;
+ /**
+ * 关联厂商产品id
+ */
+ @ExcelProperty(value = "关联厂商产品id")
+ private String supplierProductsId;
+
+ /**
+ * 供应商id
+ */
+ @ExcelProperty(value = "供应商id")
+ private String supplierInformationId;
+
+ /**
+ * 公司产品规格
+ */
+ @ExcelProperty(value = "公司产品规格")
+ private String productSpecifications;
+
+ /**
+ * 产品名称
+ */
+ @ExcelProperty(value = "产品名称")
+ private String productName;
+
+ /**
+ * 产品标识(型号)
+ */
+ @ExcelProperty(value = "产品标识", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "型=号")
+ private String productIdentity;
+
+ /**
+ * 产品价格
+ */
+ @ExcelProperty(value = "产品价格")
+ private BigDecimal productPrice;
+
+ /**
+ * 信息来源
+ */
+ @ExcelProperty(value = "信息来源")
+ private String sourceInformation;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remarks;
+
+ /**
+ * 图片
+ */
+ @ExcelProperty(value = "图片")
+ private String image;
+
+ /**
+ * 品牌
+ */
+ @ExcelProperty(value = "品牌")
+ private String brand;
+
+ /**
+ * 单位
+ */
+ @ExcelProperty(value = "单位")
+ private String unit;
+
+ /**
+ * 除税价
+ */
+ @ExcelProperty(value = "除税价")
+ private BigDecimal exTaxPrice;
+
+ /**
+ * 税率
+ */
+ @ExcelProperty(value = "税率")
+ private Long taxrate;
+
+ /**
+ * 分类id
+ */
+ @ExcelProperty(value = "分类id")
+ private String categoryId;
+
+ /**
+ * 型号id
+ */
+ @ExcelProperty(value = "型号id")
+ private String modelId;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgPersonProductModelDetailsVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgPersonProductModelDetailsVo.java
new file mode 100644
index 0000000..3e89b05
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgPersonProductModelDetailsVo.java
@@ -0,0 +1,68 @@
+package org.dromara.productManagement.domain.vo;
+
+import org.dromara.productManagement.domain.PmgPersonProductModelDetails;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 个人产品模型详情视图对象 pmg_person_product_model_details
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PmgPersonProductModelDetails.class)
+public class PmgPersonProductModelDetailsVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ExcelProperty(value = "主键")
+ private String id;
+
+ /**
+ * 个人产品型号表id
+ */
+ @ExcelProperty(value = "个人产品型号表id")
+ private String modelId;
+
+ /**
+ * 指标名称
+ */
+ @ExcelProperty(value = "指标名称")
+ private String paramName;
+
+ /**
+ * 指标参数
+ */
+ @ExcelProperty(value = "指标参数")
+ private String parameterValue;
+
+ /**
+ * 是否关键指标
+ */
+ @ExcelProperty(value = "是否关键指标")
+ private String isKeyParameter;
+
+ /**
+ * 是否临时数据
+ */
+ @ExcelProperty(value = "是否临时数据")
+ private String isTemporary;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgPersonProductModelVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgPersonProductModelVo.java
new file mode 100644
index 0000000..0cbc3a1
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgPersonProductModelVo.java
@@ -0,0 +1,56 @@
+package org.dromara.productManagement.domain.vo;
+
+import org.dromara.productManagement.domain.PmgPersonProductModel;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 个人产品模型视图对象 pmg_person_product_model
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PmgPersonProductModel.class)
+public class PmgPersonProductModelVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ExcelProperty(value = "主键")
+ private String id;
+
+ /**
+ * 个人产品指标描述
+ */
+ @ExcelProperty(value = "个人产品指标描述")
+ private String description;
+
+ /**
+ * 产品型号模板id
+ */
+ @ExcelProperty(value = "产品型号模板id")
+ private String productModelTemplateId;
+
+ /**
+ * 是否临时数据
+ */
+ @ExcelProperty(value = "是否临时数据")
+ private String isTemporary;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgPersonProductsVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgPersonProductsVo.java
new file mode 100644
index 0000000..0312903
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgPersonProductsVo.java
@@ -0,0 +1,129 @@
+package org.dromara.productManagement.domain.vo;
+
+import java.math.BigDecimal;
+import org.dromara.productManagement.domain.PmgPersonProducts;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 个人产品管理视图对象 pmg_person_products
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PmgPersonProducts.class)
+public class PmgPersonProductsVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ExcelProperty(value = "主键")
+ private String id;
+
+ /**
+ * 供应商id
+ */
+ @ExcelProperty(value = "供应商id")
+ private String supplierInformationId;
+
+ /**
+ * 产品名称
+ */
+ @ExcelProperty(value = "产品名称")
+ private String productName;
+
+ /**
+ * 产品标识(型号)
+ */
+ @ExcelProperty(value = "产品标识", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "型=号")
+ private String productIdentity;
+
+ /**
+ * 产品价格
+ */
+ @ExcelProperty(value = "产品价格")
+ private BigDecimal productPrice;
+
+ /**
+ * 信息来源
+ */
+ @ExcelProperty(value = "信息来源")
+ private String sourceInformation;
+
+ /**
+ * 个人产品规格
+ */
+ @ExcelProperty(value = "个人产品规格")
+ private String productSpecifications;
+
+ /**
+ * 关联厂商产品id
+ */
+ @ExcelProperty(value = "关联厂商产品id")
+ private String supplierProductsId;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remarks;
+
+ /**
+ * 图片
+ */
+ @ExcelProperty(value = "图片")
+ private String image;
+
+ /**
+ * 品牌
+ */
+ @ExcelProperty(value = "品牌")
+ private String brand;
+
+ /**
+ * 单位
+ */
+ @ExcelProperty(value = "单位")
+ private String unit;
+
+ /**
+ * 除税价
+ */
+ @ExcelProperty(value = "除税价")
+ private BigDecimal exTaxPrice;
+
+ /**
+ * 税率
+ */
+ @ExcelProperty(value = "税率")
+ private Long taxrate;
+
+ /**
+ * 分类id
+ */
+ @ExcelProperty(value = "分类id")
+ private String categoryId;
+
+ /**
+ * 型号id
+ */
+ @ExcelProperty(value = "型号id")
+ private String modelId;
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgSupplierInformationVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgSupplierInformationVo.java
new file mode 100644
index 0000000..191f28d
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgSupplierInformationVo.java
@@ -0,0 +1,69 @@
+package org.dromara.productManagement.domain.vo;
+
+import org.dromara.productManagement.domain.PmgSupplierInformation;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 供应商信息管理视图对象 pmg_supplier_information
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PmgSupplierInformation.class)
+public class PmgSupplierInformationVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ExcelProperty(value = "主键")
+ private String id;
+
+ /**
+ * 供应商名称
+ */
+ @ExcelProperty(value = "供应商名称")
+ private String supplierName;
+
+ /**
+ * 供应商联系人
+ */
+ @ExcelProperty(value = "供应商联系人")
+ private String supplierContacts;
+
+ /**
+ * 职位
+ */
+ @ExcelProperty(value = "职位")
+ private String position;
+
+ /**
+ * 供应商联系电话
+ */
+ @ExcelProperty(value = "供应商联系电话")
+ private String supplierContactsPhone;
+
+ /**
+ * 供应商类型
+ */
+ @ExcelProperty(value = "供应商类型", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "supplier_type")
+ private String supplierType;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgSupplierProductModelDetailsVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgSupplierProductModelDetailsVo.java
new file mode 100644
index 0000000..d5114c5
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgSupplierProductModelDetailsVo.java
@@ -0,0 +1,68 @@
+package org.dromara.productManagement.domain.vo;
+
+import org.dromara.productManagement.domain.PmgSupplierProductModelDetails;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 供应商产品模型详细视图对象 pmg_supplier_product_model_details
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PmgSupplierProductModelDetails.class)
+public class PmgSupplierProductModelDetailsVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ExcelProperty(value = "主键")
+ private String id;
+
+ /**
+ * 供应商产品型号表id
+ */
+ @ExcelProperty(value = "供应商产品型号表id")
+ private String modelId;
+
+ /**
+ * 指标名称
+ */
+ @ExcelProperty(value = "指标名称")
+ private String paramName;
+
+ /**
+ * 指标参数
+ */
+ @ExcelProperty(value = "指标参数")
+ private String parameterValue;
+
+ /**
+ * 是否关键指标
+ */
+ @ExcelProperty(value = "是否关键指标")
+ private String isKeyParameter;
+
+ /**
+ * 是否临时数据
+ */
+ @ExcelProperty(value = "是否临时数据")
+ private String isTemporary;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgSupplierProductModelVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgSupplierProductModelVo.java
new file mode 100644
index 0000000..258c5d0
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgSupplierProductModelVo.java
@@ -0,0 +1,56 @@
+package org.dromara.productManagement.domain.vo;
+
+import org.dromara.productManagement.domain.PmgSupplierProductModel;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 供应商产品模型视图对象 pmg_supplier_product_model
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PmgSupplierProductModel.class)
+public class PmgSupplierProductModelVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ExcelProperty(value = "主键")
+ private String id;
+
+ /**
+ * 供应商产品指标描述
+ */
+ @ExcelProperty(value = "供应商产品指标描述")
+ private String description;
+
+ /**
+ * 产品型号模板id
+ */
+ @ExcelProperty(value = "产品型号模板id")
+ private String productModelTemplateId;
+
+ /**
+ * 是否临时数据
+ */
+ @ExcelProperty(value = "是否临时数据")
+ private String isTemporary;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgSupplierProductsVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgSupplierProductsVo.java
new file mode 100644
index 0000000..5b523ff
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/PmgSupplierProductsVo.java
@@ -0,0 +1,119 @@
+package org.dromara.productManagement.domain.vo;
+
+import java.math.BigDecimal;
+import org.dromara.productManagement.domain.PmgSupplierProducts;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 供应商产品管理视图对象 pmg_supplier_products
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PmgSupplierProducts.class)
+public class PmgSupplierProductsVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+ private String id;
+
+ /**
+ * 供应商id
+ */
+ @ExcelProperty(value = "供应商id")
+ private String supplierInformationId;
+
+ /**
+ * 供应商产品规格
+ */
+ @ExcelProperty(value = "供应商产品规格")
+ private String productSpecifications;
+
+ /**
+ * 产品名称
+ */
+ @ExcelProperty(value = "产品名称")
+ private String productName;
+
+ /**
+ * 产品标识(型号)
+ */
+ @ExcelProperty(value = "产品标识", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "型=号")
+ private String productIdentity;
+
+ /**
+ * 产品价格
+ */
+ @ExcelProperty(value = "产品价格")
+ private BigDecimal productPrice;
+
+ /**
+ * 信息来源
+ */
+ @ExcelProperty(value = "信息来源")
+ private String sourceInformation;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remarks;
+
+ /**
+ * 图片
+ */
+ @ExcelProperty(value = "图片")
+ private String image;
+
+ /**
+ * 品牌
+ */
+ @ExcelProperty(value = "品牌")
+ private String brand;
+
+ /**
+ * 单位
+ */
+ @ExcelProperty(value = "单位")
+ private String unit;
+
+ /**
+ * 除税价
+ */
+ @ExcelProperty(value = "除税价")
+ private BigDecimal exTaxPrice;
+
+ /**
+ * 税率
+ */
+ @ExcelProperty(value = "税率")
+ private Long taxrate;
+
+ /**
+ * 分类id
+ */
+ @ExcelProperty(value = "分类id")
+ private String categoryId;
+
+ /**
+ * 型号id
+ */
+ @ExcelProperty(value = "型号id")
+ private String modelId;
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ProductsVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ProductsVo.java
new file mode 100644
index 0000000..f1c2999
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ProductsVo.java
@@ -0,0 +1,93 @@
+package org.dromara.productManagement.domain.vo;
+
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.math.BigDecimal;
+
+/**
+ * 视图对象类
+ *
+ * @author ZHB
+ * @date 2024-05-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class ProductsVo extends BaseEntity {
+ private String id;
+ /**
+ * 个人产品型号id
+ */
+ private String modelId;
+
+ /**
+ * 供应商id
+ */
+ private String supplierInformationId;
+
+ /**
+ * 产品名称
+ */
+ private String productName;
+
+ private String image;
+
+ /**
+ * 产品标识(型号)
+ */
+ private String productIdentity;
+
+ /**
+ * 产品价格
+ */
+ private BigDecimal productPrice;
+
+ /**
+ * 信息来源
+ */
+ private String sourceInformation;
+
+ /**
+ * 备注
+ */
+ private String remarks;
+
+ /**
+ * 关联厂商产品id
+ */
+ private String supplierProductsId;
+ /**
+ * 产品描述
+ */
+ private String productSpecifications;
+
+ /**
+ * 产品类型 (-1:全部, 0:供应商产品库, 1:公司产品库,2:个人产品库)
+ */
+ private String productType;
+ /**
+ * 单位
+ */
+ private String unit;
+
+ /********非库表存储属性*****/
+
+
+ /********字典类*****/
+
+ /********实体类、用户单选、组织机构单选*****/
+
+ /********范围查询*****/
+
+ /********自定义扩展*****/
+
+ /********子对象*****/
+
+
+
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/CmgCostItemDetailMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/CmgCostItemDetailMapper.java
new file mode 100644
index 0000000..7c106e6
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/CmgCostItemDetailMapper.java
@@ -0,0 +1,25 @@
+package org.dromara.productManagement.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.productManagement.domain.CmgCostItemDetail;
+import org.dromara.productManagement.domain.bo.ProductsBo;
+import org.dromara.productManagement.domain.vo.CmgCostItemDetailVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.productManagement.domain.vo.ProductsVo;
+
+import java.util.List;
+
+/**
+ * 造价编制详情Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-06-29
+ */
+public interface CmgCostItemDetailMapper extends BaseMapperPlus {
+ List getCostItemDetailWithChildrenByCostTableId(String costTableId);
+ IPage getProductsPageByType(Page pageQuery, @Param("queryVO") ProductsBo bo);
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/CmgCostTableMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/CmgCostTableMapper.java
new file mode 100644
index 0000000..ec9822d
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/CmgCostTableMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.productManagement.mapper;
+
+import org.dromara.productManagement.domain.CmgCostTable;
+import org.dromara.productManagement.domain.vo.CmgCostTableVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 造价编制信息Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-06-29
+ */
+public interface CmgCostTableMapper extends BaseMapperPlus {
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgCompanyProductModelDetailsMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgCompanyProductModelDetailsMapper.java
new file mode 100644
index 0000000..5b9ae72
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgCompanyProductModelDetailsMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.productManagement.mapper;
+
+import org.dromara.productManagement.domain.PmgCompanyProductModelDetails;
+import org.dromara.productManagement.domain.vo.PmgCompanyProductModelDetailsVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 公司产品模型详情表Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+public interface PmgCompanyProductModelDetailsMapper extends BaseMapperPlus {
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgCompanyProductModelMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgCompanyProductModelMapper.java
new file mode 100644
index 0000000..7542fce
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgCompanyProductModelMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.productManagement.mapper;
+
+import org.dromara.productManagement.domain.PmgCompanyProductModel;
+import org.dromara.productManagement.domain.vo.PmgCompanyProductModelVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 公司产品模型Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+public interface PmgCompanyProductModelMapper extends BaseMapperPlus {
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgCompanyProductsMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgCompanyProductsMapper.java
new file mode 100644
index 0000000..255dbee
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgCompanyProductsMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.productManagement.mapper;
+
+import org.dromara.productManagement.domain.PmgCompanyProducts;
+import org.dromara.productManagement.domain.vo.PmgCompanyProductsVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 公司产品管理Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+public interface PmgCompanyProductsMapper extends BaseMapperPlus {
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgPersonProductModelDetailsMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgPersonProductModelDetailsMapper.java
new file mode 100644
index 0000000..bffa7fe
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgPersonProductModelDetailsMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.productManagement.mapper;
+
+import org.dromara.productManagement.domain.PmgPersonProductModelDetails;
+import org.dromara.productManagement.domain.vo.PmgPersonProductModelDetailsVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 个人产品模型详情Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+public interface PmgPersonProductModelDetailsMapper extends BaseMapperPlus {
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgPersonProductModelMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgPersonProductModelMapper.java
new file mode 100644
index 0000000..4ba5971
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgPersonProductModelMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.productManagement.mapper;
+
+import org.dromara.productManagement.domain.PmgPersonProductModel;
+import org.dromara.productManagement.domain.vo.PmgPersonProductModelVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 个人产品模型Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+public interface PmgPersonProductModelMapper extends BaseMapperPlus {
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgPersonProductsMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgPersonProductsMapper.java
new file mode 100644
index 0000000..00144dc
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgPersonProductsMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.productManagement.mapper;
+
+import org.dromara.productManagement.domain.PmgPersonProducts;
+import org.dromara.productManagement.domain.vo.PmgPersonProductsVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 个人产品管理Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+public interface PmgPersonProductsMapper extends BaseMapperPlus {
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgSupplierInformationMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgSupplierInformationMapper.java
new file mode 100644
index 0000000..0f5a197
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgSupplierInformationMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.productManagement.mapper;
+
+import org.dromara.productManagement.domain.PmgSupplierInformation;
+import org.dromara.productManagement.domain.vo.PmgSupplierInformationVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 供应商信息管理Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+public interface PmgSupplierInformationMapper extends BaseMapperPlus {
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgSupplierProductModelDetailsMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgSupplierProductModelDetailsMapper.java
new file mode 100644
index 0000000..c96c59c
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgSupplierProductModelDetailsMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.productManagement.mapper;
+
+import org.dromara.productManagement.domain.PmgSupplierProductModelDetails;
+import org.dromara.productManagement.domain.vo.PmgSupplierProductModelDetailsVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 供应商产品模型详细Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+public interface PmgSupplierProductModelDetailsMapper extends BaseMapperPlus {
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgSupplierProductModelMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgSupplierProductModelMapper.java
new file mode 100644
index 0000000..863965b
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgSupplierProductModelMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.productManagement.mapper;
+
+import org.dromara.productManagement.domain.PmgSupplierProductModel;
+import org.dromara.productManagement.domain.vo.PmgSupplierProductModelVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 供应商产品模型Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+public interface PmgSupplierProductModelMapper extends BaseMapperPlus {
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgSupplierProductsMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgSupplierProductsMapper.java
new file mode 100644
index 0000000..f224b07
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgSupplierProductsMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.productManagement.mapper;
+
+import org.dromara.productManagement.domain.PmgSupplierProducts;
+import org.dromara.productManagement.domain.vo.PmgSupplierProductsVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 供应商产品管理Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+public interface PmgSupplierProductsMapper extends BaseMapperPlus {
+
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/ICmgCostItemDetailService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/ICmgCostItemDetailService.java
new file mode 100644
index 0000000..8754f67
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/ICmgCostItemDetailService.java
@@ -0,0 +1,79 @@
+package org.dromara.productManagement.service;
+
+import org.dromara.productManagement.domain.bo.ProductsBo;
+import org.dromara.productManagement.domain.vo.CmgCostItemDetailVo;
+import org.dromara.productManagement.domain.bo.CmgCostItemDetailBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.productManagement.domain.vo.CostDetailViewVo;
+import org.dromara.productManagement.domain.vo.ProductsVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 造价编制详情Service接口
+ *
+ * @author Lion Li
+ * @date 2024-06-29
+ */
+public interface ICmgCostItemDetailService {
+ void addCostItemDetail(List costItemDetaiVOlList);
+
+ List getCostItemDetail(String costTableId);
+
+ void modifyCostItemDetail(List costItemDetaiVOlList);
+
+ void removeByCostTableId(Collection costTableIds);
+ /**
+ * 查询造价编制详情
+ *
+ * @param id 主键
+ * @return 造价编制详情
+ */
+ CmgCostItemDetailVo queryById(String id);
+
+ /**
+ * 分页查询造价编制详情列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 造价编制详情分页列表
+ */
+ TableDataInfo queryPageList(CmgCostItemDetailBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的造价编制详情列表
+ *
+ * @param bo 查询条件
+ * @return 造价编制详情列表
+ */
+ List queryList(CmgCostItemDetailBo bo);
+
+ /**
+ * 新增造价编制详情
+ *
+ * @param bo 造价编制详情
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(CmgCostItemDetailBo bo);
+
+ /**
+ * 修改造价编制详情
+ *
+ * @param bo 造价编制详情
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(CmgCostItemDetailBo bo);
+
+ /**
+ * 校验并批量删除造价编制详情信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+
+ TableDataInfo getProductsPageByType(ProductsBo bo, PageQuery pageQuery);
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/ICmgCostTableService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/ICmgCostTableService.java
new file mode 100644
index 0000000..4eddcfa
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/ICmgCostTableService.java
@@ -0,0 +1,79 @@
+package org.dromara.productManagement.service;
+
+import jakarta.servlet.http.HttpServletResponse;
+import org.dromara.productManagement.domain.vo.CmgCostTableVo;
+import org.dromara.productManagement.domain.bo.CmgCostTableBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.productManagement.domain.vo.CostDetailViewVo;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 造价编制信息Service接口
+ *
+ * @author Lion Li
+ * @date 2024-06-29
+ */
+public interface ICmgCostTableService {
+
+ /**
+ * 查询造价编制信息
+ *
+ * @param id 主键
+ * @return 造价编制信息
+ */
+ CmgCostTableVo queryById(String id);
+
+ /**
+ * 分页查询造价编制信息列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 造价编制信息分页列表
+ */
+ TableDataInfo queryPageList(CmgCostTableBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的造价编制信息列表
+ *
+ * @param bo 查询条件
+ * @return 造价编制信息列表
+ */
+ List queryList(CmgCostTableBo bo);
+
+ /**
+ * 新增造价编制信息
+ *
+ * @param bo 造价编制信息
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(CmgCostTableBo bo);
+
+ /**
+ * 修改造价编制信息
+ *
+ * @param bo 造价编制信息
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(CmgCostTableBo bo);
+
+ /**
+ * 校验并批量删除造价编制信息信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+
+ CostDetailViewVo getCostTableDetail(String id);
+
+ void addCostTable(CostDetailViewVo vo);
+
+ void modifyCostTable(CostDetailViewVo vo);
+
+ void exportData(String id, HttpServletResponse response) throws IOException;;
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgCompanyProductModelDetailsService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgCompanyProductModelDetailsService.java
new file mode 100644
index 0000000..1beca23
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgCompanyProductModelDetailsService.java
@@ -0,0 +1,68 @@
+package org.dromara.productManagement.service;
+
+import org.dromara.productManagement.domain.vo.PmgCompanyProductModelDetailsVo;
+import org.dromara.productManagement.domain.bo.PmgCompanyProductModelDetailsBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 公司产品模型详情表Service接口
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+public interface IPmgCompanyProductModelDetailsService {
+
+ /**
+ * 查询公司产品模型详情表
+ *
+ * @param id 主键
+ * @return 公司产品模型详情表
+ */
+ PmgCompanyProductModelDetailsVo queryById(String id);
+
+ /**
+ * 分页查询公司产品模型详情表列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 公司产品模型详情表分页列表
+ */
+ TableDataInfo queryPageList(PmgCompanyProductModelDetailsBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的公司产品模型详情表列表
+ *
+ * @param bo 查询条件
+ * @return 公司产品模型详情表列表
+ */
+ List queryList(PmgCompanyProductModelDetailsBo bo);
+
+ /**
+ * 新增公司产品模型详情表
+ *
+ * @param bo 公司产品模型详情表
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(PmgCompanyProductModelDetailsBo bo);
+
+ /**
+ * 修改公司产品模型详情表
+ *
+ * @param bo 公司产品模型详情表
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(PmgCompanyProductModelDetailsBo bo);
+
+ /**
+ * 校验并批量删除公司产品模型详情表信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgCompanyProductModelService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgCompanyProductModelService.java
new file mode 100644
index 0000000..85a953b
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgCompanyProductModelService.java
@@ -0,0 +1,91 @@
+package org.dromara.productManagement.service;
+
+import org.dromara.productManagement.domain.bo.PmgCompanyProductModelDetailsBo;
+import org.dromara.productManagement.domain.bo.ProductModelViewBo;
+import org.dromara.productManagement.domain.vo.PmgCompanyProductModelVo;
+import org.dromara.productManagement.domain.bo.PmgCompanyProductModelBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.productManagement.domain.vo.PmgCompanyProductModelDetailsVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 公司产品模型Service接口
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+public interface IPmgCompanyProductModelService {
+
+ /**
+ * 查询公司产品模型
+ *
+ * @param id 主键
+ * @return 公司产品模型
+ */
+ PmgCompanyProductModelVo queryById(String id);
+
+ /**
+ * 分页查询公司产品模型列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 公司产品模型分页列表
+ */
+ TableDataInfo queryPageList(PmgCompanyProductModelBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的公司产品模型列表
+ *
+ * @param bo 查询条件
+ * @return 公司产品模型列表
+ */
+ List queryList(PmgCompanyProductModelBo bo);
+
+ /**
+ * 新增公司产品模型
+ *
+ * @param bo 公司产品模型
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(PmgCompanyProductModelBo bo);
+
+ /**
+ * 修改公司产品模型
+ *
+ * @param bo 公司产品模型
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(PmgCompanyProductModelBo bo);
+
+ /**
+ * 校验并批量删除公司产品模型信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+ /**
+ * 根据id查询公司产品模型详情
+ * @param id 个人产品模型表id
+ * @return
+ */
+ List getModelDetails(String id);
+
+ /**
+ * 新增公司产品模型及其详情
+ * @param bo
+ * @return
+ */
+ String addModel(ProductModelViewBo bo);
+
+ /**
+ * 修改公司产品模型及其详情
+ * @param bo
+ * @return
+ */
+ String editModel(ProductModelViewBo bo);
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgCompanyProductsService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgCompanyProductsService.java
new file mode 100644
index 0000000..a8759aa
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgCompanyProductsService.java
@@ -0,0 +1,68 @@
+package org.dromara.productManagement.service;
+
+import org.dromara.productManagement.domain.vo.PmgCompanyProductsVo;
+import org.dromara.productManagement.domain.bo.PmgCompanyProductsBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 公司产品管理Service接口
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+public interface IPmgCompanyProductsService {
+
+ /**
+ * 查询公司产品管理
+ *
+ * @param id 主键
+ * @return 公司产品管理
+ */
+ PmgCompanyProductsVo queryById(String id);
+
+ /**
+ * 分页查询公司产品管理列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 公司产品管理分页列表
+ */
+ TableDataInfo queryPageList(PmgCompanyProductsBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的公司产品管理列表
+ *
+ * @param bo 查询条件
+ * @return 公司产品管理列表
+ */
+ List queryList(PmgCompanyProductsBo bo);
+
+ /**
+ * 新增公司产品管理
+ *
+ * @param bo 公司产品管理
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(PmgCompanyProductsBo bo);
+
+ /**
+ * 修改公司产品管理
+ *
+ * @param bo 公司产品管理
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(PmgCompanyProductsBo bo);
+
+ /**
+ * 校验并批量删除公司产品管理信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgPersonProductModelDetailsService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgPersonProductModelDetailsService.java
new file mode 100644
index 0000000..fd92533
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgPersonProductModelDetailsService.java
@@ -0,0 +1,68 @@
+package org.dromara.productManagement.service;
+
+import org.dromara.productManagement.domain.vo.PmgPersonProductModelDetailsVo;
+import org.dromara.productManagement.domain.bo.PmgPersonProductModelDetailsBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 个人产品模型详情Service接口
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+public interface IPmgPersonProductModelDetailsService {
+
+ /**
+ * 查询个人产品模型详情
+ *
+ * @param id 主键
+ * @return 个人产品模型详情
+ */
+ PmgPersonProductModelDetailsVo queryById(String id);
+
+ /**
+ * 分页查询个人产品模型详情列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 个人产品模型详情分页列表
+ */
+ TableDataInfo queryPageList(PmgPersonProductModelDetailsBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的个人产品模型详情列表
+ *
+ * @param bo 查询条件
+ * @return 个人产品模型详情列表
+ */
+ List queryList(PmgPersonProductModelDetailsBo bo);
+
+ /**
+ * 新增个人产品模型详情
+ *
+ * @param bo 个人产品模型详情
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(PmgPersonProductModelDetailsBo bo);
+
+ /**
+ * 修改个人产品模型详情
+ *
+ * @param bo 个人产品模型详情
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(PmgPersonProductModelDetailsBo bo);
+
+ /**
+ * 校验并批量删除个人产品模型详情信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgPersonProductModelService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgPersonProductModelService.java
new file mode 100644
index 0000000..d53e1fa
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgPersonProductModelService.java
@@ -0,0 +1,92 @@
+package org.dromara.productManagement.service;
+
+import org.dromara.productManagement.domain.bo.PmgPersonProductModelDetailsBo;
+import org.dromara.productManagement.domain.bo.ProductModelViewBo;
+import org.dromara.productManagement.domain.vo.PmgPersonProductModelDetailsVo;
+import org.dromara.productManagement.domain.vo.PmgPersonProductModelVo;
+import org.dromara.productManagement.domain.bo.PmgPersonProductModelBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 个人产品模型Service接口
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+public interface IPmgPersonProductModelService {
+
+ /**
+ * 查询个人产品模型
+ *
+ * @param id 主键
+ * @return 个人产品模型
+ */
+ PmgPersonProductModelVo queryById(String id);
+
+ /**
+ * 分页查询个人产品模型列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 个人产品模型分页列表
+ */
+ TableDataInfo queryPageList(PmgPersonProductModelBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的个人产品模型列表
+ *
+ * @param bo 查询条件
+ * @return 个人产品模型列表
+ */
+ List queryList(PmgPersonProductModelBo bo);
+
+ /**
+ * 新增个人产品模型
+ *
+ * @param bo 个人产品模型
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(PmgPersonProductModelBo bo);
+
+ /**
+ * 修改个人产品模型
+ *
+ * @param bo 个人产品模型
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(PmgPersonProductModelBo bo);
+
+ /**
+ * 校验并批量删除个人产品模型信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+
+ /**
+ * 根据id查询个人产品模型详情
+ * @param id 个人产品模型表id
+ * @return
+ */
+ List getModelDetails(String id);
+
+ /**
+ * 新增个人产品模型及其详情
+ * @param bo
+ * @return
+ */
+ String addModel(ProductModelViewBo bo);
+
+ /**
+ * 修改个人产品模型及其详情
+ * @param bo
+ * @return
+ */
+ String editModel(ProductModelViewBo bo);
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgPersonProductsService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgPersonProductsService.java
new file mode 100644
index 0000000..38a4319
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgPersonProductsService.java
@@ -0,0 +1,68 @@
+package org.dromara.productManagement.service;
+
+import org.dromara.productManagement.domain.vo.PmgPersonProductsVo;
+import org.dromara.productManagement.domain.bo.PmgPersonProductsBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 个人产品管理Service接口
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+public interface IPmgPersonProductsService {
+
+ /**
+ * 查询个人产品管理
+ *
+ * @param id 主键
+ * @return 个人产品管理
+ */
+ PmgPersonProductsVo queryById(String id);
+
+ /**
+ * 分页查询个人产品管理列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 个人产品管理分页列表
+ */
+ TableDataInfo queryPageList(PmgPersonProductsBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的个人产品管理列表
+ *
+ * @param bo 查询条件
+ * @return 个人产品管理列表
+ */
+ List queryList(PmgPersonProductsBo bo);
+
+ /**
+ * 新增个人产品管理
+ *
+ * @param bo 个人产品管理
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(PmgPersonProductsBo bo);
+
+ /**
+ * 修改个人产品管理
+ *
+ * @param bo 个人产品管理
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(PmgPersonProductsBo bo);
+
+ /**
+ * 校验并批量删除个人产品管理信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgSupplierInformationService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgSupplierInformationService.java
new file mode 100644
index 0000000..2f2e477
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgSupplierInformationService.java
@@ -0,0 +1,68 @@
+package org.dromara.productManagement.service;
+
+import org.dromara.productManagement.domain.vo.PmgSupplierInformationVo;
+import org.dromara.productManagement.domain.bo.PmgSupplierInformationBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 供应商信息管理Service接口
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+public interface IPmgSupplierInformationService {
+
+ /**
+ * 查询供应商信息管理
+ *
+ * @param id 主键
+ * @return 供应商信息管理
+ */
+ PmgSupplierInformationVo queryById(String id);
+
+ /**
+ * 分页查询供应商信息管理列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 供应商信息管理分页列表
+ */
+ TableDataInfo queryPageList(PmgSupplierInformationBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的供应商信息管理列表
+ *
+ * @param bo 查询条件
+ * @return 供应商信息管理列表
+ */
+ List queryList(PmgSupplierInformationBo bo);
+
+ /**
+ * 新增供应商信息管理
+ *
+ * @param bo 供应商信息管理
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(PmgSupplierInformationBo bo);
+
+ /**
+ * 修改供应商信息管理
+ *
+ * @param bo 供应商信息管理
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(PmgSupplierInformationBo bo);
+
+ /**
+ * 校验并批量删除供应商信息管理信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgSupplierProductModelDetailsService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgSupplierProductModelDetailsService.java
new file mode 100644
index 0000000..2d46552
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgSupplierProductModelDetailsService.java
@@ -0,0 +1,68 @@
+package org.dromara.productManagement.service;
+
+import org.dromara.productManagement.domain.vo.PmgSupplierProductModelDetailsVo;
+import org.dromara.productManagement.domain.bo.PmgSupplierProductModelDetailsBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 供应商产品模型详细Service接口
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+public interface IPmgSupplierProductModelDetailsService {
+
+ /**
+ * 查询供应商产品模型详细
+ *
+ * @param id 主键
+ * @return 供应商产品模型详细
+ */
+ PmgSupplierProductModelDetailsVo queryById(String id);
+
+ /**
+ * 分页查询供应商产品模型详细列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 供应商产品模型详细分页列表
+ */
+ TableDataInfo queryPageList(PmgSupplierProductModelDetailsBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的供应商产品模型详细列表
+ *
+ * @param bo 查询条件
+ * @return 供应商产品模型详细列表
+ */
+ List queryList(PmgSupplierProductModelDetailsBo bo);
+
+ /**
+ * 新增供应商产品模型详细
+ *
+ * @param bo 供应商产品模型详细
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(PmgSupplierProductModelDetailsBo bo);
+
+ /**
+ * 修改供应商产品模型详细
+ *
+ * @param bo 供应商产品模型详细
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(PmgSupplierProductModelDetailsBo bo);
+
+ /**
+ * 校验并批量删除供应商产品模型详细信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgSupplierProductModelService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgSupplierProductModelService.java
new file mode 100644
index 0000000..fadc908
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgSupplierProductModelService.java
@@ -0,0 +1,91 @@
+package org.dromara.productManagement.service;
+
+import org.dromara.productManagement.domain.bo.PmgSupplierProductModelDetailsBo;
+import org.dromara.productManagement.domain.bo.ProductModelViewBo;
+import org.dromara.productManagement.domain.vo.PmgSupplierProductModelDetailsVo;
+import org.dromara.productManagement.domain.vo.PmgSupplierProductModelVo;
+import org.dromara.productManagement.domain.bo.PmgSupplierProductModelBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 供应商产品模型Service接口
+ *
+ * @author Lion Li
+ * @date 2024-07-01
+ */
+public interface IPmgSupplierProductModelService {
+
+ /**
+ * 查询供应商产品模型
+ *
+ * @param id 主键
+ * @return 供应商产品模型
+ */
+ PmgSupplierProductModelVo queryById(String id);
+
+ /**
+ * 分页查询供应商产品模型列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 供应商产品模型分页列表
+ */
+ TableDataInfo queryPageList(PmgSupplierProductModelBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的供应商产品模型列表
+ *
+ * @param bo 查询条件
+ * @return 供应商产品模型列表
+ */
+ List queryList(PmgSupplierProductModelBo bo);
+
+ /**
+ * 新增供应商产品模型
+ *
+ * @param bo 供应商产品模型
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(PmgSupplierProductModelBo bo);
+
+ /**
+ * 修改供应商产品模型
+ *
+ * @param bo 供应商产品模型
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(PmgSupplierProductModelBo bo);
+
+ /**
+ * 校验并批量删除供应商产品模型信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+ /**
+ * 根据id查询供应商产品模型详情
+ * @param id 供应商产品模型表id
+ * @return
+ */
+ List getModelDetails(String id);
+
+ /**
+ * 新增供应商产品模型及其详情
+ * @param bo
+ * @return
+ */
+ String addModel(ProductModelViewBo bo);
+
+ /**
+ * 修改供应商产品模型及其详情
+ * @param bo
+ * @return
+ */
+ String editModel(ProductModelViewBo bo);
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgSupplierProductsService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgSupplierProductsService.java
new file mode 100644
index 0000000..9ea1e0c
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IPmgSupplierProductsService.java
@@ -0,0 +1,68 @@
+package org.dromara.productManagement.service;
+
+import org.dromara.productManagement.domain.vo.PmgSupplierProductsVo;
+import org.dromara.productManagement.domain.bo.PmgSupplierProductsBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 供应商产品管理Service接口
+ *
+ * @author Lion Li
+ * @date 2024-06-28
+ */
+public interface IPmgSupplierProductsService {
+
+ /**
+ * 查询供应商产品管理
+ *
+ * @param id 主键
+ * @return 供应商产品管理
+ */
+ PmgSupplierProductsVo queryById(String id);
+
+ /**
+ * 分页查询供应商产品管理列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 供应商产品管理分页列表
+ */
+ TableDataInfo queryPageList(PmgSupplierProductsBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的供应商产品管理列表
+ *
+ * @param bo 查询条件
+ * @return 供应商产品管理列表
+ */
+ List queryList(PmgSupplierProductsBo bo);
+
+ /**
+ * 新增供应商产品管理
+ *
+ * @param bo 供应商产品管理
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(PmgSupplierProductsBo bo);
+
+ /**
+ * 修改供应商产品管理
+ *
+ * @param bo 供应商产品管理
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(PmgSupplierProductsBo bo);
+
+ /**
+ * 校验并批量删除供应商产品管理信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/CmgCostItemDetailServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/CmgCostItemDetailServiceImpl.java
new file mode 100644
index 0000000..ac9e440
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/CmgCostItemDetailServiceImpl.java
@@ -0,0 +1,211 @@
+package org.dromara.productManagement.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.dromara.productManagement.domain.bo.ProductsBo;
+import org.dromara.productManagement.domain.vo.CmgCostItemDetailVo;
+import org.dromara.productManagement.domain.vo.ProductsVo;
+import org.springframework.stereotype.Service;
+import org.dromara.productManagement.domain.bo.CmgCostItemDetailBo;
+import org.dromara.productManagement.domain.vo.CmgCostItemDetailVo;
+import org.dromara.productManagement.domain.CmgCostItemDetail;
+import org.dromara.productManagement.mapper.CmgCostItemDetailMapper;
+import org.dromara.productManagement.service.ICmgCostItemDetailService;
+
+import java.util.*;
+
+/**
+ * 造价编制详情Service业务层处理
+ *
+ * @author Lion Li
+ * @date 2024-06-29
+ */
+@RequiredArgsConstructor
+@Service
+public class CmgCostItemDetailServiceImpl implements ICmgCostItemDetailService {
+
+ private final CmgCostItemDetailMapper baseMapper;
+ @Override
+ public void addCostItemDetail(List costItemDetaiVOlList) {
+ if (CollUtil.isEmpty(costItemDetaiVOlList)) {
+ return;
+ }
+ List costItemDetailList = new ArrayList<>();
+ for (CmgCostItemDetailVo costItemDetailVO : costItemDetaiVOlList) {
+ //获取子类内容加入到List
+ getChildAddToList(costItemDetailVO, costItemDetailList);
+ CmgCostItemDetail costItemDetail = MapstructUtils.convert(costItemDetailVO, CmgCostItemDetail.class);
+ costItemDetailList.add(costItemDetail);
+
+ }
+ //批量保存
+ baseMapper.insertBatch(costItemDetailList);
+ }
+
+ @Override
+ public List getCostItemDetail(String costTableId) {
+ List detail = baseMapper.getCostItemDetailWithChildrenByCostTableId(costTableId);
+ return detail;
+ }
+
+ @Override
+ public void modifyCostItemDetail(List costItemDetaiVOlList) {
+ String costTableId = costItemDetaiVOlList.get(0).getCostTableId();
+ removeByCostTableId(Arrays.asList(costTableId));
+ if (CollUtil.isEmpty(costItemDetaiVOlList)) {
+ return;
+ }
+ List costItemDetailList = new ArrayList<>();
+ for (CmgCostItemDetailVo costItemDetailVO : costItemDetaiVOlList) {
+ //获取子类内容加入到List
+ getChildAddToList(costItemDetailVO, costItemDetailList);
+
+
+ CmgCostItemDetail costItemDetail = MapstructUtils.convert(costItemDetailVO, CmgCostItemDetail.class);
+ costItemDetail.setUpdateBy(null);
+ costItemDetail.setUpdateTime(null);
+ costItemDetailList.add(costItemDetail);
+
+ }
+ //批量保存
+ baseMapper.insertBatch(costItemDetailList);
+ }
+
+ @Override
+ public void removeByCostTableId(Collection costTableIds) {
+ for (String costTableId : costTableIds) {
+ LambdaUpdateWrapper deleteWrapper = new LambdaUpdateWrapper<>();
+ deleteWrapper.eq(CmgCostItemDetail::getCostTableId, costTableId);
+ baseMapper.delete(deleteWrapper);//删除原有数据
+ }
+
+ }
+ /**
+ * 查询造价编制详情
+ *
+ * @param id 主键
+ * @return 造价编制详情
+ */
+ @Override
+ public CmgCostItemDetailVo queryById(String id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 分页查询造价编制详情列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 造价编制详情分页列表
+ */
+ @Override
+ public TableDataInfo queryPageList(CmgCostItemDetailBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询符合条件的造价编制详情列表
+ *
+ * @param bo 查询条件
+ * @return 造价编制详情列表
+ */
+ @Override
+ public List queryList(CmgCostItemDetailBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(CmgCostItemDetailBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ return lqw;
+ }
+
+ /**
+ * 新增造价编制详情
+ *
+ * @param bo 造价编制详情
+ * @return 是否新增成功
+ */
+ @Override
+ public Boolean insertByBo(CmgCostItemDetailBo bo) {
+ CmgCostItemDetail add = MapstructUtils.convert(bo, CmgCostItemDetail.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改造价编制详情
+ *
+ * @param bo 造价编制详情
+ * @return 是否修改成功
+ */
+ @Override
+ public Boolean updateByBo(CmgCostItemDetailBo bo) {
+ CmgCostItemDetail update = MapstructUtils.convert(bo, CmgCostItemDetail.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(CmgCostItemDetail entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 校验并批量删除造价编制详情信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+
+ @Override
+ public TableDataInfo getProductsPageByType(ProductsBo bo, PageQuery pageQuery) {
+ IPage productsPageByType = baseMapper.getProductsPageByType(pageQuery.build(), bo);
+ return TableDataInfo.build(productsPageByType);
+ }
+
+ /**
+ * 获取子类内容加入到List
+ * @param costItemDetailVO costItemDetailVO
+ * @param costItemDetailList costItemDetail保存容器
+ */
+ protected void getChildAddToList(CmgCostItemDetailVo costItemDetailVO, List costItemDetailList) {
+ if (CollUtil.isEmpty(costItemDetailVO.getChildren())) {
+ return;
+ }
+ for (CmgCostItemDetailVo child : costItemDetailVO.getChildren()) {
+ getChildAddToList(child, costItemDetailList);
+ //子类内容
+ CmgCostItemDetail childCostItemDetail = MapstructUtils.convert(child, CmgCostItemDetail.class);
+ childCostItemDetail.setUpdateBy(null);
+ childCostItemDetail.setUpdateTime(null);
+ costItemDetailList.add(childCostItemDetail);
+ }
+ }
+}
diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/CmgCostTableServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/CmgCostTableServiceImpl.java
new file mode 100644
index 0000000..a0d5177
--- /dev/null
+++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/CmgCostTableServiceImpl.java
@@ -0,0 +1,310 @@
+package org.dromara.productManagement.service.impl;
+
+import cn.hutool.core.convert.NumberChineseFormatter;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import jakarta.servlet.http.HttpServletResponse;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.excel.utils.EasyExcelUtils;
+import org.dromara.common.excel.utils.ExcelColumnMergeHandler;
+import org.dromara.common.excel.utils.ExcelRowMergeHandler;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.dromara.productManagement.domain.vo.CmgCostItemDetailVo;
+import org.dromara.productManagement.domain.vo.CostDetailViewVo;
+import org.dromara.productManagement.mapper.CmgCostItemDetailMapper;
+import org.dromara.productManagement.service.ICmgCostItemDetailService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.dromara.productManagement.domain.bo.CmgCostTableBo;
+import org.dromara.productManagement.domain.vo.CmgCostTableVo;
+import org.dromara.productManagement.domain.CmgCostTable;
+import org.dromara.productManagement.mapper.CmgCostTableMapper;
+import org.dromara.productManagement.service.ICmgCostTableService;
+
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.*;
+
+/**
+ * 造价编制信息Service业务层处理
+ *
+ * @author Lion Li
+ * @date 2024-06-29
+ */
+@RequiredArgsConstructor
+@Service
+public class CmgCostTableServiceImpl implements ICmgCostTableService {
+
+ private final CmgCostTableMapper baseMapper;
+ @Autowired
+ private ICmgCostItemDetailService costItemDetailService;
+ @Override
+ public void addCostTable(CostDetailViewVo vo) {
+ vo.setCostDate(new Date());
+ costItemDetailService.addCostItemDetail(vo.getCostItemDetailList());//保存造价明细
+ CmgCostTableBo cmgCostTablebo = new CmgCostTableBo();
+ BeanUtils.copyProperties(vo,cmgCostTablebo);
+ insertByBo(cmgCostTablebo);//修改造价表
+ }
+ @Override
+ public void modifyCostTable(CostDetailViewVo vo) {
+ costItemDetailService.modifyCostItemDetail(vo.getCostItemDetailList());//保存造价明细
+ CmgCostTableBo cmgCostTablebo = new CmgCostTableBo();
+ BeanUtils.copyProperties(vo,cmgCostTablebo);
+ updateByBo(cmgCostTablebo);//修改造价表
+ }
+ @Override
+ public CostDetailViewVo getCostTableDetail(String id) {
+ CostDetailViewVo costDetailViewVO = new CostDetailViewVo();
+ CmgCostTableVo cmgCostTableVo = queryById(id);
+
+ costDetailViewVO.setId(id);
+ costDetailViewVO.setProjectName(cmgCostTableVo.getProjectName());
+ costDetailViewVO.setTotalInvestment(cmgCostTableVo.getTotalInvestment());
+ costDetailViewVO.setCostDate(cmgCostTableVo.getCostDate());
+ List costItemDetail = costItemDetailService.getCostItemDetail(cmgCostTableVo.getId());
+ costDetailViewVO.setCostItemDetailList(costItemDetail);
+ return costDetailViewVO;
+ }
+ @Override
+ public void exportData(String id, HttpServletResponse response) throws IOException {
+ //导出数据
+ //web设置
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("utf-8");
+ String exportFileName = URLEncoder.encode("ces", "UTF-8").replaceAll("\\+", "%20");
+ response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + exportFileName + ".xlsx");
+ response.setHeader("filename", exportFileName + ".xlsx");
+ response.setHeader("Access-Control-Expose-Headers", "filename");
+ //1.查询数据
+ CmgCostTableVo costTable = queryById(id);
+ List costItemDetail = costItemDetailService.getCostItemDetail(costTable.getId());
+ List heads = new ArrayList<>();
+ heads.add("序号");
+ heads.add("费用类型");
+ heads.add("建设内容");
+ heads.add("小计(元)");
+ heads.add("备注");
+ List childHeads = new ArrayList<>();
+ childHeads.add("序号");
+ childHeads.add("设备名称");
+ childHeads.add("主要技术参数");
+ childHeads.add("数量");
+ childHeads.add("单位");
+ childHeads.add("单价");
+ childHeads.add("小计");
+ List