Browse Source

1.fix 将问卷保存为模板的时候,没有保存模板逻辑

2.fix  使用模板生成问卷,没有生成新问卷的逻辑
dev
wxz 2 years ago
parent
commit
774b264cb6
  1. 24
      doc/readme.md
  2. 73
      tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java
  3. 66
      tduck-project/src/main/java/com/tduck/cloud/project/entity/ProjectTemplateLogicEntity.java
  4. 15
      tduck-project/src/main/java/com/tduck/cloud/project/mapper/ProjectTemplateLogicMapper.java
  5. 8
      tduck-project/src/main/java/com/tduck/cloud/project/service/ProjectTemplateLogicService.java
  6. 12
      tduck-project/src/main/java/com/tduck/cloud/project/service/impl/ProjectTemplateLogicServiceImpl.java

24
doc/readme.md

@ -54,4 +54,28 @@ curl 'http://192.168.1.144/api/tduck-api/user/project/result/create?access_key=u
--data-raw '{"completeTime":"4862","projectKey":"eec7f270fb1c4e659d9abded37c1f402","submitOs":"Mac OS","submitBrowser":"Chrome","submitUa":{"ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36","browser":{"name":"Chrome","version":"116.0.0.0","major":"116"},"engine":{"name":"Blink","version":"116.0.0.0"},"os":{"name":"Mac OS","version":"10.15.7"},"device":{},"cpu":{}},"wxUserInfo":{},"originalData":{"field101":"描述文字","field102":1},"processData":{"field102":"选项一"}}' \
--compressed \
--insecure
```
### 保存为模板
```
curl 'http://localhost:8080/api/tduck-api/user/project/template/save?timestamp=1693996087137&sign=109e46660811f2b152bd3520612d3015' \
-H 'Accept: application/json, text/plain, */*' \
-H 'Accept-Language: zh-CN,zh;q=0.9' \
-H 'Cache-Control: no-cache' \
-H 'Connection: keep-alive' \
-H 'Content-Type: application/json' \
-H 'Origin: http://192.168.1.144' \
-H 'Pragma: no-cache' \
-H 'Referer: http://192.168.1.144/' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Site: cross-site' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36' \
-H 'sec-ch-ua: "Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "macOS"' \
-H 'token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJhcHAiOiJnb3YiLCJjbGllbnQiOiJ3ZWIiLCJleHAiOjE2OTQ1ODkyMTQsInVzZXJJZCI6ImQ4ZGZjNmMxZmEyNTM4OTc2MDU5ZjM5MDAwMzZkNDE5IiwiaWF0IjoxNjkzOTg0NDE0fQ.bK_ItNjqyqlEz3KJpuDi96j6gn9b_Jz2FViYiPAcx9UTiRG241za59AJM-Wv-qZ-rf_rAe8kFVPqBcVw59GNZw' \
--data-raw '{"key":"2e974db6c9f44c5c8489e61f68d6334c"}' \
--compressed
```

73
tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java

@ -6,6 +6,7 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -43,13 +44,12 @@ import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket;
import org.apache.commons.lang3.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.NotBlank;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -65,6 +65,8 @@ public class UserProjectController {
private final UserProjectService projectService;
private final UserProjectItemService projectItemService;
private final UserProjectResultService projectResultService;
private final UserProjectLogicService projectLogicService;
private final ProjectTemplateLogicService templateLogicService;
private final SortUtils sortUtils;
private final UserProjectThemeService userProjectThemeService;
private final UserProjectSettingService userProjectSettingService;
@ -96,11 +98,15 @@ public class UserProjectController {
* 从模板创建项目
*/
@Login
@Transactional(rollbackFor = Exception.class)
@PostMapping("/user/project/use-template/create")
public Result createProjectByTemplate(@RequestBody ProjectTemplateEntity request, @RequestAttribute String userId) {
String templateKey = request.getKey();
ProjectTemplateEntity projectTemplateEntity = projectTemplateService.getByKey(templateKey);
List<ProjectTemplateItemEntity> projectTemplateItemEntities = projectTemplateItemService.listByTemplateKey(templateKey);
// 生成项目主信息
UserProjectEntity userProjectEntity = new UserProjectEntity();
BeanUtil.copyProperties(projectTemplateEntity, userProjectEntity, UserProjectEntity.Fields.status);
userProjectEntity.setId(null);
@ -112,11 +118,40 @@ public class UserProjectController {
// 名称后面追加一个时间
userProjectEntity.setName(userProjectEntity.getName().concat(String.format("(%s)", DateUtil.format(new Date(), "yyyy-MM-dd"))));
projectService.save(userProjectEntity);
// 生成项目题目信息
List<UserProjectItemEntity> userProjectItemEntityList = JsonUtils.jsonToList(JsonUtils.objToJson(projectTemplateItemEntities), UserProjectItemEntity.class);
userProjectItemEntityList.forEach(item -> {
item.setId(null);
item.setProjectKey(userProjectEntity.getKey());});
projectItemService.saveBatch(userProjectItemEntityList);
// 生成逻辑信息
List<ProjectTemplateLogicEntity> templateLogics =
templateLogicService.list(new LambdaQueryWrapper<ProjectTemplateLogicEntity>().eq(ProjectTemplateLogicEntity::getProjectKey, request.getKey()));
List<UserProjectLogicEntity> logics = templateLogics.stream().map(l -> {
// 转化condition
HashSet<UserProjectLogicEntity.Condition> conditions = new HashSet<>();
Set<ProjectTemplateLogicEntity.Condition> conditionSource = l.getConditionList();
for (Object e : conditionSource) {
UserProjectLogicEntity.Condition userProjectCondition = JsonUtils.mapToObj((LinkedHashMap) e, UserProjectLogicEntity.Condition.class);
conditions.add(userProjectCondition);
}
UserProjectLogicEntity userLogicEntity = new UserProjectLogicEntity();
userLogicEntity.setProjectKey(userProjectEntity.getKey());
userLogicEntity.setExpression(l.getExpression());
userLogicEntity.setConditionList(conditions);
userLogicEntity.setFormItemId(l.getFormItemId());
return userLogicEntity;
}).collect(Collectors.toList());
projectLogicService.saveBatch(logics);
return Result.success(userProjectEntity.getKey());
}
@ -130,21 +165,53 @@ public class UserProjectController {
*/
@Login
@PostMapping("/user/project/template/save")
@Transactional(rollbackFor = Exception.class)
public Result saveAsProjectTemplate(@RequestBody UserProjectEntity request, @RequestAttribute String userId) {
UserProjectEntity projectEntity = projectService.getByKey(request.getKey());
List<UserProjectItemEntity> itemEntityList = projectItemService.listByProjectKey(request.getKey());
/** ==================== 保存模板信息 ================================= */
ProjectTemplateEntity projectTemplateEntity = new ProjectTemplateEntity();
BeanUtil.copyProperties(projectEntity, projectTemplateEntity, UserProjectEntity.Fields.status);
projectTemplateEntity.setId(null);
projectTemplateEntity.setKey(IdUtil.fastSimpleUUID());
projectTemplateEntity.setCategoryId(CommonConstants.ConstantNumber.FOUR.longValue());
projectTemplateService.save(projectTemplateEntity);
/** ==================== 保存问题列表 ================================= */
List<ProjectTemplateItemEntity> projectTemplateItemList = JsonUtils.jsonToList(JsonUtils.objToJson(itemEntityList), ProjectTemplateItemEntity.class);
projectTemplateItemList.forEach(item -> {
item.setId(null);
item.setProjectKey(projectTemplateEntity.getKey());
});
projectTemplateItemService.saveBatch(projectTemplateItemList);
/** ==================== 保存逻辑.将project逻辑转化为template逻辑,然后存入 ================================= */
List<UserProjectLogicEntity> projectLogics =
projectLogicService.list(new LambdaQueryWrapper<UserProjectLogicEntity>().eq(UserProjectLogicEntity::getProjectKey, request.getKey()));
List<ProjectTemplateLogicEntity> logics = projectLogics.stream().map(l -> {
// 转化condition
HashSet<ProjectTemplateLogicEntity.Condition> conditions = new HashSet<>();
Set<UserProjectLogicEntity.Condition> conditionSource = l.getConditionList();
for (Object e : conditionSource) {
ProjectTemplateLogicEntity.Condition templateCondition = JsonUtils.mapToObj((LinkedHashMap) e, ProjectTemplateLogicEntity.Condition.class);
conditions.add(templateCondition);
}
ProjectTemplateLogicEntity templateLogEntity = new ProjectTemplateLogicEntity();
templateLogEntity.setProjectKey(projectTemplateEntity.getKey());
templateLogEntity.setExpression(l.getExpression());
templateLogEntity.setConditionList(conditions);
templateLogEntity.setFormItemId(l.getFormItemId());
return templateLogEntity;
}).collect(Collectors.toList());
templateLogicService.saveBatch(logics);
return Result.success(projectTemplateEntity.getKey());
}

66
tduck-project/src/main/java/com/tduck/cloud/project/entity/ProjectTemplateLogicEntity.java

@ -0,0 +1,66 @@
package com.tduck.cloud.project.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.tduck.cloud.common.entity.BaseEntity;
import com.tduck.cloud.common.mybatis.handler.JacksonTypeHandler;
import com.tduck.cloud.project.entity.enums.ProjectLogicExpressionEnum;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import java.util.Set;
/**
* 项目模板逻辑(UserProjectLogic)表实体类
*
* @author smalljop
* @since 2020-05-01 13:36:27
*/
@Data
@Accessors(chain = true)
@TableName(value = "pr_project_template_logic", autoResultMap = true)
public class ProjectTemplateLogicEntity extends BaseEntity<ProjectTemplateLogicEntity> {
/**
* 项目key
*/
@NotBlank(message = "projectKey不能为空")
private String projectKey;
/**
* 表单项Id
*/
private String formItemId;
/**
* 条件成立的表达式
*/
private ProjectLogicExpressionEnum expression;
/**
* 条件
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private Set<Condition> conditionList;
/**
* 条件
*/
@Data
public static class Condition {
/**
* 表单项Id
*/
private String formItemId;
/**
* 表达式
*/
private String expression;
/**
* 选项
*/
private Object optionValue;
}
}

15
tduck-project/src/main/java/com/tduck/cloud/project/mapper/ProjectTemplateLogicMapper.java

@ -0,0 +1,15 @@
package com.tduck.cloud.project.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tduck.cloud.project.entity.ProjectTemplateLogicEntity;
import com.tduck.cloud.project.entity.UserProjectLogicEntity;
/**
* 用户项目逻辑表(UserProjectLogic)表数据库访问层
*
* @author smalljop
* @since 2020-11-18 18:16:17
*/
public interface ProjectTemplateLogicMapper extends BaseMapper<ProjectTemplateLogicEntity> {
}

8
tduck-project/src/main/java/com/tduck/cloud/project/service/ProjectTemplateLogicService.java

@ -0,0 +1,8 @@
package com.tduck.cloud.project.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tduck.cloud.project.entity.ProjectTemplateLogicEntity;
import com.tduck.cloud.project.entity.UserProjectLogicEntity;
public interface ProjectTemplateLogicService extends IService<ProjectTemplateLogicEntity> {
}

12
tduck-project/src/main/java/com/tduck/cloud/project/service/impl/ProjectTemplateLogicServiceImpl.java

@ -0,0 +1,12 @@
package com.tduck.cloud.project.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tduck.cloud.project.entity.ProjectTemplateLogicEntity;
import com.tduck.cloud.project.mapper.ProjectTemplateLogicMapper;
import com.tduck.cloud.project.service.ProjectTemplateLogicService;
import org.springframework.stereotype.Service;
@Service("projectTemplateLogicService")
public class ProjectTemplateLogicServiceImpl extends ServiceImpl<ProjectTemplateLogicMapper, ProjectTemplateLogicEntity> implements ProjectTemplateLogicService {
}
Loading…
Cancel
Save