Przeglądaj źródła

feature 提交培训问卷相关代码

xiahan 1 rok temu
rodzic
commit
8f48eb7283
18 zmienionych plików z 616 dodań i 20 usunięć
  1. 1 3
      cx-safe-check/cx-save-check-common/src/main/java/com/rongwei/sfcommon/utils/CommonUtil.java
  2. 6 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/DemandSurveyContentDao.java
  3. 15 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/DemandSurveyUserAnswerDao.java
  4. 2 1
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandQuestionOptionDao.java
  5. 24 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandSurveyBackupsDao.java
  6. 11 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/DemandSurveyUserAnswerService.java
  7. 12 2
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/TrainingDemandService.java
  8. 20 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/DemandSurveyUserAnswerServiceImpl.java
  9. 180 2
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingDemandServiceImpl.java
  10. 68 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/utils/CustomerTypeHandler/ListStringToVarcharTypeHandlerUtil.java
  11. 60 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/utils/TrainingUtils.java
  12. 30 0
      rw-training/training-common/src/main/resources/mybatis/DemandSurveyContentDao.xml
  13. 66 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/DemandSurveyUserAnswerDo.java
  14. 3 7
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandQuestionOptionDo.java
  15. 4 1
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandSurveyBackupsDo.java
  16. 18 0
      rw-training/training-entity/src/main/java/com/rongwei/training/vo/PreviewTrainDemandVo.java
  17. 49 0
      rw-training/training-entity/src/main/java/com/rongwei/training/vo/TrainingDemandVo.java
  18. 47 4
      rw-training/training-server/src/main/java/com/rongwei/training/controller/TrainingDemandController.java

+ 1 - 3
cx-safe-check/cx-save-check-common/src/main/java/com/rongwei/sfcommon/utils/CommonUtil.java

@@ -43,11 +43,9 @@ public class CommonUtil {
         redisService = autoRedisService;
         sysSerialNumberService = autoSysSerialNumberService;
     }
-
     public static String getWeekForYear(boolean returnLastWeek) {
         return getWeekForYear(new Date(), returnLastWeek);
     }
-    private static final Logger logger = LoggerFactory.getLogger(CommonUtil.class);
 
     /**
      * @param date           日期
@@ -58,7 +56,7 @@ public class CommonUtil {
         if (date == null) {
             return getWeekForYear(new Date(), returnLastWeek);
         }
-        logger.debug("get week and year for date:{}", date);
+        log.debug("get week and year for date:{}", date);
         Calendar instance = Calendar.getInstance();
         // MinimalDaysInFirstWeek 在今年的第一个星期所需的最少天数
         instance.setFirstDayOfWeek(Calendar.MONDAY);

+ 6 - 0
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/DemandSurveyContentDao.java

@@ -2,12 +2,18 @@ package com.rongwei.trainingcommon.sys.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.rongwei.training.domain.DemandSurveyContentDo;
+import com.rongwei.training.vo.TrainingDemandVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @Entity com.rongwei.training.domain.UserDemandSurvey
  */
 public interface DemandSurveyContentDao extends BaseMapper<DemandSurveyContentDo> {
 
+    List<TrainingDemandVo> getSurveyContent(@Param("surverId") String surverId);
+
 }
 
 

+ 15 - 0
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/DemandSurveyUserAnswerDao.java

@@ -0,0 +1,15 @@
+package com.rongwei.trainingcommon.sys.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwei.training.domain.DemandSurveyUserAnswerDo;
+
+/**
+ * @Entity com.rongwei.training.domain.DemandSurveyUserAnswer
+ */
+public interface DemandSurveyUserAnswerDao extends BaseMapper<DemandSurveyUserAnswerDo> {
+
+}
+
+
+
+

+ 2 - 1
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandQuestionOptionDao.java

@@ -2,6 +2,7 @@ package com.rongwei.trainingcommon.sys.dao;
 
 import com.rongwei.rwcommon.base.BaseDao;
 import com.rongwei.training.domain.SubjectOptionsDo;
