From cebb05f8d1ddbf5ac415c5471e17d2d94ea1a6de Mon Sep 17 00:00:00 2001
From: zjh <1084500556@qq.com>
Date: 星期三, 15 五月 2024 18:14:07 +0800
Subject: [PATCH] zjh 2024/05/15-1

---
 ltkj-system/src/main/java/com/ltkj/system/service/ISysDeptService.java                  |    2 
 ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormSettingController.java              |  284 +++---
 ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjSurveyTemplateController.java |   65 +
 ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjSurveyTemplateServiceImpl.java     |    3 
 ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormResultController.java               |  456 ++++----
 ltkj-admin/src/main/resources/application.yml                                           |    3 
 ltkj-admin/src/main/java/com/ltkj/LtkjApplication.java                                  |    2 
 ltkj-system/src/main/java/com/ltkj/tduck/utils/SortUtils.java                           |  218 ++--
 ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormController.java                     |  624 ++++++------
 ltkj-framework/pom.xml                                                                  |   13 
 ltkj-system/src/main/java/com/ltkj/tduck/service/UserFormSettingService.java            |  122 +-
 ltkj-system/src/main/java/com/ltkj/system/service/impl/SysDeptServiceImpl.java          |    6 
 ltkj-system/src/main/java/com/ltkj/tduck/service/impl/UserFormSettingServiceImpl.java   |  388 ++++----
 ltkj-system/src/main/java/com/ltkj/tduck/utils/CacheUtils.java                          |  233 ++--
 ltkj-system/src/main/java/com/ltkj/tduck/service/impl/UserFormDataServiceImpl.java      |  312 +++---
 15 files changed, 1,414 insertions(+), 1,317 deletions(-)

diff --git a/ltkj-admin/src/main/java/com/ltkj/LtkjApplication.java b/ltkj-admin/src/main/java/com/ltkj/LtkjApplication.java
index 32ea5ec..d939d7e 100644
--- a/ltkj-admin/src/main/java/com/ltkj/LtkjApplication.java
+++ b/ltkj-admin/src/main/java/com/ltkj/LtkjApplication.java
@@ -16,7 +16,7 @@
 @EnableTransactionManagement
 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class},scanBasePackages = {"org.jeecg.modules.jmreport","com.ltkj"})
 @EnableAsync
