Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

zhoudazhuang 1 rok temu
rodzic
commit
dc3305a0ff
58 zmienionych plików z 2412 dodań i 2 usunięć
  1. 15 0
      bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java
  2. 8 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/dao/AspCheckItemsDao.java
  3. 16 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/dao/EquBomMapperDao.java
  4. 17 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/AspCheckItemsService.java
  5. 20 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquBomService.java
  6. 25 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/AspCheckItemsServiceImpl.java
  7. 94 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquBomServiceImpl.java
  8. 355 0
      cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/domain/AspCheckItems.java
  9. 171 0
      cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/domain/EquBomDo.java
  10. 17 0
      cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/dto/EquBomCopyDto.java
  11. 51 0
      cx-equipment/cx-equipment-server/src/main/java/com/rongwei/bsserver/sys/controller/EquBomController.java
  12. 15 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/DemandSurveyContentDao.java
  13. 15 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandQuestionBackupsDao.java
  14. 8 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandQuestionDao.java
  15. 15 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandQuestionOptionBackupsDao.java
  16. 7 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandQuestionOptionDao.java
  17. 15 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandSurveyBackupsDao.java
  18. 15 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandSurveyCustomDetailBackupsDao.java
  19. 7 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandSurveyCustomDetailDao.java
  20. 8 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandSurveyDao.java
  21. 7 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandSurveyTempDetailDao.java
  22. 15 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandTempBackupsDao.java
  23. 8 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandTempDao.java
  24. 7 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandTempDetailDao.java
  25. 8 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TrainingDemandTempQuestionOptionDao.java
  26. 3 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/dao/TraningCommonDao.java
  27. 11 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/DemandSurveyContentService.java
  28. 11 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/TrainingDemandQuestionBackupsService.java
  29. 11 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/TrainingDemandQuestionOptionBackupsService.java
  30. 16 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/TrainingDemandService.java
  31. 11 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/TrainingDemandSurveyBackupsService.java
  32. 11 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/TrainingDemandSurveyCustomDetailBackupsService.java
  33. 11 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/TrainingDemandTempBackupsService.java
  34. 20 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/DemandSurveyContentContentServiceImpl.java
  35. 20 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingDemandQuestionBackupsServiceImpl.java
  36. 20 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingDemandQuestionOptionBackupsServiceImpl.java
  37. 295 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingDemandServiceImpl.java
  38. 20 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingDemandSurveyBackupsServiceImpl.java
  39. 20 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingDemandSurveyCustomDetailBackupsServiceImpl.java
  40. 20 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingDemandTempBackupsServiceImpl.java
  41. 50 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/utils/TrainingUtils.java
  42. 18 0
      rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/utils/functionInterface/BeanCopyUtilCallBack.java
  43. 21 2
      rw-training/training-common/src/main/resources/mybatis/CommonDao.xml
  44. 82 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/DemandSurveyContentDo.java
  45. 59 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandQuestionBackupsDo.java
  46. 48 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandQuestionDo.java
  47. 51 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandQuestionOptionBackupsDo.java
  48. 49 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandQuestionOptionDo.java
  49. 84 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandSurveyBackupsDo.java
  50. 57 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandSurveyCustomDetailBackupsDo.java
  51. 51 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandSurveyCustomDetailDo.java
  52. 92 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandSurveyDo.java
  53. 52 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandSurveyTempDetailDo.java
  54. 58 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandTempBackupsDo.java
  55. 56 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandTempDetailDo.java
  56. 48 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandTempDo.java
  57. 58 0
      rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandTempQuestionOptionDo.java
  58. 39 0
      rw-training/training-server/src/main/java/com/rongwei/training/controller/TrainingDemandController.java

+ 15 - 0
bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java

@@ -19,4 +19,19 @@ public class SaveConstans {
 
     public static final String MINUS_ONE = "-1";
     public static final String AND = "and";
+
+    /**
+     * 问卷调查状态
+     */
+    public static class DemandState {
+        /**
+         * 已发布
+         */
+        public static final String RELEASE = "1";
+        /**
+         * 作废
+         */
+        public static final String CANCELLATION = "0";
+
+    }
 }

+ 8 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/dao/AspCheckItemsDao.java

@@ -0,0 +1,8 @@
+package com.rongwei.bscommon.sys.dao;
+
+
+import com.rongwei.bsentity.domain.AspCheckItems;
+import com.rongwei.rwcommon.base.BaseDao;
+
+public interface AspCheckItemsDao extends BaseDao<AspCheckItems> {
+}

+ 16 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/dao/EquBomMapperDao.java

@@ -0,0 +1,16 @@
+package com.rongwei.bscommon.sys.dao;
+
+import com.rongwei.bsentity.domain.EquBomDo;
+import com.rongwei.rwcommon.base.BaseDao;
+
+/**
+ * <p>
+ * 设备子系统——设备Bom Mapper 接口
+ * </p>
+ *
+ * @author sc
+ * @since 2023-11-24
+ */
+public interface EquBomMapperDao extends BaseDao<EquBomDo> {
+
+}

+ 17 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/AspCheckItemsService.java

@@ -0,0 +1,17 @@
+package com.rongwei.bscommon.sys.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwei.bsentity.domain.AspCheckItems;
+import com.rongwei.bsentity.dto.EquBomCopyDto;
+
+/**
+ * <p>
+ * 设备子系统——设备 服务类
+ * </p>
+ *
+ * @author sc
+ * @since 2023-11-24
+ */
+public interface AspCheckItemsService extends IService<AspCheckItems> {
+}

+ 20 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquBomService.java

@@ -0,0 +1,20 @@
+package com.rongwei.bscommon.sys.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwei.bsentity.domain.EquBomDo;
+import com.rongwei.bsentity.domain.EquOverhaulInventoryDo;
+import com.rongwei.bsentity.dto.EquBomCopyDto;
+
+/**
+ * <p>
+ * 设备子系统——设备Bom 服务类
+ * </p>
+ *
+ * @author sc
+ * @since 2023-11-24
+ */
+public interface EquBomService extends IService<EquBomDo> {
+
+    void copyChilds(EquBomCopyDto request);
+}

+ 25 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/AspCheckItemsServiceImpl.java

@@ -0,0 +1,25 @@
+package com.rongwei.bscommon.sys.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwei.bscommon.sys.dao.AspCheckItemsDao;
+import com.rongwei.bscommon.sys.service.AspCheckItemsService;
+import com.rongwei.bsentity.domain.AspCheckItems;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 设备子系统——设备 服务实现类
+ * </p>
+ *
+ * @author sc
+ * @since 2023-11-24
+ */
+@Service
+public class AspCheckItemsServiceImpl extends ServiceImpl<AspCheckItemsDao, AspCheckItems> implements AspCheckItemsService {
+
+    private static final Logger logger = LoggerFactory.getLogger(AspCheckItemsServiceImpl.class);
+
+
+}

+ 94 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquBomServiceImpl.java

