diff --git a/form/src/main/java/com/ccsens/form/api/FormController.java b/form/src/main/java/com/ccsens/form/api/FormController.java index 42764c85..36376f00 100644 --- a/form/src/main/java/com/ccsens/form/api/FormController.java +++ b/form/src/main/java/com/ccsens/form/api/FormController.java @@ -60,4 +60,14 @@ public class FormController { log.info("统计提交的信息"); return JsonResponse.newInstance().ok(formLists); } + + @MustLogin + @ApiOperation(value = "查找", notes = "zy:查询该表单填写的人数,和需要统计的组件内的统计信息") + @RequestMapping(value = "/statistics", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse statisticsForm(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("统计提交的信息:{}",params); + FormVo.StatisticsForm formLists = formService.statisticsForm(params.getParam()); + log.info("统计提交的信息"); + return JsonResponse.newInstance().ok(formLists); + } } diff --git a/form/src/main/java/com/ccsens/form/api/WriteController.java b/form/src/main/java/com/ccsens/form/api/WriteController.java index f3b9c702..ece6a5ad 100644 --- a/form/src/main/java/com/ccsens/form/api/WriteController.java +++ b/form/src/main/java/com/ccsens/form/api/WriteController.java @@ -1,4 +1,42 @@ package com.ccsens.form.api; +import com.ccsens.cloudutil.annotation.MustLogin; +import com.ccsens.form.bean.dto.FormDto; +import com.ccsens.form.bean.dto.WriteDto; +import com.ccsens.form.bean.vo.FormVo; +import com.ccsens.form.service.IWriteService; +import com.ccsens.util.JsonResponse; +import com.ccsens.util.bean.dto.QueryDto; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @author 逗 + */ +@Slf4j +@Api(tags = "组件相关api" , description = "") +@RestController +@RequestMapping("/write") public class WriteController { + @Resource + private IWriteService writeService; + + @MustLogin + @ApiOperation(value = "填写表单提交", notes = "zy:查询表单的基本信息,组件信息,及当前用户填写的信息") + @RequestMapping(value = "/submit", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse submitForm(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("填写表单提交:{}",params); + writeService.submitForm(params); + log.info("填写表单提交成功"); + return JsonResponse.newInstance().ok(); + } } diff --git a/form/src/main/java/com/ccsens/form/bean/dto/WriteDto.java b/form/src/main/java/com/ccsens/form/bean/dto/WriteDto.java new file mode 100644 index 00000000..1dbac907 --- /dev/null +++ b/form/src/main/java/com/ccsens/form/bean/dto/WriteDto.java @@ -0,0 +1,39 @@ +package com.ccsens.form.bean.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author 逗 + */ +@Data +public class WriteDto { + + @Data + @ApiModel("提交填写的表单") + public static class SubmitWriteForm{ + @ApiModelProperty("表单id") + private Long formId; + @ApiModelProperty("表单内每个组件的信息") + private List moduleList; + } + + @Data + @ApiModel("表单内每个组件填写的信息") + public static class ModuleWrite{ + @ApiModelProperty("表单内的组件id") + private Long formModuleId; + @ApiModelProperty("该组件的答案") + private List answerList; + } + + @Data + @ApiModel("组件内的答案") + public static class ModuleAnswer{ + @ApiModelProperty("答案或选项的key") + private String answer; + } +} diff --git a/form/src/main/java/com/ccsens/form/service/FormService.java b/form/src/main/java/com/ccsens/form/service/FormService.java index 1e053dfe..9b421dd8 100644 --- a/form/src/main/java/com/ccsens/form/service/FormService.java +++ b/form/src/main/java/com/ccsens/form/service/FormService.java @@ -3,8 +3,10 @@ package com.ccsens.form.service; import com.ccsens.form.bean.dto.FormDto; import com.ccsens.form.bean.po.FormBasic; import com.ccsens.form.bean.po.FormUser; +import com.ccsens.form.bean.po.FormUserExample; import com.ccsens.form.bean.vo.FormVo; import com.ccsens.form.persist.dao.FormBasicDao; +import com.ccsens.form.persist.mapper.FormUserMapper; import com.ccsens.util.bean.dto.QueryDto; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -23,6 +25,8 @@ import java.util.List; public class FormService implements IFormService{ @Resource private FormBasicDao formBasicDao; + @Resource + private FormUserMapper formUserMapper; /** * 查看表单详细信息 @@ -46,8 +50,15 @@ public class FormService implements IFormService{ @Override public FormVo.StatisticsForm statisticsForm(FormDto.GetFormInfo param) { //获取填写总人数 + FormUserExample formUserExample = new FormUserExample(); + formUserExample.createCriteria().andFormIdEqualTo(param.getFormId()); + long count = formUserMapper.countByExample(formUserExample); //获取表单下需要统计的组件的信息 List statisticsModuleList = formBasicDao.getStatisticsForm(param.getFormId()); - return null; + + FormVo.StatisticsForm form = new FormVo.StatisticsForm(); + form.setNums((int) count); + form.setModuleList(statisticsModuleList); + return form; } } diff --git a/form/src/main/java/com/ccsens/form/service/IWriteService.java b/form/src/main/java/com/ccsens/form/service/IWriteService.java new file mode 100644 index 00000000..e794ae86 --- /dev/null +++ b/form/src/main/java/com/ccsens/form/service/IWriteService.java @@ -0,0 +1,15 @@ +package com.ccsens.form.service; + +import com.ccsens.form.bean.dto.WriteDto; +import com.ccsens.util.bean.dto.QueryDto; + +/** + * @author 逗 + */ +public interface IWriteService { + /** + * 填写表单后提交 + * @param params ok + */ + void submitForm(QueryDto params); +} diff --git a/form/src/main/java/com/ccsens/form/service/WriteService.java b/form/src/main/java/com/ccsens/form/service/WriteService.java new file mode 100644 index 00000000..10c0a39f --- /dev/null +++ b/form/src/main/java/com/ccsens/form/service/WriteService.java @@ -0,0 +1,84 @@ +package com.ccsens.form.service; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Snowflake; +import com.ccsens.form.bean.dto.WriteDto; +import com.ccsens.form.bean.po.FormUser; +import com.ccsens.form.bean.po.FormUserExample; +import com.ccsens.form.bean.po.FormWrite; +import com.ccsens.form.persist.mapper.FormUserMapper; +import com.ccsens.form.persist.mapper.FormWriteMapper; +import com.ccsens.util.CodeEnum; +import com.ccsens.util.bean.dto.QueryDto; +import com.ccsens.util.exception.BaseException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author 逗 + */ +@Slf4j +@Service +@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) +public class WriteService implements IWriteService{ + @Resource + private FormWriteMapper formWriteMapper; + @Resource + private FormUserMapper formUserMapper; + @Resource + private Snowflake snowflake; + + @Override + public void submitForm(QueryDto params) { + WriteDto.SubmitWriteForm submitWriteForm = params.getParam(); + //查找该用户是否有填写信息 + FormUser formUser; + FormUserExample formUserExample = new FormUserExample(); + formUserExample.createCriteria().andFormIdEqualTo(submitWriteForm.getFormId()).andUserIdEqualTo(params.getUserId()); + List formUserList = formUserMapper.selectByExample(formUserExample); + if(CollectionUtil.isNotEmpty(formUserList)){ + formUser = formUserList.get(0); + if(formUser.getSubmitStatus() == 1){ + //如果有且状态为已提交,则不能再次提交 + throw new BaseException(CodeEnum.ALREADY_UPLOAD_FORM); + }else { + //如果状态为未提交。则将状态改为已提交 + formUser.setSubmitStatus((byte) 1); + formUser.setOperator(params.getUserId()); + formUserMapper.updateByPrimaryKeySelective(formUser); + } + }else { + //如果没有,新建用户与表单的关联关心,状态为已提交 + formUser = new FormUser(); + formUser.setId(snowflake.nextId()); + formUser.setFormId(submitWriteForm.getFormId()); + formUser.setUserId(params.getUserId()); + formUser.setUserName(params.getUserName()); + formUser.setAvatarUrl(params.getAvatarUrl()); + formUser.setSubmitStatus((byte) 1); + formUser.setOperator(params.getUserId()); + formUserMapper.insertSelective(formUser); + } + //保存填写的答案信息 + if(CollectionUtil.isNotEmpty(submitWriteForm.getModuleList())){ + submitWriteForm.getModuleList().forEach(moduleWrite -> { + if(CollectionUtil.isNotEmpty(moduleWrite.getAnswerList())){ + moduleWrite.getAnswerList().forEach(moduleAnswer -> { + FormWrite formWrite = new FormWrite(); + formWrite.setId(snowflake.nextId()); + formWrite.setFormUserId(formUser.getId()); + formWrite.setFormModuleId(moduleWrite.getFormModuleId()); + formWrite.setAnswer(moduleAnswer.getAnswer()); + formWrite.setOperator(params.getUserId()); + formWriteMapper.insertSelective(formWrite); + }); + } + }); + } + } +} diff --git a/util/src/main/java/com/ccsens/util/CodeEnum.java b/util/src/main/java/com/ccsens/util/CodeEnum.java index 0e81997d..24ff6d8f 100644 --- a/util/src/main/java/com/ccsens/util/CodeEnum.java +++ b/util/src/main/java/com/ccsens/util/CodeEnum.java @@ -179,7 +179,7 @@ public enum CodeEnum { ALREADY_JOIN_PROJECT(148,"该选手已经参加了比赛,不可修改身份证组别等信息",true), ALREADY_JOIN_PROJECT_DEL(149,"取消报名后可删除",true), ALREADY_UPLOAD_VIDEO(150,"您已经上传了视频,请勿重复提交",true), - + ALREADY_UPLOAD_FORM(151,"请勿重复提交信息",true), ;