孙永军 2 年之前
父节点
当前提交
57e0721dca

+ 18 - 0
src/main/java/com/sxtvs/open/api/h5template/controller/H5OperateFormController.java

@@ -0,0 +1,18 @@
+package com.sxtvs.open.api.h5template.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author syj
+ * @since 2023-04-04
+ */
+@RestController
+@RequestMapping("/h5template/h5OperateForm")
+public class H5OperateFormController {
+
+}

+ 37 - 0
src/main/java/com/sxtvs/open/api/h5template/controller/H5OperateFormDataController.java

@@ -0,0 +1,37 @@
+package com.sxtvs.open.api.h5template.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sxtvs.open.api.h5template.dto.PageRequestDTO;
+import com.sxtvs.open.api.h5template.service.impl.H5OperateFormDataServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author syj
+ * @since 2023-04-04
+ */
+@RestController
+@RequestMapping("/h5operate/form")
+public class H5OperateFormDataController {
+
+    @Resource
+    private H5OperateFormDataServiceImpl h5OperateFormDataService;
+
+    @RequestMapping("store")
+    public void store(@RequestBody Map<String, Object> map){
+        h5OperateFormDataService.store(map);
+    }
+
+    @RequestMapping("list")
+    public Page<Map<String, Object>> page(@RequestBody PageRequestDTO requestDTO){
+        return h5OperateFormDataService.pageList(requestDTO);
+    }
+}

+ 9 - 0
src/main/java/com/sxtvs/open/api/h5template/dto/PageRequestDTO.java

@@ -0,0 +1,9 @@
+package com.sxtvs.open.api.h5template.dto;
+
+import lombok.Data;
+
+@Data
+public class PageRequestDTO {
+    private Integer page = 1;
+    private Integer size = 20;
+}

+ 1 - 1
src/main/java/com/sxtvs/open/api/h5template/entity/H5Operate.java

@@ -23,7 +23,7 @@ public class H5Operate implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "operate_id", type = IdType.AUTO)
+    @TableId(value = "operate_id", type = IdType.ASSIGN_ID)
     private Long operateId;
 
     private String title;

+ 35 - 0
src/main/java/com/sxtvs/open/api/h5template/entity/H5OperateForm.java

@@ -0,0 +1,35 @@
+package com.sxtvs.open.api.h5template.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author syj
+ * @since 2023-04-04
+ */
+@Getter
+@Setter
+@TableName("h5_operate_form")
+public class H5OperateForm implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "form_id", type = IdType.AUTO)
+    private Long formId;
+
+    private String columnKey;
+
+    private String label;
+
+    private String columnType;
+
+    private Long operateId;
+}

+ 41 - 0
src/main/java/com/sxtvs/open/api/h5template/entity/H5OperateFormData.java

@@ -0,0 +1,41 @@
+package com.sxtvs.open.api.h5template.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author syj
+ * @since 2023-04-04
+ */
+@Getter
+@Setter
+@TableName("h5_operate_form_data")
+public class H5OperateFormData implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long dataId;
+
+    private Long operateId;
+
+    private String columnKey;
+
+    private String label;
+
+    private String columnValue;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+
+    private Long formId;
+}

+ 1 - 1
src/main/java/com/sxtvs/open/api/h5template/entity/H5Template.java

@@ -23,7 +23,7 @@ public class H5Template implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "template_id", type = IdType.AUTO)
+    @TableId(value = "template_id", type = IdType.ASSIGN_ID)
     private Long templateId;
 
     private String title;

+ 16 - 0
src/main/java/com/sxtvs/open/api/h5template/mapper/H5OperateFormDataMapper.java

@@ -0,0 +1,16 @@
+package com.sxtvs.open.api.h5template.mapper;
+
+import com.sxtvs.open.api.h5template.entity.H5OperateFormData;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author syj
+ * @since 2023-04-04
+ */
+public interface H5OperateFormDataMapper extends BaseMapper<H5OperateFormData> {
+
+}

+ 16 - 0
src/main/java/com/sxtvs/open/api/h5template/mapper/H5OperateFormMapper.java

@@ -0,0 +1,16 @@
+package com.sxtvs.open.api.h5template.mapper;
+
+import com.sxtvs.open.api.h5template.entity.H5OperateForm;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author syj
+ * @since 2023-04-04
+ */
+public interface H5OperateFormMapper extends BaseMapper<H5OperateForm> {
+
+}