-//@EnableCaching
+@EnableCaching
 public class LtkjApplication {
     public static void main(String[] args) {
         //spring-boot-devtools鐨勬ā鍧椾娇Spring Boot搴旂敤鏀寔鐑儴缃诧紝鏃犻渶鎵嬪姩閲嶅惎Spring Boot搴旂敤銆�
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjSurveyTemplateController.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjSurveyTemplateController.java
index 36f2de7..8e22ec7 100644
--- a/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjSurveyTemplateController.java
+++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjSurveyTemplateController.java
@@ -8,11 +8,14 @@
 
 import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ltkj.common.core.domain.TreeSelect;
+import com.ltkj.common.core.domain.entity.SysDept;
 import com.ltkj.hosp.domain.TjSurveyOptions;
 import com.ltkj.hosp.domain.TjSurveyQuestion;
 import com.ltkj.hosp.domain.TjSurveyTempQues;
 import com.ltkj.hosp.service.ITjSurveyQuestionService;
 import com.ltkj.system.service.ISysConfigService;
+import com.ltkj.system.service.ISysDeptService;
 import com.ltkj.tduck.domain.UserFormEntity;
 import com.ltkj.tduck.enums.FormSourceTypeEnum;
 import com.ltkj.tduck.enums.FormStatusEnum;
@@ -53,6 +56,8 @@
     @Autowired
     private UserFormService formService;
 
+    @Autowired
+    private ISysDeptService deptService;
 
     /**
      * 鍒ゆ柇鏄惁寮�鍚~楦〃鍗曡璁�
@@ -155,6 +160,21 @@
 
         }
         return AjaxResult.success("鏆傛棤淇℃伅");
+
+
+//        List<TjSurveyQuestion> l11=new ArrayList<>();
+//        TjSurveyTemplate byId1 = tjSurveyTemplateService.selectTjSurveyTemplateByMid(mid);
+//        List<TjSurveyTempQues> tjSurveyTempQuesList = byId1.getTjSurveyTempQuesList();
+//        if (tjSurveyTempQuesList!=null){
+//            for (TjSurveyTempQues tjSurveyTempQues : tjSurveyTempQuesList) {
+//                TjSurveyQuestion byId11 = tjSurveyQuestionService.selectTjSurveyQuestionByQid(tjSurveyTempQues.getQid());
+//                if (byId11!=null){
+//                    l11.add(byId11);
+//                }
+//            }
+//            return AjaxResult.success(l11);
+//        }
+//        return AjaxResult.success("鏆傛棤淇℃伅");
     }
 
 
@@ -194,6 +214,51 @@
         return AjaxResult.success(false);
     }
 
+    @GetMapping("/getQuestionsByMid")
+    public Map<String, Object> getQuestionsByMid(@RequestParam("mid") Long mid,
+                                                 @RequestParam(required = false) String question,
+                                                 @RequestParam("pageNum") int pageNum,
+                                                 @RequestParam("pageSize") int pageSize) {
+        Map<String, Object> res = new HashMap<>();
+//        List<TjSurveyQuestion> list = tjSurveyTemplateService.getQuestionsByMid(mid);
+        LambdaQueryWrapper<TjSurveyQuestion> wq1=new LambdaQueryWrapper<>();
+        wq1.eq(TjSurveyQuestion::getMid,mid);
+        if(null !=question && !question.equals("")){
+            wq1.like(TjSurveyQuestion::getQuestion,question);
+        }
+        final List<TjSurveyQuestion> list = tjSurveyQuestionService.list(wq1);
+
+        int start = 0, end = 0;
+        start = (pageNum - 1) * pageSize;
+        end = start + pageSize;
+        end = Math.min(list.size(), end);
+        List<TjSurveyQuestion> result = new ArrayList<>();
+        for (int i = start; i < end; i++) {
+            result.add(list.get(i));
+        }
+        final TjSurveyTemplate byId = tjSurveyTemplateService.selectTemplateByMid1(mid);
+        for (TjSurveyQuestion tjSurveyQuestion : result) {
+            tjSurveyQuestion.setTemplate(byId);
+            final List<TjSurveyOptions> tjSurveyOptions = tjSurveyQuestionService.selectOptionsByQid(tjSurveyQuestion.getQid());
+            tjSurveyQuestion.setTjSurveyOptionsList(tjSurveyOptions);
+        }
+        res.put("data", result);
+//        res.put("temp", tjSurveyTemplateService.selectTjSurveyTemplateByMid(mid));
+        res.put("total", list.size());
+        return res;
+    }
+
+
+    /**
+     * 鏌ヨ闂嵎妯℃澘鍒楄〃
+     */
+    @GetMapping("/listByDeptId")
+    public AjaxResult listByDeptId(SysDept dept) {
+        List<TreeSelect> treeSelects =deptService.selectDeptList1(dept);
+        return AjaxResult.success(treeSelects);
+    }
+
+
     /**
      * 淇敼闂嵎妯℃澘
      */
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormController.java b/ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormController.java
index ffda232..1cd982f 100644
--- a/ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormController.java
+++ b/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));
-//        // 濡傛灉鏄�冭瘯 绉婚櫎姝g‘绛旀 閬垮厤鎶婃纭瓟妗堣繑鍥炲埌鍓嶇
-//        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));
+        // 濡傛灉鏄�冭瘯 绉婚櫎姝g‘绛旀 閬垮厤鎶婃纭瓟妗堣繑鍥炲埌鍓嶇
+        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);
+    }
+
+}
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormResultController.java b/ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormResultController.java
index 2ed03de..7f1fca1 100644
--- a/ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormResultController.java
+++ b/ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormResultController.java
@@ -1,254 +1,254 @@
-//package com.ltkj.web.tduck;
-//
-//import cn.hutool.core.date.DateUtil;
-//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-//import com.ltkj.common.core.domain.AjaxResult;
-//import com.ltkj.common.utils.SecurityUtils;
-//import com.ltkj.common.utils.http.HttpUtils;
-//import com.ltkj.tduck.domain.UserFormDataEntity;
-//import com.ltkj.tduck.domain.UserFormViewCountEntity;
-//import com.ltkj.tduck.request.QueryFormResultRequest;
-//import com.ltkj.tduck.service.UserFormDataService;
-//import com.ltkj.tduck.service.UserFormViewCountService;
-//import com.ltkj.tduck.utils.Result;
-//import com.ltkj.tduck.utils.ValidatorUtils;
-//import lombok.RequiredArgsConstructor;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.web.bind.annotation.*;
-//
-//import javax.annotation.security.PermitAll;
-//import javax.servlet.http.HttpServletRequest;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.concurrent.ConcurrentHashMap;
-//import java.util.concurrent.ConcurrentMap;
-//
-//
-///**
-// * 琛ㄥ崟鏁版嵁
-// *
-// * @author : smalljop
-// * @description : 琛ㄥ崟鏁版嵁椤� 褰撳墠鐢ㄦ埛鑷繁浣跨敤鎺ュ彛
-// * @create : 2020-11-18 18:17
-// **/
-//
-//@Slf4j
-//@RestController
-//@RequiredArgsConstructor
-//@RequestMapping("/user/form/data")
-//public class UserFormResultController {
-//    private final UserFormDataService formResultService;
-////    private final UserFormSettingService userFormSettingService;
-////    private final FormDataImportUtils formDataImportUtils;
-////    private final FormDataExportUtils formDataExportUtils;
-////    private final UserFormService userFormService;
-//    private final UserFormViewCountService userFormViewCountService;
-////    private final MailService mailService;
-////    private final WxMpUserMsgService userMsgService;
-//    private final ConcurrentMap<String, Integer> viewFormMap = new ConcurrentHashMap<>();
-//
+package com.ltkj.web.tduck;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ltkj.common.core.domain.AjaxResult;
+import com.ltkj.common.utils.SecurityUtils;
+import com.ltkj.common.utils.http.HttpUtils;
+import com.ltkj.tduck.domain.UserFormDataEntity;
+import com.ltkj.tduck.domain.UserFormViewCountEntity;
+import com.ltkj.tduck.request.QueryFormResultRequest;
+import com.ltkj.tduck.service.UserFormDataService;
+import com.ltkj.tduck.service.UserFormViewCountService;
+import com.ltkj.tduck.utils.Result;
+import com.ltkj.tduck.utils.ValidatorUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.security.PermitAll;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+
+/**
+ * 琛ㄥ崟鏁版嵁
+ *
+ * @author : smalljop
+ * @description : 琛ㄥ崟鏁版嵁椤� 褰撳墠鐢ㄦ埛鑷繁浣跨敤鎺ュ彛
+ * @create : 2020-11-18 18:17
+ **/
+
+@Slf4j
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/user/form/data")
+public class UserFormResultController {
+    private final UserFormDataService formResultService;
+//    private final UserFormSettingService userFormSettingService;
+//    private final FormDataImportUtils formDataImportUtils;
+//    private final FormDataExportUtils formDataExportUtils;
+//    private final UserFormService userFormService;
+    private final UserFormViewCountService userFormViewCountService;
+//    private final MailService mailService;
+//    private final WxMpUserMsgService userMsgService;
+    private final ConcurrentMap<String, Integer> viewFormMap = new ConcurrentHashMap<>();
+
+
+
+    /**
+     * 鏍规嵁浣撴鍙疯幏鍙栭棶鍗疯褰�
+     */
+    @GetMapping("getRecordByTjNumber")
+    public AjaxResult getRecordByTjNumber(String tjNumber) {
+        LambdaQueryWrapper<UserFormDataEntity> wq=new LambdaQueryWrapper<>();
+        wq.eq(UserFormDataEntity::getTjNumber,tjNumber);
+        final List<UserFormDataEntity> list = formResultService.list(wq);
+        AjaxResult ajaxResult = new AjaxResult();
+        ajaxResult.put("code", 200);
+        ajaxResult.put("data", list);
+        ajaxResult.put("msg", null);
+        return ajaxResult;
+    }
+
+
+    /***
+     * 鏌ョ湅琛ㄥ崟
+     * 璁板綍鏌ョ湅鐨処P 缁熻鏌ョ湅鐢ㄦ埛鏁�
+     */
+    @GetMapping("view/{formKey}")
+    @PermitAll
+    public Result<Void> viewForm(HttpServletRequest request, @PathVariable("formKey") String formKey) {
+        if (viewFormMap.containsKey(formKey)) {
+            userFormViewCountService.increment(formKey);
+        } else {
+            // 涓嶅瓨鍦ㄥ垯娣诲姞
+            Long count = userFormViewCountService.count(formKey);
+            if (count == 0) {
+                UserFormViewCountEntity entity = new UserFormViewCountEntity();
+                entity.setFormKey(formKey);
+                entity.setCount(1L);
+                userFormViewCountService.save(entity);
+            }
+            viewFormMap.put(formKey, 1);
+        }
+        return Result.success();
+    }
+
+    /**
+     * 鏌ヨ鏁版嵁
+     *
+     * @param request 鏌ヨ鏉′欢
+     * @return 鏁版嵁
+     */
+    @PostMapping("query")
+    public Result queryFormDataTable(@RequestBody QueryFormResultRequest request) {
+//        FormAuthUtils.hasPermission(request.getFormKey());
+        return Result.success(formResultService.listFormDataTable(request));
+    }
+
+    /**
+     * 鑾峰彇鏌愭潯鏁版嵁璇︽儏
+     *
+     * @param dataId 鏁版嵁ID
+     * @return 鏁版嵁璇︽儏
+     */
+    @GetMapping("details/{dataId}")
+    @PermitAll
+    public Result getFormDataDetails(@PathVariable("dataId") String dataId) {
+        return formResultService.getFormDataDetails(dataId);
+    }
 //
 //
 //    /**
-//     * 鏍规嵁浣撴鍙疯幏鍙栭棶鍗疯褰�
+//     * 濉啓闄勪欢瀵煎嚭
+//     *
+//     * @param request 璇锋眰
+//     * @return 鏂囦欢
 //     */
-//    @GetMapping("getRecordByTjNumber")
-//    public AjaxResult getRecordByTjNumber(String tjNumber) {
-//        LambdaQueryWrapper<UserFormDataEntity> wq=new LambdaQueryWrapper<>();
-//        wq.eq(UserFormDataEntity::getTjNumber,tjNumber);
-//        final List<UserFormDataEntity> list = formResultService.list(wq);
-//        AjaxResult ajaxResult = new AjaxResult();
-//        ajaxResult.put("code", 200);
-//        ajaxResult.put("data", list);
-//        ajaxResult.put("msg", null);
-//        return ajaxResult;
+//    @PostMapping("/download/file")
+//    public Result downloadFormResultFile(@RequestBody QueryFormResultRequest request) {
+//        return formResultService.downloadFormResultFile(request);
 //    }
-//
-//
-//    /***
-//     * 鏌ョ湅琛ㄥ崟
-//     * 璁板綍鏌ョ湅鐨処P 缁熻鏌ョ湅鐢ㄦ埛鏁�
-//     */
-//    @GetMapping("view/{formKey}")
-//    @PermitAll
-//    public Result<Void> viewForm(HttpServletRequest request, @PathVariable("formKey") String formKey) {
-//        if (viewFormMap.containsKey(formKey)) {
-//            userFormViewCountService.increment(formKey);
-//        } else {
-//            // 涓嶅瓨鍦ㄥ垯娣诲姞
-//            Long count = userFormViewCountService.count(formKey);
-//            if (count == 0) {
-//                UserFormViewCountEntity entity = new UserFormViewCountEntity();
-//                entity.setFormKey(formKey);
-//                entity.setCount(1L);
-//                userFormViewCountService.save(entity);
-//            }
-//            viewFormMap.put(formKey, 1);
+
+    /**
+     * 濉啓
+     *
+     * @param entity  濉啓鏁版嵁
+     * @param request 璇锋眰
+     * @return
+     */
+    @PostMapping("/create")
+    public AjaxResult createFormResult(@RequestBody UserFormDataEntity entity, HttpServletRequest request) {
+        ValidatorUtils.validateEntity(entity);
+        entity.setSubmitRequestIp(HttpUtils.getIpAddr(request));
+        // 濡傛灉宸茬粡鐧婚檰浜嗕篃璁板綍鐢ㄦ埛淇℃伅 try catch 閬垮厤鎶涘嚭寮傚父
+        entity.setCreateBy(SecurityUtils.getUserId() != null ? String.valueOf(SecurityUtils.getUserId()) : null);
+        Map<String, Object> result = formResultService.saveFormResult(entity);
+        return AjaxResult.success(result);
+    }
+
+
+    /**
+     * 鍏紑濉啓
+     *
+     * @param entity  濉啓鏁版嵁
+     * @param request 璇锋眰
+     */
+    @PostMapping("/public/create")
+    @PermitAll
+    public Result<Map<String, Object>> createPublicFormResult(@RequestBody UserFormDataEntity entity, HttpServletRequest request) {
+
+        ValidatorUtils.validateEntity(entity);
+        entity.setSubmitRequestIp(HttpUtils.getIpAddr(request));
+//        Result<Boolean> userFormSettingStatus = userFormSettingService.getUserFormWriteSettingStatus(entity.getFormKey(), entity.getSubmitRequestIp(), entity.getWxOpenId(), CommonConstants.ConstantNumber.ONE);
+//        if (StrUtil.isNotBlank(userFormSettingStatus.getMsg())) {
+//            return Result.failed(userFormSettingStatus.getMsg());
 //        }
+        // 濡傛灉宸茬粡鐧婚檰浜嗕篃璁板綍鐢ㄦ埛淇℃伅 try catch 閬垮厤鎶涘嚭寮傚父
+        entity.setCreateBy(SecurityUtils.getUserId() != null ? String.valueOf(SecurityUtils.getUserId()) : null);
+        Map<String, Object> result = formResultService.saveFormResult(entity);
+//        ThreadUtil.execAsync(() -> {
+//            sendWriteResultNotify(entity.getFormKey());
+//        });
+        return Result.success(result);
+//        return Result.success();
+    }
+
+//
+//    /**
+//     * 鎵归噺鍒犻櫎
+//     *
+//     * @param formKey    琛ㄥ崟key
+//     * @param dataIdList 鏁版嵁ID
+//     * @return Result
+//     */
+//    @PostMapping("/delete/{formKey}")
+//    public Result deleteFormData(@RequestBody List<String> dataIdList, @PathVariable("formKey") String formKey) {
+//        formResultService.deleteByIds(dataIdList, formKey);
+//        return Result.success();
+//    }
+
+
+//    /**
+//     * 鏇存柊
+//     *
+//     * @param entity  濉啓鏁版嵁
+//     * @param request 璇锋眰
+//     * @return Result
+//     */
+//    @PostMapping("/update")
+//    @PermitAll
+//    public Result<Void> updateFormResult(@RequestBody UserFormDataEntity entity, HttpServletRequest request) {
+//        ValidatorUtils.validateEntity(entity);
+//        try {
+//            entity.setUpdateBy(String.valueOf(SecurityUtils.getUserId()));
+//        } catch (Exception ignored) {
+//        }
+//        formResultService.updateFormResult(entity);
 //        return Result.success();
 //    }
 //
 //    /**
-//     * 鏌ヨ鏁版嵁
+//     * 涓嬭浇瀵煎叆妯℃澘
 //     *
-//     * @param request 鏌ヨ鏉′欢
-//     * @return 鏁版嵁
+//     * @param response 鍝嶅簲
+//     * @param formKey  琛ㄥ崟key
 //     */
-//    @PostMapping("query")
-//    public Result queryFormDataTable(@RequestBody QueryFormResultRequest request) {
-////        FormAuthUtils.hasPermission(request.getFormKey());
-//        return Result.success(formResultService.listFormDataTable(request));
+//    @GetMapping("/import/template")
+//    public void downloadImportTemplate(HttpServletResponse response, String formKey) {
+//        formDataImportUtils.importTemplateExcel(response, formKey);
 //    }
 //
 //    /**
-//     * 鑾峰彇鏌愭潯鏁版嵁璇︽儏
-//     *
-//     * @param dataId 鏁版嵁ID
-//     * @return 鏁版嵁璇︽儏
+//     * 瀵煎嚭琛ㄥ崟鏁版嵁
 //     */
-//    @GetMapping("details/{dataId}")
-//    @PermitAll
-//    public Result getFormDataDetails(@PathVariable("dataId") String dataId) {
-//        return formResultService.getFormDataDetails(dataId);
+//    @PostMapping("export")
+//    public void exportFormData(@RequestBody ExportRequest.FormData exportRequest) {
+//        formDataExportUtils.exportData(exportRequest);
 //    }
-////
-////
-////    /**
-////     * 濉啓闄勪欢瀵煎嚭
-////     *
-////     * @param request 璇锋眰
-////     * @return 鏂囦欢
-////     */
-////    @PostMapping("/download/file")
-////    public Result downloadFormResultFile(@RequestBody QueryFormResultRequest request) {
-////        return formResultService.downloadFormResultFile(request);
-////    }
 //
 //    /**
-//     * 濉啓
+//     * 瀵煎叆琛ㄥ崟鏁版嵁
 //     *
-//     * @param entity  濉啓鏁版嵁
-//     * @param request 璇锋眰
-//     * @return
+//     * @param file 鏂囦欢
+//     * @return Result
 //     */
-//    @PostMapping("/create")
-//    public AjaxResult createFormResult(@RequestBody UserFormDataEntity entity, HttpServletRequest request) {
-//        ValidatorUtils.validateEntity(entity);
-//        entity.setSubmitRequestIp(HttpUtils.getIpAddr(request));
-//        // 濡傛灉宸茬粡鐧婚檰浜嗕篃璁板綍鐢ㄦ埛淇℃伅 try catch 閬垮厤鎶涘嚭寮傚父
-//        entity.setCreateBy(SecurityUtils.getUserId() != null ? String.valueOf(SecurityUtils.getUserId()) : null);
-//        Map<String, Object> result = formResultService.saveFormResult(entity);
-//        return AjaxResult.success(result);
+//    @PostMapping("import")
+//    public Result importFormData(@RequestParam("file") MultipartFile file, UserFormDataEntity dataEntity) throws IOException {
+//        return Result.success(formDataImportUtils.importFile(file.getInputStream(), dataEntity.getFormKey()));
 //    }
 //
 //
-//    /**
-//     * 鍏紑濉啓
-//     *
-//     * @param entity  濉啓鏁版嵁
-//     * @param request 璇锋眰
-//     */
-//    @PostMapping("/public/create")
-//    @PermitAll
-//    public Result<Map<String, Object>> createPublicFormResult(@RequestBody UserFormDataEntity entity, HttpServletRequest request) {
+//    private void sendWriteResultNotify(String formKey) {
+//        FormSettingSchemaStruct formSettingSchema = userFormSettingService.getFormSettingSchema(formKey);
+//        if (ObjectUtil.isNull(formSettingSchema)) {
+//            return;
+//        }
+//        UserFormEntity form = userFormService.getByKey(formKey);
+//        if (StrUtil.isNotBlank(formSettingSchema.getNewWriteNotifyEmail())) {
+//            mailService.sendTemplateHtmlMail(formSettingSchema.getNewWriteNotifyEmail(), "鏂板洖澶嶉�氱煡", "mail/form-write-notify", MapUtil.of("projectName", form.getName()));
+//        }
 //
-//        ValidatorUtils.validateEntity(entity);
-//        entity.setSubmitRequestIp(HttpUtils.getIpAddr(request));
-////        Result<Boolean> userFormSettingStatus = userFormSettingService.getUserFormWriteSettingStatus(entity.getFormKey(), entity.getSubmitRequestIp(), entity.getWxOpenId(), CommonConstants.ConstantNumber.ONE);
-////        if (StrUtil.isNotBlank(userFormSettingStatus.getMsg())) {
-////            return Result.failed(userFormSettingStatus.getMsg());
-////        }
-//        // 濡傛灉宸茬粡鐧婚檰浜嗕篃璁板綍鐢ㄦ埛淇℃伅 try catch 閬垮厤鎶涘嚭寮傚父
-//        entity.setCreateBy(SecurityUtils.getUserId() != null ? String.valueOf(SecurityUtils.getUserId()) : null);
-//        Map<String, Object> result = formResultService.saveFormResult(entity);
-////        ThreadUtil.execAsync(() -> {
-////            sendWriteResultNotify(entity.getFormKey());
-////        });
-//        return Result.success(result);
-////        return Result.success();
+//        if (StrUtil.isNotBlank(formSettingSchema.getNewWriteNotifyWx())) {
+//            List<String> openIdList = StrUtil.splitTrim(formSettingSchema.getNewWriteNotifyWx(), ";");
+//            openIdList.stream().forEach(openId -> {
+//                userMsgService.sendKfTextMsg("", openId, "鏀跺埌鏂扮殑鍙嶉锛岃鍘籔c绔煡鐪�");
+//            });
+//        }
 //    }
-//
-////
-////    /**
-////     * 鎵归噺鍒犻櫎
-////     *
-////     * @param formKey    琛ㄥ崟key
-////     * @param dataIdList 鏁版嵁ID
-////     * @return Result
-////     */
-////    @PostMapping("/delete/{formKey}")
-////    public Result deleteFormData(@RequestBody List<String> dataIdList, @PathVariable("formKey") String formKey) {
-////        formResultService.deleteByIds(dataIdList, formKey);
-////        return Result.success();
-////    }
-//
-//
-////    /**
-////     * 鏇存柊
-////     *
-////     * @param entity  濉啓鏁版嵁
-////     * @param request 璇锋眰
-////     * @return Result
-////     */
-////    @PostMapping("/update")
-////    @PermitAll
-////    public Result<Void> updateFormResult(@RequestBody UserFormDataEntity entity, HttpServletRequest request) {
-////        ValidatorUtils.validateEntity(entity);
-////        try {
-////            entity.setUpdateBy(String.valueOf(SecurityUtils.getUserId()));
-////        } catch (Exception ignored) {
-////        }
-////        formResultService.updateFormResult(entity);
-////        return Result.success();
-////    }
-////
-////    /**
-////     * 涓嬭浇瀵煎叆妯℃澘
-////     *
-////     * @param response 鍝嶅簲
-////     * @param formKey  琛ㄥ崟key
-////     */
-////    @GetMapping("/import/template")
-////    public void downloadImportTemplate(HttpServletResponse response, String formKey) {
-////        formDataImportUtils.importTemplateExcel(response, formKey);
-////    }
-////
-////    /**
-////     * 瀵煎嚭琛ㄥ崟鏁版嵁
-////     */
-////    @PostMapping("export")
-////    public void exportFormData(@RequestBody ExportRequest.FormData exportRequest) {
-////        formDataExportUtils.exportData(exportRequest);
-////    }
-////
-////    /**
-////     * 瀵煎叆琛ㄥ崟鏁版嵁
-////     *
-////     * @param file 鏂囦欢
-////     * @return Result
-////     */
-////    @PostMapping("import")
-////    public Result importFormData(@RequestParam("file") MultipartFile file, UserFormDataEntity dataEntity) throws IOException {
-////        return Result.success(formDataImportUtils.importFile(file.getInputStream(), dataEntity.getFormKey()));
-////    }
-////
-////
-////    private void sendWriteResultNotify(String formKey) {
-////        FormSettingSchemaStruct formSettingSchema = userFormSettingService.getFormSettingSchema(formKey);
-////        if (ObjectUtil.isNull(formSettingSchema)) {
-////            return;
-////        }
-////        UserFormEntity form = userFormService.getByKey(formKey);
-////        if (StrUtil.isNotBlank(formSettingSchema.getNewWriteNotifyEmail())) {
-////            mailService.sendTemplateHtmlMail(formSettingSchema.getNewWriteNotifyEmail(), "鏂板洖澶嶉�氱煡", "mail/form-write-notify", MapUtil.of("projectName", form.getName()));
-////        }
-////
-////        if (StrUtil.isNotBlank(formSettingSchema.getNewWriteNotifyWx())) {
-////            List<String> openIdList = StrUtil.splitTrim(formSettingSchema.getNewWriteNotifyWx(), ";");
-////            openIdList.stream().forEach(openId -> {
-////                userMsgService.sendKfTextMsg("", openId, "鏀跺埌鏂扮殑鍙嶉锛岃鍘籔c绔煡鐪�");
-////            });
-////        }
-////    }
-//
-//}
+
+}
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormSettingController.java b/ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormSettingController.java
index 220de5d..f30af9b 100644
--- a/ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormSettingController.java
+++ b/ltkj-admin/src/main/java/com/ltkj/web/tduck/UserFormSettingController.java
@@ -1,143 +1,143 @@
-//package com.ltkj.web.tduck;
-//
-//import cn.hutool.core.util.ObjectUtil;
-//import com.ltkj.common.utils.http.HttpUtils;
-//import com.ltkj.tduck.domain.UserFormSettingEntity;
-//import com.ltkj.tduck.request.CheckWritePwdRequest;
-//import com.ltkj.tduck.service.UserFormSettingService;
-//import com.ltkj.tduck.utils.CacheUtils;
-//import com.ltkj.tduck.utils.Result;
-//import lombok.RequiredArgsConstructor;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.validation.annotation.Validated;
-//import org.springframework.web.bind.annotation.*;
-//
-//import javax.annotation.security.PermitAll;
-//import javax.servlet.http.HttpServletRequest;
-//import java.util.Map;
-//
-///**
-// * 琛ㄥ崟璁剧疆
-// *
-// * @author : smalljop
-// * @description : 琛ㄥ崟璁剧疆
-// * @create : 2020-11-18 18:17
-// **/
-//@Slf4j
-//@RestController
-//@RequiredArgsConstructor
-//public class UserFormSettingController {
-//
-//    private final UserFormSettingService userFormSettingService;
-////    private final WxMpUserService wxMpUserService;
-//    private final CacheUtils cacheUtils;
-////    private final WxMpService wxMpService;
-//
-//
-//    /**
-//     * 淇濆瓨琛ㄥ崟璁剧疆
-//     */
-//    @PostMapping("/user/form/setting/save")
-//    public Result<Boolean> saveFormSetting(@RequestBody Map<String, Object> setting) {
-//        String formKey = setting.get("formKey").toString();
-////        FormAuthUtils.hasPermission(formKey);
-//        return Result.success(userFormSettingService.saveFormSetting(setting));
-//    }
-//
-//    /**
-//     * 琛ㄥ崟鎻愪氦璁剧疆鏌ヨ
-//     */
-//    @GetMapping("/user/form/setting/{key}")
-//    public Result<Map<String, Object>> queryFormSettingByKey(@PathVariable("key") String formKey) {
-//        UserFormSettingEntity setting = userFormSettingService.getFormSettingByKey(formKey);
-//        if (ObjectUtil.isNull(setting)) {
-//            return Result.success();
+package com.ltkj.web.tduck;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.ltkj.common.utils.http.HttpUtils;
+import com.ltkj.tduck.domain.UserFormSettingEntity;
+import com.ltkj.tduck.request.CheckWritePwdRequest;
+import com.ltkj.tduck.service.UserFormSettingService;
+import com.ltkj.tduck.utils.CacheUtils;
+import com.ltkj.tduck.utils.Result;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.security.PermitAll;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+/**
+ * 琛ㄥ崟璁剧疆
+ *
+ * @author : smalljop
+ * @description : 琛ㄥ崟璁剧疆
+ * @create : 2020-11-18 18:17
+ **/
+@Slf4j
+@RestController
+@RequiredArgsConstructor
+public class UserFormSettingController {
+
+    private final UserFormSettingService userFormSettingService;
+//    private final WxMpUserService wxMpUserService;
+    private final CacheUtils cacheUtils;
+//    private final WxMpService wxMpService;
+
+
+    /**
+     * 淇濆瓨琛ㄥ崟璁剧疆
+     */
+    @PostMapping("/user/form/setting/save")
+    public Result<Boolean> saveFormSetting(@RequestBody Map<String, Object> setting) {
+        String formKey = setting.get("formKey").toString();
+//        FormAuthUtils.hasPermission(formKey);
+        return Result.success(userFormSettingService.saveFormSetting(setting));
+    }
+
+    /**
+     * 琛ㄥ崟鎻愪氦璁剧疆鏌ヨ
+     */
+    @GetMapping("/user/form/setting/{key}")
+    public Result<Map<String, Object>> queryFormSettingByKey(@PathVariable("key") String formKey) {
+        UserFormSettingEntity setting = userFormSettingService.getFormSettingByKey(formKey);
+        if (ObjectUtil.isNull(setting)) {
+            return Result.success();
+        }
+        Map<String, Object> settings = setting.getSettings();
+        settings.put(UserFormSettingEntity.Fields.formKey, formKey);
+        return Result.success(settings);
+    }
+
+
+    /**
+     * 褰撳墠濉啓璁剧疆鐨勭姸鎬�
+     *
+     * @param formKey  琛ㄥ崟key
+     * @param wxOpenId 寰俊openid
+     * @param type     绫诲瀷 1鍏紑濉啓 2.鎸囧畾濉啓
+     */
+    @GetMapping("/user/form/setting-status")
+    @PermitAll
+    public Result<Boolean> querySettingStatus(@RequestParam String formKey, @RequestParam(required = false) String wxOpenId, @RequestParam(required = false) Integer type, HttpServletRequest request) {
+        return userFormSettingService.getUserFormWriteSettingStatus(formKey, HttpUtils.getIpAddr(request), wxOpenId, type);
+    }
+
+
+    /**
+     * 濉啓寰俊閫氱煡浜岀淮鐮�
+     */
+    @GetMapping("/user/form/wx/notify-qrcode")
+    public Result<String> getWxNotifyQrCode(@RequestParam("key") String formKey) throws Exception {
+//        String loginSceneStr = JsonUtils.objToJson(new WxMpQrCodeGenRequest(WxMpQrCodeGenRequest.QrCodeType.SUB_NOTIFY, formKey));
+//        //5鍒嗛挓鏈夋晥
+//        WxMpQrCodeTicket ticket = wxMpService.getQrcodeService().qrCodeCreateTmpTicket(loginSceneStr, 10 * 60);
+//        String subNotifyQrcodeUrl = wxMpService.getQrcodeService().qrCodePictureUrl(ticket.getTicket());
+//        return Result.success(subNotifyQrcodeUrl);
+        return Result.success();
+    }
+
+
+    /**
+     * 濉啓寰俊閫氱煡浜岀淮鐮�
+     */
+    @PostMapping("/user/form/wx/delete/notify-user")
+    public Result<Boolean> deleteWxNotifyQrCode(@RequestParam("key") String key, @RequestParam("openId") String openId) {
+//        cacheUtils.removeList(StrUtil.format(WxMpRedisKeyConstants.WX_MP_SUB_NOTIFY, key), openId);
+        return Result.success(true);
+    }
+
+    /**
+     * 鑾峰彇琛ㄥ崟寰俊閫氱煡鐢ㄦ埛
+     */
+    @GetMapping("/user/form/wx/notify-user")
+    public Result getWxNotifyUser(@RequestParam("key") String formKey, @RequestParam(required = false) String openIdStr) {
+//        Set<Object> subNotifyUsers = null;
+//        if (StrUtil.isNotBlank(openIdStr)) {
+//            subNotifyUsers = Sets.newHashSet(StrUtil.splitTrim(openIdStr, ";"));
+//        } else {
+//            List coll = cacheUtils.getList(StrUtil.format(WxMpRedisKeyConstants.WX_MP_SUB_NOTIFY, formKey), String.class);
+//            subNotifyUsers = Collections.singleton(coll.stream().collect(Collectors.toSet()));
 //        }
-//        Map<String, Object> settings = setting.getSettings();
-//        settings.put(UserFormSettingEntity.Fields.formKey, formKey);
-//        return Result.success(settings);
-//    }
-//
-//
-//    /**
-//     * 褰撳墠濉啓璁剧疆鐨勭姸鎬�
-//     *
-//     * @param formKey  琛ㄥ崟key
-//     * @param wxOpenId 寰俊openid
-//     * @param type     绫诲瀷 1鍏紑濉啓 2.鎸囧畾濉啓
-//     */
-//    @GetMapping("/user/form/setting-status")
-//    @PermitAll
-//    public Result<Boolean> querySettingStatus(@RequestParam String formKey, @RequestParam(required = false) String wxOpenId, @RequestParam(required = false) Integer type, HttpServletRequest request) {
-//        return userFormSettingService.getUserFormWriteSettingStatus(formKey, HttpUtils.getIpAddr(request), wxOpenId, type);
-//    }
-//
-//
-//    /**
-//     * 濉啓寰俊閫氱煡浜岀淮鐮�
-//     */
-//    @GetMapping("/user/form/wx/notify-qrcode")
-//    public Result<String> getWxNotifyQrCode(@RequestParam("key") String formKey) throws Exception {
-////        String loginSceneStr = JsonUtils.objToJson(new WxMpQrCodeGenRequest(WxMpQrCodeGenRequest.QrCodeType.SUB_NOTIFY, formKey));
-////        //5鍒嗛挓鏈夋晥
-////        WxMpQrCodeTicket ticket = wxMpService.getQrcodeService().qrCodeCreateTmpTicket(loginSceneStr, 10 * 60);
-////        String subNotifyQrcodeUrl = wxMpService.getQrcodeService().qrCodePictureUrl(ticket.getTicket());
-////        return Result.success(subNotifyQrcodeUrl);
-//        return Result.success();
-//    }
-//
-//
-//    /**
-//     * 濉啓寰俊閫氱煡浜岀淮鐮�
-//     */
-//    @PostMapping("/user/form/wx/delete/notify-user")
-//    public Result<Boolean> deleteWxNotifyQrCode(@RequestParam("key") String key, @RequestParam("openId") String openId) {
-////        cacheUtils.removeList(StrUtil.format(WxMpRedisKeyConstants.WX_MP_SUB_NOTIFY, key), openId);
-//        return Result.success(true);
-//    }
-//
-//    /**
-//     * 鑾峰彇琛ㄥ崟寰俊閫氱煡鐢ㄦ埛
-//     */
-//    @GetMapping("/user/form/wx/notify-user")
-//    public Result getWxNotifyUser(@RequestParam("key") String formKey, @RequestParam(required = false) String openIdStr) {
-////        Set<Object> subNotifyUsers = null;
-////        if (StrUtil.isNotBlank(openIdStr)) {
-////            subNotifyUsers = Sets.newHashSet(StrUtil.splitTrim(openIdStr, ";"));
-////        } else {
-////            List coll = cacheUtils.getList(StrUtil.format(WxMpRedisKeyConstants.WX_MP_SUB_NOTIFY, formKey), String.class);
-////            subNotifyUsers = Collections.singleton(coll.stream().collect(Collectors.toSet()));
-////        }
-////        return Result.success(wxMpUserService.listWxMpUserByOpenId(subNotifyUsers).stream().map(item -> new WxMpUserVO(item.getNickname(), item.getHeadImgUrl(), item.getOpenId())).collect(Collectors.toList()));
-//        return Result.success();
-//    }
-//
-//
-//    /**
-//     * 鍏紑鎺ュ彛
-//     * 琛ㄥ崟濉啓鏃堕渶瑕佺殑璁剧疆
-//     */
-//    @GetMapping("/user/form/public/settings/{key}")
-//    @PermitAll
-//    public Result queryPublicFormSettingByKey(@PathVariable("key") String formKey) {
-////        FormSettingSchemaStruct formSettingSchema = userFormSettingService.getFormSettingSchema(formKey);
-//        return Result.success();
-//    }
-//
-//    /**
-//     * 鍏紑鎺ュ彛
-//     * 妫�鏌ュ~鍐欏瘑鐮佹槸鍚︽纭�
-//     */
-//    @PostMapping("/user/form/public/checkWritePwd")
-//    @PermitAll
-//    public Result<Boolean> checkWritePwd(@RequestBody @Validated CheckWritePwdRequest request) {
-////        FormSettingSchemaStruct formSettingSchema = userFormSettingService.getFormSettingSchema(request.getFormKey());
-////        if (formSettingSchema.getWritePassword().equals(request.getPassword())) {
-////            return Result.success(true);
-////        }
-////        return Result.failed("瀵嗙爜杈撳叆閿欒");
-//        return Result.success(true);
-//    }
-//
-//
-//}
+//        return Result.success(wxMpUserService.listWxMpUserByOpenId(subNotifyUsers).stream().map(item -> new WxMpUserVO(item.getNickname(), item.getHeadImgUrl(), item.getOpenId())).collect(Collectors.toList()));
+        return Result.success();
+    }
+
+
+    /**
+     * 鍏紑鎺ュ彛
+     * 琛ㄥ崟濉啓鏃堕渶瑕佺殑璁剧疆
+     */
+    @GetMapping("/user/form/public/settings/{key}")
+    @PermitAll
+    public Result queryPublicFormSettingByKey(@PathVariable("key") String formKey) {
+//        FormSettingSchemaStruct formSettingSchema = userFormSettingService.getFormSettingSchema(formKey);
+        return Result.success();
+    }
+
+    /**
+     * 鍏紑鎺ュ彛
+     * 妫�鏌ュ~鍐欏瘑鐮佹槸鍚︽纭�
+     */
+    @PostMapping("/user/form/public/checkWritePwd")
+    @PermitAll
+    public Result<Boolean> checkWritePwd(@RequestBody @Validated CheckWritePwdRequest request) {
+//        FormSettingSchemaStruct formSettingSchema = userFormSettingService.getFormSettingSchema(request.getFormKey());
+//        if (formSettingSchema.getWritePassword().equals(request.getPassword())) {
+//            return Result.success(true);
+//        }
+//        return Result.failed("瀵嗙爜杈撳叆閿欒");
+        return Result.success(true);
+    }
+
+
+}
diff --git a/ltkj-admin/src/main/resources/application.yml b/ltkj-admin/src/main/resources/application.yml
index 02875c5..799fa3f 100644
--- a/ltkj-admin/src/main/resources/application.yml
+++ b/ltkj-admin/src/main/resources/application.yml
@@ -72,8 +72,7 @@
       enabled: true
 #  cache:
 #    type: ehcache
