//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 itemEntityList = formItemService.list(Wrappers.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.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 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.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.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.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 formItemList = formItemService.list(Wrappers.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.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.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 queryWrapper = Wrappers.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 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); // } // //}