@@ -0,0 +1,94 @@
+package com.rongwei.bscommon.sys.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwei.bscommon.sys.dao.EquBomMapperDao;
+import com.rongwei.bscommon.sys.dao.EquOverhaulInventoryMapperDao;
+import com.rongwei.bscommon.sys.service.AspCheckItemsService;
+import com.rongwei.bscommon.sys.service.EquBomService;
+import com.rongwei.bscommon.sys.service.EquOverhaulInventoryService;
+import com.rongwei.bsentity.domain.AspCheckItems;
+import com.rongwei.bsentity.domain.EquBomDo;
+import com.rongwei.bsentity.domain.EquOverhaulInventoryDo;
+import com.rongwei.bsentity.dto.EquBomCopyDto;
+import com.rongwei.rwcommon.base.exception.CustomException;
+import com.rongwei.rwcommon.utils.SecurityUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 设备子系统——设备Bom 服务实现类
+ * </p>
+ *
+ * @author sc
+ * @since 2023-11-24
+ */
+@Service
+public class EquBomServiceImpl extends ServiceImpl<EquBomMapperDao, EquBomDo> implements EquBomService {
+
+    private static final Logger logger = LoggerFactory.getLogger(EquBomServiceImpl.class);
+
+    @Autowired
+    private AspCheckItemsService aspCheckItemsService;
+
+
+    @Override
+    @Transactional
+    public void copyChilds(EquBomCopyDto request) {
+        if (ObjectUtil.isEmpty(request.getFromEquId())){
+            throw new CustomException("当前物料ID不可为空");
+        }
+        if (ObjectUtil.isEmpty(request.getToEquId())){
+            throw new CustomException("复制到物料ID不可为空");
+        }
+        //查询目标设备的设备信息
+        AspCheckItems toEqu = aspCheckItemsService.getById(request.getToEquId());
+
+        //迭代复制
+        copyChildsByParentId(request.getFromEquId(), request.getToEquId(), toEqu.getCheckitemareaid(), toEqu.getChargeorgcid());
+
+    }
+
+    private void copyChildsByParentId(String fromEquId, String toEquId, String checkItemAreaId, String chargeOrgcId) {
+        //根据父,查询子集(来源)
+        List<EquBomDo> equFromBomDos = this.baseMapper.selectList(new QueryWrapper<EquBomDo>().lambda().eq(EquBomDo::getPid, fromEquId));
+        //根据父,查询子集(目标)
+        List<EquBomDo> equToBomDos = this.baseMapper.selectList(new QueryWrapper<EquBomDo>().lambda().eq(EquBomDo::getPid, toEquId));
+        //获取目标的子集编号
+        List<String> toBomMaterialNumList = equToBomDos.stream().map(item -> {
+            return item.getMaterialNum();
+        }).collect(Collectors.toList());
+
+        //遍历子集
+        for (EquBomDo equBomDo : equFromBomDos) {
+            //判断子集的编号是否重复
+            //如果不重复,则复制
+            if (!toBomMaterialNumList.contains(equBomDo.getMaterialNum())){
+                EquBomDo newEquBomDo = BeanUtil.copyProperties(equBomDo, EquBomDo.class);
+                newEquBomDo.setPid(toEquId);
+                //防止主键冲突
+                newEquBomDo.setId(SecurityUtil.getUUID());
+//                newEquBomDo.setFullPid();
+                //增加设备的树字段
+                newEquBomDo.setCheckItemAreaId(checkItemAreaId);
+                newEquBomDo.setChargeOrgId(chargeOrgcId);
+                //复制
+                this.save(newEquBomDo);
+
+                //开始迭代
+                copyChildsByParentId(equBomDo.getId(), newEquBomDo.getId(), checkItemAreaId, chargeOrgcId);
+
+            }
+
+        }
+    }
+}

+ 355 - 0
cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/domain/AspCheckItems.java

@@ -0,0 +1,355 @@
+package com.rongwei.bsentity.domain;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * asp_check_items
+ * @author 
+ */
+@Data
+public class AspCheckItems implements Serializable {
+    /**
+     * 主键
+     */
+    private String id;
+
+    /**
+     * 检查项名称
+     */
+    private String checkitemname;
+
+    /**
+     * 检查项编号
+     */
+    private String checkitemcode;
+
+    /**
+     * 检查项类型
+     */
+    private String checkitemtype;
+
+    /**
+     * 检查项所属区域ID
+     */
+    private String checkitemareaid;
+
+    /**
+     * 年检日期
+     */
+    private Date yearlyinspectiondate;
+
+    /**
+     * 提前预警天数
+     */
+    private Integer earlywarndays;
+
+    /**
+     * 设备用途
+     */
+    private String equipmentusage;
+
+    /**
+     * 检查对象负责人IDS
+     */
+    private String chargeuserid;
+
+    /**
+     * 检查对象负责人名称
+     */
+    private String chargeusername;
+
+    /**
+     * 检查对象负责组织二级机构ID
+     */
+    private String chargeorgpid;
+
+    /**
+     * 检查对象负责组织二级机构名称
+     */
+    private String chargeorgpname;
+
+    /**
+     * 检查对象负责组织一级机构ID
+     */
+    private String chargeorgcid;
+
+    /**
+     * 检查对象负责组织一级机构名称
+     */
+    private String chargeorgcname;
+
+    /**
+     * 检查对象负责组织机构ID
+     */
+    private String chargeorgid;
+
+    /**
+     * 检查对象负责组织机构名称
+     */
+    private String chargeorgname;
+
+    /**
+     * 排序
+     */
+    private Integer sort;
+
+    /**
+     * 启用/禁用
+     */
+    private String enabled;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 是否删除Y/N
+     */
+    private String deleted;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 创建时间
+     */
+    private Date createdate;
+
+    /**
+     * 创建用户ID
+     */
+    private String createuserid;
+
+    /**
+     * 修改日期
+     */
+    private Date modifydate;
+
+    /**
+     * 修改用户ID
+     */
+    private String modifyuserid;
+
+    /**
+     * 创建人名称
+     */
+    private String createusername;
+
+    /**
+     * 修改人名称
+     */
+    private String modifyusername;
+
+    /**
+     * 是否备用
+     */
+    private String standby;
+
+    /**
+     * 规格型号
+     */
+    private String devicemodel;
+
+    /**
+     * 出厂编号
+     */
+    private String deviceoutcode;
+
+    /**
+     * 安装地点
+     */
+    private String deviceaddress;
+
+    /**
+     * 制造单位名称
+     */
+    private String devicenakedname;
+
+    /**
+     * 设备代码
+     */
+    private String devicecode;
+
+    /**
+     * 注册代码
+     */
+    private String signupcode;
+
+    /**
+     * 设备制造日期
+     */
+    private Date devicecreatedate;
+
+    /**
+     * 检验日期
+     */
+    private Date devicecheckdate;
+
+    /**
+     * 下次检验日期
+     */
+    private Date nextcheckdate;
+
+    /**
+     * 环保号
+     */
+    private String environmentalprotectionno;
+
+    /**
+     * 备案号
+     */
+    private String filingno;
+
+    /**
+     * 使用登记证编号
+     */
+    private String registrationno;
+
+    /**
+     * 设备状态
+     */
+    private String devicestatus;
+
+    /**
+     * 设备分类
+     */
+    private String devicesort;
+
+    /**
+     * 类别
+     */
+    private String category;
+
+    /**
+     * 年限
+     */
+    private Integer life;
+
+    /**
+     * 预计提醒日期
+     */
+    private Date warndate;
+
+    /**
+     * 公称直径(mm)
+     */
+    private String nominaldiameter;
+
+    /**
+     * 公称壁厚(mm)
+     */
+    private String nominalwallthickness;
+
+    /**
+     * 管道长度(m)
+     */
+    private String pipelinelength;
+
+    /**
+     * 管道总长度(m)
+     */
+    private String pipelinelengthsum;
+
+    /**
+     * 压力(Mpa)
+     */
+    private String pressure;
+
+    /**
+     * 温度(°C)
+     */
+    private String temperature;
+
+    /**
+     * 介质
+     */
+    private String medium;
+
+    /**
+     * 备注
+     */
+    private String deviceremark;
+
+    /**
+     * 设备图
+     */
+    private String devicephoto;
+
+    /**
+     * 设备其他资料
+     */
+    private String deviceotherinformation;
+
+    /**
+     * 设备安装日期
+     */
+    private Date deviceinstalldate;
+
+    /**
+     * 设备开始使用日期
+     */
+    private Date devicestartdate;
+
+    /**
+     * 检验结论
+     */
+    private String inspectresult;
+
+    /**
+     * 检验机构名称
+     */
+    private String inspectby;
+
+    /**
+     * 数据来源(0-普通设备 1-特种设备)
+     */
+    private String source;
+
+    /**
+     * 移交设备ID
+     */
+    private String transferid;
+
+    /**
+     * 使用部门车间id
+     */
+    private String usedeptid;
+
+    /**
+     * 使用部门车间名称
+     */
+    private String usedeptname;
+
+    /**
+     * 所属部分
+     */
+    private String belongpart;
+
+    /**
+     * 设备原价值(万元)
+     */
+    private BigDecimal rawvalue;
+
+    /**
+     * 设备性能
+     */
+    private String property;
+
+    /**
+     * 所属工厂
+     */
+    private String ownedfactory;
+
+    private static final long serialVersionUID = 1L;
+}

