package com.ltkj.web.tduck;
|
|
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.ltkj.common.core.domain.AjaxResult;
|
import com.ltkj.tduck.constant.CommonConstants;
|
import com.ltkj.tduck.domain.*;
|
import com.ltkj.tduck.enums.FormStatusEnum;
|
import com.ltkj.tduck.enums.FormTypeEnum;
|
import com.ltkj.tduck.request.QueryFormItemRequest;
|
import com.ltkj.tduck.request.QueryFormRequest;
|
import com.ltkj.tduck.request.QueryFormTemplateTypeRequest;
|
import com.ltkj.tduck.request.SortFormItemRequest;
|
import com.ltkj.tduck.service.*;
|
import com.ltkj.tduck.utils.FormDataUtils;
|
import com.ltkj.tduck.utils.Result;
|
import com.ltkj.tduck.utils.SortUtils;
|
import com.ltkj.tduck.utils.ValidatorUtils;
|
import com.ltkj.tduck.vo.FormFieldVO;
|
import com.ltkj.tduck.vo.OperateFormItemVO;
|
import com.ltkj.tduck.vo.UserFormDetailVO;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import javax.annotation.security.PermitAll;
|
import javax.validation.constraints.NotBlank;
|
import java.util.ArrayList;
|
import java.util.Comparator;
|
import java.util.Date;
|
import java.util.List;
|
|
|
/**
|
* 用户表单
|
**/
|
@RequiredArgsConstructor
|
@RestController
|
@Slf4j
|
//@RequestMapping("/tduck-api")
|
public class UserFormController {
|
@Resource
|
private final UserFormService formService;
|
@Resource
|
private final UserFormItemService formItemService;
|
@Resource
|
private final FormTemplateCategoryService formTemplateCategoryService;
|
@Resource
|
private final SortUtils sortUtils;
|
|
private final UserFormThemeService userFormThemeService;
|
private final UserFormLogicService userFormLogicService;
|
|
|
/**
|
* 查询表单
|
*/
|
@GetMapping("/user/form/{key}")
|
public AjaxResult queryFormByKey(@PathVariable @NotBlank String key) {
|
return AjaxResult.success(formService.getByKey(key));
|
}
|
|
/**
|
* 项目表单项查询
|
*/
|
@GetMapping("/user/form/item/list")
|
public AjaxResult queryFormItems(QueryFormItemRequest request) {
|
ValidatorUtils.validateEntity(request);
|
// FormAuthUtils.hasPermission(request.getKey());
|
List<UserFormItemEntity> itemEntityList = formItemService.list(Wrappers.<UserFormItemEntity>lambdaQuery().eq(UserFormItemEntity::getFormKey, request.getKey()).eq(ObjectUtil.isNotNull(request.getDisplayType()), UserFormItemEntity::getDisplayType, request.getDisplayType()));
|
itemEntityList.sort(Comparator.comparing(UserFormItemEntity::getSort));
|
return AjaxResult.success(itemEntityList);
|
}
|
|
|
/**
|
* 分页查询项目分类
|
*
|
* @return
|
*/
|
@GetMapping("/form/template/type/list")
|
public AjaxResult queryFormTemplateTypes(QueryFormTemplateTypeRequest.List request) {
|
return AjaxResult.success(formTemplateCategoryService.list(Wrappers.<FormTemplateCategoryEntity>lambdaQuery()
|
.orderByDesc(FormTemplateCategoryEntity::getSort)));
|
}
|
|
|
/**
|
* 表单更新
|
*
|
* @param form
|
*/
|
@PostMapping("/user/form/update")
|
public AjaxResult updateForm(@RequestBody UserFormEntity form) {
|
// ValidatorUtils.validateEntity(form, AddGroup.class);
|
UserFormEntity oldForm = formService.getByKey(form.getFormKey());
|
if (ObjectUtil.isNotNull(oldForm)) {
|
form.setId(oldForm.getId());
|
formService.updateById(form);
|
}
|
return AjaxResult.success();
|
}
|
|
|
/**
|
* 项目表单项创建
|
*
|
* @param entity
|
*/
|
@PostMapping("/user/form/item/create")
|
public AjaxResult createFormItem(@RequestBody UserFormItemEntity entity) {
|
// ValidatorUtils.validateEntity(entity, AddGroup.class);
|
if (ObjectUtil.isNull(entity.getDisplayType())) {
|
entity.setDisplayType(false);
|
}
|
if (ObjectUtil.isNull(entity.getHideType())) {
|
entity.setHideType(false);
|
}
|
//排序下标计算
|
entity.setSort(sortUtils.getInitialSortPosition(entity.getFormKey()));
|
entity.setSpecialType(formItemService.isSpecialTypeItem(entity));
|
entity.setCreateTime(new Date());
|
boolean save = formItemService.save(entity);
|
return AjaxResult.success(new OperateFormItemVO(entity.getSort(), entity.getId(), save, false));
|
}
|
|
|
/**
|
* 批量项目表单项创建
|
*/
|
@PostMapping("/user/form/item/batch/create")
|
public AjaxResult batchCreateFormItem(@RequestBody List<UserFormItemEntity> itemEntityList) {
|
//排序下标计算
|
itemEntityList.forEach(item -> item.setSort(sortUtils.getInitialSortPosition(item.getFormKey())));
|
itemEntityList.forEach(item -> item.setDisplayType(false));
|
itemEntityList.forEach(item -> item.setHideType(false));
|
itemEntityList.forEach(item -> item.setSpecialType(false));
|
boolean save = formItemService.saveBatch(itemEntityList);
|
AjaxResult ajaxResult = new AjaxResult();
|
ajaxResult.put("code", 200);
|
ajaxResult.put("data", null);
|
ajaxResult.put("msg", null);
|
return ajaxResult;
|
}
|
|
|
/**
|
* 表单项删除
|
*/
|
@PostMapping("/user/form/item/delete")
|
public AjaxResult deleteFormItem(@RequestBody UserFormItemEntity request) {
|
// FormAuthUtils.hasPermission(request.getFormKey());
|
boolean delete = formItemService.remove(Wrappers.<UserFormItemEntity>lambdaQuery().eq(UserFormItemEntity::getFormKey, request.getFormKey()).eq(UserFormItemEntity::getFormItemId, request.getFormItemId()));
|
return AjaxResult.success(delete);
|
}
|
|
|
/**
|
* 表单项更新
|
*
|
* @param request
|
*/
|
@PostMapping("/user/form/item/update")
|
public AjaxResult updateFormItem(@RequestBody UserFormItemEntity request) {
|
// FormAuthUtils.hasPermission(request.getFormKey());
|
// ValidatorUtils.validateEntity(request, UpdateGroup.class);
|
request.setSpecialType(formItemService.isSpecialTypeItem(request));
|
boolean update = formItemService.update(request, Wrappers.<UserFormItemEntity>lambdaQuery().eq(UserFormItemEntity::getFormKey, request.getFormKey()).eq(UserFormItemEntity::getFormItemId, request.getFormItemId()));
|
return AjaxResult.success(update);
|
}
|
|
/**
|
* 表单项排序
|
*
|
* @param request
|
*/
|
@PostMapping("/user/form/item/sort")
|
public AjaxResult sortFormItem(@RequestBody SortFormItemRequest request) {
|
// ValidatorUtils.validateEntity(request);
|
if (ObjectUtil.isNull(request.getAfterPosition()) && ObjectUtil.isNull(request.getBeforePosition())) {
|
return AjaxResult.success();
|
}
|
UserFormItemEntity itemEntity = formItemService.getOne(Wrappers.<UserFormItemEntity>lambdaQuery().eq(UserFormItemEntity::getFormKey, request.getFormKey()).eq(UserFormItemEntity::getFormItemId, request.getFormItemId()));
|
Long sort = sortUtils.calcSortPosition(request.getBeforePosition(), request.getAfterPosition(), request.getFormKey());
|
if (sortUtils.sortAllList(request.getBeforePosition(), request.getAfterPosition(), request.getFormKey(), sort)) {
|
return AjaxResult.success(new OperateFormItemVO(itemEntity.getSort(), itemEntity.getId(), true, true));
|
}
|
itemEntity.setSort(sort);
|
boolean b = formItemService.updateById(itemEntity);
|
return AjaxResult.success(new OperateFormItemVO(itemEntity.getSort(), itemEntity.getId(), b, false));
|
}
|
|
|
/**
|
* 查询表单详情
|
* 包含表单信息 表单字段信息 表单主题
|
*
|
* @param key
|
*/
|
@GetMapping("/user/form/details/{key}")
|
@PermitAll
|
public AjaxResult queryFormDetails(@PathVariable @NotBlank String key) {
|
UserFormEntity form = formService.getByKey(key);
|
if (ObjectUtil.isNull(form)) {
|
return AjaxResult.success();
|
}
|
List<UserFormItemEntity> formItemList = formItemService.list(Wrappers.<UserFormItemEntity>lambdaQuery().ne(UserFormItemEntity::getHideType, 1).eq(UserFormItemEntity::getFormKey, key));
|
formItemList.sort(Comparator.comparing(UserFormItemEntity::getSort));
|
UserFormThemeEntity theme = userFormThemeService.getByKey(key);
|
UserFormLogicEntity formLogic = userFormLogicService.getOne(Wrappers.<UserFormLogicEntity>lambdaQuery().eq(UserFormLogicEntity::getFormKey, key));
|
// 如果是考试 移除正确答案 避免把正确答案返回到前端
|
if (form.getType() == FormTypeEnum.EXAM.getValue().toString()) {
|
formItemList.forEach(item -> {
|
JSONObject schemeJson = JSONUtil.parseObj(item.getScheme());
|
if (schemeJson.containsKey("examConfig")) {
|
schemeJson.getJSONObject("examConfig").remove("answer");
|
}
|
item.setScheme(schemeJson);
|
});
|
}
|
return AjaxResult.success(new UserFormDetailVO(new UserFormDetailVO.UserForm(form), formItemList, theme, formLogic));
|
}
|
|
|
/**
|
* 发布表单
|
*/
|
@PostMapping("/user/form/publish")
|
public AjaxResult publishForm(@RequestBody UserFormEntity request) {
|
// FormAuthUtils.hasPermission(request.getFormKey());
|
long count = formItemService.count(Wrappers.<UserFormItemEntity>lambdaQuery().eq(UserFormItemEntity::getFormKey, request.getFormKey()));
|
if (count == CommonConstants.ConstantNumber.ZERO) {
|
return AjaxResult.error("无有效表单项,无法发布");
|
}
|
UserFormEntity entity = formService.getByKey(request.getFormKey());
|
entity.setStatus(2);
|
return AjaxResult.success(formService.updateById(entity));
|
}
|
|
|
/**
|
* 停止收集
|
*
|
* @param request
|
*/
|
@PostMapping("/user/form/stop")
|
public Result stopForm(@RequestBody UserFormEntity request) {
|
// FormAuthUtils.hasPermission(request.getFormKey());
|
UserFormEntity entity = formService.getByKey(request.getFormKey());
|
entity.setStatus(3);
|
return Result.success(formService.updateById(entity));
|
}
|
|
|
/**
|
* 查询我的表单分页
|
*/
|
@GetMapping("/user/form/page")
|
public Result queryMyForms(@RequestAttribute Long userId, QueryFormRequest.Page request) {
|
LambdaQueryWrapper<UserFormEntity> queryWrapper = Wrappers.<UserFormEntity>lambdaQuery().eq(UserFormEntity::getUserId, userId)
|
.eq(ObjectUtil.isNotNull(request.getFolder()), UserFormEntity::getFolder, request.getFolder())
|
.eq(ObjectUtil.isNotNull(request.getType()), UserFormEntity::getType, request.getType())
|
.eq(UserFormEntity::getDeleted, 0).func(i -> {
|
// 通过文件名搜索时 可以搜索到子文件夹下的表单
|
if (StrUtil.isNotBlank(request.getName()) && request.getFolderId() == 0) {
|
} else {
|
i.eq(UserFormEntity::getFolderId, request.getFolderId());
|
}
|
}).eq(ObjectUtil.isNotNull(request.getStatus()), UserFormEntity::getStatus, request.getStatus()).like(StrUtil.isNotBlank(request.getName()),
|
UserFormEntity::getName, request.getName()).le(ObjectUtil.isNotNull(request.getEndDateTime()), UserFormEntity::getUpdateTime,
|
request.getEndDateTime()).ge(ObjectUtil.isNotNull(request.getBeginDateTime()), UserFormEntity::getUpdateTime,
|
request.getBeginDateTime()).orderByDesc(UserFormEntity::getFolder)
|
// .orderByDesc(TBaseEntity::getCreateTime)
|
;
|
return Result.success(formService.page(request.toMybatisPage(), queryWrapper));
|
}
|
|
|
/**
|
* 获取表单字段 包括系统默认字段
|
*/
|
@GetMapping("/user/form/fields/{formKey}")
|
public Result queryUserFormFields(@PathVariable String formKey) {
|
return Result.success(formItemService.listAllFormFields(formKey));
|
}
|
|
/**
|
* 获取表单固定字段
|
* 所有表单都包含 用于查看详情右侧显示
|
*/
|
@GetMapping("/user/form/fixed/fields/{formKey}")
|
public Result queryUserFormFixedFields(@PathVariable String formKey) {
|
// 查询表单类型
|
UserFormEntity userFormEntity = formService.getByKey(formKey);
|
List<FormFieldVO> fields = new ArrayList<>();
|
FormDataUtils.addFormBaseDataField(fields);
|
fields.add(new FormFieldVO("submitUaOs", "操作系统"));
|
fields.add(new FormFieldVO("submitUaDevice", "设备"));
|
fields.add(new FormFieldVO(UserFormDataEntity.Fields.submitBrowser, "浏览器"));
|
fields.add(new FormFieldVO(UserFormDataEntity.Fields.submitAddress, "地址"));
|
fields.add(new FormFieldVO(UserFormDataEntity.Fields.submitRequestIp, "IP"));
|
fields.add(new FormFieldVO(UserFormDataEntity.Fields.wxUserInfo, "微信用户"));
|
return Result.success(fields);
|
}
|
|
}
|