-#    ehcache:
-#      config: classpath:config/ehcache.xml
+
   # redis 閰嶇疆
 #  redis:
 #    # 鍦板潃
diff --git a/ltkj-framework/pom.xml b/ltkj-framework/pom.xml
index 3eb198b..50ecffd 100644
--- a/ltkj-framework/pom.xml
+++ b/ltkj-framework/pom.xml
@@ -19,8 +19,21 @@
         <dependency>
             <groupId>redis.clients</groupId>
             <artifactId>jedis</artifactId>
+            <version>2.9.0</version>
         </dependency>
 
+
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter-cache</artifactId>
+            </dependency>
+            <dependency>
+                <groupId>net.sf.ehcache</groupId>
+                <artifactId>ehcache</artifactId>
+            </dependency>
+
+
+
         <!-- SpringBoot Web瀹瑰櫒 -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
diff --git a/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjSurveyTemplateServiceImpl.java b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjSurveyTemplateServiceImpl.java
index 81a83ee..98a9128 100644
--- a/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjSurveyTemplateServiceImpl.java
+++ b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjSurveyTemplateServiceImpl.java
@@ -93,8 +93,7 @@
     @Override
     public int updateTjSurveyTemplate(TjSurveyTemplate tjSurveyTemplate) {
         tjSurveyTemplate.setUpdateTime(DateUtils.getNowDate());
-        tjSurveyTemplateMapper.deleteTjSurveyTempQuesByMid(tjSurveyTemplate.getMid())
-        ;
+        tjSurveyTemplateMapper.deleteTjSurveyTempQuesByMid(tjSurveyTemplate.getMid());
         insertTjSurveyTempQues(tjSurveyTemplate);
         return tjSurveyTemplateMapper.updateTjSurveyTemplate(tjSurveyTemplate);
     }