+ 171 - 0
cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/domain/EquBomDo.java

@@ -0,0 +1,171 @@
+package com.rongwei.bsentity.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 设备子系统——设备BOM
+ * </p>
+ *
+ * @author sc
+ * @since 2023-11-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("equ_bom")
+public class EquBomDo extends BaseDo implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId("ID")
+    private String id;
+
+    /**
+     * 租户ID
+     */
+    @TableField("TENANTID")
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    @TableField("ROPTION")
+    private String roption;
+
+    /**
+     * 父级ID
+     */
+    @TableField("PID")
+    private String pid;
+
+    /**
+     * 父级全路径
+     */
+    @TableField("FULLPID")
+    private String fullPid;
+
+    /**
+     * 数表结构编号
+     */
+    @TableField("TREECODE")
+    private String treeCode;
+
+    /**
+     * 等级
+     */
+    @TableField("LEVEL")
+    private Integer level;
+
+    /**
+     * 排序
+     */
+    @TableField("SORT")
+    private Integer sort;
+
+    /**
+     * 是否叶子节点
+     */
+    @TableField("ISLEAF")
+    private String isLeaf;
+
+    /**
+     * 检查项所属区域ID
+     */
+    @TableField("CHECKITEMAREAID")
+    private String checkItemAreaId;
+
+    /**
+     * 检查对象负责组织机构ID
+     */
+    @TableField("CHARGEORGID")
+    private String chargeOrgId;
+
+    /**
+     * 检查对象负责组织机构名称
+     */
+    @TableField("CHARGEORGNAME")
+    private String chargeOrgName;
+
+    /**
+     * 物料名称
+     */
+    @TableField("MATERIALNAME")
+    private String materialName;
+
+    /**
+     * 物料编号
+     */
+    @TableField("MATERIALNUM")
+    private String materialNum;
+
+    /**
+     * 规格型号
+     */
+    @TableField("SPEC")
+    private String spec;
+
+    /**
+     * 类别编号
+     */
+    @TableField("TYPENUM")
+    private String typeNum;
+
+    /**
+     * 类别名称
+     */
+    @TableField("TYPENAME")
+    private String typeName;
+
+    /**
+     * 分类
+     */
+    @TableField("CATEGORY")
+    private String category;
+
+    /**
+     * 单位
+     */
+    @TableField("UNIT")
+    private String unit;
+
+    /**
+     * 更换周期
+     */
+    @TableField("CHANGECYCLE")
+    private String changeCycle;
+
+    /**
+     * 需求数量
+     */
+    @TableField("NEEDNUM")
+    private String needNum;
+
+    /**
+     * 标记
+     */
+    @TableField("FLAG")
+    private String flag;
+
+    /**
+     * 设备ID
+     */
+    @TableField("EQUID")
+    private String equId;
+
+
+
+}

+ 17 - 0
cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/dto/EquBomCopyDto.java

@@ -0,0 +1,17 @@
+package com.rongwei.bsentity.dto;
+
+import lombok.Data;
+
+/**
+ * @author :sc
+ * @since :2023/11/24
+ */
+@Data
+public class EquBomCopyDto {
+    //被复制设备ID
+    private String fromEquId;
+
+    //被粘贴设备ID
+    private String toEquId;
+
+}

+ 51 - 0
cx-equipment/cx-equipment-server/src/main/java/com/rongwei/bsserver/sys/controller/EquBomController.java

@@ -0,0 +1,51 @@
+package com.rongwei.bsserver.sys.controller;
+
+
+import com.rongwei.bscommon.sys.service.EquBomService;
+import com.rongwei.bscommon.sys.utils.ExceptionUtils;
+import com.rongwei.bsentity.dto.EquBomCopyDto;
+import com.rongwei.rwcommon.base.R;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+
+/**
+ * <p>
+ * 设备子系统——设备bom 前端控制器
+ * </p>
+ *
+ * @author sc
+ * @since 2023-11-24
+ */
+@Controller
+@RequestMapping("/equBom")
+public class EquBomController {
+
+    private static final Logger logger = LoggerFactory.getLogger(EquBomController.class);
+
+    @Autowired
+    private EquBomService equBomService;
+
+
+    /**
+     * 复制设备BOM子项
+     * @param request
+     * @return
+     */
+    @RequestMapping("/copyChilds")
+    public R copyChilds(@RequestBody EquBomCopyDto request){
+        try {
+            logger.info("复制设备BOM子项");
+            equBomService.copyChilds(request);
+        } catch (Exception e) {
+            ExceptionUtils.printExceptionDetail(e,"复制设备BOM子项异常:");
+        }
+        return R.ok("复制设备BOM子项成功");
+    }
+
+}
+

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

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

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

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

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

@@ -0,0 +1,8 @@
+package com.rongwei.trainingcommon.sys.dao;
+
+
+import com.rongwei.rwcommon.base.BaseDao;
+import com.rongwei.training.domain.TrainingDemandQuestionDo;
+
+public interface TrainingDemandQuestionDao extends BaseDao<TrainingDemandQuestionDo> {
+}

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

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

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

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

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

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

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

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

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

@@ -0,0 +1,7 @@
+package com.rongwei.trainingcommon.sys.dao;
+
+import com.rongwei.rwcommon.base.BaseDao;
+import com.rongwei.training.domain.TrainingDemandSurveyCustomDetailDo;
+
+public interface TrainingDemandSurveyCustomDetailDao extends BaseDao<TrainingDemandSurveyCustomDetailDo> {
+}

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

@@ -0,0 +1,8 @@
+package com.rongwei.trainingcommon.sys.dao;
+
+import com.rongwei.rwcommon.base.BaseDao;
+import com.rongwei.training.domain.TrainingDemandSurveyDo;
+
+public interface TrainingDemandSurveyDao extends BaseDao<TrainingDemandSurveyDo> {
+
+}

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

@@ -0,0 +1,7 @@
+package com.rongwei.trainingcommon.sys.dao;
+
+import com.rongwei.rwcommon.base.BaseDao;
+import com.rongwei.training.domain.TrainingDemandSurveyTempDetailDo;
+
+public interface TrainingDemandSurveyTempDetailDao extends BaseDao<TrainingDemandSurveyTempDetailDo> {
+}

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

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

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

@@ -0,0 +1,8 @@
+package com.rongwei.trainingcommon.sys.dao;
+
+import com.rongwei.rwcommon.base.BaseDao;
+import com.rongwei.training.domain.TrainingDemandTempDo;
+
+
+public interface TrainingDemandTempDao extends BaseDao<TrainingDemandTempDo> {
+}

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

