Pārlūkot izejas kodu

feat(mall): 添加场景解决方案卡片样式字段支持

- 在 EpScenarioCards 实体类中新增 subTitleColor、bgColor 和 opacity 字段
- 在 EpScenarioCardsBo 业务对象中同步添加样式相关字段
- 在 EpScenarioCardsVo 视图对象中增加对应的样式属性
- 实现 parseRemarkToStyleFields 方法解析 remark 中的 JSON 样式数据
- 集成 Jackson ObjectMapper 处理 JSON 数据解析
- 在插入和更新操作中自动解析样式字段到数据库记录
hurx 1 nedēļu atpakaļ
vecāks
revīzija
0977d995e7

+ 8 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpScenarioCards.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serial;
+import java.math.BigDecimal;
 
 /**
  * 场景解决方案卡片对象 ep_scenario_cards
@@ -68,5 +69,12 @@ public class EpScenarioCards extends TenantEntity {
      */
     private String remark;
 
+    /*副标题颜色*/
+    private String subTitleColor;
 
+    /*背景颜色*/
+    private String bgColor;
+
+    /*透明度*/
+    private BigDecimal opacity;
 }

+ 9 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpScenarioCardsBo.java

@@ -9,6 +9,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import jakarta.validation.constraints.*;
 
+import java.math.BigDecimal;
+
 /**
  * 场景解决方案卡片业务对象 ep_scenario_cards
  *
@@ -60,5 +62,12 @@ public class EpScenarioCardsBo extends BaseEntity {
      */
     private String remark;
 
+    /*副标题颜色*/
+    private String subTitleColor;
+
+    /*背景颜色*/
+    private String bgColor;
 
+    /*透明度*/
+    private BigDecimal opacity;
 }

+ 9 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpScenarioCardsVo.java

@@ -10,6 +10,7 @@ import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 
@@ -76,5 +77,13 @@ public class EpScenarioCardsVo implements Serializable {
     @ExcelProperty(value = "备注")
     private String remark;
 
+    /*副标题颜色*/
+    private String subTitleColor;
+
+    /*背景颜色*/
+    private String bgColor;
+
+    /*透明度*/
+    private BigDecimal opacity;
 
 }

+ 45 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpScenarioCardsServiceImpl.java

@@ -17,9 +17,12 @@ import org.dromara.mall.mapper.EpScenarioCardsMapper;
 import org.dromara.mall.service.IEpScenarioCardsService;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
 
 /**
  * 场景解决方案卡片Service业务层处理
@@ -34,6 +37,8 @@ public class EpScenarioCardsServiceImpl extends ServiceImpl<EpScenarioCardsMappe
 
     private final EpScenarioCardsMapper baseMapper;
 
+    private static final ObjectMapper objectMapper = new ObjectMapper();
+
     /**
      * 查询场景解决方案卡片
      *
@@ -94,6 +99,10 @@ public class EpScenarioCardsServiceImpl extends ServiceImpl<EpScenarioCardsMappe
     @Override
     public Boolean insertByBo(EpScenarioCardsBo bo) {
         EpScenarioCards add = MapstructUtils.convert(bo, EpScenarioCards.class);
+
+        // 解析 remark 中的 JSON 数据,提取样式字段
+        parseRemarkToStyleFields(bo, add);
+
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
@@ -111,10 +120,46 @@ public class EpScenarioCardsServiceImpl extends ServiceImpl<EpScenarioCardsMappe
     @Override
     public Boolean updateByBo(EpScenarioCardsBo bo) {
         EpScenarioCards update = MapstructUtils.convert(bo, EpScenarioCards.class);
+
+        // 解析 remark 中的 JSON 数据,提取样式字段
+        parseRemarkToStyleFields(bo, update);
+
         validEntityBeforeSave(update);
         return baseMapper.updateById(update) > 0;
     }
 
+    /**
+     * 解析 remark 中的 JSON 数据,提取样式字段到实体对象
+     *
+     * @param bo     业务对象
+     * @param entity 实体对象
+     */
+    private void parseRemarkToStyleFields(EpScenarioCardsBo bo, EpScenarioCards entity) {
+        String remark = bo.getRemark();
+        if (StringUtils.isNotBlank(remark)) {
+            try {
+                JsonNode rootNode = objectMapper.readTree(remark);
+
+                // 提取 subTitleColor
+                if (rootNode.has("subTitleColor")) {
+                    entity.setSubTitleColor(rootNode.get("subTitleColor").asText());
+                }
+
+                // 提取 bgColor
+                if (rootNode.has("bgColor")) {
+                    entity.setBgColor(rootNode.get("bgColor").asText());
+                }
+
+                // 提取 opacity
+                if (rootNode.has("opacity")) {
+                    entity.setOpacity(new BigDecimal(rootNode.get("opacity").asDouble()));
+                }
+            } catch (Exception e) {
+                log.error("解析 remark JSON 数据失败", e);
+            }
+        }
+    }
+
     /**
      * 保存前的数据校验
      */