diff --git a/ltkj-system/src/main/java/com/ltkj/system/service/ISysDeptService.java b/ltkj-system/src/main/java/com/ltkj/system/service/ISysDeptService.java
index 58b836c..3f5b6de 100644
--- a/ltkj-system/src/main/java/com/ltkj/system/service/ISysDeptService.java
+++ b/ltkj-system/src/main/java/com/ltkj/system/service/ISysDeptService.java
@@ -149,4 +149,6 @@
     Map<String,Object> getSysDeptYjWjCustomerList13(String deptid, String tjname, String tjNumber, int type, int page , int pageSize);
 
     Map<String,Object> getSysDeptHyAndYxYjWjCustomerList13(String deptid, String tjname, String tjNumber, int type, int page , int pageSize);
+
+    List<TreeSelect> selectDeptList1(SysDept dept);
 }
diff --git a/ltkj-system/src/main/java/com/ltkj/system/service/impl/SysDeptServiceImpl.java b/ltkj-system/src/main/java/com/ltkj/system/service/impl/SysDeptServiceImpl.java
index 2eecbba..2f9e3b9 100644
--- a/ltkj-system/src/main/java/com/ltkj/system/service/impl/SysDeptServiceImpl.java
+++ b/ltkj-system/src/main/java/com/ltkj/system/service/impl/SysDeptServiceImpl.java
@@ -422,4 +422,10 @@
 
         return   map1 ;
     }
+
+    @Override
+    public List<TreeSelect> selectDeptList1(SysDept dept) {
+        List<SysDept> depts = SpringUtils.getAopProxy(this).selectDeptList11(dept);
+        return buildDeptTreeSelect(depts);
+    }
 }
diff --git a/ltkj-system/src/main/java/com/ltkj/tduck/service/UserFormSettingService.java b/ltkj-system/src/main/java/com/ltkj/tduck/service/UserFormSettingService.java
index fd0432f..978225f 100644
--- a/ltkj-system/src/main/java/com/ltkj/tduck/service/UserFormSettingService.java
+++ b/ltkj-system/src/main/java/com/ltkj/tduck/service/UserFormSettingService.java
@@ -1,61 +1,61 @@
-//package com.ltkj.tduck.service;
-//
-//
-//
-//import com.baomidou.mybatisplus.extension.service.IService;
-//import com.ltkj.tduck.domain.UserFormSettingEntity;
-//import com.ltkj.tduck.struct.FormSettingSchemaStruct;
-//import com.ltkj.tduck.utils.Result;
-//
-//import java.util.Map;
-//
-///**
-// * 琛ㄥ崟璁剧疆
-// *
-// * @author smalljop
-// * @since 2020-11-30 14:00:52
-// */
-//public interface UserFormSettingService extends IService<UserFormSettingEntity> {
-//    /**
-//     * 淇濆瓨琛ㄥ崟璁剧疆
-//     */
-//    Boolean saveFormSetting(Map<String, Object> params);
-//
-//
-//    /**
-//     * 琛ㄥ崟璁剧疆
-//     *
-//     * @param formKey 琛ㄥ崟key
-//     * @return 璁剧疆椤�
-//     */
-//    UserFormSettingEntity getFormSettingByKey(String formKey);
-//
-//    /**
-//     * 璁剧疆鍏蜂綋瀹氫箟璁剧疆椤�
-//     *
-//     * @param formKey 琛ㄥ崟key
-//     * @return 璁剧疆椤�
-//     */
-//    FormSettingSchemaStruct getFormSettingSchema(String formKey);
-//
-//    /**
-//     * 鑾峰彇褰撳墠椤圭洰璁剧疆鐨勭姸鎬�
-//     * 鏄惁鍙互濉啓绛�
-//     *
-//     * @param formKey   琛ㄥ崟key
-//     * @param requestIp 璇锋眰ip
-//     * @param wxOpenId  寰俊openid
-//     * @param type      绫诲瀷 1鍏紑濉啓 2.鎸囧畾濉啓
-//     * @return 鏄惁鍙互濉啓
-//     */
-//    Result<Boolean> getUserFormWriteSettingStatus(String formKey, String requestIp, String wxOpenId, Integer type);
-//
-//
-//    /**
-//     * 鍒犻櫎琛ㄥ崟鎵�鏈夎缃�
-//     *
-//     * @param key 琛ㄥ崟key
-//     * @return 鏄惁鍒犻櫎鎴愬姛
-//     */
-//    Boolean deleteAllSetting(String key);
-//}
+package com.ltkj.tduck.service;
+
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ltkj.tduck.domain.UserFormSettingEntity;
+import com.ltkj.tduck.struct.FormSettingSchemaStruct;
+import com.ltkj.tduck.utils.Result;
+
+import java.util.Map;
+
+/**
+ * 琛ㄥ崟璁剧疆
+ *
+ * @author smalljop
+ * @since 2020-11-30 14:00:52
+ */
+public interface UserFormSettingService extends IService<UserFormSettingEntity> {
+    /**
+     * 淇濆瓨琛ㄥ崟璁剧疆
+     */
+    Boolean saveFormSetting(Map<String, Object> params);
+
+
+    /**
+     * 琛ㄥ崟璁剧疆
+     *
+     * @param formKey 琛ㄥ崟key
+     * @return 璁剧疆椤�
+     */
+    UserFormSettingEntity getFormSettingByKey(String formKey);
+
+    /**
+     * 璁剧疆鍏蜂綋瀹氫箟璁剧疆椤�
+     *
+     * @param formKey 琛ㄥ崟key
+     * @return 璁剧疆椤�
+     */
+    FormSettingSchemaStruct getFormSettingSchema(String formKey);
+
+    /**
+     * 鑾峰彇褰撳墠椤圭洰璁剧疆鐨勭姸鎬�
+     * 鏄惁鍙互濉啓绛�
+     *
+     * @param formKey   琛ㄥ崟key
+     * @param requestIp 璇锋眰ip
+     * @param wxOpenId  寰俊openid
+     * @param type      绫诲瀷 1鍏紑濉啓 2.鎸囧畾濉啓
+     * @return 鏄惁鍙互濉啓
+     */
+    Result<Boolean> getUserFormWriteSettingStatus(String formKey, String requestIp, String wxOpenId, Integer type);
+
+
+    /**
+     * 鍒犻櫎琛ㄥ崟鎵�鏈夎缃�
+     *
+     * @param key 琛ㄥ崟key
+     * @return 鏄惁鍒犻櫎鎴愬姛
+     */
+    Boolean deleteAllSetting(String key);
+}
diff --git a/ltkj-system/src/main/java/com/ltkj/tduck/service/impl/UserFormDataServiceImpl.java b/ltkj-system/src/main/java/com/ltkj/tduck/service/impl/UserFormDataServiceImpl.java
index 3aedf94..6cb5bdd 100644
--- a/ltkj-system/src/main/java/com/ltkj/tduck/service/impl/UserFormDataServiceImpl.java
+++ b/ltkj-system/src/main/java/com/ltkj/tduck/service/impl/UserFormDataServiceImpl.java
@@ -1,159 +1,159 @@
-//package com.ltkj.tduck.service.impl;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import cn.hutool.core.map.MapUtil;
-//import cn.hutool.core.util.ObjectUtil;
-//import cn.hutool.core.util.StrUtil;
-//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-//import com.ltkj.common.utils.ip.AddressUtils;
-//import com.ltkj.tduck.constant.CommonConstants;
-//import com.ltkj.tduck.domain.UserFormDataEntity;
-//import com.ltkj.tduck.mapper.UserFormDataMapper;
-//import com.ltkj.tduck.request.QueryFormResultRequest;
-//import com.ltkj.tduck.service.UserFormDataService;
-//import com.ltkj.tduck.service.UserFormItemService;
-//import com.ltkj.tduck.utils.CacheUtils;
-//import com.ltkj.tduck.utils.FormDataUtils;
-//import com.ltkj.tduck.utils.Result;
-//import com.ltkj.tduck.vo.FormDataTableVO;
-//import com.ltkj.tduck.vo.FormFieldVO;
-//import lombok.RequiredArgsConstructor;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.stereotype.Service;
-//import org.springframework.transaction.annotation.Transactional;
-//
-//import java.util.HashMap;
-//import java.util.List;
-//import java.util.Map;
-//
-//import static com.ltkj.tduck.constant.FormRedisKeyConstants.FORM_RESULT_NUMBER;
-//
-//
-///**
-// * 琛ㄥ崟琛ㄥ崟椤�(FormResult)琛ㄦ湇鍔″疄鐜扮被
-// *
-// * @author smalljop
-// * @since 2020-11-23 14:09:22
-// */
-//@Service
-//@Slf4j
-//@RequiredArgsConstructor
-//public class UserFormDataServiceImpl extends ServiceImpl<UserFormDataMapper, UserFormDataEntity> implements UserFormDataService {
-//
-//    private final UserFormItemService userFormItemService;
-//    private final CacheUtils redisUtils;
-//    private final FormDataUtils formDataUtils;
-//
-//
+package com.ltkj.tduck.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ltkj.common.utils.ip.AddressUtils;
+import com.ltkj.tduck.constant.CommonConstants;
+import com.ltkj.tduck.domain.UserFormDataEntity;
+import com.ltkj.tduck.mapper.UserFormDataMapper;
+import com.ltkj.tduck.request.QueryFormResultRequest;
+import com.ltkj.tduck.service.UserFormDataService;
+import com.ltkj.tduck.service.UserFormItemService;
+import com.ltkj.tduck.utils.CacheUtils;
+import com.ltkj.tduck.utils.FormDataUtils;
+import com.ltkj.tduck.utils.Result;
+import com.ltkj.tduck.vo.FormDataTableVO;
+import com.ltkj.tduck.vo.FormFieldVO;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.ltkj.tduck.constant.FormRedisKeyConstants.FORM_RESULT_NUMBER;
+
+
+/**
+ * 琛ㄥ崟琛ㄥ崟椤�(FormResult)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author smalljop
+ * @since 2020-11-23 14:09:22
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class UserFormDataServiceImpl extends ServiceImpl<UserFormDataMapper, UserFormDataEntity> implements UserFormDataService {
+
+    private final UserFormItemService userFormItemService;
+    private final CacheUtils redisUtils;
+    private final FormDataUtils formDataUtils;
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> saveFormResult(UserFormDataEntity entity) {
+        HashMap<String, Object> result = MapUtil.newHashMap();
+        String formKey = entity.getFormKey();
+        entity.setSubmitAddress(AddressUtils.getRealAddressByIP(entity.getSubmitRequestIp()));
+        entity.setSerialNumber(redisUtils.incr(StrUtil.format(FORM_RESULT_NUMBER, formKey), CommonConstants.ConstantNumber.ONE));
+        this.save(entity);
+//        formDataUtils.syncSaveFormData(entity);
+        result.put("id", entity.getId());
+        return result;
+    }
+
+
+    /**
+     * 涓嬭浇琛ㄥ崟缁撴灉涓殑闄勪欢
+     *
+     * @param request
+     * @return
+     */
 //    @Override
