diff --git a/cf-gateway/src/main/resources/bootstrap.yaml b/cf-gateway/src/main/resources/bootstrap.yaml
index 3eed7be68..35745b83b 100644
--- a/cf-gateway/src/main/resources/bootstrap.yaml
+++ b/cf-gateway/src/main/resources/bootstrap.yaml
@@ -7,6 +7,11 @@ spring:
server:
port: 48080
+ # 开启Gzip压缩,默认只压缩超过2048字节的数据
+ compression:
+ enabled: true
+ min-response-size: 2048
+ mime-types: application/json
# 日志文件配置。注意,如果 logging.file.name 不放在 bootstrap.yaml 配置文件,而是放在 application.yaml 中,会导致出现 LOG_FILE_IS_UNDEFINED 文件
logging:
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanRespVO.java
index 30deb9c86..3dd72074f 100644
--- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanRespVO.java
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanRespVO.java
@@ -34,9 +34,9 @@ public class PlanRespVO {
@ExcelProperty("排单状态:0 新单,1 板材已申请,2 开料中,3 已开料")
private Integer status;
- @Schema(description = "是否支付:0 否,1 是", requiredMode = Schema.RequiredMode.REQUIRED)
- @ExcelProperty("是否支付:0 否,1 是")
- private Boolean isPay;
+// @Schema(description = "是否支付:0 否,1 是", requiredMode = Schema.RequiredMode.REQUIRED)
+// @ExcelProperty("是否支付:0 否,1 是")
+// private Boolean isPay;
@Schema(description = "机台 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16707")
@ExcelProperty("机台 ID")
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plan/PlanDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plan/PlanDO.java
index e5e2f490b..508d4b30b 100644
--- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plan/PlanDO.java
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plan/PlanDO.java
@@ -49,10 +49,10 @@ public class PlanDO extends BaseDO {
* 排单状态:0 新单,1 板材已申请,2 开料中,3 已开料
*/
private Integer status;
- /**
- * 是否支付:0 否,1 是
- */
- private Boolean isPay;
+// /**
+// * 是否支付:0 否,1 是
+// */
+// private Boolean isPay;
/**
* 机台 ID
*/
@@ -65,14 +65,14 @@ public class PlanDO extends BaseDO {
* 生产单号
*/
private String orderNos;
- /**
- * 排单优化文件地址
- */
- private String placeDateFileUrl;
- /**
- * 排单优化文件地址
- */
- private String placeOrderFileUrl;
+// /**
+// * 排单优化文件地址
+// */
+// private String placeDateFileUrl;
+// /**
+// * 排单优化文件地址
+// */
+// private String placeOrderFileUrl;
/**
* 备注
*/
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java
index 0e371c3d3..918a0fc26 100644
--- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java
@@ -165,40 +165,41 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
@Override
public Boolean savePlanPlateResult(SavePlanPlateResult result) {
- PlanDO planDO = planMapper.selectById(result.getPlanId());
- if (Objects.isNull(planDO)) {
- throw exception(PLAN_NOT_EXISTS);
- }
- try {
- String placeDateFileUrlSource = planDO.getPlaceDateFileUrl();
- String placeOrderFileUrlSource = planDO.getPlaceOrderFileUrl();
- if (StrUtil.isNotBlank(placeDateFileUrlSource)) {
- fileApi.deleteFileByPath(placeDateFileUrlSource).checkError();
- }
- if (StrUtil.isNotBlank(placeOrderFileUrlSource)) {
- fileApi.deleteFileByPath(placeOrderFileUrlSource).checkError();
- }
- FileCreateReqDTO fileCreateReqDTO = new FileCreateReqDTO();
-
- fileCreateReqDTO.setContent(result.getPlaceData().getBytes());
- fileCreateReqDTO.setName(result.getPlaceData().getOriginalFilename());
- String placeDateFileUrl = fileApi.createFile(fileCreateReqDTO).getCheckedData();
-
- fileCreateReqDTO.setContent(result.getPlaceOrder().getBytes());
- fileCreateReqDTO.setName(result.getPlaceOrder().getOriginalFilename());
- String placeOrderFileUrl = fileApi.createFile(fileCreateReqDTO).getCheckedData();
-
- PlanDO updateDO = PlanDO.builder()
- .id(result.getPlanId())
- .placeDateFileUrl(placeOrderFileUrl)
- .placeOrderFileUrl(placeDateFileUrl)
- .build();
- planMapper.updateById(updateDO);
-
- } catch (IOException e) {
- throw exception(UNKNOWN);
- }
- return Boolean.TRUE;
+ return null;
+// PlanDO planDO = planMapper.selectById(result.getPlanId());
+// if (Objects.isNull(planDO)) {
+// throw exception(PLAN_NOT_EXISTS);
+// }
+// try {
+// String placeDateFileUrlSource = planDO.getPlaceDateFileUrl();
+// String placeOrderFileUrlSource = planDO.getPlaceOrderFileUrl();
+// if (StrUtil.isNotBlank(placeDateFileUrlSource)) {
+// fileApi.deleteFileByPath(placeDateFileUrlSource).checkError();
+// }
+// if (StrUtil.isNotBlank(placeOrderFileUrlSource)) {
+// fileApi.deleteFileByPath(placeOrderFileUrlSource).checkError();
+// }
+// FileCreateReqDTO fileCreateReqDTO = new FileCreateReqDTO();
+//
+// fileCreateReqDTO.setContent(result.getPlaceData().getBytes());
+// fileCreateReqDTO.setName(result.getPlaceData().getOriginalFilename());
+// String placeDateFileUrl = fileApi.createFile(fileCreateReqDTO).getCheckedData();
+//
+// fileCreateReqDTO.setContent(result.getPlaceOrder().getBytes());
+// fileCreateReqDTO.setName(result.getPlaceOrder().getOriginalFilename());
+// String placeOrderFileUrl = fileApi.createFile(fileCreateReqDTO).getCheckedData();
+//
+// PlanDO updateDO = PlanDO.builder()
+// .id(result.getPlanId())
+// .placeDateFileUrl(placeOrderFileUrl)
+// .placeOrderFileUrl(placeDateFileUrl)
+// .build();
+// planMapper.updateById(updateDO);
+//
+// } catch (IOException e) {
+// throw exception(UNKNOWN);
+// }
+// return Boolean.TRUE;
}
@Override
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java
index 94c95e732..e32646fb8 100644
--- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java
@@ -159,7 +159,7 @@ public class PlanServiceImpl implements PlanService {
validatePlanExists(updateReqVO.getId());
// 更新
PlanDO plan = BeanUtils.toBean(updateReqVO, PlanDO.class);
- plan.setIsPay(Boolean.FALSE);
+
planMapper.updateById(plan);
}
diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/api/pack/vo/PrintOrderPackReqVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/api/pack/vo/PrintOrderPackReqVO.java
deleted file mode 100644
index cf73efd73..000000000
--- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/api/pack/vo/PrintOrderPackReqVO.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.cf.imes.module.manage.api.pack.vo;
-
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-@Schema(description = "管理后台 - 生产单包裹信息")
-@Data
-public class PrintOrderPackReqVO {
-
-
-
- @Schema(description = "生产单id")
- private Long orderId;
-
-
- @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED)
- private String packNo;
-
-
- @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED)
- private Long packId;
-
-
- @Schema(description = "包裹数量", requiredMode = Schema.RequiredMode.REQUIRED)
- private Long packNum;
-
-
-}
diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/pack/vo/OtherPackReqVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/pack/vo/OtherPackReqVO.java
index 8b9fc8dfd..af4bf291e 100644
--- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/pack/vo/OtherPackReqVO.java
+++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/pack/vo/OtherPackReqVO.java
@@ -27,6 +27,9 @@ public class OtherPackReqVO {
private String name;
+ @Schema(description = "配件数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "9822")
+ private Double num;
+
@Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "9822")
private String packNo;
diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/query/OrderItemDO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/query/OrderItemDO.java
index c82b4bab1..7f74629d2 100644
--- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/query/OrderItemDO.java
+++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/query/OrderItemDO.java
@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
+import java.math.BigDecimal;
+
@TableName("order_item")
@Data
@ToString(callSuper = true)
@@ -44,7 +46,7 @@ public class OrderItemDO {
private Long packageId;
// 部件数量
- private Float num;
+ private Double num;
// 组织 ID
@TableField(fill = FieldFill.INSERT_UPDATE)
diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/enums/OrderPackStatusEnums.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/enums/OrderPackStatusEnums.java
new file mode 100644
index 000000000..2087ee2a6
--- /dev/null
+++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/enums/OrderPackStatusEnums.java
@@ -0,0 +1,29 @@
+package com.cf.imes.module.manage.enums;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum OrderPackStatusEnums {
+
+
+ UNPACKAGED(0,"未打包"),
+ INPACKAGING(1, "打包中"),
+ PACKAGED(1, "打包完成");
+ private Integer status;
+ private String description;
+
+
+ public boolean equals(Integer status) {
+ return this.status .equals(status) ;
+ }
+
+ public boolean equals(OrderPackStatusEnums enableStatusEnum) {
+ return enableStatusEnum != null && enableStatusEnum.status .equals(this.getStatus()) ;
+ }
+
+
+
+}
diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/pack/PackServiceImpl.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/pack/PackServiceImpl.java
index 11059f599..d8fc46c8e 100644
--- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/pack/PackServiceImpl.java
+++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/pack/PackServiceImpl.java
@@ -565,7 +565,7 @@ public class PackServiceImpl implements PackService {
orderItemDO.setOrderId(reqVO.getOrderId());
orderItemDO.setPartsId(orderParts.getId());
orderItemDO.setPackageId(orderPackageDO.getId());
- orderItemDO.setNum(Float.valueOf(1));
+ orderItemDO.setNum(reqVO.getNum());
// 在生产单明细表中新增数据
@@ -591,12 +591,6 @@ public class PackServiceImpl implements PackService {
throw exception(THE_CURRENT_PACKAGE_TYPE_IS_INCORRECT);
}
- // 判断配件名称是否重复
- OrderPartsNDO orderPartsNDO = orderPartsMapper.selectOneParts(reqVO.getName(),getUserOrganId());
-
- if (orderPartsNDO != null) {
- throw exception(THE_ACCESSORY_NAME_CANNOT_BE_DUPLICATED);
- }
// 配件表新增数据
OrderPartsNDO orderParts = BeanUtils.toBean(reqVO, OrderPartsNDO.class);
@@ -609,7 +603,7 @@ public class PackServiceImpl implements PackService {
orderItemDO.setOrderId(reqVO.getOrderId());
orderItemDO.setPartsId(orderParts.getId());
orderItemDO.setPackageId(orderPackageDO.getId());
- orderItemDO.setNum(Float.valueOf(1));
+ orderItemDO.setNum(reqVO.getNum());
// 在生产单明细表中新增数据
orderItemMapper.insert(orderItemDO);
diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/MinuteCounter.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/MinuteCounter.java
new file mode 100644
index 000000000..34f949136
--- /dev/null
+++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/MinuteCounter.java
@@ -0,0 +1,25 @@
+package com.cf.imes.module.manage.util;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+public class MinuteCounter {
+ private static final int MASK = 0x7FFFFFFF;
+ private final AtomicInteger atom;
+
+ public MinuteCounter() {
+ atom = new AtomicInteger(0);
+ }
+
+ public final int incrementAndGet() {
+ return atom.incrementAndGet() & MASK;
+ }
+
+ public int get() {
+ return atom.get() & MASK;
+ }
+
+ public void set(int newValue) {
+ atom.set(newValue & MASK);
+ }
+
+}
\ No newline at end of file
diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/SnowflakeIdWorker3rd.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/SnowflakeIdWorker3rd.java
new file mode 100644
index 000000000..83977afa2
--- /dev/null
+++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/SnowflakeIdWorker3rd.java
@@ -0,0 +1,129 @@
+package com.cf.imes.module.manage.util;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+
+/**
+ * @ClassName: SnowflakeIdWorker3rd
+ * @Description:snowflake算法改进
+ * @author: yonnie
+ * @date: 2024/06/18 14:10:47
+ * @version V1.0
+ *
+ * 将产生的Id类型更改为Integer 32bit
+ * 把时间戳的单位改为分钟,使用25bit的时间戳
+ * 7bit作为自增值即 2^7 = 128
+ */
+@Slf4j
+@Component
+public class SnowflakeIdWorker3rd {
+ /** 初始时间 (2024-01-01: 1704038400) */
+ // private final int twepoch = 28400640;// 1704038400000L/1000/60;
+ private final int twepoch = 1704038400;
+ /** 序列在id中占位数 */
+ private final long sequenceBits = 7L;
+ /** 时间截向左移7bit */
+ private final long timestampLeftShift = sequenceBits;
+ /** 生成序列的MASK (0x7F) */
+ private final int sequenceMask = -1 ^ (-1 << sequenceBits);
+ /** 分钟内序 (0~127) */
+ private int sequence = 0;
+ private int laterSequence = 0;
+ /** 上次生成ID的时间戳 */
+ private int lastTimestamp = -1;
+ private final MinuteCounter counter = new MinuteCounter();
+ /** 预支时间标志 */
+ boolean isAdvance = false;
+
+ // ==============================Constructors=====================================
+
+ public SnowflakeIdWorker3rd() {
+ }
+
+ // ==============================Test=============================================
+
+ /** 测试 */
+ public static void main(String[] args) {
+ SnowflakeIdWorker3rd idWorker = new SnowflakeIdWorker3rd();
+ for (int i = 0; i < 1000; i++) {
+ long id = idWorker.nextId();
+ System.out.println(i + ": " + id + " " + "2406" + Long.toString(id).substring(2));
+ }
+ // long id = idWorker.nextId();
+ // System.out.println(id);
+ }
+
+ // ==============================Methods==========================================
+ /**
+ * 获取当前年月
+ * @return null
+ */
+ public static int obtainingTime() {
+ LocalDate now = LocalDate.now();
+ int year = now.getYear();
+ String year_last_two_digits = String.valueOf(year).substring(2);
+ int month = now.getMonthValue();
+ String formatted_date = year_last_two_digits + String.format("%02d", month);
+ return Integer.parseInt(formatted_date);
+ }
+
+ /**
+ * 获得下一个ID (该方法是线程安全)
+ *
+ * @return SnowflakeId
+ */
+ public synchronized int nextId() {
+ int timestamp = timeGen();
+ // 如果当前时间小于上一次ID生成的时间戳,说明系统时钟修改过
+ if (timestamp < lastTimestamp) {
+ throw new RuntimeException(String.format(
+ "Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));
+ }
+
+ if (timestamp > counter.get()) {
+ counter.set(timestamp);
+ isAdvance = false;
+ }
+
+ // 如果是同时间生成的,则进行分钟内序列
+ if (lastTimestamp == timestamp || isAdvance) {
+ if (!isAdvance) {
+ sequence = (sequence + 1) & sequenceMask;
+ }
+
+ // 分钟内自增列溢出
+ if (sequence == 0) {
+ // 预支下一分获得新的时间戳
+ isAdvance = true;
+ int laterTimestamp = counter.get();
+ if (laterSequence == 0) {
+ laterTimestamp = counter.incrementAndGet();
+ }
+ int nextId = ((laterTimestamp - twepoch) << timestampLeftShift) | laterSequence;
+ laterSequence = (laterSequence + 1) & sequenceMask;
+ return nextId;
+ }
+ } else { // 时间戳改变,分钟内序列置0
+ sequence = 0;
+ laterSequence = 0;
+ }
+ // 上次生成ID的时间截
+ lastTimestamp = timestamp;
+ // 移位并或运算拼成32位的ID
+ return ((timestamp - twepoch) << timestampLeftShift) | sequence;
+ }
+
+ /**
+ * 返回以分钟为单位的当前时
+ *
+ * @return 当前时间(分钟)
+ */
+ protected int timeGen() {
+ // String timestamp = String.valueOf(System.currentTimeMillis() / 1000 / 60);
+ String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
+ return Integer.valueOf(timestamp);
+ }
+
+}
diff --git a/cf-module-report/cf-module-report-biz/pom.xml b/cf-module-report/cf-module-report-biz/pom.xml
index eef2d3137..84ad88f49 100644
--- a/cf-module-report/cf-module-report-biz/pom.xml
+++ b/cf-module-report/cf-module-report-biz/pom.xml
@@ -110,6 +110,26 @@
system
${project.basedir}/src/main/resources/lib/ureport-core-2.3.0-SNAPSHOT.jar
+
+ dom4j
+ dom4j
+ ${dom4j.version}
+
+
+ commons-io
+ commons-io
+ ${commons-io.version}
+
+
+ org.antlr
+ antlr4-runtime
+ ${antlr4.version}
+
+
+ org.apache.commons
+ commons-text
+ ${commons-text.version}
+
diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/dataset/vo/ReportDatasetRespVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/dataset/vo/ReportDatasetRespVO.java
index dc88d8a7a..c837beb69 100644
--- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/dataset/vo/ReportDatasetRespVO.java
+++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/dataset/vo/ReportDatasetRespVO.java
@@ -29,6 +29,9 @@ public class ReportDatasetRespVO {
@Schema(description = "动态查询SQL")
private String sql;
+ @Schema(description = "bean数据源方法名")
+ private String method;
+
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java
index 3c458a2ee..209a0cd3c 100644
--- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java
+++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java
@@ -1,11 +1,13 @@
package com.cf.imes.module.report.controller.admin.template;
+import com.bstek.designer.bean.ReportDefinitionWrapper;
+import com.bstek.ureport.export.html.HtmlReport;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
+import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewPageParametersVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateRespVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
-import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO;
import com.cf.imes.module.report.service.template.ReportTemplateService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@@ -63,9 +65,8 @@ public class ReportTemplateController {
@Operation(summary = "获得报表模板信息")
@Parameter(name = "id", description = "编号", required = true, example = "1")
@PreAuthorize("@ss.hasPermission('report:template:query')")
- public CommonResult getReportTemplate(@PathVariable("id") Long id) {
- ReportTemplateDO template = templateService.getReportTemplate(id);
- return success(BeanUtils.toBean(template, ReportTemplateRespVO.class));
+ public CommonResult getReportTemplate(@PathVariable("id") Long id) {
+ return success(templateService.getReportTemplateDefinition(id));
}
@GetMapping("/templates")
@@ -75,4 +76,11 @@ public class ReportTemplateController {
ReportTemplateReqVO reqVO = new ReportTemplateReqVO(name, null);
return success(BeanUtils.toBean(templateService.getReportTemplateList(reqVO), ReportTemplateRespVO.class));
}
+
+ @PostMapping("/template/preview")
+ @Operation(summary = "模板预览")
+ @PreAuthorize("@ss.hasPermission('report:template:query')")
+ public CommonResult preview(@Valid @RequestBody ReportTemplatePreviewPageParametersVO pageParametersVO) {
+ return success(templateService.preview(pageParametersVO));
+ }
}
diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplatePreviewPageParametersVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplatePreviewPageParametersVO.java
new file mode 100644
index 000000000..8875547af
--- /dev/null
+++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplatePreviewPageParametersVO.java
@@ -0,0 +1,18 @@
+package com.cf.imes.module.report.controller.admin.template.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author Gqr
+ * @since 2024/7/19 9:22
+ */
+@Data
+@Schema(description = "管理后台 - 报表模板预览分页参数 Request VO")
+public class ReportTemplatePreviewPageParametersVO {
+ @Schema(description = "页码",example = "1")
+ private int pageIndex;
+
+ @Schema(description = "预览参数")
+ private ReportTemplatePreviewParametersVO params;
+}
\ No newline at end of file
diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplatePreviewParametersVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplatePreviewParametersVO.java
new file mode 100644
index 000000000..429024e9e
--- /dev/null
+++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplatePreviewParametersVO.java
@@ -0,0 +1,48 @@
+package com.cf.imes.module.report.controller.admin.template.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Gqr
+ * @since 2024/7/19 9:22
+ */
+@Schema(description = "管理后台 - 报表模板预览参数 Request VO")
+@Data
+public class ReportTemplatePreviewParametersVO {
+ /**
+ * 报表内容
+ */
+ @Schema(description = "报表内容")
+ @NotNull(message = "预览报表内容不能为空")
+ private String content;
+
+ /**
+ * 报表名称
+ */
+ @Schema(description = "报表名称")
+ private String reportName;
+
+ /**
+ * 表单参数
+ */
+ @Schema(description = "表单参数")
+ private Map query = new HashMap<>();
+
+ /**
+ * 表单对应组件唯一标识
+ */
+ @Schema(description = "表单对应组件唯一标识")
+ private Map component = new HashMap<>();
+
+ /**
+ * 图表图片目前用于PDF导出
+ */
+ @Schema(description = "图表图片目前用于PDF导出")
+ private Map chartImages = new HashMap<>();
+
+}
diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/dataset/ReportDatasetDO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/dataset/ReportDatasetDO.java
index d998f5446..3f1cade56 100644
--- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/dataset/ReportDatasetDO.java
+++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/dataset/ReportDatasetDO.java
@@ -46,6 +46,11 @@ public class ReportDatasetDO extends BaseDO {
* 数据源id
*/
private Long datasourceId;
+
+ /**
+ * bean数据源方法名
+ */
+ private String method;
/**
* 动态查询SQL
*/
diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateService.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateService.java
index 232057d53..dbf45136f 100644
--- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateService.java
+++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateService.java
@@ -1,5 +1,8 @@
package com.cf.imes.module.report.service.template;
+import com.bstek.designer.bean.ReportDefinitionWrapper;
+import com.bstek.ureport.export.html.HtmlReport;
+import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewPageParametersVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO;
@@ -37,13 +40,21 @@ public interface ReportTemplateService {
void deleteReportTemplate(Long id);
/**
- * 获得报表模板信息
+ * 获取报表模板信息
*
* @param id 编号
* @return 报表模板信息
*/
ReportTemplateDO getReportTemplate(Long id);
+ /**
+ * 获取模板定义信息(xml+数据源)
+ *
+ * @param id
+ * @return
+ */
+ ReportDefinitionWrapper getReportTemplateDefinition(Long id);
+
/**
* 获得报表模板信息列表
*
@@ -51,4 +62,12 @@ public interface ReportTemplateService {
* @return 报表模板信息列表
*/
List getReportTemplateList(ReportTemplateReqVO pageReqVO);
+
+ /**
+ * 模板预览
+ *
+ * @param pageParametersVO
+ * @return
+ */
+ HtmlReport preview(ReportTemplatePreviewPageParametersVO pageParametersVO);
}
diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java
index bbe73c9fe..c696a9e4f 100644
--- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java
+++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java
@@ -1,14 +1,36 @@
package com.cf.imes.module.report.service.template;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.URLUtil;
+import com.bstek.designer.bean.PreviewPageParameters;
+import com.bstek.designer.bean.PreviewParameters;
+import com.bstek.designer.bean.ReportDefinitionWrapper;
+import com.bstek.ureport.build.paging.Page;
+import com.bstek.ureport.definition.Paper;
+import com.bstek.ureport.definition.ReportDefinition;
+import com.bstek.ureport.definition.dataset.BeanDatasetDefinition;
+import com.bstek.ureport.definition.dataset.DatasetDefinition;
+import com.bstek.ureport.definition.dataset.SqlDatasetDefinition;
+import com.bstek.ureport.definition.datasource.DatasourceDefinition;
+import com.bstek.ureport.definition.datasource.JdbcDatasourceDefinition;
+import com.bstek.ureport.definition.datasource.SpringBeanDatasourceDefinition;
+import com.bstek.ureport.export.PageBuilder;
+import com.bstek.ureport.export.ReportRender;
+import com.bstek.ureport.export.SinglePageData;
+import com.bstek.ureport.export.html.HtmlProducer;
+import com.bstek.ureport.export.html.HtmlReport;
+import com.bstek.ureport.export.html.SearchFormData;
+import com.bstek.ureport.model.Report;
+import com.bstek.ureport.parser.ReportParser;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetReqVO;
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetSaveReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
+import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewPageParametersVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
import com.cf.imes.module.report.dal.dataobject.dataset.ReportDatasetDO;
@@ -24,8 +46,11 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
+import java.io.ByteArrayInputStream;
+
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -160,6 +185,43 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
return template;
}
+ @Override
+ public ReportDefinitionWrapper getReportTemplateDefinition(Long id) {
+ // 查询模板
+ ReportTemplateDO template = templateMapper.selectById(id);
+ String xmlContent = template.getContent();
+ // 解析xml
+ ReportDefinition reportDefinition = new ReportParser().parse(new ByteArrayInputStream(xmlContent.getBytes()), template.getName());
+ List datasourceDefinitions = new ArrayList<>();
+ if (ObjectUtil.isNotNull(template)) {
+ // 查询数据源
+ List datasourceList = datasourceService.getTemplateDatasourceList(ReportDatasourceReqVO.builder().templateId(template.getId()).build());
+ for (ReportDatasourceDO ds : datasourceList) {
+ // 查询数据集
+ List datasetList = datasetService.getDatasetList(ReportDatasetReqVO.builder().datasourceId(ds.getId()).build());
+ List datasetDefinitions = new ArrayList<>();
+ switch (ds.getType()) {
+ case JDBC, BUILDIN -> {
+ // 转换对应的ureport对象
+ JdbcDatasourceDefinition jdbcDatasourceDefinition = BeanUtils.toBean(ds, JdbcDatasourceDefinition.class);
+ datasetDefinitions.addAll(BeanUtils.toBean(datasetList, SqlDatasetDefinition.class));
+ jdbcDatasourceDefinition.setDatasets(datasetDefinitions);
+ datasourceDefinitions.add(jdbcDatasourceDefinition);
+ }
+ case SPRING -> {
+ // 转换对应的ureport对象
+ SpringBeanDatasourceDefinition springBeanDatasourceDefinition = BeanUtils.toBean(ds, SpringBeanDatasourceDefinition.class);
+ datasetDefinitions.addAll(BeanUtils.toBean(datasetList, BeanDatasetDefinition.class));
+ springBeanDatasourceDefinition.setDatasets(datasetDefinitions);
+ datasourceDefinitions.add(springBeanDatasourceDefinition);
+ }
+ }
+ }
+ }
+ reportDefinition.setDatasources(datasourceDefinitions);
+ return new ReportDefinitionWrapper(reportDefinition);
+ }
+
@Override
public List getReportTemplateList(ReportTemplateReqVO reqVO) {
return templateMapper.selectList(new LambdaQueryWrapperX()
@@ -169,4 +231,51 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
// 不返回content xml,点击具体的模板中返回xml
.select(ReportTemplateDO::getId, ReportTemplateDO::getName, ReportTemplateDO::getCreateTime, ReportTemplateDO::getRemark));
}
+
+ @Override
+ public HtmlReport preview(ReportTemplatePreviewPageParametersVO pageParametersVO) {
+ HtmlProducer htmlProducer = new HtmlProducer();
+ ReportRender reportRender = new ReportRender();
+ HtmlReport htmlReport = new HtmlReport();
+
+ // 转换ureport参数
+ PreviewPageParameters pageParameters = BeanUtils.toBean(pageParametersVO,PreviewPageParameters.class);
+ PreviewParameters params = pageParameters.getParams();
+
+ // 解析xml
+ ReportDefinition reportDefinition = reportRender.getReportDefinition(URLUtil.decode(params.getContent()), CharsetUtil.UTF_8);
+
+ Map parameters = params.getQuery();
+
+ Paper paper = reportDefinition.getPaper();
+ Report report;
+ String html;
+ // 构建html
+ if (paper.isPageEnabled()) {
+ // todo 后续有可能做成缓存
+ report = reportRender.render(reportDefinition, parameters);
+ int pageIndex = pageParameters.getPageIndex();
+ SinglePageData pageData = PageBuilder.buildSinglePageData(pageIndex, report);
+ List pages = pageData.getPages();
+ html = htmlProducer.produce(report.getContext(), pages, pageData.getColumnMargin(), false);
+ htmlReport.setTotalPage(pageData.getTotalPages());
+ htmlReport.setPageIndex(pageIndex);
+ if (reportDefinition.getPaper().isColumnEnabled()) {
+ htmlReport.setColumn(reportDefinition.getPaper().getColumnCount());
+ }
+ } else {
+ report = reportRender.render(reportDefinition, parameters);
+ html = htmlProducer.produce(report);
+ }
+ htmlReport.setChartDatas(report.getContext().getChartDataMap().values());
+ htmlReport.setContent(html);
+ htmlReport.setStyle(reportDefinition.getStyle());
+ SearchFormData searchFormData = reportDefinition.buildSearchFormData(report.getContext().getDatasetMap(),parameters);
+ htmlReport.setSearchFormData(searchFormData);
+ htmlReport.setReportAlign(report.getPaper().getHtmlReportAlign().name());
+ htmlReport.setBgImage(report.getPaper().getBgImage());
+ htmlReport.setFreeze(reportDefinition.getFreeze());
+ htmlReport.setFloatImages(reportDefinition.getFloatImages());
+ return htmlReport;
+ }
}
diff --git a/cf-module-report/cf-module-report-biz/src/main/resources/lib/ureport-core-2.3.0-SNAPSHOT.jar b/cf-module-report/cf-module-report-biz/src/main/resources/lib/ureport-core-2.3.0-SNAPSHOT.jar
index 89e49ecad..7f66b483d 100644
Binary files a/cf-module-report/cf-module-report-biz/src/main/resources/lib/ureport-core-2.3.0-SNAPSHOT.jar and b/cf-module-report/cf-module-report-biz/src/main/resources/lib/ureport-core-2.3.0-SNAPSHOT.jar differ
diff --git a/cf-module-report/pom.xml b/cf-module-report/pom.xml
index 75c3faf31..24f2451e9 100644
--- a/cf-module-report/pom.xml
+++ b/cf-module-report/pom.xml
@@ -20,4 +20,11 @@
report 模块,主要实现数据可视化报表等功能。
+
+
+ 1.6.1
+ 2.11.0
+ 4.5.3
+ 1.10.0
+
diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java
index df0c49c1f..581fea2c0 100644
--- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java
+++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java
@@ -266,6 +266,7 @@ public interface ErrorCodeConstants {
ErrorCode THE_CURRENT_PACKAGE_HAS_AN_UNSEALED_PACKAGE = new ErrorCode(1_002_038_666, "当前包裹还有未封包包裹");
ErrorCode THE_CURRENT_PACKAGE_TYPE_IS_INCORRECT = new ErrorCode(1_002_038_777, "当前包裹类型错误");
ErrorCode FAILED_TO_MODIFY_THE_STATUS_OF_THE_CURRENT_PRODUCTION_ORDER = new ErrorCode(1_002_038_778, "修改当前生产单的工序状态和生产单的状态失败");
+ ErrorCode NO_OPTIMIZATION_INFORMATION_AVAILABLE = new ErrorCode(1_002_038_779, "当前订单无优化信息");
//=========== 应用信息 1-002-037-000 ============
@@ -278,4 +279,8 @@ public interface ErrorCodeConstants {
ErrorCode REMAIN_PLATE_STATUS_NO_USED = new ErrorCode(1_002_038_002, "余料板未使用");
ErrorCode REMAIN_PLATE_USR_TYPE = new ErrorCode(1_002_038_003, "余料板使用类型为不可核销类型");
ErrorCode REMAIN_PLATE_ID_NOT_EXISTS = new ErrorCode(1_002_038_004, "未选中余料板,请选择余料板");
+
+
+ //=========== 用户的系统配置 1-002-039-000 ============
+ ErrorCode CURRENTLY_NO_CONFIGURATION_AVAILABLE = new ErrorCode(1_002_039_001, "当前没有配置信息,请前往设置配置");
}
diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/datasource/DataSourceApiImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/datasource/DataSourceApiImpl.java
index 068a4273b..b8c8635e8 100644
--- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/datasource/DataSourceApiImpl.java
+++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/datasource/DataSourceApiImpl.java
@@ -24,6 +24,6 @@ public class DataSourceApiImpl implements DataSourceApi {
if(Objects.isNull(dataSourceDO)) {
throw exception(new ErrorCode(2133,"数据源不存在"));
}
- return CommonResult.success(dataSourceDO.getSqlStr()) ;
+ return null;
}
}
diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/setting/SettingController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/setting/SettingController.java
new file mode 100644
index 000000000..3eaa01b95
--- /dev/null
+++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/setting/SettingController.java
@@ -0,0 +1,65 @@
+package com.cf.imes.module.system.controller.admin.setting;
+
+
+import com.cf.imes.framework.common.pojo.CommonResult;
+import com.cf.imes.module.system.controller.admin.setting.vo.PackageConfigReqVO;
+import com.cf.imes.module.system.service.setting.SettingService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+
+import static com.cf.imes.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 系统配置")
+@RestController
+@RequestMapping("/system/setting")
+@Validated
+public class SettingController {
+
+
+ @Resource
+ private SettingService settingService;
+
+
+
+ @PutMapping("/insert")
+ @Operation(summary = "新增系统配置")
+ //@PreAuthorize("@ss.hasPermission('system:data-source:query')")
+ public CommonResult insertSetting( @RequestBody PackageConfigReqVO reqVO ) {
+
+ return success(settingService.insertSetting(reqVO));
+
+
+ }
+
+
+
+ @PostMapping("/update")
+ @Operation(summary = "更新系统配置")
+ //@PreAuthorize("@ss.hasPermission('system:data-source:query')")
+ public CommonResult updateSetting( @RequestBody PackageConfigReqVO reqVO ) {
+
+ return success(settingService.updateSetting(reqVO));
+
+
+ }
+
+
+ @GetMapping("/select")
+ @Operation(summary = "查看当前用户的配置信息")
+ @Parameter(name = "type", description = "配置类型", required = true)
+ public CommonResult selectSetting( @RequestParam("type") Integer type ) {
+
+ return success(settingService.selectSetting(type));
+
+
+ }
+
+
+
+}
diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/setting/vo/PackageConfigReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/setting/vo/PackageConfigReqVO.java
new file mode 100644
index 000000000..623c04971
--- /dev/null
+++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/setting/vo/PackageConfigReqVO.java
@@ -0,0 +1,39 @@
+package com.cf.imes.module.system.controller.admin.setting.vo;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.cf.imes.framework.es.core.valid.UpdateGroup;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "打包配置信息")
+@Data
+@ToString(callSuper = true)
+public class PackageConfigReqVO {
+
+
+ @Schema(description = "主键")
+ private Long id;
+
+
+ @Schema(description = "组织ID")
+ private Long organId;
+
+
+ @Schema(description = "用户ID")
+ private Long userId;
+
+
+ @Schema(description = "配置类型: 1 预打包,2 打包", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Integer type;
+
+
+ @Schema(description = "配置信息", requiredMode = Schema.RequiredMode.REQUIRED)
+ private JSONObject setting;
+
+
+
+}
diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/setting/PackageConfigDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/setting/PackageConfigDO.java
new file mode 100644
index 000000000..1f4b273ad
--- /dev/null
+++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/setting/PackageConfigDO.java
@@ -0,0 +1,44 @@
+package com.cf.imes.module.system.dal.dataobject.setting;
+
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.*;
+
+@TableName(value = "package_config")
+@KeySequence("package_config_seq")
+@Data
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PackageConfigDO {
+
+ /**
+ * 主键
+ */
+ @TableId
+ private Long id;
+
+ // 组织 ID,默认为1
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Long organId;
+
+ /**
+ * 用户ID
+ */
+ private Long userId;
+
+ /**
+ * 配置类型: 1 预打包,2 打包
+ */
+ private Integer type;
+
+
+ /**
+ * 配置信息
+ */
+ private String setting;
+
+
+
+}
diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/setting/SettingMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/setting/SettingMapper.java
new file mode 100644
index 000000000..93fb6eeb2
--- /dev/null
+++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/setting/SettingMapper.java
@@ -0,0 +1,26 @@
+package com.cf.imes.module.system.dal.mysql.setting;
+
+import com.cf.imes.framework.common.pojo.PageResult;
+import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
+import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.cf.imes.module.system.controller.admin.machine.vo.MachinePageReqVO;
+import com.cf.imes.module.system.dal.dataobject.machinetemplate.MachineTemplateDO;
+import com.cf.imes.module.system.dal.dataobject.setting.PackageConfigDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.Collection;
+
+
+@Mapper
+public interface SettingMapper extends BaseMapperX {
+
+
+
+ default PackageConfigDO selectSetting(Integer type, Long id, Long organId) {
+ return selectOne( new LambdaQueryWrapperX()
+ .eqIfPresent(PackageConfigDO::getOrganId,organId)
+ .eqIfPresent(PackageConfigDO::getUserId,id)
+ .eqIfPresent(PackageConfigDO::getType,type));
+ }
+
+}
diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/setting/SettingService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/setting/SettingService.java
new file mode 100644
index 000000000..d5cdb5ee8
--- /dev/null
+++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/setting/SettingService.java
@@ -0,0 +1,16 @@
+package com.cf.imes.module.system.service.setting;
+
+
+import com.cf.imes.module.system.controller.admin.setting.vo.PackageConfigReqVO;
+import org.springframework.stereotype.Service;
+
+public interface SettingService {
+
+
+
+ Long insertSetting(PackageConfigReqVO reqVO);
+
+ Long updateSetting(PackageConfigReqVO reqVO);
+
+ PackageConfigReqVO selectSetting(Integer type);
+}
diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/setting/SettingServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/setting/SettingServiceImpl.java
new file mode 100644
index 000000000..5df8fa98b
--- /dev/null
+++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/setting/SettingServiceImpl.java
@@ -0,0 +1,83 @@
+package com.cf.imes.module.system.service.setting;
+
+
+import com.cf.imes.framework.common.util.json.JsonUtils;
+import com.cf.imes.framework.common.util.object.BeanUtils;
+import com.cf.imes.framework.security.core.LoginUser;
+import com.cf.imes.module.system.controller.admin.setting.vo.PackageConfigReqVO;
+import com.cf.imes.module.system.dal.dataobject.setting.PackageConfigDO;
+import com.cf.imes.module.system.dal.mysql.setting.SettingMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
+import static com.cf.imes.module.system.enums.ErrorCodeConstants.*;
+
+
+@Service
+@Validated
+public class SettingServiceImpl implements SettingService{
+
+
+ @Resource
+ private SettingMapper settingMapper;
+
+
+ @Override
+ public Long insertSetting(PackageConfigReqVO reqVO) {
+
+ LoginUser loginUser = getLoginUser();
+ PackageConfigDO packageConfigDO = PackageConfigDO.builder()
+ .userId(loginUser.getId())
+ .organId(loginUser.getOrganId())
+ .setting(JsonUtils.zipString(reqVO.getSetting().toJSONString()))
+ .type(reqVO.getType())
+ .build();
+
+ settingMapper.insert(packageConfigDO);
+
+
+ return packageConfigDO.getId();
+
+ }
+
+
+ @Override
+ public Long updateSetting(PackageConfigReqVO reqVO) {
+
+ // 更新
+ PackageConfigDO packageConfigDO = settingMapper.selectById(reqVO.getId());
+ if (packageConfigDO == null) {
+ throw exception(CURRENTLY_NO_CONFIGURATION_AVAILABLE);
+ }
+ if(reqVO.getSetting() != null) {
+ packageConfigDO.setSetting(JsonUtils.zipString(reqVO.getSetting().toJSONString()));
+ }
+ settingMapper.updateById(packageConfigDO);
+
+ return packageConfigDO.getId();
+ }
+
+
+
+ @Override
+ public PackageConfigReqVO selectSetting(Integer type) {
+
+ LoginUser loginUser = getLoginUser();
+
+ PackageConfigDO packageConfigDO = settingMapper.selectSetting(type, loginUser.getId(), loginUser.getOrganId());
+
+ if (packageConfigDO == null) {
+ throw exception(CURRENTLY_NO_CONFIGURATION_AVAILABLE);
+ }
+
+ packageConfigDO.setSetting(JsonUtils.unzipString(packageConfigDO.getSetting()));
+
+ return BeanUtils.toBean(packageConfigDO,PackageConfigReqVO.class);
+ }
+
+
+}