@@ -0,0 +1,7 @@
+package com.rongwei.trainingcommon.sys.dao;
+
+import com.rongwei.rwcommon.base.BaseDao;
+import com.rongwei.training.domain.TrainingDemandTempDetailDo;
+
+public interface TrainingDemandTempDetailDao extends BaseDao<TrainingDemandTempDetailDo> {
+}

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

@@ -0,0 +1,8 @@
+package com.rongwei.trainingcommon.sys.dao;
+
+import com.rongwei.rwcommon.base.BaseDao;
+import com.rongwei.training.domain.TrainingDemandTempQuestionOptionDo;
+
+public interface TrainingDemandTempQuestionOptionDao extends BaseDao<TrainingDemandTempQuestionOptionDo> {
+
+}

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

@@ -6,6 +6,7 @@ import org.apache.ibatis.annotations.Select;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * CommonDao class
@@ -18,4 +19,6 @@ public interface TraningCommonDao {
     List<Map<String, Object>> getSubjectByCourseId(@Param("configCode") String configCode);
 
     List<WordEmpInfoVo> getEmpInfo(@Param("empIds") List<String> empId);
+
+    Set<String> getAllUserIdAndNameByOrgId(@Param("orgIds") List<String> orgIds);
 }

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

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

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

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

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

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

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

@@ -0,0 +1,16 @@
+package com.rongwei.trainingcommon.sys.service;
+
+import com.rongwei.rwcommon.base.R;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.Map;
+
+/**
+ * TrainingDemandService class
+ *
+ * @author XH
+ * @date 2023/11/24
+ */
+public interface TrainingDemandService {
+    R releaseTrainDemand(@RequestBody Map<String,Object> parameter);
+}

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

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

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

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

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

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

+ 20 - 0
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/DemandSurveyContentContentServiceImpl.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.DemandSurveyContentDo;
+import com.rongwei.trainingcommon.sys.dao.DemandSurveyContentDao;
+import com.rongwei.trainingcommon.sys.service.DemandSurveyContentService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ */
+@Service
+public class DemandSurveyContentContentServiceImpl extends ServiceImpl<DemandSurveyContentDao, DemandSurveyContentDo>
+        implements DemandSurveyContentService {
+
+}
+
+
+
+

+ 20 - 0
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingDemandQuestionBackupsServiceImpl.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.TrainingDemandQuestionBackupsDo;
+import com.rongwei.trainingcommon.sys.dao.TrainingDemandQuestionBackupsDao;
+import com.rongwei.trainingcommon.sys.service.TrainingDemandQuestionBackupsService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ */
+@Service
+public class TrainingDemandQuestionBackupsServiceImpl extends ServiceImpl<TrainingDemandQuestionBackupsDao, TrainingDemandQuestionBackupsDo>
+        implements TrainingDemandQuestionBackupsService {
+
+}
+
+
+
+

+ 20 - 0
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingDemandQuestionOptionBackupsServiceImpl.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.TrainingDemandQuestionOptionBackupsDo;
+import com.rongwei.trainingcommon.sys.dao.TrainingDemandQuestionOptionBackupsDao;
+import com.rongwei.trainingcommon.sys.service.TrainingDemandQuestionOptionBackupsService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ */
+@Service
+public class TrainingDemandQuestionOptionBackupsServiceImpl extends ServiceImpl<TrainingDemandQuestionOptionBackupsDao, TrainingDemandQuestionOptionBackupsDo>
+        implements TrainingDemandQuestionOptionBackupsService {
+
+}
+
+
+
+

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

