zoujiajian 3 лет назад
Родитель
Сommit
de53c761ba

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/FormFieldsData.java

@@ -20,6 +20,8 @@ public class FormFieldsData extends BaseEntity{
 	@NotNull(message = "请选择对应问题")
 	@NotNull(message = "请选择对应问题")
 	private Long fieldsId;
 	private Long fieldsId;
 
 
+	private Long groupsId;
+
 	private String fieldsName;
 	private String fieldsName;
 
 
 	private Long promotionId;
 	private Long promotionId;

+ 7 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/QuestionnairePromotion.java

@@ -26,4 +26,11 @@ public class QuestionnairePromotion extends BaseEntity{
 	private String remark;
 	private String remark;
 
 
 	private Boolean deleted;
 	private Boolean deleted;
+
+	private Boolean status;
+
+	/**
+	 * 是否上架过
+	 */
+	private Boolean isUp;
 }
 }

+ 26 - 0
netflix-dao/src/main/java/com/cyksj/model/views/QuestionnairePromotionFieldsListView.java

@@ -0,0 +1,26 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: QuestionnairePromotionFieldsListView
+ *创建者: JavaZou
+ *创建时间:2023/6/15 11:15
+ */
+@Getter
+@Setter
+@SearchBean(tables = "form_fields_default fd")
+public class QuestionnairePromotionFieldsListView {
+	@DbField("fd.promotion_id")
+	private Long promotionId;
+
+	@DbField("fd.fields_id")
+	private Long fieldsId;
+
+	@DbField("fd.value")
+	private String value;
+}

+ 19 - 11
netflix-service/src/main/java/com/cyksj/service/mange/form/impl/FormServiceImpl.java