+ 16 - 0
src/main/java/com/sxtvs/open/api/h5template/service/IH5OperateFormDataService.java

@@ -0,0 +1,16 @@
+package com.sxtvs.open.api.h5template.service;
+
+import com.sxtvs.open.api.h5template.entity.H5OperateFormData;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author syj
+ * @since 2023-04-04
+ */
+public interface IH5OperateFormDataService extends IService<H5OperateFormData> {
+
+}

+ 16 - 0
src/main/java/com/sxtvs/open/api/h5template/service/IH5OperateFormService.java

@@ -0,0 +1,16 @@
+package com.sxtvs.open.api.h5template.service;
+
+import com.sxtvs.open.api.h5template.entity.H5OperateForm;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author syj
+ * @since 2023-04-04
+ */
+public interface IH5OperateFormService extends IService<H5OperateForm> {
+
+}

+ 86 - 0
src/main/java/com/sxtvs/open/api/h5template/service/impl/H5OperateFormDataServiceImpl.java

@@ -0,0 +1,86 @@
+package com.sxtvs.open.api.h5template.service.impl;
+
+import cn.hutool.core.util.IdUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sxtvs.open.api.h5template.dto.PageRequestDTO;
+import com.sxtvs.open.api.h5template.entity.H5OperateFormData;
+import com.sxtvs.open.api.h5template.mapper.H5OperateFormDataMapper;
+import com.sxtvs.open.api.h5template.service.IH5OperateFormDataService;
+import com.sxtvs.open.core.advice.BizException;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author syj
+ * @since 2023-04-04
+ */
+@Service
+public class H5OperateFormDataServiceImpl extends ServiceImpl<H5OperateFormDataMapper, H5OperateFormData> implements IH5OperateFormDataService {
+
+    public void store(Map<String, Object> map){
+        List<H5OperateFormData> h5OperateFormDataList = new ArrayList<>();
+        if(!map.containsKey("operateId")){
+            throw new BizException("缺少活动ID");
+        }
+        Long operateId = (Long) map.get("operateId");
+        map.forEach((k, v) -> {
+            H5OperateFormData h5OperateFormData = new H5OperateFormData();
+            h5OperateFormData.setOperateId(operateId);
+            h5OperateFormData.setCreateTime(LocalDateTime.now());
+            h5OperateFormData.setUpdateTime(LocalDateTime.now());
+            h5OperateFormData.setColumnKey(k);
+            h5OperateFormData.setColumnValue(String.valueOf(v));
+            h5OperateFormDataList.add(h5OperateFormData);
+        });
+
+        if(map.containsKey("dataId")){
+            Long dataId = (Long) map.get("dataId");
+            h5OperateFormDataList.forEach(data -> update(
+                    new LambdaUpdateWrapper<H5OperateFormData>().set(H5OperateFormData::getColumnValue, data.getColumnValue())
+                            .eq(H5OperateFormData::getDataId, dataId).eq(H5OperateFormData::getColumnKey, data.getColumnKey())
+            ));
+
+        }else{
+            long snowflakeNextId = IdUtil.getSnowflakeNextId();
+            saveBatch(h5OperateFormDataList.stream().peek(data -> data.setDataId(snowflakeNextId)).collect(Collectors.toList()));
+        }
+    }
+
+    public Page<Map<String, Object>> pageList(PageRequestDTO pageRequestDTO){
+        IPage<H5OperateFormData> page = baseMapper.selectPage(new Page<>(pageRequestDTO.getPage(), pageRequestDTO.getSize()),
+                new LambdaQueryWrapper<H5OperateFormData>().select(H5OperateFormData::getDataId).groupBy(H5OperateFormData::getDataId)
+                .orderByDesc(H5OperateFormData::getDataId)
+        );
+
+        Page<Map<String, Object>> rs = new Page<>(pageRequestDTO.getPage(), pageRequestDTO.getSize(), page.getTotal());
+        rs.setPages(page.getPages());
+        List<Long> ids = page.getRecords().stream().map(H5OperateFormData::getDataId).collect(Collectors.toList());
+        List<Map<String, Object>> ls = new ArrayList<>();
+        lambdaQuery().in(H5OperateFormData::getDataId, ids).list().stream().collect(Collectors.groupingBy(H5OperateFormData::getDataId))
+        .forEach((k, v) -> {
+            Map<String, Object> map = new HashMap<>();
+            map.put("dataId", k);
+            v.forEach(h5 -> {
+                map.put(h5.getColumnKey(), h5.getColumnValue());
+            });
+            ls.add(map);
+        });
+
+        rs.setRecords(ls);
+        return rs;
+    }
+}