@@ -0,0 +1,295 @@
+package com.rongwei.trainingcommon.sys.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.trainingcommon.sys.dao.*;
+import com.rongwei.trainingcommon.sys.service.TrainingDemandService;
+import com.rongwei.trainingcommon.sys.utils.TrainingUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.rongwei.safecommon.utils.SaveConstans.DemandState.RELEASE;
+
+/**
+ * TrainingDemandService class
+ *
+ * @author XH
+ * @date 2023/11/24
+ */
+@Service
+public class TrainingDemandServiceImpl implements TrainingDemandService {
+    private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
+
+    @Autowired
+    private TrainingDemandQuestionDao trainingDemandQuestionDao;
+    @Autowired
+    private TrainingDemandQuestionOptionDao trainingDemandQuestionOptionDao;
+    @Autowired
+    private TrainingDemandSurveyCustomDetailDao trainingDemandSurveyCustomDetailDao;
+    @Autowired
+    private TrainingDemandSurveyDao trainingDemandSurveyDao;
+    @Autowired
+    private TrainingDemandTempDao trainingDemandTempDao;
+    @Autowired
+    private TrainingDemandTempDetailDao trainingDemandTempDetailDao;
+    @Autowired
+    private TrainingDemandTempQuestionOptionDao trainingDemandTempQuestionOptionDao;
+    @Autowired
+    private TrainingDemandSurveyTempDetailDao trainingDemandSurveyTempDetailDao;
+    @Autowired
+    private TrainingDemandQuestionBackupsServiceImpl trainingDemandQuestionBackupsServiceImpl;
+    @Autowired
+    private TrainingDemandQuestionOptionBackupsServiceImpl trainingDemandQuestionOptionBackupsServiceImpl;
+    @Autowired
+    private TrainingDemandSurveyBackupsServiceImpl trainingDemandSurveyBackupsServiceImpl;
+    @Autowired
+    private TrainingDemandSurveyCustomDetailBackupsServiceImpl trainingDemandSurveyCustomDetailBackupsServiceImpl;
+    @Autowired
+    private TrainingDemandTempBackupsServiceImpl trainingDemandTempBackupsServiceImpl;
+    @Autowired
+    private DemandSurveyContentContentServiceImpl demandSurveyContentServiceImpl;
+
+    @Autowired
+    private TraningCommonDao traningCommonDao;
+
+    public static final String ERROR_MSG = "问卷调查发布失败";
+    /**
+     * 全员参与问卷调查
+     */
+    public static final String FULL_PARTICIPATION = "y";
+
+    @Override
+    public R releaseTrainDemand(Map<String, Object> parameter) {
+        String id = parameter.getOrDefault("id", "").toString();
+        TrainingDemandSurveyDo trainingDemandSurveyDo = trainingDemandSurveyDao.selectById(id);
+        if (trainingDemandSurveyDo == null) {
+            log.error("无法通过id:{},获取到培训需求调查信息", trainingDemandSurveyDo);
+            return R.error(ERROR_MSG);
+        }
+        if (RELEASE.equals(trainingDemandSurveyDo.getState())) {
+            log.error("调查问卷 :{}已发布无法再次发布", trainingDemandSurveyDo.getName());
+            return R.error("调查问卷已发布");
+        }
+        List<DemandSurveyContentDo> saveDemandSurveyContentDos = new ArrayList<>();
+        /******************************获取参与此次问卷的用户信息*********************************************/
+        Set<String> participantUserId = getParticipantUser(trainingDemandSurveyDo);
+        log.info("参与本次温泉调查的员工数为:{}", participantUserId.size());
+        if (participantUserId.size() == 0) {
+            log.error("本次问卷调查参与人数为0");
+            return R.error(ERROR_MSG);
+        }
+        /******************************开始复制业务数据*********************************************/
+        // 调查问卷自定义信息
+        List<TrainingDemandSurveyCustomDetailDo> surveyCustomDetailDos = trainingDemandSurveyCustomDetailDao.selectList(new LambdaQueryWrapper<TrainingDemandSurveyCustomDetailDo>()
+                .eq(TrainingDemandSurveyCustomDetailDo::getSurverid, id).orderByAsc(TrainingDemandSurveyCustomDetailDo::getNum));
+        // 调查问卷模板信息
+        List<TrainingDemandSurveyTempDetailDo> surveyTempDetailDos = trainingDemandSurveyTempDetailDao.selectList(new LambdaQueryWrapper<TrainingDemandSurveyTempDetailDo>()
+                .eq(TrainingDemandSurveyTempDetailDo::getSurverid, id).orderByAsc(TrainingDemandSurveyTempDetailDo::getNum));
+        // 模板信息
+        List<TrainingDemandTempDo> trainingDemandTempDos = trainingDemandTempDao.selectList(new LambdaQueryWrapper<TrainingDemandTempDo>()
+                .in(TrainingDemandTempDo::getId, surveyTempDetailDos.stream().map(TrainingDemandSurveyTempDetailDo::getTempid).collect(Collectors.toList())));
+        // 模板子表
+        List<TrainingDemandTempDetailDo> trainingDemandTempDetailDos = trainingDemandTempDetailDao.selectList(new LambdaQueryWrapper<TrainingDemandTempDetailDo>()
+                .in(TrainingDemandTempDetailDo::getDemandtempid, trainingDemandTempDos.stream().map(TrainingDemandTempDo::getId).collect(Collectors.toList())));
+        // 模板问题选项记录表
+        List<TrainingDemandTempQuestionOptionDo> trainingDemandTempQuestionOptionDos = trainingDemandTempQuestionOptionDao.selectList(new LambdaQueryWrapper<TrainingDemandTempQuestionOptionDo>()
+                .in(TrainingDemandTempQuestionOptionDo::getDemandtempdetailid, trainingDemandTempDetailDos.stream().map(TrainingDemandTempDetailDo::getId).collect(Collectors.toList())));
+
+        String userIds = participantUserId.stream().map(info -> info.split("-;-")[0]).collect(Collectors.joining(","));
+        String userNames = participantUserId.stream().map(info -> info.split("-;-")[1]).collect(Collectors.joining(","));
+        /************调查主表备份*************/
+        TrainingDemandSurveyBackupsDo saveDemandSurveyBackupsDo = generateSurveyBackups(trainingDemandSurveyDo, userIds, userNames);
+        /************自定义内容备份*************/
+        List<TrainingDemandSurveyCustomDetailBackupsDo> saveDemandSurveyCustomDetailBackupsDos = TrainingUtils.copyListProperties(surveyCustomDetailDos, TrainingDemandSurveyCustomDetailBackupsDo::new);
+        saveDemandSurveyCustomDetailBackupsDos.forEach(info -> info.setSurverid(saveDemandSurveyBackupsDo.getId()));
+        /************其他数据备份*************/
+        // 保存问题数据备份
+        List<TrainingDemandQuestionBackupsDo> saveDemandQuestionBackupsDos = new ArrayList<>();
+        // 保存问题选项数据备份
+        List<TrainingDemandQuestionOptionBackupsDo> saveDemandQuestionOptionBackupsDos = new ArrayList<>();
+        // 保存模板数据备份
+        List<TrainingDemandTempBackupsDo> saveDemandTempBackupsDo = new ArrayList<>();
+        int num = 1;
+        int questionNum= 1;
+        DemandSurveyContentDo addDemandSurveyDo;
+        for (int i = 0; i < surveyTempDetailDos.size(); i++) {
+            /************ 问卷调查模板内容备份*************/
+            TrainingDemandSurveyTempDetailDo surveyTempDetail = surveyTempDetailDos.get(i);
+            /******************模板备份************************/
+            TrainingDemandTempDo trainingDemandTempDo = trainingDemandTempDos.stream()
+                    .filter(info -> info.getId().equals(surveyTempDetail.getTempid()))
+                    .findFirst()
+                    .orElse(null);
+            TrainingDemandTempBackupsDo trainingDemandTempBackupsDo = new TrainingDemandTempBackupsDo();
+            trainingDemandTempBackupsDo.setId(SecurityUtil.getUUID());
+            trainingDemandTempBackupsDo.setSurverid(saveDemandSurveyBackupsDo.getId());
+            trainingDemandTempBackupsDo.setName(surveyTempDetail.getTempname());
+            trainingDemandTempBackupsDo.setYear(trainingDemandTempDo.getYear());
+            trainingDemandTempBackupsDo.setNum(i);
+            saveDemandTempBackupsDo.add(trainingDemandTempBackupsDo);
+            /************ 循环问题明细*************/
+            List<TrainingDemandTempDetailDo> demandTempDetail = trainingDemandTempDetailDos.stream()
+                    .filter(info -> trainingDemandTempDo.getId().equals(info.getDemandtempid()))
+                    .collect(Collectors.toList());
+            for (int j = 0; j < demandTempDetail.size(); j++) {
+                TrainingDemandTempDetailDo trainingDemandTempDetailDo = demandTempDetail.get(j);
+                /******************问题备份************************/
+                TrainingDemandQuestionBackupsDo questionBackupsDo = new TrainingDemandQuestionBackupsDo();
+                questionBackupsDo.setId(SecurityUtil.getUUID());
+                questionBackupsDo.setName(trainingDemandTempDetailDo.getContent());
+                questionBackupsDo.setQuestiontype(trainingDemandTempDetailDo.getQuestiontype());
+                questionBackupsDo.setSurveyid(surveyTempDetail.getId());
+                questionBackupsDo.setTempid(trainingDemandTempBackupsDo.getId());
+                questionBackupsDo.setNum(questionNum);
+                questionNum++;
+                saveDemandQuestionBackupsDos.add(questionBackupsDo);
+                /************ 问题答案备份 *************/
+                List<TrainingDemandTempQuestionOptionDo> questionOptions = trainingDemandTempQuestionOptionDos.stream()
+                        .filter(info -> trainingDemandTempDetailDo.getQuestionid().equals(info.getQuestionid()) &&
+                                trainingDemandTempDetailDo.getId().equals(info.getDemandtempdetailid())
+                        ).collect(Collectors.toList());
+                List<TrainingDemandQuestionOptionBackupsDo> addOptions = TrainingUtils.copyListProperties(questionOptions, TrainingDemandQuestionOptionBackupsDo::new);
+                addOptions.forEach(info -> {
+                    info.setQuestionid(questionBackupsDo.getId());
+                });
+                saveDemandQuestionOptionBackupsDos.addAll(addOptions);
+                // 生成用户问卷
+                saveDemandSurveyContentDos.add(generateUserDemandSurvey(num, questionBackupsDo, trainingDemandTempBackupsDo,
+                        saveDemandSurveyBackupsDo, addOptions));
+                num++;
+            }
+        }
+        for (int k = 0; k < saveDemandSurveyCustomDetailBackupsDos.size(); k++) {
+            addDemandSurveyDo = new DemandSurveyContentDo();
+            addDemandSurveyDo.setId(SecurityUtil.getUUID());
+            addDemandSurveyDo.setNum(num);
+            addDemandSurveyDo.setSurverid(saveDemandSurveyBackupsDo.getId());
+            addDemandSurveyDo.setSurvername(saveDemandSurveyBackupsDo.getName());
+            addDemandSurveyDo.setQuestionid(saveDemandSurveyCustomDetailBackupsDos.get(k).getId());
+            addDemandSurveyDo.setQuestionname(saveDemandSurveyCustomDetailBackupsDos.get(k).getContent());
+            addDemandSurveyDo.setQuestiontype(saveDemandSurveyCustomDetailBackupsDos.get(k).getQuestiontype());
+            saveDemandSurveyContentDos.add(addDemandSurveyDo);
+            num++;
+        }
+        // 数据存表
+        saveData(saveDemandSurveyBackupsDo, saveDemandSurveyCustomDetailBackupsDos,
+                saveDemandQuestionBackupsDos, saveDemandQuestionOptionBackupsDos,
+                saveDemandSurveyContentDos, saveDemandTempBackupsDo, trainingDemandSurveyDo);
+        return R.ok();
+    }
+
+    /**
+     * 数据保存
+     *
+     * @param saveDemandSurveyBackupsDo              问卷调查
+     * @param saveDemandSurveyCustomDetailBackupsDos 培训内容自定义调查表
+     * @param saveDemandQuestionBackupsDos
+     * @param saveDemandQuestionOptionBackupsDos
+     * @param saveDemandSurveyContentDos
+     * @param saveDemandTempBackupsDo
+     */
+    @Transactional
+    public void saveData(TrainingDemandSurveyBackupsDo saveDemandSurveyBackupsDo,
+                         List<TrainingDemandSurveyCustomDetailBackupsDo> saveDemandSurveyCustomDetailBackupsDos,
+                         List<TrainingDemandQuestionBackupsDo> saveDemandQuestionBackupsDos,
+                         List<TrainingDemandQuestionOptionBackupsDo> saveDemandQuestionOptionBackupsDos,
+                         List<DemandSurveyContentDo> saveDemandSurveyContentDos,
+                         List<TrainingDemandTempBackupsDo> saveDemandTempBackupsDo,
+                         TrainingDemandSurveyDo trainingDemandSurveyDo) {
+        trainingDemandQuestionBackupsServiceImpl.saveOrUpdateBatch(saveDemandQuestionBackupsDos);
+        trainingDemandQuestionOptionBackupsServiceImpl.saveOrUpdateBatch(saveDemandQuestionOptionBackupsDos);
+        trainingDemandSurveyBackupsServiceImpl.saveOrUpdate(saveDemandSurveyBackupsDo);
+        trainingDemandSurveyCustomDetailBackupsServiceImpl.saveOrUpdateBatch(saveDemandSurveyCustomDetailBackupsDos);
+        trainingDemandTempBackupsServiceImpl.saveOrUpdateBatch(saveDemandTempBackupsDo);
+        demandSurveyContentServiceImpl.saveOrUpdateBatch(saveDemandSurveyContentDos);
+        trainingDemandSurveyDo.setState(RELEASE);
+        trainingDemandSurveyDo.setReleasetime(new Date());
+        trainingDemandSurveyDao.updateById(trainingDemandSurveyDo);
+    }
+
+    /**
+     * 生成用户调查问卷
+     *
+     * @return
+     */
+    private DemandSurveyContentDo generateUserDemandSurvey(int num,
+                                                           TrainingDemandQuestionBackupsDo questionBackupsDo,
+                                                           TrainingDemandTempBackupsDo trainingDemandTempBackupsDo,
+                                                           TrainingDemandSurveyBackupsDo trainingDemandSurveyBackupsDo,
+                                                           List<TrainingDemandQuestionOptionBackupsDo> addOptions) {
+        DemandSurveyContentDo demandSurveyDo = new DemandSurveyContentDo();
+        demandSurveyDo.setId(SecurityUtil.getUUID());
+        demandSurveyDo.setNum(num);
+        demandSurveyDo.setSurverid(trainingDemandSurveyBackupsDo.getId());
+        demandSurveyDo.setSurvername(trainingDemandSurveyBackupsDo.getName());
+        demandSurveyDo.setTempid(trainingDemandTempBackupsDo.getId());
+        demandSurveyDo.setTempname(trainingDemandTempBackupsDo.getName());
+        demandSurveyDo.setQuestionid(questionBackupsDo.getId());
+        demandSurveyDo.setQuestionname(questionBackupsDo.getName());
+        demandSurveyDo.setQuestiontype(questionBackupsDo.getQuestiontype());
+        demandSurveyDo.setOptions(addOptions.stream().map(TrainingDemandQuestionOptionBackupsDo::getContent).collect(Collectors.joining(",")));
+        return demandSurveyDo;
+    }
+
+    /**
+     * 调查主表备份
+     *
+     * @param trainingDemandSurveyDo
+     * @param userIds
+     * @param userNames
+     * @return
+     */
+    private TrainingDemandSurveyBackupsDo generateSurveyBackups(TrainingDemandSurveyDo trainingDemandSurveyDo, String userIds, String userNames) {
+        TrainingDemandSurveyBackupsDo trainingDemandSurveyBackupsDo = new TrainingDemandSurveyBackupsDo();
+        BeanUtils.copyProperties(trainingDemandSurveyDo, trainingDemandSurveyBackupsDo);
+        trainingDemandSurveyBackupsDo.setId(SecurityUtil.getUUID());
+        trainingDemandSurveyBackupsDo.setParticipateuserid(userIds);
+        trainingDemandSurveyBackupsDo.setParticipateusername(userNames);
+        trainingDemandSurveyBackupsDo.setNoparticipatinguserid(userIds);
+        trainingDemandSurveyBackupsDo.setNoparticipatingusername(userNames);
+        return trainingDemandSurveyBackupsDo;
+    }
+
+    /**
+     * 获取参与培训的员工
+     *
+     * @param trainingDemandSurveyDo
+     * @return
+     */
+    private Set<String> getParticipantUser(TrainingDemandSurveyDo trainingDemandSurveyDo) {
+
+        if (FULL_PARTICIPATION.equals(trainingDemandSurveyDo.getFullparticipation())) {
+            log.debug("全员参与培训");
+            String factoryId = trainingDemandSurveyDo.getTenantid();
+            return traningCommonDao.getAllUserIdAndNameByOrgId(Arrays.asList(factoryId));
+        }
+        // 参与培训的员工信息
+        Set<String> participantUserIdList = new HashSet<>();
+        // 参与培训的部门
+        String participatedeptid = trainingDemandSurveyDo.getParticipatedeptid();
+        if (StringUtils.isNotBlank(participatedeptid)) {
+            participantUserIdList = traningCommonDao.getAllUserIdAndNameByOrgId(Arrays.asList(participatedeptid.split(",")));
+        }
+        // 参与培训的员工
+        String participateuserid = trainingDemandSurveyDo.getParticipateuserid();
+        if (StringUtils.isNotBlank(participatedeptid)) {
+            participantUserIdList.addAll(Arrays.asList(participateuserid.split(",")));
+        }
+        // 排除的员工
+        String excludeuserid = trainingDemandSurveyDo.getExcludeuserid();
+        if (StringUtils.isNotBlank(excludeuserid)) {
+            participantUserIdList.removeAll(Arrays.asList(excludeuserid.split(",")));
+        }
+        return participantUserIdList;
+    }
+}