+import com.rongwei.training.domain.TrainingDemandQuestionOptionDo;
 
-public interface TrainingDemandQuestionOptionDao extends BaseDao<SubjectOptionsDo> {
+public interface TrainingDemandQuestionOptionDao extends BaseDao<TrainingDemandQuestionOptionDo> {
 }

+ 24 - 0
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandSurveyBackupsDao.java

@@ -2,12 +2,36 @@ package com.rongwei.trainingcommon.sys.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.rongwei.training.domain.TrainingDemandSurveyBackupsDo;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.List;
 
 /**
  * @Entity com.rongwei.training.domain.TrainingDemandSurveyBackups
  */
 public interface TrainingDemandSurveyBackupsDao extends BaseMapper<TrainingDemandSurveyBackupsDo> {
 
+    @Select("SELECT\n" +
+            "\ttdsb.* \n" +
+            "FROM\n" +
+            "\ttraining_demand_survey_backups tdsb \n" +
+            "\tleft join training_demand_survey tds on tdsb.OLDSURVEYID = tds.ID and tds.DELETED='0'\n" +
+            "\tWHERE  tdsb.DELETED='0'\n" +
+            "\tAND now() <= tdsb.DEADLINE\n" +
+            "\tand tds.STATE = '1'\n" +
+            "\tand tdsb.PARTICIPATEUSERID like CONCAT('%',#{userId},'%')")
+    List<TrainingDemandSurveyBackupsDo> getValidListData(@Param("userId") String userId);
+
+    @Update("UPDATE training_demand_survey_backups \n" +
+            "SET NOPARTICIPATINGUSERID = REPLACE ( NOPARTICIPATINGUSERID, #{userId}, '' ),\n" +
+            "NOPARTICIPATINGUSERNAME = REPLACE ( NOPARTICIPATINGUSERNAME, #{userName}, '' ),\n" +
+            "PARTICIPATINGUSERID = IF(ISNULL(PARTICIPATINGUSERID), #{userId} ,CONCAT(PARTICIPATINGUSERID, ',', #{userId})),\n" +
+            "PARTICIPATINGUSERNAME = IF(ISNULL(PARTICIPATINGUSERNAME), #{userName} ,CONCAT(PARTICIPATINGUSERNAME, ',', #{userName} ))\n" +
+            "where ID=#{surveyId}")
+    void updateParticipant(@Param("userId")String userId,@Param("userName")String userName,@Param("surveyId")String surveyId);
+
 }
 
 

+ 11 - 0
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/DemandSurveyUserAnswerService.java

@@ -0,0 +1,11 @@
+package com.rongwei.trainingcommon.sys.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwei.training.domain.DemandSurveyUserAnswerDo;
+
+/**
+ *
+ */
+public interface DemandSurveyUserAnswerService extends IService<DemandSurveyUserAnswerDo> {
+
+}

+ 12 - 2
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/TrainingDemandService.java

@@ -1,8 +1,10 @@
 package com.rongwei.trainingcommon.sys.service;
 
 import com.rongwei.rwcommon.base.R;
-import org.springframework.web.bind.annotation.RequestBody;
+import com.rongwei.training.vo.PreviewTrainDemandVo;
+import com.rongwei.training.vo.TrainingDemandVo;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -12,5 +14,13 @@ import java.util.Map;
  * @date 2023/11/24
  */
 public interface TrainingDemandService {
-    R releaseTrainDemand(@RequestBody Map<String,Object> parameter);
+    R releaseTrainDemand( Map<String,Object> parameter);
+
+    R previewTrainDemand(PreviewTrainDemandVo previewTrainDemandVo);
+
+    R getInfoByUser(String userId);
+
+    R showQuestionnaire(String id);
+
+    R submit(List<TrainingDemandVo> trainingDemandVoList);
 }

+ 20 - 0
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/DemandSurveyUserAnswerServiceImpl.java

@@ -0,0 +1,20 @@
+package com.rongwei.trainingcommon.sys.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwei.training.domain.DemandSurveyUserAnswerDo;
+import com.rongwei.trainingcommon.sys.dao.DemandSurveyUserAnswerDao;
+import com.rongwei.trainingcommon.sys.service.DemandSurveyUserAnswerService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ */
+@Service
+public class DemandSurveyUserAnswerServiceImpl extends ServiceImpl<DemandSurveyUserAnswerDao, DemandSurveyUserAnswerDo>
+        implements DemandSurveyUserAnswerService {
+
+}
+
+
+
+

+ 180 - 2
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingDemandServiceImpl.java

@@ -1,13 +1,18 @@
 package com.rongwei.trainingcommon.sys.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwei.rwcommon.base.BaseDo;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.rwcommon.utils.StringUtils;
 import com.rongwei.training.domain.*;
+import com.rongwei.training.vo.PreviewTrainDemandVo;
+import com.rongwei.training.vo.TrainingDemandVo;
 import com.rongwei.trainingcommon.sys.dao.*;
 import com.rongwei.trainingcommon.sys.service.TrainingDemandService;
 import com.rongwei.trainingcommon.sys.utils.TrainingListCopyUtils;
+import com.rongwei.trainingcommon.sys.utils.TrainingUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -58,9 +63,14 @@ public class TrainingDemandServiceImpl implements TrainingDemandService {
     private TrainingDemandTempBackupsServiceImpl trainingDemandTempBackupsServiceImpl;
     @Autowired
     private DemandSurveyContentContentServiceImpl demandSurveyContentServiceImpl;
-
+    @Autowired
+    private TrainingDemandSurveyBackupsDao trainingDemandSurveyBackupsDao;
     @Autowired
     private TraningCommonDao traningCommonDao;
+    @Autowired
+    private DemandSurveyContentDao demandSurveyContentDao;
+    @Autowired
+    private DemandSurveyUserAnswerServiceImpl demandSurveyUserAnswerService;
 
     public static final String ERROR_MSG = "问卷调查发布失败";
     /**
@@ -188,6 +198,173 @@ public class TrainingDemandServiceImpl implements TrainingDemandService {
         return R.ok();
     }
 
+    /**
+     * 预览培训需求调查
+     *
+     * @param previewTrainDemandVo
+     * @return
+     */
+    @Override
+    public R previewTrainDemand(PreviewTrainDemandVo previewTrainDemandVo) {
+        List<String> tempIdList = previewTrainDemandVo.getTempIdList();
+        if (tempIdList == null || previewTrainDemandVo.getTempIdList().isEmpty()) {
+            return R.error("培训模板信息为空");
+        }
+        // 问题模板信息
+        List<TrainingDemandTempDo> trainingDemandTempDos = trainingDemandTempDao.selectList(new LambdaQueryWrapper<TrainingDemandTempDo>()
+                .in(TrainingDemandTempDo::getId, tempIdList).eq(BaseDo::getDeleted, "0"));
+        // 问题模板问题
+        List<TrainingDemandTempDetailDo> trainingDemandTempDetailDos = trainingDemandTempDetailDao.selectList(new LambdaQueryWrapper<TrainingDemandTempDetailDo>()
+                .in(TrainingDemandTempDetailDo::getDemandtempid, tempIdList).eq(BaseDo::getDeleted, "0"));
+        List<String> questionIdList = trainingDemandTempDetailDos.stream().map(TrainingDemandTempDetailDo::getQuestionid).collect(Collectors.toList());
+        // 问题答案
+        List<TrainingDemandQuestionOptionDo> trainingDemandQuestionDos = trainingDemandQuestionOptionDao.selectList(new LambdaQueryWrapper<TrainingDemandQuestionOptionDo>()
+                .in(TrainingDemandQuestionOptionDo::getQuestionid, questionIdList).eq(BaseDo::getDeleted, "0"));
+
+        List<TrainingDemandVo> trainingDemandVoList = new ArrayList<>();
+        int num = 1;
+        // 问题模板
+        for (int i = 0; i < trainingDemandTempDos.size(); i++) {
+            TrainingDemandTempDo trainingDemandTempDo = trainingDemandTempDos.get(i);
+            // 当前模板拥有的问题
+            List<TrainingDemandTempDetailDo> currentTempQuestion = trainingDemandTempDetailDos.stream()
+                    .filter(info -> info.getDemandtempid().equals(trainingDemandTempDo.getId())).collect(Collectors.toList());
+            for (int j = 0; j < currentTempQuestion.size(); j++) {
+                TrainingDemandTempDetailDo currentQuestion = currentTempQuestion.get(j);
+                // 问题答案
+                List<String> collect = trainingDemandQuestionDos.stream().filter(info -> currentQuestion.getQuestionid().equals(info.getQuestionid()))
+                        .map(TrainingDemandQuestionOptionDo::getContent)
+                        .collect(Collectors.toList());
+                TrainingDemandVo trainingDemandVo = new TrainingDemandVo();
+                trainingDemandVo.setModelName(trainingDemandTempDo.getName());
+                trainingDemandVo.setNum(num);
+                trainingDemandVo.setQuestionContent(currentQuestion.getContent());
+                trainingDemandVo.setQuestionType(currentQuestion.getQuestiontype());
+                trainingDemandVo.setQuestionOptions(collect);
+                num++;
+                trainingDemandVoList.add(trainingDemandVo);
+            }
+        }
+        LinkedHashMap<String, List<TrainingDemandVo>> collect = trainingDemandVoList.stream().collect(Collectors.groupingBy(TrainingDemandVo::getModelName, LinkedHashMap::new, Collectors.toList()));
+        List<TrainingDemandVo> customerDataList = previewTrainDemandVo.getCustomerDataList();
+        if (customerDataList != null || !customerDataList.isEmpty()) {
+            collect.put("customQuestion", customerDataList);
+        }
+        return R.ok(collect);
+    }
+
+    /**
+     * 获取当前登录用的调查问卷信息
+     *
+     * @param userId
+     * @return
+     */
+    @Override
+    public R getInfoByUser(String userId) {
+        if (StringUtils.isBlank(userId)) {
+            SysUserVo currentUser = TrainingUtils.getCurrentUser();
+            userId = currentUser.getId();
+        }
+        if (StringUtils.isBlank(userId)) {
+            log.debug("用户ID 为空");
+            return R.ok();
+        }
+        List<TrainingDemandSurveyBackupsDo> list = trainingDemandSurveyBackupsDao.getValidListData(userId);
+        return R.ok(list);
+    }
+
+    /**
+     * 问卷
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public R showQuestionnaire(String id) {
+        if (StringUtils.isBlank(id)) {
+            log.debug("参数异常");
+            return R.ok();
+        }
+        TrainingDemandSurveyBackupsDo trainingDemandSurveyBackupsDo = trainingDemandSurveyBackupsServiceImpl.getById(id);
+        String oldSurveyId = trainingDemandSurveyBackupsDo.getOldSurveyId();
+        TrainingDemandSurveyDo trainingDemandSurveyDo = trainingDemandSurveyDao.selectById(oldSurveyId);
+        if (StringUtils.isBlank(trainingDemandSurveyDo.getState()) || !"1".equals(trainingDemandSurveyDo.getState())) {
+            log.debug("问卷调查发布状态异常");
+            return R.error("问卷调查已关闭");
+        }
+        if (trainingDemandSurveyDo.getDeadline() != null && new Date().compareTo(trainingDemandSurveyDo.getDeadline()) > 0) {
+            log.debug("问卷调查发布状态异常");
+            return R.error("问卷调查已结束");
+        }
+        List<TrainingDemandVo> surveyContent = demandSurveyContentDao.getSurveyContent(id);
+
+        LinkedHashMap<String, List<TrainingDemandVo>> collect = surveyContent.stream()
+                .collect(Collectors.groupingBy(TrainingDemandVo::getModelName, LinkedHashMap::new, Collectors.toList()));
+        return R.ok(collect);
+    }
+
+    @Override
+    @Transactional
+    public R submit(List<TrainingDemandVo> trainingDemandVoList) {
+        //  当前登录用户
+        SysUserVo currentUser = TrainingUtils.getCurrentUser();
+        if (currentUser == null) {
+            log.error("无法获取到当前登录人信息");
+            return R.error("请重新登录");
+        }
+        if (trainingDemandVoList == null || trainingDemandVoList.isEmpty()) {
+            log.error("问卷答案为空");
+            return R.error("请填写问卷调查信息");
+        }
+        boolean hasEmptySurverId = trainingDemandVoList.stream().anyMatch(info -> StringUtils.isBlank(info.getSurverid()));
+        if (hasEmptySurverId) {
+            log.error("存在问卷ID为空的数据");
+            return R.error("数据异常");
+        }
+        boolean hasEmptycontentId = trainingDemandVoList.stream().anyMatch(info -> StringUtils.isBlank(info.getContentid()));
+        if (hasEmptycontentId) {
+            log.error("存在问卷内容ID为空的数据");
+            return R.error("数据异常");
+        }
+        // 获取培训计划ID
+        String surverid = trainingDemandVoList.get(0).getSurverid();
+        Date currentDate = new Date();
+        TrainingDemandSurveyBackupsDo trainingDemandSurveyBackupsDo = trainingDemandSurveyBackupsDao.selectById(surverid);
+        // 判断是否以参与过该问卷
+        String participatingUserList = trainingDemandSurveyBackupsDo.getParticipatinguserid();
+        if(StringUtils.isNotBlank(participatingUserList) && participatingUserList.contains(currentUser.getId())){
+            log.error("当前用户以参与过问卷");
+            return R.error("您已提交过问卷!无法再次提交");
+        }
+        List<DemandSurveyUserAnswerDo> saveData = trainingDemandVoList.stream().map(info -> {
+            DemandSurveyUserAnswerDo demandSurveyUserAnswerDo = new DemandSurveyUserAnswerDo();
+            demandSurveyUserAnswerDo.setId(SecurityUtil.getUUID());
+            demandSurveyUserAnswerDo.setNum(info.getNum());
+            demandSurveyUserAnswerDo.setAnswer(info.getUserAnswer());
+            demandSurveyUserAnswerDo.setSurverid(info.getSurverid());
+            demandSurveyUserAnswerDo.setSurvercontentid(info.getContentid());
+            demandSurveyUserAnswerDo.setQuestiontype(info.getQuestionType());
+            if (info.getQuestionOptions() != null && !info.getQuestionOptions().isEmpty()) {
+                demandSurveyUserAnswerDo.setOptions(String.join("-;-", info.getQuestionOptions()));
+            }
+            demandSurveyUserAnswerDo.setCreateuserid(currentUser.getCreateuserid());
+            demandSurveyUserAnswerDo.setCreateusername(currentUser.getCreateusername());
+            demandSurveyUserAnswerDo.setCreatedate(currentDate);
+            demandSurveyUserAnswerDo.setModifyuserid(currentUser.getCreateuserid());
+            demandSurveyUserAnswerDo.setModifyusername(currentUser.getCreateusername());
+            demandSurveyUserAnswerDo.setModifydate(currentDate);
+            demandSurveyUserAnswerDo.setDeleted("0");
+            demandSurveyUserAnswerDo.setTenantid(trainingDemandSurveyBackupsDo.getTenantid());
+            return demandSurveyUserAnswerDo;
+        }).collect(Collectors.toList());
+
+        // 保存用户问卷结果
+        demandSurveyUserAnswerService.saveBatch(saveData);
+        // 更新问卷调查已参与用户和未参与用户
+        trainingDemandSurveyBackupsDao.updateParticipant(currentUser.getCreateuserid(), currentUser.getCreateusername(), surverid);
+        return R.ok();
+    }
+
     /**
      * 数据保存
      *
@@ -237,7 +414,7 @@ public class TrainingDemandServiceImpl implements TrainingDemandService {
         demandSurveyDo.setQuestionid(questionBackupsDo.getId());
         demandSurveyDo.setQuestionname(questionBackupsDo.getName());
         demandSurveyDo.setQuestiontype(questionBackupsDo.getQuestiontype());
-        demandSurveyDo.setOptions(addOptions.stream().map(TrainingDemandQuestionOptionBackupsDo::getContent).collect(Collectors.joining(",")));
+        demandSurveyDo.setOptions(addOptions.stream().map(TrainingDemandQuestionOptionBackupsDo::getContent).collect(Collectors.joining("-;-")));
         return demandSurveyDo;
     }
 
@@ -253,6 +430,7 @@ public class TrainingDemandServiceImpl implements TrainingDemandService {
         TrainingDemandSurveyBackupsDo trainingDemandSurveyBackupsDo = new TrainingDemandSurveyBackupsDo();
         BeanUtils.copyProperties(trainingDemandSurveyDo, trainingDemandSurveyBackupsDo);
         trainingDemandSurveyBackupsDo.setId(SecurityUtil.getUUID());
+        trainingDemandSurveyBackupsDo.setOldSurveyId(trainingDemandSurveyDo.getId());
         trainingDemandSurveyBackupsDo.setParticipateuserid(userIds);
         trainingDemandSurveyBackupsDo.setParticipateusername(userNames);
         trainingDemandSurveyBackupsDo.setNoparticipatinguserid(userIds);

+ 68 - 0
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/utils/CustomerTypeHandler/ListStringToVarcharTypeHandlerUtil.java

@@ -0,0 +1,68 @@
+package com.rongwei.trainingcommon.sys.utils.CustomerTypeHandler;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.MappedJdbcTypes;
+import org.apache.ibatis.type.MappedTypes;
+import org.apache.ibatis.type.TypeHandler;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * ListStringToVarcharTypeHandlerUtil class
+ *
+ * @author XH
+ * @date 2023/12/12
+ */
+@MappedJdbcTypes(JdbcType.VARCHAR)
+@MappedTypes(List.class)
+public class ListStringToVarcharTypeHandlerUtil implements TypeHandler<List<String>> {
+    @Override
+    public void setParameter(PreparedStatement preparedStatement, int i, List<String> strings, JdbcType jdbcType) throws SQLException {
+        // 遍历List类型的入参,拼装为String类型,使用Statement对象插入数据库
+        StringBuffer sb = new StringBuffer();
+        for (int j = 0; j < strings.size(); j++) {
+            if (j == strings.size() - 1) {
+                sb.append(strings.get(j));
+            } else {
+                sb.append(strings.get(j)).append("-;-");
+            }
+        }
+        preparedStatement.setString(i, sb.toString());
+    }
+
+    @Override
+    public List<String> getResult(ResultSet resultSet, String columnName) throws SQLException {
+        // 获取String类型的结果,使用"-;-"分割为List后返回
+        String resultString = resultSet.getString(columnName);
+        if (StringUtils.isNotEmpty(resultString)) {
+            return Arrays.asList(resultString.split("-;-"));
+        }
+        return null;
+    }
+
+    @Override
+    public List<String> getResult(ResultSet resultSet, int columnIndex) throws SQLException {
+        // 获取String类型的结果,使用"-;-"分割为List后返回
+        String resultString = resultSet.getString(columnIndex);
+        if (StringUtils.isNotEmpty(resultString)) {
+            return Arrays.asList(resultString.split("-;-"));
+        }
+        return null;
+    }
+
+    @Override
+    public List<String> getResult(CallableStatement callableStatement, int columnIndex) throws SQLException {
+        // 获取String类型的结果,使用"-;-"分割为List后返回
+        String resultString = callableStatement.getString(columnIndex);
+        if (StringUtils.isNotEmpty(resultString)) {
+            return Arrays.asList(resultString.split("-;-"));
+        }
+        return null;
+    }
+}

+ 60 - 0
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/utils/TrainingUtils.java

@@ -0,0 +1,60 @@
+package com.rongwei.trainingcommon.sys.utils;
+
+import com.rongwei.commonservice.serial.service.SysSerialNumberService;
+import com.rongwei.commonservice.service.RedisService;
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+
+/**
+ * TrainingUtils class
+ *
+ * @author XH
+ * @date 2023/12/12
+ */
+@Component
+public class TrainingUtils {
+
+    private static final Logger log = LoggerFactory.getLogger(TrainingUtils.class.getName());
+    @Autowired
+    private SysSerialNumberService autoSysSerialNumberService;
+
+    private static SysSerialNumberService sysSerialNumberService;
+
+    @Autowired
+    private RedisService autoRedisService;
+
+    private static RedisService redisService;
+
+    @PostConstruct
+    public void init() {
+        redisService = autoRedisService;
+        sysSerialNumberService = autoSysSerialNumberService;
+    }
+
+
+
+    public static SysUserVo getCurrentUser() {
+        // 获取当前登录人信息
+        SysUserVo currUser = null;
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        if (attributes != null) {
+            HttpServletRequest request = attributes.getRequest();
+            if (request != null) {
+                String token = request.getHeader("token");
+                if (com.rongwei.rwcommon.utils.StringUtils.isNotEmpty(token)) {
+                    currUser = redisService.getLoginUser(token);
+                }
+            }
+        }
+        return currUser;
+    }
+}

+ 30 - 0
rw-training/training-common/src/main/resources/mybatis/DemandSurveyContentDao.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.rongwei.trainingcommon.sys.dao.DemandSurveyContentDao">
+    <resultMap type="com.rongwei.training.vo.TrainingDemandVo" id="trainingDemandMap">
+        <result property="surverid" column="surverid"></result>
+        <result property="contentid" column="contentid"></result>
+        <result property="modelName" column="modelName" ></result>
+        <result property="num" column="num" ></result>
+        <result property="questionContent" column="questionContent" ></result>
+        <result property="questionType" column="questionType" ></result>
+        <result property="questionOptions" column="questionOptions" typeHandler="com.rongwei.trainingcommon.sys.utils.CustomerTypeHandler.ListStringToVarcharTypeHandlerUtil"></result>
+        <result property="userAnswer" column="userAnswer" ></result>
+    </resultMap>
+
+    <select id="getSurveyContent" resultMap="trainingDemandMap">
+        SELECT ifnull(dsc.TEMPNAME, 'customQuestion') AS modelName,
+               dsc.NUM                                AS num,
+               dsc.QUESTIONNAME                       AS questionContent,
+               dsc.QUESTIONTYPE                       AS questionType,
+               dsc.`OPTIONS`                          AS questionOptions,
+               dsua.ANSWER                            AS userAnswer,
+               dsc.ID                                 AS contentid,
+               dsc.SURVERID                           AS surverid
+        FROM `demand_survey_content` dsc
+                 LEFT JOIN demand_survey_user_answer dsua
+                           on dsc.ID = dsua.SURVERCONTENTID and dsc.SURVERID = dsua.SURVERID
+        where dsc.SURVERID = #{surverId}
+        order by NUM
+    </select>
+</mapper>

+ 66 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/DemandSurveyUserAnswerDo.java

@@ -0,0 +1,66 @@
+package com.rongwei.training.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * 用户问卷调查答案表
+ * @TableName demand_survey_user_answer
+ */
+@TableName(value ="demand_survey_user_answer")
+@Data
+public class DemandSurveyUserAnswerDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 顺序
+     */
+    private Integer num;
+
+    /**
+     * 填写内容
+     */
+    private String answer;
+
+    /**
+     * 问卷调查id
+     */
+    private String surverid;
+
+    /**
+     * 问卷调查内容id
+     */
+    private String survercontentid;
+
+    /**
+     * 问题类型
+     */
+    private String questiontype;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+    /**
+     * 问题选项
+     */
+    private String options;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 3 - 7
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandQuestionOptionDo.java

@@ -22,17 +22,12 @@ public class TrainingDemandQuestionOptionDo extends BaseDo implements Serializab
     /**
      * 问题名称
      */
-    private String name;
-
-    /**
-     * 问题类型
-     */
-    private String questiontype;
+    private String content;
 
     /**
      * 状态
      */
-    private String state;
+    private Integer num;
 
     /**
      * 租户ID
@@ -43,6 +38,7 @@ public class TrainingDemandQuestionOptionDo extends BaseDo implements Serializab
      * 扩展json格式配置
      */
     private String roption;
+    private String questionid;
 
 
     private static final long serialVersionUID = 1L;

+ 4 - 1
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandSurveyBackupsDo.java

@@ -78,7 +78,10 @@ public class TrainingDemandSurveyBackupsDo extends BaseDo implements Serializabl
      * 未参与用户名称
      */
     private String noparticipatingusername;
-
+    /**
+     *  原来的需求调查
+     */
+    private String oldSurveyId;
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 }

+ 18 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/vo/PreviewTrainDemandVo.java

@@ -0,0 +1,18 @@
+package com.rongwei.training.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * PreviewTrainDemandVo class
+ * 获取预览培训需求调查信息
+ * @author XH
+ * @date 2023/12/11
+ */
+@Data
+public class PreviewTrainDemandVo {
+    private String name;
+    private List<TrainingDemandVo> customerDataList;
+    private List<String> tempIdList;
+}

+ 49 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/vo/TrainingDemandVo.java

@@ -0,0 +1,49 @@
+package com.rongwei.training.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * TrainingDemandVo class
+ *
+ * @author XH
+ * @date 2023/12/11
+ */
+@Data
+public class TrainingDemandVo {
+    /**
+     * 培训需求ID
+     */
+    private String surverid;
+    /**
+     * 问题id
+     */
+    private String contentid;
+    /**
+     * 模块名称
+     */
+    private String modelName;
+    /**
+     * 编号
+     */
+    private int num;
+    /**
+     * 问题内容
+     */
+    private String questionContent;
+    /**
+     * 问题类型
+     */
+    private String questionType;
+    /**
+     * 问题选项
+     */
+    private List<String> questionOptions;
+    /**
+     * 用户答案
+     */
+    private String userAnswer = "";
+
+
+}

+ 47 - 4
rw-training/training-server/src/main/java/com/rongwei/training/controller/TrainingDemandController.java

@@ -1,15 +1,15 @@
 package com.rongwei.training.controller;
 
 import com.rongwei.rwcommon.base.R;
+import com.rongwei.training.vo.PreviewTrainDemandVo;
+import com.rongwei.training.vo.TrainingDemandVo;
 import com.rongwei.trainingcommon.sys.service.impl.TrainingDemandServiceImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -36,4 +36,47 @@ public class TrainingDemandController {
         log.info("开发发布需求调查问卷");
         return trainingDemandService.releaseTrainDemand(parameter);
     }
+
+    /**
+     * 培训需求预览
+     *
+     * @param previewTrainDemandVo
+     * @return
+     */
+    @PostMapping("/preview")
+    public R previewTrainDemand(@RequestBody PreviewTrainDemandVo previewTrainDemandVo) {
+        log.info("开发发布需求调查问卷");
+        return trainingDemandService.previewTrainDemand(previewTrainDemandVo);
+    }
+
+    /**
+     * 获取需要用户参加的问卷调查
+     *
+     * @return
+     */
+    @GetMapping("/list")
+    public R getInfoByUser(@RequestParam(name = "userId",required = false)String userId) {
+        log.info("开发发布需求调查问卷");
+        return trainingDemandService.getInfoByUser(userId);
+    }
+
+    /**
+     * 展示问卷调查
+     * @param surveyId 问卷调查ID
+     * @return
+     */
+    @GetMapping("/show")
+    public R showQuestionnaire(@RequestParam(name = "surveyId")String surveyId) {
+        log.info("开发发布需求调查问卷");
+        return trainingDemandService.showQuestionnaire(surveyId);
+    }
+
+    @PostMapping("/submit")
+    public R submit(@RequestBody List<TrainingDemandVo> trainingDemandVoList) {
+        log.info("开发发布需求调查问卷");
+        return trainingDemandService.submit(trainingDemandVoList);
+    }
+
+
+
 }