zjh
2024-12-16 8ee03ce807822e08ab7daebddf88f4cd79993fce
ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormController.java
@@ -1,311 +1,315 @@
//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) {
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);
////        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);
//    }
//
//}
        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);
    }
}