+ 20 - 0
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingDemandSurveyBackupsServiceImpl.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.TrainingDemandSurveyBackupsDo;
+import com.rongwei.trainingcommon.sys.dao.TrainingDemandSurveyBackupsDao;
+import com.rongwei.trainingcommon.sys.service.TrainingDemandSurveyBackupsService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ */
+@Service
+public class TrainingDemandSurveyBackupsServiceImpl extends ServiceImpl<TrainingDemandSurveyBackupsDao, TrainingDemandSurveyBackupsDo>
+implements TrainingDemandSurveyBackupsService {
+
+}
+
+
+
+

+ 20 - 0
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingDemandSurveyCustomDetailBackupsServiceImpl.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.TrainingDemandSurveyCustomDetailBackupsDo;
+import com.rongwei.trainingcommon.sys.dao.TrainingDemandSurveyCustomDetailBackupsDao;
+import com.rongwei.trainingcommon.sys.service.TrainingDemandSurveyCustomDetailBackupsService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ */
+@Service
+public class TrainingDemandSurveyCustomDetailBackupsServiceImpl extends ServiceImpl<TrainingDemandSurveyCustomDetailBackupsDao, TrainingDemandSurveyCustomDetailBackupsDo>
+implements TrainingDemandSurveyCustomDetailBackupsService {
+
+}
+
+
+
+