-//    @Transactional(rollbackFor = Exception.class)
-//    public Map<String, Object> saveFormResult(UserFormDataEntity entity) {
-//        HashMap<String, Object> result = MapUtil.newHashMap();
-//        String formKey = entity.getFormKey();
-//        entity.setSubmitAddress(AddressUtils.getRealAddressByIP(entity.getSubmitRequestIp()));
-//        entity.setSerialNumber(redisUtils.incr(StrUtil.format(FORM_RESULT_NUMBER, formKey), CommonConstants.ConstantNumber.ONE));
-//        this.save(entity);
-////        formDataUtils.syncSaveFormData(entity);
-//        result.put("id", entity.getId());
-//        return result;
-//    }
-//
-//
-//    /**
-//     * 涓嬭浇琛ㄥ崟缁撴灉涓殑闄勪欢
-//     *
-//     * @param request
-//     * @return
-//     */
-////    @Override
-////    public Result downloadFormResultFile(QueryFormResultRequest request) {
-////        String uuid = IdUtil.simpleUUID();
-////        List<UserFormItemEntity> userFormItemEntityList = userFormItemService.list(Wrappers.<UserFormItemEntity>lambdaQuery().eq(UserFormItemEntity::getFormKey, request.getFormKey()).in(UserFormItemEntity::getType, CollUtil.newArrayList(FormItemTypeEnum.UPLOAD.toString(), FormItemTypeEnum.IMAGE_UPLOAD.toString())));
-////        //缁撴灉
-////        List<Map> rows = null;
-////        if (ObjectUtil.isNull(request.getCurrent()) && ObjectUtil.isNull(request.getSize())) {
-////            rows = formDataUtils.searchAll(request);
-////        } else {
-////            FormDataTableVO formDataTableVO = this.listFormDataTable(request);
-////            rows = formDataTableVO.getRows();
-////        }
-////        if (CollectionUtil.isEmpty(rows) || CollectionUtil.isEmpty(userFormItemEntityList)) {
-////            return Result.failed("鏆傛棤鏀堕泦闄勪欢锛屾棤娉曚笅杞�");
-////        }
-////        List<Map> finalRows = rows;
-////        ThreadUtil.execAsync(() -> {
-////            TimeInterval timer = DateUtil.timer();
-////            List<String> paths = new ArrayList<>();
-////            List<InputStream> ins = new ArrayList<>();
-////            try {
-////                finalRows.forEach(result -> {
-////                    int index = 0;
-////                    userFormItemEntityList.forEach(item -> {
-////                        List<UploadResultStruct> uploadResults = JsonUtils.jsonToList(JsonUtils.objToJson(MapUtil.get(result, item.getFormItemId(), List.class)), UploadResultStruct.class);
-////                        if (CollectionUtil.isNotEmpty(uploadResults)) {
-////                            uploadResults.forEach(uFile -> {
-////                                if (StrUtil.isNotBlank(uFile.getUrl())) {
-////                                    paths.add(FileNameUtil.getName(uFile.getUrl()));
-////                                    byte[] bytes = HttpUtil.downloadBytes(uFile.getUrl());
-////                                    ins.add(IoUtil.toStream(bytes));
-////                                }
-////                            });
-////                        }
-////                    });
-////                    AsyncProcessUtils.setProcess(uuid, ++index / finalRows.size());
-////                });
-////                // 鍘嬬缉涓婁紶oss
-////                ByteArrayOutputStream zipOutputStream = new ByteArrayOutputStream();
-////                ZipUtil.zip(zipOutputStream, paths.toArray(new String[]{}), ins.toArray(new InputStream[]{}));
-////                String downloadUrl = OssStorageFactory.getStorageService().upload(zipOutputStream.toByteArray(), StorageUtils.generateFileName("download", ".zip"));
-////                AsyncProcessUtils.setProcess(uuid, downloadUrl);
-////                log.info("export file cost time: {}", timer.interval());
-////            } catch (Exception e) {
-////                log.error("download file", e);
-////            }
-////        });
-////        return Result.success(uuid);
-////    }
-////
-////
-//    @Override
-//    public FormDataTableVO listFormDataTable(QueryFormResultRequest request) {
-//        return formDataUtils.search(request);
-//    }
-////
-////
-////    @Override
-////    public Boolean deleteByIds(List<String> dataIdList, String formKey) {
-////        baseMapper.deleteBatchIds(dataIdList);
-////        formDataUtils.asyncDeleteEsDocument(dataIdList, formKey);
-////        return true;
-////    }
-////
-////    @Override
-////    public Boolean updateFormResult(UserFormDataEntity entity) {
-////        UserFormDataEntity dataEntity = this.getById(entity.getId());
-////        dataEntity.setOriginalData(entity.getOriginalData());
-////        dataEntity.setUpdateBy(entity.getUpdateBy());
-////        boolean update = this.updateById(dataEntity);
-////        // 鏌ヨ鏁版嵁 鍚屾鍒癳s 閬垮厤鏁版嵁鍙樼┖琚鐩�
-////        formDataUtils.asyncUpdateEsDocument(dataEntity);
-////        return update;
-////    }
-//
-//    @Override
-//    public Result getFormDataDetails(String dataId) {
-//        Map<String, Object> result =new HashMap<>();
-//        UserFormDataEntity dataEntity = this.getById(dataId);
-//        List<FormFieldVO> formFields = userFormItemService.listFormFields(dataEntity.getFormKey());
-//        // 琛ㄥ崟瀛楁
-//        result.put("formFields", formFields);
-//        // 琛ㄥ崟濉啓鏁版嵁
-//        if (ObjectUtil.isNotNull(dataEntity)) {
-//            Map<String, Object> originalData = dataEntity.getOriginalData();
-//            dataEntity.setOriginalData(null);
-//            originalData.putAll(BeanUtil.beanToMap(dataEntity, false, true));
-//            result.put("formData", originalData);
+//    public Result downloadFormResultFile(QueryFormResultRequest request) {
+//        String uuid = IdUtil.simpleUUID();
+//        List<UserFormItemEntity> userFormItemEntityList = userFormItemService.list(Wrappers.<UserFormItemEntity>lambdaQuery().eq(UserFormItemEntity::getFormKey, request.getFormKey()).in(UserFormItemEntity::getType, CollUtil.newArrayList(FormItemTypeEnum.UPLOAD.toString(), FormItemTypeEnum.IMAGE_UPLOAD.toString())));
+//        //缁撴灉
+//        List<Map> rows = null;
+//        if (ObjectUtil.isNull(request.getCurrent()) && ObjectUtil.isNull(request.getSize())) {
+//            rows = formDataUtils.searchAll(request);
+//        } else {
+//            FormDataTableVO formDataTableVO = this.listFormDataTable(request);
+//            rows = formDataTableVO.getRows();
 //        }
-//        return Result.success(result);
+//        if (CollectionUtil.isEmpty(rows) || CollectionUtil.isEmpty(userFormItemEntityList)) {
+//            return Result.failed("鏆傛棤鏀堕泦闄勪欢锛屾棤娉曚笅杞�");
+//        }
+//        List<Map> finalRows = rows;
+//        ThreadUtil.execAsync(() -> {
+//            TimeInterval timer = DateUtil.timer();
+//            List<String> paths = new ArrayList<>();
+//            List<InputStream> ins = new ArrayList<>();
+//            try {
+//                finalRows.forEach(result -> {
+//                    int index = 0;
+//                    userFormItemEntityList.forEach(item -> {
+//                        List<UploadResultStruct> uploadResults = JsonUtils.jsonToList(JsonUtils.objToJson(MapUtil.get(result, item.getFormItemId(), List.class)), UploadResultStruct.class);
+//                        if (CollectionUtil.isNotEmpty(uploadResults)) {
+//                            uploadResults.forEach(uFile -> {
+//                                if (StrUtil.isNotBlank(uFile.getUrl())) {
+//                                    paths.add(FileNameUtil.getName(uFile.getUrl()));
+//                                    byte[] bytes = HttpUtil.downloadBytes(uFile.getUrl());
+//                                    ins.add(IoUtil.toStream(bytes));
+//                                }
+//                            });
+//                        }
+//                    });
+//                    AsyncProcessUtils.setProcess(uuid, ++index / finalRows.size());
+//                });
+//                // 鍘嬬缉涓婁紶oss
+//                ByteArrayOutputStream zipOutputStream = new ByteArrayOutputStream();
+//                ZipUtil.zip(zipOutputStream, paths.toArray(new String[]{}), ins.toArray(new InputStream[]{}));
+//                String downloadUrl = OssStorageFactory.getStorageService().upload(zipOutputStream.toByteArray(), StorageUtils.generateFileName("download", ".zip"));
+//                AsyncProcessUtils.setProcess(uuid, downloadUrl);
+//                log.info("export file cost time: {}", timer.interval());
+//            } catch (Exception e) {
+//                log.error("download file", e);
+//            }
+//        });
+//        return Result.success(uuid);
 //    }