+ 79 - 0
src/main/java/com/sxtvs/open/api/h5template/service/impl/H5OperateFormServiceImpl.java

@@ -0,0 +1,79 @@
+package com.sxtvs.open.api.h5template.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.sxtvs.open.api.h5template.entity.H5Operate;
+import com.sxtvs.open.api.h5template.entity.H5OperateForm;
+import com.sxtvs.open.api.h5template.entity.H5OperateFormData;
+import com.sxtvs.open.api.h5template.mapper.H5OperateFormMapper;
+import com.sxtvs.open.api.h5template.service.IH5OperateFormService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sxtvs.open.core.advice.BizException;
+import com.sxtvs.open.core.sls.AliyunLogger;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author syj
+ * @since 2023-04-04
+ */
+@Service
+public class H5OperateFormServiceImpl extends ServiceImpl<H5OperateFormMapper, H5OperateForm> implements IH5OperateFormService {
+
+    @Resource
+    private ObjectMapper objectMapper;
+
+    @Resource
+    private H5OperateFormDataServiceImpl h5OperateFormDataService;
+
+    @Resource
+    private AliyunLogger logger;
+
+    public void store(H5Operate h5Operate){
+        if(null == h5Operate.getOperateId()){
+            throw new BizException("无效的活动ID");
+        }
+        try {
+            List<Map<String, Object>> hoverList = objectMapper.readValue(h5Operate.getHoversList(), List.class);
+            for (Map<String, Object> hover : hoverList){
+                for (Map<String, Object> component : ((List<Map<String, Object>>)hover.get("components"))){
+                    if(component.containsKey("child_list")){
+                        for (Map<String, Object> form : ((List<Map<String, Object>>)component.get("child_list"))){
+
+                            Map<String, Object> attr = (Map<String, Object>) form.get("attr");
+                            if(!attr.containsKey("key")){
+                                continue;
+                            }
+                            H5OperateForm h5OperateForm = new H5OperateForm();
+                            h5OperateForm.setOperateId(h5Operate.getOperateId());
+                            h5OperateForm.setColumnKey((String) attr.get("key"));
+                            h5OperateForm.setLabel((String) attr.get("label"));
+                            save(h5OperateForm);
+                        }
+                    }
+                }
+            }
+        } catch (JsonProcessingException e) {
+            throw new BizException("数据解析失败");
+        }
+    }
+
+    public void update(H5Operate h5Operate){
+        if(h5OperateFormDataService.lambdaQuery().eq(H5OperateFormData::getOperateId, h5Operate.getOperateId()).count() == 0 ){
+            LambdaQueryWrapper<H5OperateForm> wrapper = Wrappers.lambdaQuery();
+            remove(wrapper.eq(H5OperateForm::getOperateId, h5Operate.getOperateId()));
+            store(h5Operate);
+        }else {
+            logger.debug("operate update", "活动页已产生用户数据,更改活动页无法修改表单");
+        }
+    }
+}

+ 12 - 0
src/main/java/com/sxtvs/open/api/h5template/service/impl/H5OperateServiceImpl.java

@@ -1,11 +1,14 @@
 package com.sxtvs.open.api.h5template.service.impl;
 
 import com.sxtvs.open.api.h5template.entity.H5Operate;
+import com.sxtvs.open.api.h5template.entity.H5OperateForm;
 import com.sxtvs.open.api.h5template.entity.H5Template;
 import com.sxtvs.open.api.h5template.mapper.H5OperateMapper;
 import com.sxtvs.open.api.h5template.service.IH5OperateService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 
@@ -19,15 +22,24 @@ import java.time.LocalDateTime;
  */
 @Service
 public class H5OperateServiceImpl extends ServiceImpl<H5OperateMapper, H5Operate> implements IH5OperateService {
+
+    @Resource
+    private H5OperateFormServiceImpl h5OperateFormService;
+
+    @Transactional
     public void store(H5Operate h5Operate){
         h5Operate.setH5Status(0);
         h5Operate.setUpdateTime(LocalDateTime.now());
         if (null != h5Operate.getOperateId()){
             updateById(h5Operate);
+            h5OperateFormService.update(h5Operate);
         }else{
             h5Operate.setCreateTime(LocalDateTime.now());
             save(h5Operate);
+            h5OperateFormService.store(h5Operate);
         }
     }
 
+
+
 }