+ 20 - 0
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingDemandTempBackupsServiceImpl.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.TrainingDemandTempBackupsDo;
+import com.rongwei.trainingcommon.sys.dao.TrainingDemandTempBackupsDao;
+import com.rongwei.trainingcommon.sys.service.TrainingDemandTempBackupsService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ */
+@Service
+public class TrainingDemandTempBackupsServiceImpl extends ServiceImpl<TrainingDemandTempBackupsDao, TrainingDemandTempBackupsDo>
+implements TrainingDemandTempBackupsService {
+
+}
+
+
+
+

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

@@ -0,0 +1,50 @@
+package com.rongwei.trainingcommon.sys.utils;
+
+import com.rongwei.trainingcommon.sys.utils.functionInterface.BeanCopyUtilCallBack;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Supplier;
+
+/**
+ * TrainingUtils class
+ *
+ * @author XH
+ * @date 2023/11/24
+ */
+@Component
+public class TrainingUtils  extends BeanUtils {
+    /**
+     * 集合数据的拷贝
+     * @param sources: 数据源类
+     * @param target: 目标类::new(eg: UserVO::new)
+     * @return
+     */
+    public static <S, T> List<T> copyListProperties(List<S> sources, Supplier<T> target) {
+        return copyListProperties(sources, target, null);
+    }
+
+
+    /**
+     * 带回调函数的集合数据的拷贝(可自定义字段拷贝规则)
+     * @param sources: 数据源类
+     * @param target: 目标类::new(eg: UserVO::new)
+     * @param callBack: 回调函数
+     * @return
+     */
+    public static <S, T> List<T> copyListProperties(List<S> sources, Supplier<T> target, BeanCopyUtilCallBack<S, T> callBack) {
+        List<T> list = new ArrayList<>(sources.size());
+        for (S source : sources) {
+            T t = target.get();
+            copyProperties(source, t);
+            list.add(t);
+            if (callBack != null) {
+                // 回调
+                callBack.callBack(source, t);
+            }
+        }
+        return list;
+    }
+}

+ 18 - 0
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/utils/functionInterface/BeanCopyUtilCallBack.java

@@ -0,0 +1,18 @@
+package com.rongwei.trainingcommon.sys.utils.functionInterface;
+
+/**
+ * BeanCopyUtilCallBack class
+ *
+ * @author XH
+ * @date 2023/11/24
+ */
+@FunctionalInterface
+public interface  BeanCopyUtilCallBack <S, T> {
+
+    /**
+     * 定义默认回调方法
+     * @param t
+     * @param s
+     */
+    void callBack(S t, T s);
+}

+ 21 - 2
rw-training/training-common/src/main/resources/mybatis/CommonDao.xml

@@ -1,6 +1,6 @@
 <?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.CommonDao">
+<mapper namespace="com.rongwei.trainingcommon.sys.dao.TraningCommonDao">
     <select id="getEmpInfo" resultType="com.rongwei.training.vo.WordEmpInfoVo">
         SELECT
         t.id AS empId,
@@ -30,4 +30,23 @@
         </where>
         GROUP BY t.id
     </select>
-</mapper>
+
+    <select id="getAllUserIdAndNameByOrgId" resultType="String">
+        with orgid as (select DISTINCT ID from sys_organization
+        <where>
+            DELETED='0'
+            AND
+            <foreach collection="orgIds" open="(" close=")" separator="or" item="orgId">
+                FIND_IN_SET(#{orgId},FULLPID)
+            </foreach>
+        </where>
+        )
+        SELECT
+        DISTINCT CONCAT(su.ID,'-;-',su.NAME)
+        FROM
+        sys_user su
+        LEFT JOIN sys_user_org suo ON suo.USERID = su.ID
+        AND suo.DELETED = '0' AND suo.ORGID IN (select ID from orgid)
+        where su.DELETED='0'
+    </select>
+</mapper>

+ 82 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/DemandSurveyContentDo.java

@@ -0,0 +1,82 @@
+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 com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * 用户问卷调查情况表
+ * @TableName user_demand_survey
+ */
+@TableName(value ="demand_survey_content")
+@Data
+public class DemandSurveyContentDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 顺序
+     */
+    private Integer num;
+
+    /**
+     * 需求调查表ID
+     */
+    private String surverid;
+
+    /**
+     * 调查问卷名称
+     */
+    private String survername;
+
+    /**
+     * 调查问卷模板ID
+     */
+    private String tempid;
+
+    /**
+     * 调查问卷模板名称
+     */
+    private String tempname;
+
+    /**
+     * 问题ID
+     */
+    private String questionid;
+
+    /**
+     * 问题名称
+     */
+    private String questionname;
+
+    /**
+     * 问题类型
+     */
+    private String questiontype;
+
+    /**
+     * 答案
+     */
+    private String options;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 59 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandQuestionBackupsDo.java

@@ -0,0 +1,59 @@
+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 com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * 培训需求问题表
+ * @TableName training_demand_question_backups
+ */
+@TableName(value ="training_demand_question_backups")
+@Data
+public class TrainingDemandQuestionBackupsDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 问题名称
+     */
+    private String name;
+
+    /**
+     * 问题类型
+     */
+    private String questiontype;
+
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 调查问卷ID
+     */
+    private String surveyid;
+    /**
+     * 模板iD
+     */
+    private String tempid;
+    /**
+     * 顺序
+     */
+    private int num;
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 48 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandQuestionDo.java

@@ -0,0 +1,48 @@
+package com.rongwei.training.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * training_demand_question
+ * @author 
+ */
+@Data
+@TableName(value = "training_demand_question")
+public class TrainingDemandQuestionDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    private String id;
+
+    /**
+     * 问题名称
+     */
+    private String name;
+
+    /**
+     * 问题类型
+     */
+    private String questiontype;
+
+    /**
+     * 状态
+     */
+    private String state;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    private static final long serialVersionUID = 1L;
+}

+ 51 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandQuestionOptionBackupsDo.java

@@ -0,0 +1,51 @@
+package com.rongwei.training.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 培训需求问题选项表
+ *
+ * @TableName training_demand_question_option_backups
+ */
+@TableName(value = "training_demand_question_option_backups")
+@Data
+public class TrainingDemandQuestionOptionBackupsDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 顺序
+     */
+    private Integer num;
+
+    /**
+     * 选项内容
+     */
+    private String content;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+    /**
+     * 问题编号
+     */
+    private String questionid;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 49 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandQuestionOptionDo.java

@@ -0,0 +1,49 @@
+package com.rongwei.training.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * training_demand_question
+ * @author 
+ */
+@Data
+@TableName(value = "training_demand_question_option")
+public class TrainingDemandQuestionOptionDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    private String id;
+
+    /**
+     * 问题名称
+     */
+    private String name;
+
+    /**
+     * 问题类型
+     */
+    private String questiontype;
+
+    /**
+     * 状态
+     */
+    private String state;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+
+    private static final long serialVersionUID = 1L;
+}