-//}
+//
+//
+    @Override
+    public FormDataTableVO listFormDataTable(QueryFormResultRequest request) {
+        return formDataUtils.search(request);
+    }
+//
+//
+//    @Override
+//    public Boolean deleteByIds(List<String> dataIdList, String formKey) {
+//        baseMapper.deleteBatchIds(dataIdList);
+//        formDataUtils.asyncDeleteEsDocument(dataIdList, formKey);
+//        return true;
+//    }
+//
+//    @Override
+//    public Boolean updateFormResult(UserFormDataEntity entity) {
+//        UserFormDataEntity dataEntity = this.getById(entity.getId());
+//        dataEntity.setOriginalData(entity.getOriginalData());
+//        dataEntity.setUpdateBy(entity.getUpdateBy());
+//        boolean update = this.updateById(dataEntity);
+//        // 鏌ヨ鏁版嵁 鍚屾鍒癳s 閬垮厤鏁版嵁鍙樼┖琚鐩�
+//        formDataUtils.asyncUpdateEsDocument(dataEntity);
+//        return update;
+//    }
+
+    @Override
+    public Result getFormDataDetails(String dataId) {
+        Map<String, Object> result =new HashMap<>();
+        UserFormDataEntity dataEntity = this.getById(dataId);
+        List<FormFieldVO> formFields = userFormItemService.listFormFields(dataEntity.getFormKey());
+        // 琛ㄥ崟瀛楁
+        result.put("formFields", formFields);
+        // 琛ㄥ崟濉啓鏁版嵁
+        if (ObjectUtil.isNotNull(dataEntity)) {
+            Map<String, Object> originalData = dataEntity.getOriginalData();
+            dataEntity.setOriginalData(null);
+            originalData.putAll(BeanUtil.beanToMap(dataEntity, false, true));
+            result.put("formData", originalData);
+        }
+        return Result.success(result);
+    }
+}
diff --git a/ltkj-system/src/main/java/com/ltkj/tduck/service/impl/UserFormSettingServiceImpl.java b/ltkj-system/src/main/java/com/ltkj/tduck/service/impl/UserFormSettingServiceImpl.java
index 36f24c1..cf23b5b 100644
--- a/ltkj-system/src/main/java/com/ltkj/tduck/service/impl/UserFormSettingServiceImpl.java
+++ b/ltkj-system/src/main/java/com/ltkj/tduck/service/impl/UserFormSettingServiceImpl.java
@@ -1,194 +1,194 @@
-//package com.ltkj.tduck.service.impl;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.date.DateUtil;
-//import cn.hutool.core.util.ObjectUtil;
-//import cn.hutool.core.util.StrUtil;
-//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-//import com.ltkj.common.utils.SecurityUtils;
-//import com.ltkj.tduck.constant.CommonConstants;
-//import com.ltkj.tduck.domain.UserFormDataEntity;
-//import com.ltkj.tduck.domain.UserFormEntity;
-//import com.ltkj.tduck.domain.UserFormSettingEntity;
-//import com.ltkj.tduck.enums.FormStatusEnum;
-//import com.ltkj.tduck.mapper.UserFormSettingMapper;
-//import com.ltkj.tduck.service.UserFormDataService;
-//import com.ltkj.tduck.service.UserFormService;
-//import com.ltkj.tduck.service.UserFormSettingService;
-//import com.ltkj.tduck.struct.FormSettingSchemaStruct;
-//import com.ltkj.tduck.utils.Result;
-//import lombok.RequiredArgsConstructor;
-//import org.springframework.stereotype.Service;
-//import org.springframework.transaction.annotation.Transactional;
-//
-//import java.time.LocalTime;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.Objects;
-//
-///**
-// * 琛ㄥ崟琛ㄥ崟椤�(UserFormSetting)琛ㄦ湇鍔″疄鐜扮被
-// *
-// * @author smalljop
-// * @since 2020-11-30 14:00:53
-// */
-//@Service
-//@RequiredArgsConstructor
-//public class UserFormSettingServiceImpl extends ServiceImpl<UserFormSettingMapper, UserFormSettingEntity> implements UserFormSettingService {
-//    private final UserFormService userFormService;
-//    private final UserFormDataService userFormDataService;
-//
-//    @Override
-//    public Boolean saveFormSetting(Map<String, Object> params) {
-//        String formKey = params.get("formKey").toString();
-//        UserFormSettingEntity entity = this.getOne(Wrappers.<UserFormSettingEntity>lambdaQuery().eq(UserFormSettingEntity::getFormKey, formKey));
-//        if (ObjectUtil.isNull(entity)) {
-//            UserFormSettingEntity setting = new UserFormSettingEntity();
-//            setting.setFormKey(formKey);
-//            setting.setSettings(params);
-//            return this.save(setting);
-//        }
-//        Map<String, Object> settings = entity.getSettings();
-//        settings.putAll(params);
-//        entity.setSettings(settings);
-//        return this.updateById(entity);
-//    }
-//
-//
-//    @Override
-//    public UserFormSettingEntity getFormSettingByKey(String formKey) {
-//        return this.getOne(Wrappers.<UserFormSettingEntity>lambdaQuery().eq(UserFormSettingEntity::getFormKey, formKey));
-//    }
-//
-//    @Override
-//    public FormSettingSchemaStruct getFormSettingSchema(String formKey) {
-//        UserFormSettingEntity settingEntity = getFormSettingByKey(formKey);
-//        if (ObjectUtil.isNull(settingEntity)) {
-//            return null;
-//        }
-//        return BeanUtil.toBean(settingEntity.getSettings(), FormSettingSchemaStruct.class);
-//    }
-//
-//
-//    @Override
-//    public Result<Boolean> getUserFormWriteSettingStatus(String formKey, String requestIp, String wxOpenId, Integer type) {
-//        UserFormEntity userFormEntity = userFormService.getByKey(formKey);
-//        boolean checkPublish = Objects.equals(type, CommonConstants.ConstantNumber.ONE) &&
-//                (ObjectUtil.isNull(userFormEntity) || userFormEntity.getStatus() != 2);
-//        // 闈炲叕寮�濉啓 涓嶆牎楠屽彂甯冪姸鎬�
-//        if (checkPublish) {
-//            return Result.success(null, "琛ㄥ崟鏆傛椂鏃犳硶濉啓");
-//        }
-//        UserFormSettingEntity settingEntity = getFormSettingByKey(formKey);
-//        if (ObjectUtil.isNull(settingEntity)) {
-//            return Result.success(true);
-//        }
-//        FormSettingSchemaStruct settingSchemaStruct = BeanUtil.toBean(settingEntity.getSettings(), FormSettingSchemaStruct.class);
-//        // 濉啓鏃堕棿闄愬埗
-//        boolean writeInterviewTime = isWriteInterviewTime(settingSchemaStruct);
-//        if (!writeInterviewTime) {
-//            return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getWriteInterviewTimeText(), "涓嶅湪绛旈鏃堕棿鑼冨洿鍐咃紝鏈夐棶棰樿涓庤〃鍗曞彂甯冭�呰仈绯�"));
-//        }
-//        // 姣忎釜寰俊绛旈娆℃暟闄愬埗
-//        if (settingSchemaStruct.isWxWriteCountLimitStatus()) {
-//            LambdaQueryWrapper<UserFormDataEntity> wrapper = Wrappers.<UserFormDataEntity>lambdaQuery().eq(UserFormDataEntity::getFormKey, formKey).eq(UserFormDataEntity::getWxOpenId, wxOpenId);
-//            String rangeTypeSql = FormSettingSchemaStruct.DateRangeType.getDateSql(settingSchemaStruct.getWxWriteCountLimitDateType());
-//            wrapper.apply(StrUtil.isNotBlank(rangeTypeSql), rangeTypeSql);
-//            long writeCount = userFormDataService.count(wrapper);
-//            if (writeCount >= settingSchemaStruct.getWxWriteCountLimit()) {
-//                return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getWxWriteCountLimitText(), "璇ュ井淇″凡缁忔彁浜よ繃鏁版嵁锛屼笉鍙噸澶嶆彁浜わ紝鏈夐棶棰樿涓庤〃鍗曞彂甯冭�呰仈绯�"));
-//            }
-//        }
-//        // 姣忎釜IP绛旈娆℃暟闄愬埗
-//        if (settingSchemaStruct.isIpWriteCountLimitStatus()) {
-//            LambdaQueryWrapper<UserFormDataEntity> wrapper = Wrappers.<UserFormDataEntity>lambdaQuery().eq(UserFormDataEntity::getFormKey, formKey).eq(UserFormDataEntity::getSubmitRequestIp, requestIp);
-//            String rangeTypeSql = FormSettingSchemaStruct.DateRangeType.getDateSql(settingSchemaStruct.getIpWriteCountLimitDateType());
-//            wrapper.apply(StrUtil.isNotBlank(rangeTypeSql), rangeTypeSql);
-//            long writeCount = userFormDataService.count(wrapper);
-//            if (writeCount >= settingSchemaStruct.getIpWriteCountLimit()) {
-//                return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getIpWriteCountLimitText(), "璇P宸茬粡鎻愪氦杩囨暟鎹紝涓嶅彲閲嶅鎻愪氦锛屾湁闂璇蜂笌琛ㄥ崟鍙戝竷鑰呰仈绯�"));
-//            }
-//        }
-//        // 鎬荤瓟棰樻鏁伴檺鍒�
-//        if (settingSchemaStruct.isTotalWriteCountLimitStatus()) {
-//            LambdaQueryWrapper<UserFormDataEntity> wrapper = Wrappers.<UserFormDataEntity>lambdaQuery().eq(UserFormDataEntity::getFormKey, formKey);
-//            String rangeTypeSql = FormSettingSchemaStruct.DateRangeType.getDateSql(settingSchemaStruct.getTotalWriteCountLimitDateType());
-//            wrapper.apply(StrUtil.isNotBlank(rangeTypeSql), rangeTypeSql);
-//            long writeCount = userFormDataService.count(wrapper);
-//            if (writeCount >= settingSchemaStruct.getTotalWriteCountLimit()) {
-//                return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getTotalWriteCountLimitText(), "璇ヨ〃鍗曟敹闆嗘暟鎹凡缁忚揪鍒颁笂闄愶紝鏈夐棶棰樿涓庤〃鍗曞彂甯冭�呰仈绯�"));
-//            }
-//        }
-//        // 姣忎釜璐﹀彿绛旈娆℃暟闄愬埗
-//        if (settingSchemaStruct.isAccountWriteCountLimitStatus()) {
-//            LambdaQueryWrapper<UserFormDataEntity> wrapper = Wrappers.<UserFormDataEntity>lambdaQuery().eq(UserFormDataEntity::getFormKey, formKey)
-//                    .eq(UserFormDataEntity::getCreateBy, SecurityUtils.getUserId());
-//            String rangeTypeSql = FormSettingSchemaStruct.DateRangeType.getDateSql(settingSchemaStruct.getAccountWriteCountLimitDateType());
-//            wrapper.apply(StrUtil.isNotBlank(rangeTypeSql), rangeTypeSql);
-//            long writeCount = userFormDataService.count(wrapper);
-//            if (writeCount >= settingSchemaStruct.getAccountWriteCountLimit()) {
-//                return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getAccountWriteCountLimitText(), "璇ヨ处鍙峰凡缁忔彁浜よ繃鏁版嵁锛屼笉鍙噸澶嶆彁浜わ紝鏈夐棶棰樿涓庤〃鍗曞彂甯冭�呰仈绯�"));
-//            }
-//        }
-//        return Result.success(true);
-//    }
-//
-//    /**
-//     * 鏄惁鍦ㄨ缃殑绛旈鏃堕棿鍐�
-//     *
-//     * @return true 鍦ㄧ瓟棰樻椂闂村唴
-//     */
-//    private boolean isWriteInterviewTime(FormSettingSchemaStruct settingSchemaStruct) {
-//        // 绛旈鏃堕棿闄愬埗
-//        if (settingSchemaStruct.isWriteInterviewTimeStatus()) {
-//            // 鏄惁姣忓ぉ鏃堕棿鑼冨洿闄愬埗
-//            if (settingSchemaStruct.isWriteInterviewDayTimeStatus()) {
-//                // 鏄惁鍦ㄥ厑璁歌闂殑澶╁唴
-//                List<String> writeInterviewDateRange = settingSchemaStruct.getWriteInterviewDateRange();
-//                if (CollUtil.isEmpty(writeInterviewDateRange) || DateUtil.isIn(DateUtil.date(), DateUtil.parse(writeInterviewDateRange.get(0)), DateUtil.parse(writeInterviewDateRange.get(1)))) {
-//                    // 鏄惁鍦ㄥ厑璁歌闂殑灏忔椂鍐�
-//                    List<String> writeInterviewTimeRange = settingSchemaStruct.getWriteInterviewTimeRange();
-//                    LocalTime now = LocalTime.now();
-//                    boolean isRange = CollUtil.isNotEmpty(writeInterviewDateRange) && now.isBefore(LocalTime.parse(writeInterviewTimeRange.get(0))) || now.isAfter(LocalTime.parse(writeInterviewTimeRange.get(1)));
-//                    if (isRange) {
-//                        return false;
-//                    }
-//                } else {
-//                    return false;
-//                }
-//            } else {
-//                // 鏄惁鍦ㄥ厑璁歌闂殑澶╁唴
-//                List<String> writeInterviewDateTimeRange = settingSchemaStruct.getWriteInterviewDateTimeRange();
-//                if (CollUtil.isNotEmpty(writeInterviewDateTimeRange) && !DateUtil.isIn(DateUtil.date(), DateUtil.parse(writeInterviewDateTimeRange.get(0)), DateUtil.parse(writeInterviewDateTimeRange.get(1)))) {
-//                    return false;
-//                }
-//            }
-//            // 鏄惁鏄瘡鍛ㄥ厑璁歌闂殑鍛ㄥ嚑
-//            List<String> writeInterviewTimeWhichDays = settingSchemaStruct.getWriteInterviewTimeWhichDays();
-//            if (CollUtil.isNotEmpty(writeInterviewTimeWhichDays)) {
-//                // 鑾峰彇浠婂ぉ鏄瘡鍛ㄧ殑绗嚑澶�
-//                int day = DateUtil.dayOfWeek(DateUtil.date());
-//                return writeInterviewTimeWhichDays.contains(String.valueOf(day));
-//            }
-//        }
-//        return true;
-//    }
-//
-//
-//    /**
-//     * 鍒犻櫎鍏ㄩ儴鐨勮〃鍗曟暟鎹�
-//     *
-//     * @param formKey 琛ㄥ崟key
-//     * @return 鍒犻櫎缁撴灉
-//     */
-//    @Override
-//    @Transactional(rollbackFor = {Exception.class})
-//    public Boolean deleteAllSetting(String formKey) {
-//        this.remove(Wrappers.<UserFormSettingEntity>lambdaQuery().eq(UserFormSettingEntity::getFormKey, formKey));
-//        return true;
-//    }
-//
-//}
+package com.ltkj.tduck.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ltkj.common.utils.SecurityUtils;
+import com.ltkj.tduck.constant.CommonConstants;
+import com.ltkj.tduck.domain.UserFormDataEntity;
+import com.ltkj.tduck.domain.UserFormEntity;
+import com.ltkj.tduck.domain.UserFormSettingEntity;
+import com.ltkj.tduck.enums.FormStatusEnum;
+import com.ltkj.tduck.mapper.UserFormSettingMapper;
+import com.ltkj.tduck.service.UserFormDataService;
+import com.ltkj.tduck.service.UserFormService;
+import com.ltkj.tduck.service.UserFormSettingService;
+import com.ltkj.tduck.struct.FormSettingSchemaStruct;
+import com.ltkj.tduck.utils.Result;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalTime;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 琛ㄥ崟琛ㄥ崟椤�(UserFormSetting)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author smalljop
+ * @since 2020-11-30 14:00:53
+ */
+@Service
+@RequiredArgsConstructor
+public class UserFormSettingServiceImpl extends ServiceImpl<UserFormSettingMapper, UserFormSettingEntity> implements UserFormSettingService {
+    private final UserFormService userFormService;
+    private final UserFormDataService userFormDataService;
+
+    @Override
+    public Boolean saveFormSetting(Map<String, Object> params) {
+        String formKey = params.get("formKey").toString();
+        UserFormSettingEntity entity = this.getOne(Wrappers.<UserFormSettingEntity>lambdaQuery().eq(UserFormSettingEntity::getFormKey, formKey));
+        if (ObjectUtil.isNull(entity)) {
+            UserFormSettingEntity setting = new UserFormSettingEntity();
+            setting.setFormKey(formKey);
+            setting.setSettings(params);
+            return this.save(setting);
+        }
+        Map<String, Object> settings = entity.getSettings();
+        settings.putAll(params);
+        entity.setSettings(settings);
+        return this.updateById(entity);
+    }
+
+
+    @Override
+    public UserFormSettingEntity getFormSettingByKey(String formKey) {
+        return this.getOne(Wrappers.<UserFormSettingEntity>lambdaQuery().eq(UserFormSettingEntity::getFormKey, formKey));
+    }
+
+    @Override
+    public FormSettingSchemaStruct getFormSettingSchema(String formKey) {
+        UserFormSettingEntity settingEntity = getFormSettingByKey(formKey);
+        if (ObjectUtil.isNull(settingEntity)) {
+            return null;
+        }
+        return BeanUtil.toBean(settingEntity.getSettings(), FormSettingSchemaStruct.class);
+    }
+
+
+    @Override
+    public Result<Boolean> getUserFormWriteSettingStatus(String formKey, String requestIp, String wxOpenId, Integer type) {
+        UserFormEntity userFormEntity = userFormService.getByKey(formKey);
+        boolean checkPublish = Objects.equals(type, CommonConstants.ConstantNumber.ONE) &&
+                (ObjectUtil.isNull(userFormEntity) || userFormEntity.getStatus() != 2);
+        // 闈炲叕寮�濉啓 涓嶆牎楠屽彂甯冪姸鎬�
+        if (checkPublish) {
+            return Result.success(null, "琛ㄥ崟鏆傛椂鏃犳硶濉啓");
+        }
+        UserFormSettingEntity settingEntity = getFormSettingByKey(formKey);
+        if (ObjectUtil.isNull(settingEntity)) {
+            return Result.success(true);
+        }
+        FormSettingSchemaStruct settingSchemaStruct = BeanUtil.toBean(settingEntity.getSettings(), FormSettingSchemaStruct.class);
+        // 濉啓鏃堕棿闄愬埗
+        boolean writeInterviewTime = isWriteInterviewTime(settingSchemaStruct);
+        if (!writeInterviewTime) {
+            return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getWriteInterviewTimeText(), "涓嶅湪绛旈鏃堕棿鑼冨洿鍐咃紝鏈夐棶棰樿涓庤〃鍗曞彂甯冭�呰仈绯�"));
+        }
+        // 姣忎釜寰俊绛旈娆℃暟闄愬埗
+        if (settingSchemaStruct.isWxWriteCountLimitStatus()) {
+            LambdaQueryWrapper<UserFormDataEntity> wrapper = Wrappers.<UserFormDataEntity>lambdaQuery().eq(UserFormDataEntity::getFormKey, formKey).eq(UserFormDataEntity::getWxOpenId, wxOpenId);
+            String rangeTypeSql = FormSettingSchemaStruct.DateRangeType.getDateSql(settingSchemaStruct.getWxWriteCountLimitDateType());
+            wrapper.apply(StrUtil.isNotBlank(rangeTypeSql), rangeTypeSql);
+            long writeCount = userFormDataService.count(wrapper);
+            if (writeCount >= settingSchemaStruct.getWxWriteCountLimit()) {
+                return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getWxWriteCountLimitText(), "璇ュ井淇″凡缁忔彁浜よ繃鏁版嵁锛屼笉鍙噸澶嶆彁浜わ紝鏈夐棶棰樿涓庤〃鍗曞彂甯冭�呰仈绯�"));
+            }
+        }
+        // 姣忎釜IP绛旈娆℃暟闄愬埗
+        if (settingSchemaStruct.isIpWriteCountLimitStatus()) {
+            LambdaQueryWrapper<UserFormDataEntity> wrapper = Wrappers.<UserFormDataEntity>lambdaQuery().eq(UserFormDataEntity::getFormKey, formKey).eq(UserFormDataEntity::getSubmitRequestIp, requestIp);
+            String rangeTypeSql = FormSettingSchemaStruct.DateRangeType.getDateSql(settingSchemaStruct.getIpWriteCountLimitDateType());
+            wrapper.apply(StrUtil.isNotBlank(rangeTypeSql), rangeTypeSql);
+            long writeCount = userFormDataService.count(wrapper);
+            if (writeCount >= settingSchemaStruct.getIpWriteCountLimit()) {
+                return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getIpWriteCountLimitText(), "璇P宸茬粡鎻愪氦杩囨暟鎹紝涓嶅彲閲嶅鎻愪氦锛屾湁闂璇蜂笌琛ㄥ崟鍙戝竷鑰呰仈绯�"));
+            }
+        }
+        // 鎬荤瓟棰樻鏁伴檺鍒�
+        if (settingSchemaStruct.isTotalWriteCountLimitStatus()) {
+            LambdaQueryWrapper<UserFormDataEntity> wrapper = Wrappers.<UserFormDataEntity>lambdaQuery().eq(UserFormDataEntity::getFormKey, formKey);
+            String rangeTypeSql = FormSettingSchemaStruct.DateRangeType.getDateSql(settingSchemaStruct.getTotalWriteCountLimitDateType());
+            wrapper.apply(StrUtil.isNotBlank(rangeTypeSql), rangeTypeSql);
+            long writeCount = userFormDataService.count(wrapper);
+            if (writeCount >= settingSchemaStruct.getTotalWriteCountLimit()) {
+                return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getTotalWriteCountLimitText(), "璇ヨ〃鍗曟敹闆嗘暟鎹凡缁忚揪鍒颁笂闄愶紝鏈夐棶棰樿涓庤〃鍗曞彂甯冭�呰仈绯�"));
+            }
+        }
+        // 姣忎釜璐﹀彿绛旈娆℃暟闄愬埗
+        if (settingSchemaStruct.isAccountWriteCountLimitStatus()) {
+            LambdaQueryWrapper<UserFormDataEntity> wrapper = Wrappers.<UserFormDataEntity>lambdaQuery().eq(UserFormDataEntity::getFormKey, formKey)
+                    .eq(UserFormDataEntity::getCreateBy, SecurityUtils.getUserId());
+            String rangeTypeSql = FormSettingSchemaStruct.DateRangeType.getDateSql(settingSchemaStruct.getAccountWriteCountLimitDateType());
+            wrapper.apply(StrUtil.isNotBlank(rangeTypeSql), rangeTypeSql);
+            long writeCount = userFormDataService.count(wrapper);
+            if (writeCount >= settingSchemaStruct.getAccountWriteCountLimit()) {
+                return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getAccountWriteCountLimitText(), "璇ヨ处鍙峰凡缁忔彁浜よ繃鏁版嵁锛屼笉鍙噸澶嶆彁浜わ紝鏈夐棶棰樿涓庤〃鍗曞彂甯冭�呰仈绯�"));
+            }
+        }
+        return Result.success(true);
+    }
+
+    /**
+     * 鏄惁鍦ㄨ缃殑绛旈鏃堕棿鍐�
+     *
+     * @return true 鍦ㄧ瓟棰樻椂闂村唴
+     */
+    private boolean isWriteInterviewTime(FormSettingSchemaStruct settingSchemaStruct) {
+        // 绛旈鏃堕棿闄愬埗
+        if (settingSchemaStruct.isWriteInterviewTimeStatus()) {
+            // 鏄惁姣忓ぉ鏃堕棿鑼冨洿闄愬埗
+            if (settingSchemaStruct.isWriteInterviewDayTimeStatus()) {
+                // 鏄惁鍦ㄥ厑璁歌闂殑澶╁唴
+                List<String> writeInterviewDateRange = settingSchemaStruct.getWriteInterviewDateRange();
+                if (CollUtil.isEmpty(writeInterviewDateRange) || DateUtil.isIn(DateUtil.date(), DateUtil.parse(writeInterviewDateRange.get(0)), DateUtil.parse(writeInterviewDateRange.get(1)))) {
+                    // 鏄惁鍦ㄥ厑璁歌闂殑灏忔椂鍐�
+                    List<String> writeInterviewTimeRange = settingSchemaStruct.getWriteInterviewTimeRange();
+                    LocalTime now = LocalTime.now();
+                    boolean isRange = CollUtil.isNotEmpty(writeInterviewDateRange) && now.isBefore(LocalTime.parse(writeInterviewTimeRange.get(0))) || now.isAfter(LocalTime.parse(writeInterviewTimeRange.get(1)));
+                    if (isRange) {
+                        return false;
+                    }
+                } else {
+                    return false;
+                }
+            } else {
+                // 鏄惁鍦ㄥ厑璁歌闂殑澶╁唴
+                List<String> writeInterviewDateTimeRange = settingSchemaStruct.getWriteInterviewDateTimeRange();
+                if (CollUtil.isNotEmpty(writeInterviewDateTimeRange) && !DateUtil.isIn(DateUtil.date(), DateUtil.parse(writeInterviewDateTimeRange.get(0)), DateUtil.parse(writeInterviewDateTimeRange.get(1)))) {
+                    return false;
+                }
+            }
+            // 鏄惁鏄瘡鍛ㄥ厑璁歌闂殑鍛ㄥ嚑
+            List<String> writeInterviewTimeWhichDays = settingSchemaStruct.getWriteInterviewTimeWhichDays();
+            if (CollUtil.isNotEmpty(writeInterviewTimeWhichDays)) {
+                // 鑾峰彇浠婂ぉ鏄瘡鍛ㄧ殑绗嚑澶�
+                int day = DateUtil.dayOfWeek(DateUtil.date());
+                return writeInterviewTimeWhichDays.contains(String.valueOf(day));
+            }
+        }
+        return true;
+    }
+
+
+    /**
+     * 鍒犻櫎鍏ㄩ儴鐨勮〃鍗曟暟鎹�
+     *
+     * @param formKey 琛ㄥ崟key
+     * @return 鍒犻櫎缁撴灉
+     */
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public Boolean deleteAllSetting(String formKey) {
+        this.remove(Wrappers.<UserFormSettingEntity>lambdaQuery().eq(UserFormSettingEntity::getFormKey, formKey));
+        return true;
+    }
+
+}
diff --git a/ltkj-system/src/main/java/com/ltkj/tduck/utils/CacheUtils.java b/ltkj-system/src/main/java/com/ltkj/tduck/utils/CacheUtils.java
index 88470c7..b828b20 100644
--- a/ltkj-system/src/main/java/com/ltkj/tduck/utils/CacheUtils.java
+++ b/ltkj-system/src/main/java/com/ltkj/tduck/utils/CacheUtils.java
@@ -1,122 +1,131 @@
-//package com.ltkj.tduck.utils;
-//
-//import cn.hutool.core.convert.Convert;
-//import cn.hutool.core.util.ObjectUtil;
-//import cn.hutool.core.util.StrUtil;
-//import lombok.extern.slf4j.Slf4j;
-//import org.apache.commons.compress.utils.Lists;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.cache.Cache;
-//import org.springframework.cache.annotation.EnableCaching;
-//import org.springframework.cache.ehcache.EhCacheCacheManager;
-//import org.springframework.stereotype.Component;
-//
-//import java.util.List;
-//
-///**
-// * @author : tduck
-// * @description : 鍩轰簬ehcache瀹炵幇
-// * @create :  2022/01/06 10:40
-// **/
-//@Component
-//@Slf4j
-//@EnableCaching
-//public class CacheUtils {
-//    private final String ETERNAL_CACHE_NAME = "eternal_cache";
-//    private final String TEMP_CACHE_NAME = "temp_cache";
+package com.ltkj.tduck.utils;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.ltkj.common.core.redis.RedisCache;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.compress.utils.Lists;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.Cache;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @author : tduck
+ * @description : 鍩轰簬ehcache瀹炵幇
+ * @create :  2022/01/06 10:40
+ **/
+@Component
+@Slf4j
+@EnableCaching
+public class CacheUtils {
+    private final String ETERNAL_CACHE_NAME = "eternal_cache";
+    private final String TEMP_CACHE_NAME = "temp_cache";
 //    @Autowired
 //    private EhCacheCacheManager cacheManager;
-//
-//    /**
-//     * 淇濆瓨鍒癈ache
-//     */
-//    public void save(String key, String value) {
+    @Autowired
+    private RedisCache cache;
+
+    /**
+     * 淇濆瓨鍒癈ache
+     */
+    public void save(String key, String value) {
 //        cacheManager.getCache(ETERNAL_CACHE_NAME).put(key, value);
-//    }
-//
-//    /**
-//     * 鑾峰彇
-//     *
-//     * @param key
-//     */
-//    public String get(String key) {
+        cache.setCacheObject(key,value);
+    }
+
+    /**
+     * 鑾峰彇
+     *
+     * @param key
+     */
+    public String get(String key) {
 //        Cache.ValueWrapper valueWrapper = cacheManager.getCache(ETERNAL_CACHE_NAME).get(key);
+//        Cache.ValueWrapper valueWrapper = cache.getCacheObject(key);
 //        if (ObjectUtil.isNotNull(valueWrapper) && ObjectUtil.isNotNull(valueWrapper.get())) {
 //            return valueWrapper.get().toString();
 //        }
-//        return null;
-//    }
-//
-//
-//    /**
-//     * 鑷
-//     *
-//     * @param key
-//     * @param number
-//     * @return
-//     */
-//    public Long incr(String key, Integer number) {
-//        String v = get(key);
-//        if (StrUtil.isBlank(v)) {
-//            v = "0";
-//        }
-//        long finalValue = Convert.toLong(v) + number;
-//        save(key, String.valueOf(finalValue));
-//        return finalValue;
-//    }
-//
-//
-//    /**
-//     * 娣诲姞鍒伴泦鍚堢紦瀛�
-//     *
-//     * @param key
-//     * @param value
-//     */
-//    public void addList(String key, Object value) {
-//        List coll = this.getList(key, Object.class);
-//        coll.add(value);
+        Object valueWrapper = cache.getCacheObject(key);
+        if (ObjectUtil.isNotNull(valueWrapper) && ObjectUtil.isNotNull(valueWrapper)) {
+            return valueWrapper.toString();
+        }
+        return null;
+    }
+
+
+    /**
+     * 鑷
+     *
+     * @param key
+     * @param number
+     * @return
+     */
+    public Long incr(String key, Integer number) {
+        String v = get(key);
+        if (StrUtil.isBlank(v)) {
+            v = "0";
+        }
+        long finalValue = Convert.toLong(v) + number;
+        save(key, String.valueOf(finalValue));
+        return finalValue;
+    }
+
+
+    /**
+     * 娣诲姞鍒伴泦鍚堢紦瀛�
+     *
+     * @param key
+     * @param value
+     */
+    public void addList(String key, Object value) {
+        List coll = this.getList(key, Object.class);
+        coll.add(value);
 //        cacheManager.getCache(TEMP_CACHE_NAME).put(key, JsonUtils.objToJson(coll));
-//    }
-//
-//
-//    /**
-//     * 浠庨泦鍚堜腑绉婚櫎
-//     *
-//     * @param key
-//     * @param value
-//     */
-//    public void removeList(String key, Object value) {
-//        List coll = this.getList(key, Object.class);
-//        coll.remove(value);
+        cache.setCacheObject(key, JsonUtils.objToJson(coll));
+    }
+
+
+    /**
+     * 浠庨泦鍚堜腑绉婚櫎
+     *
+     * @param key
+     * @param value
+     */
+    public void removeList(String key, Object value) {
+        List coll = this.getList(key, Object.class);
+        coll.remove(value);
 //        cacheManager.getCache(TEMP_CACHE_NAME).put(key, JsonUtils.objToJson(coll));
-//    }
-//
-//    /**
-//     * 鑾峰彇闆嗗悎
-//     *
-//     * @param key
-//     */
-//    public List getList(String key, Class classz) {
-//        String v = get(key);
-//        if (ObjectUtil.isNotNull(v)) {
-//            return JsonUtils.jsonToList(v, classz.getClass());
-//        }
-//        return Lists.newArrayList();
-//    }
-//
-//
-//    /**
-//     * 涓存椂淇濆瓨 榛樿5min
-//     */
-//    public void tempSave(String key, String value) {
+    }
+
+    /**
+     * 鑾峰彇闆嗗悎
+     *
+     * @param key
+     */
+    public List getList(String key, Class classz) {
+        String v = get(key);
+        if (ObjectUtil.isNotNull(v)) {
+            return JsonUtils.jsonToList(v, classz.getClass());
+        }
+        return Lists.newArrayList();
+    }
+
+
+    /**
+     * 涓存椂淇濆瓨 榛樿5min
+     */
+    public void tempSave(String key, String value) {
 //        cacheManager.getCache(TEMP_CACHE_NAME).put(key, value);
-//    }
-//
-//    /**
-//     * 鑾峰彇涓存椂瀛樺偍鍙橀噺
-//     *
-//     * @param key
-//     */
+    }
+
+    /**
+     * 鑾峰彇涓存椂瀛樺偍鍙橀噺
+     *
+     * @param key
+     */
 //    public String getTemp(String key) {
 //        Cache.ValueWrapper valueWrapper = cacheManager.getCache(TEMP_CACHE_NAME).get(key);
 //        if (ObjectUtil.isNotNull(valueWrapper) && ObjectUtil.isNotNull(valueWrapper.get())) {
@@ -128,6 +137,6 @@
 //    public void removeTemp(String key) {
 //        cacheManager.getCache(TEMP_CACHE_NAME).evict(key);
 //    }
-//
-//
-//}
+
+
+}
diff --git a/ltkj-system/src/main/java/com/ltkj/tduck/utils/SortUtils.java b/ltkj-system/src/main/java/com/ltkj/tduck/utils/SortUtils.java
index 56e135a..c59f3ce 100644
--- a/ltkj-system/src/main/java/com/ltkj/tduck/utils/SortUtils.java
+++ b/ltkj-system/src/main/java/com/ltkj/tduck/utils/SortUtils.java
@@ -1,109 +1,109 @@
-//package com.ltkj.tduck.utils;
-//
-//
-//import cn.hutool.core.util.ObjectUtil;
-//import cn.hutool.core.util.StrUtil;
-//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-//import com.ltkj.tduck.constant.FormRedisKeyConstants;
-//import com.ltkj.tduck.domain.UserFormItemEntity;
-//import com.ltkj.tduck.service.UserFormItemService;
-//import lombok.RequiredArgsConstructor;
-//import org.springframework.stereotype.Component;
-//
-//import java.util.Comparator;
-//import java.util.List;
-//
-///**
-// * 涓や釜鍓嶆彁:浣嶇疆鐨勪俊鎭褰曞湪浠诲姟鐨勬ā鍨嬩笂(pos瀛楁);涓�鑸袱涓换鍔$殑pos鍊肩浉宸緢澶�(榛樿鏄�65536);鐜板湪鍋囪鏈変换鍔� A, B, C.
-// * 鍒椾妇鍑犱釜甯歌鐨勫満鏅�:濡傛灉C瑕佺Щ鍒癆鐨勫墠闈�, 閭d箞鍚庣浼氭妸 C.pos 鏀逛负 A.pos/2;鑻ユ灉C瑕佺Щ鍒癆鍜孊涔嬮棿,
-// * 閭d箞鍚庣浼氭妸 C.pos 鏀逛负 (A.pos + B.pos)/2;濡傛灉B瑕佺Щ鍒癈鐨勫悗闈�, 閭d箞鍚庣浼氭妸 B.pos 鏀逛负 C.pos + 65536;
-// * 褰撶劧杩欓噷浼氭湁涓瀬绔儏鍐甸渶瑕佸鐞�(鍋囪pos鏄暣鏁�):濡傛灉 A.pos 鏄� 1, B.pos 鏄� 2, C鎯崇Щ鍒癆鍜孊涔嬮棿, 鍏跺疄鏄病鏈変竴涓暣鏁板彲浠ョ敤鐨�,
-// * 閽堝杩欑鎯呭喌, 鍚庣浼氶噸鏂扮粰鏁翠釜鍒楄〃鐨勪换鍔¢噸鏂板埛涓�閬峱os鍊�.
-// * <p>
-// * 鎷栧姩鎺掑簭宸ュ叿绫�
-// * 绠楁硶鍙傝�� @link https://www.zhihu.com/question/55789722
-// *
-// * @author smalljop
-// */
-//@RequiredArgsConstructor
-//@Component
-//public class SortUtils {
-//
-//    private final CacheUtils cacheUtils;
-//
-//    /**
-//     * 鎺掑簭榛樿鑷鍥犲瓙
-//     */
-//    private final Long SORT_DEFAULT_INCR_FACT = 65536L;
-//
-//    private final UserFormItemService formItemService;
-//
-//
-//    /**
-//     * 鑾峰彇鎺掑簭鏁板��
-//     *
-//     * @param formKey 琛ㄥ崟key
-//     * @return 鍒濆鎺掑簭鏁板��
-//     */
-//    public Long getInitialSortPosition(String formKey) {
-//        String redisKey = StrUtil.format(FormRedisKeyConstants.FORM_ITEM_POS_DELTA, formKey);
-//        // 妯℃澘鍒涘缓鏃� 鍒濆鎺掑簭鏁板��
-//        if (StrUtil.isBlank(cacheUtils.get(redisKey))) {
-//            Long sort = formItemService.getLastItemSort(formKey);
-//            cacheUtils.save(redisKey, String.valueOf(sort == null ? 1 : sort));
-//        }
-//        return cacheUtils.incr(redisKey, SORT_DEFAULT_INCR_FACT.intValue());
-//    }
-//
-//
-//    /**
-//     * * 涓や釜鍓嶆彁:浣嶇疆鐨勪俊鎭褰曞湪浠诲姟鐨勬ā鍨嬩笂(pos瀛楁);涓�鑸袱涓换鍔$殑pos鍊肩浉宸緢澶�(榛樿鏄�65536);鐜板湪鍋囪鏈変换鍔� A, B, C.
-//     * * 鍒椾妇鍑犱釜甯歌鐨勫満鏅�:濡傛灉C瑕佺Щ鍒癆鐨勫墠闈�, 閭d箞鍚庣浼氭妸 C.pos 鏀逛负 A.pos/2;鑻ユ灉C瑕佺Щ鍒癆鍜孊涔嬮棿,
-//     * * 閭d箞鍚庣浼氭妸 C.pos 鏀逛负 (A.pos + B.pos)/2;濡傛灉B瑕佺Щ鍒癈鐨勫悗闈�, 閭d箞鍚庣浼氭妸 B.pos 鏀逛负 C.pos + 65536;
-//     * * 褰撶劧杩欓噷浼氭湁涓瀬绔儏鍐甸渶瑕佸鐞�(鍋囪pos鏄暣鏁�):濡傛灉 A.pos 鏄� 1, B.pos 鏄� 2, C鎯崇Щ鍒癆鍜孊涔嬮棿, 鍏跺疄鏄病鏈変竴涓暣鏁板彲浠ョ敤鐨�,
-//     * * 閽堝杩欑鎯呭喌, 鍚庣浼氶噸鏂扮粰鏁翠釜鍒楄〃鐨勪换鍔¢噸鏂板埛涓�閬峱os鍊�.
-//     * 鎺掑簭涔嬪悗閲嶆柊璁$畻
-//     *
-//     * @param beforePosition 涔嬪墠鐨勪綅缃�
-//     * @param afterPosition  涔嬪悗鐨勪綅缃�
-//     * @param formKey        琛ㄥ崟key
-//     * @return 鏈�缁堜綅缃�
-//     */
-//    public Long calcSortPosition(Long beforePosition, Long afterPosition, String formKey) {
-//        String redisKey = StrUtil.format(FormRedisKeyConstants.FORM_ITEM_POS_DELTA, formKey);
-//        boolean isCenter = (ObjectUtil.isNotNull(beforePosition) && 0L != beforePosition) && (ObjectUtil.isNotNull(afterPosition) && 0L != afterPosition);
-//        if (isCenter) { // 鏀惧埌涓棿
-//            return (beforePosition + afterPosition) / 2;
-//        }
-//        if (ObjectUtil.isNull(beforePosition) || 0L == beforePosition) { // 鏀惧埌鏈�鍓嶉潰
-//            return afterPosition / 2;
-//        } else { // 鏀惧埌鏈�鍚庨潰
-//            return cacheUtils.incr(redisKey, SORT_DEFAULT_INCR_FACT.intValue());
-//        }
-//    }
-//
-//
-//    /**
-//     * 鏋佺鎯呭喌鍒锋柊鏁翠釜鍒楄〃
-//     *
-//     * @param beforePosition 涔嬪墠鐨勪綅缃�
-//     * @param afterPosition  涔嬪悗鐨勪綅缃�
-//     * @param formKey        琛ㄥ崟key
-//     * @param sort           鎺掑簭鏁板��
-//     */
-//    public Boolean sortAllList(Long beforePosition, Long afterPosition, String formKey, Long sort) {
-//        // 鍗冲皢娌℃湁鏁存暟锛屽埛鏂板叏閮ㄥ垪琛ㄦ帓搴忓��
-//        if ((ObjectUtil.isNotNull(beforePosition) && 0L != beforePosition && ObjectUtil.equal(sort, beforePosition + 1))
-//                || (ObjectUtil.isNotNull(afterPosition) && 0L != afterPosition && ObjectUtil.equal(sort, 1L))) {
-//            List<UserFormItemEntity> itemEntityList = formItemService.list(Wrappers.<UserFormItemEntity>lambdaQuery().eq(UserFormItemEntity::getFormKey, formKey));
-//            itemEntityList.sort(Comparator.comparing(UserFormItemEntity::getSort));
-//            for (int i = 0; i < itemEntityList.size(); i++) {
-//                itemEntityList.get(i).setSort(SORT_DEFAULT_INCR_FACT * (i + 1));
-//            }
-//            formItemService.updateBatchById(itemEntityList);
-//            return true;
-//        }
-//        return false;
-//    }
-//
-//}
+package com.ltkj.tduck.utils;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ltkj.tduck.constant.FormRedisKeyConstants;
+import com.ltkj.tduck.domain.UserFormItemEntity;
+import com.ltkj.tduck.service.UserFormItemService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * 涓や釜鍓嶆彁:浣嶇疆鐨勪俊鎭褰曞湪浠诲姟鐨勬ā鍨嬩笂(pos瀛楁);涓�鑸袱涓换鍔$殑pos鍊肩浉宸緢澶�(榛樿鏄�65536);鐜板湪鍋囪鏈変换鍔� A, B, C.
+ * 鍒椾妇鍑犱釜甯歌鐨勫満鏅�:濡傛灉C瑕佺Щ鍒癆鐨勫墠闈�, 閭d箞鍚庣浼氭妸 C.pos 鏀逛负 A.pos/2;鑻ユ灉C瑕佺Щ鍒癆鍜孊涔嬮棿,
+ * 閭d箞鍚庣浼氭妸 C.pos 鏀逛负 (A.pos + B.pos)/2;濡傛灉B瑕佺Щ鍒癈鐨勫悗闈�, 閭d箞鍚庣浼氭妸 B.pos 鏀逛负 C.pos + 65536;
+ * 褰撶劧杩欓噷浼氭湁涓瀬绔儏鍐甸渶瑕佸鐞�(鍋囪pos鏄暣鏁�):濡傛灉 A.pos 鏄� 1, B.pos 鏄� 2, C鎯崇Щ鍒癆鍜孊涔嬮棿, 鍏跺疄鏄病鏈変竴涓暣鏁板彲浠ョ敤鐨�,
+ * 閽堝杩欑鎯呭喌, 鍚庣浼氶噸鏂扮粰鏁翠釜鍒楄〃鐨勪换鍔¢噸鏂板埛涓�閬峱os鍊�.
+ * <p>
+ * 鎷栧姩鎺掑簭宸ュ叿绫�
+ * 绠楁硶鍙傝�� @link https://www.zhihu.com/question/55789722
+ *
+ * @author smalljop
+ */
+@RequiredArgsConstructor
+@Component
+public class SortUtils {
+
+    private final CacheUtils cacheUtils;
+
+    /**
+     * 鎺掑簭榛樿鑷鍥犲瓙
+     */
+    private final Long SORT_DEFAULT_INCR_FACT = 65536L;
+
+    private final UserFormItemService formItemService;
+
+
+    /**
+     * 鑾峰彇鎺掑簭鏁板��
+     *
+     * @param formKey 琛ㄥ崟key
+     * @return 鍒濆鎺掑簭鏁板��
+     */
+    public Long getInitialSortPosition(String formKey) {
+        String redisKey = StrUtil.format(FormRedisKeyConstants.FORM_ITEM_POS_DELTA, formKey);
+        // 妯℃澘鍒涘缓鏃� 鍒濆鎺掑簭鏁板��
+        if (StrUtil.isBlank(cacheUtils.get(redisKey))) {
+            Long sort = formItemService.getLastItemSort(formKey);
+            cacheUtils.save(redisKey, String.valueOf(sort == null ? 1 : sort));
+        }
+        return cacheUtils.incr(redisKey, SORT_DEFAULT_INCR_FACT.intValue());
+    }
+
+
+    /**
+     * * 涓や釜鍓嶆彁:浣嶇疆鐨勪俊鎭褰曞湪浠诲姟鐨勬ā鍨嬩笂(pos瀛楁);涓�鑸袱涓换鍔$殑pos鍊肩浉宸緢澶�(榛樿鏄�65536);鐜板湪鍋囪鏈変换鍔� A, B, C.
+     * * 鍒椾妇鍑犱釜甯歌鐨勫満鏅�:濡傛灉C瑕佺Щ鍒癆鐨勫墠闈�, 閭d箞鍚庣浼氭妸 C.pos 鏀逛负 A.pos/2;鑻ユ灉C瑕佺Щ鍒癆鍜孊涔嬮棿,
+     * * 閭d箞鍚庣浼氭妸 C.pos 鏀逛负 (A.pos + B.pos)/2;濡傛灉B瑕佺Щ鍒癈鐨勫悗闈�, 閭d箞鍚庣浼氭妸 B.pos 鏀逛负 C.pos + 65536;
+     * * 褰撶劧杩欓噷浼氭湁涓瀬绔儏鍐甸渶瑕佸鐞�(鍋囪pos鏄暣鏁�):濡傛灉 A.pos 鏄� 1, B.pos 鏄� 2, C鎯崇Щ鍒癆鍜孊涔嬮棿, 鍏跺疄鏄病鏈変竴涓暣鏁板彲浠ョ敤鐨�,
+     * * 閽堝杩欑鎯呭喌, 鍚庣浼氶噸鏂扮粰鏁翠釜鍒楄〃鐨勪换鍔¢噸鏂板埛涓�閬峱os鍊�.
+     * 鎺掑簭涔嬪悗閲嶆柊璁$畻
+     *
+     * @param beforePosition 涔嬪墠鐨勪綅缃�
+     * @param afterPosition  涔嬪悗鐨勪綅缃�
+     * @param formKey        琛ㄥ崟key
+     * @return 鏈�缁堜綅缃�
+     */
+    public Long calcSortPosition(Long beforePosition, Long afterPosition, String formKey) {
+        String redisKey = StrUtil.format(FormRedisKeyConstants.FORM_ITEM_POS_DELTA, formKey);
+        boolean isCenter = (ObjectUtil.isNotNull(beforePosition) && 0L != beforePosition) && (ObjectUtil.isNotNull(afterPosition) && 0L != afterPosition);
+        if (isCenter) { // 鏀惧埌涓棿
+            return (beforePosition + afterPosition) / 2;
+        }
+        if (ObjectUtil.isNull(beforePosition) || 0L == beforePosition) { // 鏀惧埌鏈�鍓嶉潰
+            return afterPosition / 2;
+        } else { // 鏀惧埌鏈�鍚庨潰
+            return cacheUtils.incr(redisKey, SORT_DEFAULT_INCR_FACT.intValue());
+        }
+    }
+
+
+    /**
+     * 鏋佺鎯呭喌鍒锋柊鏁翠釜鍒楄〃
+     *
+     * @param beforePosition 涔嬪墠鐨勪綅缃�
+     * @param afterPosition  涔嬪悗鐨勪綅缃�
+     * @param formKey        琛ㄥ崟key
+     * @param sort           鎺掑簭鏁板��
+     */
+    public Boolean sortAllList(Long beforePosition, Long afterPosition, String formKey, Long sort) {
+        // 鍗冲皢娌℃湁鏁存暟锛屽埛鏂板叏閮ㄥ垪琛ㄦ帓搴忓��
+        if ((ObjectUtil.isNotNull(beforePosition) && 0L != beforePosition && ObjectUtil.equal(sort, beforePosition + 1))
+                || (ObjectUtil.isNotNull(afterPosition) && 0L != afterPosition && ObjectUtil.equal(sort, 1L))) {
+            List<UserFormItemEntity> itemEntityList = formItemService.list(Wrappers.<UserFormItemEntity>lambdaQuery().eq(UserFormItemEntity::getFormKey, formKey));
+            itemEntityList.sort(Comparator.comparing(UserFormItemEntity::getSort));
+            for (int i = 0; i < itemEntityList.size(); i++) {
+                itemEntityList.get(i).setSort(SORT_DEFAULT_INCR_FACT * (i + 1));
+            }
+            formItemService.updateBatchById(itemEntityList);
+            return true;
+        }
+        return false;
+    }
+
+}

--
Gitblit v1.8.0