@@ -1,5 +1,6 @@
 package com.cyksj.service.mange.form.impl;
 package com.cyksj.service.mange.form.impl;
 
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.alibaba.excel.support.ExcelTypeEnum;
@@ -20,6 +21,8 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /*
 /*
  *项目名: netflix
  *项目名: netflix
@@ -59,10 +62,10 @@ public class FormServiceImpl implements FormService {
 		response.setCharacterEncoding("utf-8");
 		response.setCharacterEncoding("utf-8");
 		response.setHeader("Content-disposition",
 		response.setHeader("Content-disposition",
 				"attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO-8859-1") + ExcelTypeEnum.XLS.getValue());
 				"attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO-8859-1") + ExcelTypeEnum.XLS.getValue());
-
+		List<FormFields> formFields = formFieldsMapper.selectList(new LambdaQueryWrapper<FormFields>().eq(FormFields::getTemplateId, promotion.getTemplateId()).orderByAsc(FormFields::getSorted));
 		EasyExcel.write(response.getOutputStream())
 		EasyExcel.write(response.getOutputStream())
 				// 这里放入动态头
 				// 这里放入动态头
-				.head(head(promotionId)).sheet("问卷信息")
+				.head(head(formFields)).sheet("问卷信息")
 				// 当然这里数据也可以用 List<List<String>> 去传入
 				// 当然这里数据也可以用 List<List<String>> 去传入
 				.doWrite(data(promotionId));
 				.doWrite(data(promotionId));
 	}
 	}
@@ -121,24 +124,29 @@ public class FormServiceImpl implements FormService {
 	}
 	}
 
 
 
 
-	private List<List<String>> head(Long templateId) {
-		List<FormFields> formFields = formFieldsMapper.selectList(new LambdaQueryWrapper<FormFields>().eq(FormFields::getTemplateId, templateId).orderByAsc(FormFields::getSorted));
+	private List<List<String>> head(List<FormFields> formFields) {
 		List<List<String>> headTitles = new ArrayList<>();
 		List<List<String>> headTitles = new ArrayList<>();
-		String formInfo = "表单信息";
 		formFields.forEach((field) -> {
 		formFields.forEach((field) -> {
-			headTitles.add(Lists.newArrayList(formInfo, formInfo, field.getFieldsName()));
+			headTitles.add(Lists.newArrayList(field.getFieldsName()));
 		});
 		});
+		headTitles.add(Lists.newArrayList("提交时间"));
 		return headTitles;
 		return headTitles;
 	}
 	}
 
 
 	private List<List<String>> data(Long promotionId) {
 	private List<List<String>> data(Long promotionId) {
-		List<List<String>> contentList = Lists.newArrayList();
 		List<FormFieldsData> fieldsDataList = formFieldsDataMapper.selectList(new LambdaQueryWrapper<FormFieldsData>().eq(FormFieldsData::getPromotionId, promotionId).eq(FormFieldsData::getDeleted, true).orderByAsc(FormFieldsData::getSorted));
 		List<FormFieldsData> fieldsDataList = formFieldsDataMapper.selectList(new LambdaQueryWrapper<FormFieldsData>().eq(FormFieldsData::getPromotionId, promotionId).eq(FormFieldsData::getDeleted, true).orderByAsc(FormFieldsData::getSorted));
-		fieldsDataList.forEach((formFieldsData) -> {
+		if (fieldsDataList.isEmpty()) {
+			throw BusinessRuntimeException.getInstance("暂无数据");
+		}
+		List<List<String>> contentList = Lists.newArrayList();
+		Map<Long, List<FormFieldsData>> collect = fieldsDataList.stream().collect(Collectors.groupingBy(FormFieldsData::getGroupsId));
+		collect.forEach((groupsId, answers) -> {
 			ArrayList<String> dataList = new ArrayList<>();
 			ArrayList<String> dataList = new ArrayList<>();
-			dataList.add(formFieldsData.getContent());
-			contentList.add(Lists.newArrayList(formFieldsData.getContent()));
-
+			answers.forEach(answer -> {
+				dataList.add(answer.getContent());
+			});
+			dataList.add(DateUtil.format(answers.get(answers.size() - 1).getCreatedTime(), "yyyy-MM-dd HH:mm:ss"));
+			contentList.add(dataList);
 		});
 		});
 		return contentList;
 		return contentList;
 	}
 	}

+ 4 - 0
netflix-service/src/main/java/com/cyksj/service/mange/form/impl/QuestionnairePromotionServiceImpl.java

@@ -26,6 +26,10 @@ public class QuestionnairePromotionServiceImpl extends ServiceImpl<Questionnaire
 			promotionMapper.insert(promotion);
 			promotionMapper.insert(promotion);
 			return promotion.getId();
 			return promotion.getId();
 		}
 		}
+		QuestionnairePromotion db = promotionMapper.selectById(promotion.getId());
+		if (db.getIsUp()) {
+			promotion.setTemplateId(null);
+		}
 		promotionMapper.updateById(promotion);
 		promotionMapper.updateById(promotion);
 		return promotion.getId();
 		return promotion.getId();
 	}
 	}

+ 10 - 2
netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java

@@ -1,5 +1,6 @@
 package com.cyksj.web.controller.group;
 package com.cyksj.web.controller.group;
 
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.thread.ThreadUtil;
@@ -9,6 +10,7 @@ import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.annotation.NoSubmit;
 import com.cyksj.common.annotation.NoSubmit;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.snowflake.Sequence;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.common.util.GoogleGenerator;
 import com.cyksj.common.util.GoogleGenerator;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.common.util.Jsons;
@@ -24,6 +26,7 @@ import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.GroupsRelationView;
 import com.cyksj.model.manage.views.GroupsRelationView;
 import com.cyksj.model.request.OrderPayRequest;
 import com.cyksj.model.request.OrderPayRequest;
 import com.cyksj.model.views.DoubleVerifyCodeView;
 import com.cyksj.model.views.DoubleVerifyCodeView;
+import com.cyksj.model.views.QuestionnairePromotionFieldsListView;
 import com.cyksj.model.views.RenewalView;
 import com.cyksj.model.views.RenewalView;
 import com.cyksj.model.views.UserTicketView;
 import com.cyksj.model.views.UserTicketView;
 import com.cyksj.redis.RedisService;
 import com.cyksj.redis.RedisService;
@@ -91,6 +94,8 @@ public class GroupRelationController {
 
 
     private final GlobalThreadPoolTaskExecutor THREAD_POOL;
     private final GlobalThreadPoolTaskExecutor THREAD_POOL;
 
 
+    private final static Sequence SEQUENCE = new Sequence(0);
+
     @RequestMapping("/get/renewal")
     @RequestMapping("/get/renewal")
     public Result<List<RenewalView>> get(Boolean isLoginPopularize) {
     public Result<List<RenewalView>> get(Boolean isLoginPopularize) {
         long userId = StpUserUtil.getLoginIdAsLong();
         long userId = StpUserUtil.getLoginIdAsLong();
@@ -414,8 +419,10 @@ public class GroupRelationController {
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     @NoSubmit
     @NoSubmit
     public Result<String> recordQuestionnaire(@PathVariable Long promotionId, @RequestBody List<FormFieldsData> answers) {
     public Result<String> recordQuestionnaire(@PathVariable Long promotionId, @RequestBody List<FormFieldsData> answers) {
-        QuestionnairePromotion promotion = promotionMapper.selectById(promotionId);
-        if (promotion == null) throw BusinessRuntimeException.getInstance("问卷不存在");
+        Long groupsId = SEQUENCE.nextId();
+        List<QuestionnairePromotionFieldsListView> promotionFieldsListViews = beanSearcher.searchAll(QuestionnairePromotionFieldsListView.class, MapUtils.builder().field(QuestionnairePromotionFieldsListView::getPromotionId, promotionId).build());
+        if (CollUtil.isEmpty(promotionFieldsListViews)) throw BusinessRuntimeException.getInstance("问卷已结束");
+        if (promotionFieldsListViews.size() != answers.size()) throw BusinessRuntimeException.getInstance("请完成所有问题");
         answers.forEach(answer -> {
         answers.forEach(answer -> {
             Long fieldsId = answer.getFieldsId();
             Long fieldsId = answer.getFieldsId();
             String content = answer.getContent();
             String content = answer.getContent();
@@ -423,6 +430,7 @@ public class GroupRelationController {
                 throw BusinessRuntimeException.getInstance("必填项为空");
                 throw BusinessRuntimeException.getInstance("必填项为空");
             }
             }
             answer.setPromotionId(promotionId);
             answer.setPromotionId(promotionId);
+            answer.setGroupsId(groupsId);
             formFieldsDataMapper.insert(answer);
             formFieldsDataMapper.insert(answer);
         });
         });
         return GatewayResponse.SUCCESS.newBuilder().toResult();
         return GatewayResponse.SUCCESS.newBuilder().toResult();

+ 17 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/form/QuestionnairePromotionController.java

@@ -73,4 +73,21 @@ public class QuestionnairePromotionController {
 				.build());
 				.build());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}
 	}
+
+	/**
+	 * 上下架问卷
+	 */
+	@PutMapping("/update/status/{id}")
+	public Result<String> updateStatusById(@PathVariable Long id) {
+		QuestionnairePromotion promotion = promotionService.getById(id);
+		Boolean status = promotion.getStatus();
+		Boolean isUp = promotion.getIsUp();
+		//上架
+		if (!status && !isUp) {
+			promotion.setIsUp(true);
+		}
+		promotion.setStatus(!status);
+		promotionService.updateById(promotion);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
 }
 }