+ 84 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandSurveyBackupsDo.java

@@ -0,0 +1,84 @@
+package com.rongwei.training.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 培训需求调查表
+ *
+ * @TableName training_demand_survey_backups
+ */
+@TableName(value = "training_demand_survey_backups")
+@Data
+public class TrainingDemandSurveyBackupsDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 培训名称
+     */
+    private String name;
+
+    /**
+     * 年份
+     */
+    private String year;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 参与用户ID
+     */
+    private String participateuserid;
+    /**
+     * 参与用户名称
+     */
+    private String participateusername;
+
+    /**
+     * 发布时间
+     */
+    private Date releasetime;
+
+    /**
+     * 截止时间
+     */
+    private Date deadline;
+
+    /**
+     * 已参与用户ID
+     */
+    private String participatinguserid;
+    /**
+     * 已参与用户名称
+     */
+    private String participatingusername;
+    /**
+     * 未参与用户ID
+     */
+    private String noparticipatinguserid;
+    /**
+     * 未参与用户名称
+     */
+    private String noparticipatingusername;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 57 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandSurveyCustomDetailBackupsDo.java

@@ -0,0 +1,57 @@
+package com.rongwei.training.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 培训需求调查自定义内容表
+ *
+ * @TableName training_demand_survey_custom_detail_backups
+ */
+@TableName(value = "training_demand_survey_custom_detail_backups")
+@Data
+public class TrainingDemandSurveyCustomDetailBackupsDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 内容
+     */
+    private String content;
+
+    /**
+     * 问题类型
+     */
+    private String questiontype;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 顺序
+     */
+    private Integer num;
+
+    /**
+     * 需求调查表ID
+     */
+    private String surverid;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 51 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandSurveyCustomDetailDo.java

@@ -0,0 +1,51 @@
+package com.rongwei.training.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * training_demand_question
+ * @author 
+ */
+@Data
+@TableName(value = "training_demand_survey_custom_detail")
+public class TrainingDemandSurveyCustomDetailDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    private String id;
+
+    /**
+     * 问题名称
+     */
+    private String content;
+    /**
+     * 顺序
+     */
+    private int num;
+    /**
+     * 需求调查表id
+     */
+    private String surverid;
+
+    /**
+     * 问题类型
+     */
+    private String questiontype;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    private static final long serialVersionUID = 1L;
+}

+ 92 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandSurveyDo.java

@@ -0,0 +1,92 @@
+package com.rongwei.training.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * training_demand_question
+ * @author 
+ */
+@Data
+@TableName(value = "training_demand_survey")
+public class TrainingDemandSurveyDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    private String id;
+    /**
+      * 培训名称
+     */
+    private String name;
+
+    /**
+     * 发布状态
+     */
+    private String state;
+
+    /**
+     * 年份
+     */
+    private String year;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 参与部门
+     */
+    private String participatedept;
+
+    /**
+     * 参与用户ID
+     */
+    private String participateuserid;
+
+    /**
+     * 排除用户ID
+     */
+    private String excludeuserid;
+
+    /**
+     * 发布时间
+     */
+    private Date releasetime;
+
+    /**
+     * 截止时间
+     */
+    private Date deadline;
+
+    /**
+     * 参与用户名称
+     */
+    private String participateusername;
+
+    /**
+     * 排除用户名称
+     */
+    private String excludeusername;
+
+    /**
+     * 参与部门ID
+     */
+    private String participatedeptid;
+
+    /**
+     * 是否全员培训
+     */
+    private String fullparticipation;
+
+    private static final long serialVersionUID = 1L;
+}

+ 52 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandSurveyTempDetailDo.java

@@ -0,0 +1,52 @@
+package com.rongwei.training.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * training_demand_question
+ * @author 
+ */
+@Data
+@TableName(value = "training_demand_survey_temp_detail")
+public class TrainingDemandSurveyTempDetailDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    private String id;
+
+    /**
+     * 模板名称
+     */
+    private String tempname;
+
+    /**
+     * 模板ID
+     */
+    private String tempid;
+
+    /**
+     * 顺序
+     */
+    private int num;
+    /**
+     * 需求调查表id
+     */
+    private String surverid;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    private static final long serialVersionUID = 1L;
+}

+ 58 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandTempBackupsDo.java

@@ -0,0 +1,58 @@
+package com.rongwei.training.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 培训需求模板表
+ *
+ * @TableName training_demand_temp_backups
+ */
+@TableName(value = "training_demand_temp_backups")
+@Data
+public class TrainingDemandTempBackupsDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 年份
+     */
+    private String year;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 调查问卷表ID
+     */
+    private String surverid;
+
+    /**
+     * 顺序
+     */
+    private int num;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 56 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandTempDetailDo.java

@@ -0,0 +1,56 @@
+package com.rongwei.training.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * training_demand_question
+ * @author 
+ */
+@Data
+@TableName(value = "training_demand_temp_detail")
+public class TrainingDemandTempDetailDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    private String id;
+
+    /**
+     * 需求模板表ID
+     */
+    private String demandtempid;
+
+    /**
+     * 内容
+     */
+    private String content;
+    /**
+     * 问题类型
+     */
+    private String questiontype;
+
+    /**
+     * 问题ID
+     */
+    private String questionid;
+    /**
+     * 顺序
+     */
+    private String num  ;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    private static final long serialVersionUID = 1L;
+}

+ 48 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandTempDo.java

@@ -0,0 +1,48 @@
+package com.rongwei.training.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * training_demand_question
+ * @author 
+ */
+@Data
+@TableName(value = "training_demand_temp")
+public class TrainingDemandTempDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    private String id;
+
+    /**
+     * 问题名称
+     */
+    private String name;
+
+    /**
+     * 年份
+     */
+    private String year;
+
+    /**
+     * 状态
+     */
+    private String state;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    private static final long serialVersionUID = 1L;
+}

+ 58 - 0
rw-training/training-entity/src/main/java/com/rongwei/training/domain/TrainingDemandTempQuestionOptionDo.java

@@ -0,0 +1,58 @@
+package com.rongwei.training.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * training_demand_question
+ * @author 
+ */
+@Data
+@TableName(value = "training_demand_temp_question_option")
+public class TrainingDemandTempQuestionOptionDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    private String id;
+
+    /**
+     * 顺序
+     */
+    private int num;
+
+    /**
+     * 内容
+     */
+    private String content;
+
+    /**
+     * 问题ID
+     */
+    private String questionid;
+
+    /**
+     * 模板明细表ID
+     */
+    private String demandtempdetailid;
+
+    /**
+     * 问题模板ID
+     */
+    private String demandtempid;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    private static final long serialVersionUID = 1L;
+}

+ 39 - 0
rw-training/training-server/src/main/java/com/rongwei/training/controller/TrainingDemandController.java

@@ -0,0 +1,39 @@
+package com.rongwei.training.controller;
+
+import com.rongwei.rwcommon.base.R;
+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 java.util.Map;
+
+/**
+ * TrainingDemandController class
+ *
+ * @author XH
+ * @date 2023/11/23
+ */
+@RestController
+@RequestMapping("/train/demand")
+public class TrainingDemandController {
+    private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
+    @Autowired
+    private TrainingDemandServiceImpl trainingDemandService;
+
+    /**
+     * 发布需求调查
+     *
+     * @param parameter
+     * @return
+     */
+    @PostMapping("/release")
+    public R releaseTrainDemand(@RequestBody Map<String, Object> parameter) {
+        log.info("开发发布需求调查问卷");
+        return trainingDemandService.releaseTrainDemand(parameter);
+    }
+}